From df3763fbd94241e48b2b26717524c5cf93305136 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Tue, 8 Jul 2008 11:53:08 -0700 Subject: [PATCH 01/34] IGN:... --- src/calibre/utils/fontconfig.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/calibre/utils/fontconfig.py b/src/calibre/utils/fontconfig.py index fe2261d853..3a92a76670 100644 --- a/src/calibre/utils/fontconfig.py +++ b/src/calibre/utils/fontconfig.py @@ -130,7 +130,7 @@ lib.FcConfigBuildFonts.restype = c_int # Initialize the fontconfig library. This has to be done manually -# for the OS X bundle as it has its own private fontconfig. +# for the OS X bundle as it may have its own private fontconfig. if hasattr(sys, 'frameworks_dir'): config_dir = os.path.join(os.path.dirname(getattr(sys, 'frameworks_dir')), 'Resources', 'fonts') if isinstance(config_dir, unicode): From 1817cd27fee5bea9894537c87150059e84954d6f Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Tue, 8 Jul 2008 19:30:18 -0700 Subject: [PATCH 02/34] More fixes to the linux binary installer --- linux_installer.py | 20 ++++++-------------- src/calibre/linux_installer.py | 2 +- src/calibre/parallel.py | 10 +++++++--- windows_installer.py | 5 +++-- 4 files changed, 17 insertions(+), 20 deletions(-) diff --git a/linux_installer.py b/linux_installer.py index 6a1acb40cd..a1a0551afc 100644 --- a/linux_installer.py +++ b/linux_installer.py @@ -23,6 +23,12 @@ CALIBREPLUGINS = os.path.join(CALIBRESRC, 'calibre', 'plugins') sys.path.insert(0, CALIBRESRC) from calibre import __version__ +from calibre.parallel import PARALLEL_FUNCS +from calibre.web.feeds.recipes import recipes +hiddenimports = map(lambda x: x[0], PARALLEL_FUNCS.values()) +hiddenimports += ['lxml._elementpath', 'keyword', 'codeop', 'commands', 'shlex', 'pydoc'] +hiddenimports += map(lambda x: x.__module__, recipes) +open(os.path.join(PYINSTALLER, 'hooks', 'hook-calibre.parallel.py'), 'wb').write('hiddenimports = %s'%repr(hiddenimports)) def run_pyinstaller(args=sys.argv): subprocess.check_call(('/usr/bin/sudo', 'chown', '-R', 'kovid:users', glob.glob('/usr/lib/python*/site-packages/')[-1])) @@ -60,18 +66,7 @@ excludes = ['gtk._gtk', 'gtk.glade', 'qt', 'matplotlib.nxutils', 'matplotlib._cn 'matplotlib._transforms', 'matplotlib._agg', 'matplotlib.backends._backend_agg', 'matplotlib.axes', 'matplotlib', 'matplotlib.pyparsing', 'TKinter', 'atk', 'gobject._gobject', 'pango', 'PIL', 'Image', 'IPython'] -temp = ['keyword', 'codeop'] -recipes = ['calibre', 'web', 'feeds', 'recipes'] -prefix = '.'.join(recipes)+'.' -recipes_toc = [] -extra_toc = [ - ('keyword', '/usr/lib/python2.5/keyword.pyo', 'PYSOURCE'), - ('codeop', '/usr/lib/python2.5/codeop.pyo', 'PYSOURCE') - ] -for f in glob.glob(os.path.join(CALIBRESRC, *(recipes+['*.py']))): - py_compile.compile(f, doraise=True) - recipes_toc.append((prefix + os.path.basename(f).partition('.')[0], f+'o', 'PYSOURCE')) sys.path.insert(0, CALIBRESRC) from calibre.linux import entry_points @@ -90,9 +85,6 @@ analyses = [Analysis([os.path.join(HOMEPATH,'support/_mountzlib.py'), os.path.jo pyz = TOC() binaries = TOC() -pyz += extra_toc -pyz += recipes_toc - for a in analyses: pyz = a.pure + pyz binaries = a.binaries + binaries diff --git a/src/calibre/linux_installer.py b/src/calibre/linux_installer.py index a4fc1cff77..db9c8dd1b1 100644 --- a/src/calibre/linux_installer.py +++ b/src/calibre/linux_installer.py @@ -4,7 +4,7 @@ __copyright__ = '2008, Kovid Goyal kovid@kovidgoyal.net' __docformat__ = 'restructuredtext en' ''' -Download and install the linux binary. +Download and install the linux binary. ''' import sys, os, shutil, tarfile, subprocess, tempfile, urllib2, re, stat diff --git a/src/calibre/parallel.py b/src/calibre/parallel.py index f8a50d3859..d3531c5525 100644 --- a/src/calibre/parallel.py +++ b/src/calibre/parallel.py @@ -121,6 +121,7 @@ class WorkerMother(object): def __init__(self): ext = 'windows' if iswindows else 'osx' if isosx else 'linux' self.os = os # Needed incase cleanup called when interpreter is shutting down + self.env = {} if iswindows: self.executable = os.path.join(os.path.dirname(sys.executable), 'calibre-parallel.exe' if isfrozen else 'Scripts\\calibre-parallel.exe') @@ -135,13 +136,14 @@ class WorkerMother(object): self.prefix += 'import sys; sys.frameworks_dir = "%s"; sys.frozen = "macosx_app"; '%fd self.prefix += 'sys.path.insert(0, %s); '%repr(sp) - self.env = {} if fd not in os.environ['PATH']: self.env['PATH'] = os.environ['PATH']+':'+fd self.env['PYTHONHOME'] = resources else: self.executable = os.path.join(getattr(sys, 'frozen_path'), 'calibre-parallel') \ if isfrozen else 'calibre-parallel' + if isfrozen: + self.env['LD_LIBRARY_PATH'] = getattr(sys, 'frozen_path') + ':' + os.environ.get('LD_LIBRARY_PATH', '') self.spawn_worker_windows = lambda arg : self.spawn_free_spirit_windows(arg, type='worker') self.spawn_worker_linux = lambda arg : self.spawn_free_spirit_linux(arg, type='worker') @@ -176,6 +178,7 @@ class WorkerMother(object): def get_env(self): env = dict(os.environ) env['CALIBRE_WORKER'] = '1' + env['ORIGWD'] = os.path.abspath(os.getcwd()) if hasattr(self, 'env'): env.update(self.env) return env @@ -189,7 +192,8 @@ class WorkerMother(object): def spawn_free_spirit_linux(self, arg, type='free_spirit'): cmdline = [self.executable, arg] - child = WorkerStatus(subprocess.Popen(cmdline, env=self.get_env())) + child = WorkerStatus(subprocess.Popen(cmdline, + env=self.get_env(), cwd=getattr(sys, 'frozen_path', None))) atexit.register(self.cleanup_child_linux, child) return child @@ -607,7 +611,7 @@ class BufferedSender(object): self.wbuf.append(msg) def send(self): - if select([self.socket], [], [], 0)[0]: + if callable(select) and select([self.socket], [], [], 0)[0]: msg = read(self.socket) if msg == 'PING:': write(self.socket, 'OK') diff --git a/windows_installer.py b/windows_installer.py index cd88444f04..f21a842fbf 100644 --- a/windows_installer.py +++ b/windows_installer.py @@ -539,7 +539,7 @@ def main(): sys.argv[1:2] = ['py2exe'] console = [dict(dest_base=basenames['console'][i], script=scripts['console'][i]) - for i in range(len(scripts['console']))]# if not 'parallel.py' in scripts['console'][i] ] + for i in range(len(scripts['console']))] sys.path.insert(0, os.path.join(os.path.dirname(__file__), 'src')) setup( cmdclass = {'py2exe': BuildEXE}, @@ -568,7 +568,8 @@ def main(): 'calibre.ebooks.lrf.feeds.*', 'lxml', 'lxml._elementpath', 'genshi', 'path', 'pydoc', 'IPython.Extensions.*', - 'calibre.web.feeds.recipes.*', 'PyQt4.QtWebKit', + 'calibre.web.feeds.recipes.*', + 'PyQt4.QtWebKit', 'PyQt4.QtNetwork', ], 'packages' : ['PIL'], 'excludes' : ["Tkconstants", "Tkinter", "tcl", From 51176d3a1428a60c4d8c62adb254c2351fd2c4ef Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Tue, 8 Jul 2008 20:17:29 -0700 Subject: [PATCH 03/34] Fix #853 --- src/calibre/gui2/lrf_renderer/config.ui | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/calibre/gui2/lrf_renderer/config.ui b/src/calibre/gui2/lrf_renderer/config.ui index f8e20bf915..47956fe003 100644 --- a/src/calibre/gui2/lrf_renderer/config.ui +++ b/src/calibre/gui2/lrf_renderer/config.ui @@ -13,7 +13,8 @@ Configure Viewer - :/images/config.svg + + :/images/config.svg:/images/config.svg @@ -39,20 +40,17 @@ Qt::Horizontal - QDialogButtonBox::Cancel|QDialogButtonBox::NoButton|QDialogButtonBox::Ok + QDialogButtonBox::Cancel|QDialogButtonBox::Ok - - Qt::WindowModal - QFrame::Box - <b>Changes will only take affect after a restart. + <b>Changes will only take effect after a restart.</b> Qt::RichText From c3ba9f836329ebe203a09b74db59592e05985c37 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Tue, 8 Jul 2008 21:12:43 -0700 Subject: [PATCH 04/34] Fix #862 --- src/calibre/gui2/main.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/calibre/gui2/main.py b/src/calibre/gui2/main.py index 58dcaa7543..b70f02c576 100644 --- a/src/calibre/gui2/main.py +++ b/src/calibre/gui2/main.py @@ -632,7 +632,7 @@ class Main(MainWindow, Ui_MainWindow): metadata = iter(metadata) _files = self.library_view.model().get_preferred_formats(rows, self.device_manager.device_class.FORMATS, paths=True) - files = [f.name for f in _files] + files = [getattr(f, 'name', None) for f in _files] bad, good, gf, names = [], [], [], [] for f in files: mi = metadata.next() From 4c6ee9e213b2964982c37920f3ae07c2010b03d0 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Tue, 8 Jul 2008 21:18:43 -0700 Subject: [PATCH 05/34] IGN:Updated translations --- src/calibre/translations/bg.po | 2 +- src/calibre/translations/ca.po | 2 +- src/calibre/translations/de.po | 6 +- src/calibre/translations/el.po | 2 +- src/calibre/translations/es.po | 2 +- src/calibre/translations/fr.po | 2 +- src/calibre/translations/it.po | 6 +- src/calibre/translations/nds.po | 6 +- src/calibre/translations/nl.po | 18 +- src/calibre/translations/pt.po | 3006 +++++++++++++++++++++++++++++++ src/calibre/translations/ru.po | 88 +- src/calibre/translations/sl.po | 2 +- src/calibre/translations/te.po | 2 +- 13 files changed, 3098 insertions(+), 46 deletions(-) create mode 100644 src/calibre/translations/pt.po diff --git a/src/calibre/translations/bg.po b/src/calibre/translations/bg.po index 1be4668820..b258c9771f 100644 --- a/src/calibre/translations/bg.po +++ b/src/calibre/translations/bg.po @@ -13,7 +13,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2008-07-02 15:52+0000\n" +"X-Launchpad-Export-Date: 2008-07-09 03:20+0000\n" "X-Generator: Launchpad (build Unknown)\n" "Generated-By: pygettext.py 1.5\n" diff --git a/src/calibre/translations/ca.po b/src/calibre/translations/ca.po index 1e67256faf..f6ae6b9462 100644 --- a/src/calibre/translations/ca.po +++ b/src/calibre/translations/ca.po @@ -17,7 +17,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2008-07-02 15:52+0000\n" +"X-Launchpad-Export-Date: 2008-07-09 03:20+0000\n" "X-Generator: Launchpad (build Unknown)\n" #~ msgid "" diff --git a/src/calibre/translations/de.po b/src/calibre/translations/de.po index c8c4067cb1..835850fd6b 100644 --- a/src/calibre/translations/de.po +++ b/src/calibre/translations/de.po @@ -8,13 +8,13 @@ msgstr "" "Project-Id-Version: de\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2008-06-30 23:41+0000\n" -"PO-Revision-Date: 2008-07-01 17:47+0000\n" +"PO-Revision-Date: 2008-07-06 11:25+0000\n" "Last-Translator: S. Dorscht \n" "Language-Team: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2008-07-02 15:52+0000\n" +"X-Launchpad-Export-Date: 2008-07-09 03:20+0000\n" "X-Generator: Launchpad (build Unknown)\n" "Generated-By: pygettext.py 1.5\n" @@ -2455,7 +2455,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/main.py:152 #: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:275 msgid "Save to disk" -msgstr "Auf HD sichern" +msgstr "Auf Festplatte sichern" #: /home/kovid/work/calibre/src/calibre/gui2/main.py:153 msgid "Save to disk in a single directory" diff --git a/src/calibre/translations/el.po b/src/calibre/translations/el.po index c89ce7fcfb..3e7450bee1 100644 --- a/src/calibre/translations/el.po +++ b/src/calibre/translations/el.po @@ -14,7 +14,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2008-07-02 15:52+0000\n" +"X-Launchpad-Export-Date: 2008-07-09 03:20+0000\n" "X-Generator: Launchpad (build Unknown)\n" #: /home/kovid/work/calibre/src/calibre/__init__.py:133 diff --git a/src/calibre/translations/es.po b/src/calibre/translations/es.po index 0cb1067064..509f3fa281 100644 --- a/src/calibre/translations/es.po +++ b/src/calibre/translations/es.po @@ -17,7 +17,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2008-07-02 15:52+0000\n" +"X-Launchpad-Export-Date: 2008-07-09 03:20+0000\n" "X-Generator: Launchpad (build Unknown)\n" #~ msgid "" diff --git a/src/calibre/translations/fr.po b/src/calibre/translations/fr.po index 24e767cdbb..fcb6abf377 100644 --- a/src/calibre/translations/fr.po +++ b/src/calibre/translations/fr.po @@ -13,7 +13,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2008-07-02 15:52+0000\n" +"X-Launchpad-Export-Date: 2008-07-09 03:20+0000\n" "X-Generator: Launchpad (build Unknown)\n" "Generated-By: pygettext.py 1.5\n" diff --git a/src/calibre/translations/it.po b/src/calibre/translations/it.po index cb2fa7d4cd..e388ae03ab 100644 --- a/src/calibre/translations/it.po +++ b/src/calibre/translations/it.po @@ -9,13 +9,13 @@ msgstr "" "Project-Id-Version: it\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2008-06-30 23:41+0000\n" -"PO-Revision-Date: 2008-07-01 16:54+0000\n" +"PO-Revision-Date: 2008-07-02 16:21+0000\n" "Last-Translator: Iacopo Benesperi \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: 2008-07-02 15:52+0000\n" +"X-Launchpad-Export-Date: 2008-07-09 03:20+0000\n" "X-Generator: Launchpad (build Unknown)\n" "Generated-By: pygettext.py 1.5\n" @@ -1090,7 +1090,7 @@ msgstr "..." #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:206 msgid "Use &Roman numerals for series number" -msgstr "&Usare numeri romani per i numeri delle serie" +msgstr "&Usa numeri romani per i numeri delle serie" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:207 msgid "Format for &single file save:" diff --git a/src/calibre/translations/nds.po b/src/calibre/translations/nds.po index 702ab4ba47..b0b03bff1a 100644 --- a/src/calibre/translations/nds.po +++ b/src/calibre/translations/nds.po @@ -8,13 +8,13 @@ msgstr "" "Project-Id-Version: de\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2008-06-30 23:41+0000\n" -"PO-Revision-Date: 2008-07-01 17:48+0000\n" +"PO-Revision-Date: 2008-07-06 11:26+0000\n" "Last-Translator: S. Dorscht \n" "Language-Team: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2008-07-02 15:52+0000\n" +"X-Launchpad-Export-Date: 2008-07-09 03:20+0000\n" "X-Generator: Launchpad (build Unknown)\n" "Generated-By: pygettext.py 1.5\n" @@ -2455,7 +2455,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/main.py:152 #: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:275 msgid "Save to disk" -msgstr "Auf HD sichern" +msgstr "Auf Festplatte sichern" #: /home/kovid/work/calibre/src/calibre/gui2/main.py:153 msgid "Save to disk in a single directory" diff --git a/src/calibre/translations/nl.po b/src/calibre/translations/nl.po index b25b4b9822..9e8bbc0b30 100644 --- a/src/calibre/translations/nl.po +++ b/src/calibre/translations/nl.po @@ -8,13 +8,13 @@ msgstr "" "Project-Id-Version: calibre\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2008-06-30 23:41+0000\n" -"PO-Revision-Date: 2008-06-29 05:48+0000\n" +"PO-Revision-Date: 2008-07-05 23:19+0000\n" "Last-Translator: Marc van den Dikkenberg \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: 2008-07-02 15:52+0000\n" +"X-Launchpad-Export-Date: 2008-07-09 03:20+0000\n" "X-Generator: Launchpad (build Unknown)\n" #~ msgid "" @@ -102,7 +102,7 @@ msgstr "Schijf %s is niet gevonden. Probeer te herstarten." #: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:355 msgid "The reader has no storage card connected." -msgstr "" +msgstr "Er is geen geheugen kaart verbonden met de reader." #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:73 msgid "Set the title. Default: filename." @@ -1072,7 +1072,7 @@ msgstr "Gebruik &Romeinse nummers voor de series" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:207 msgid "Format for &single file save:" -msgstr "" +msgstr "Opglagformaat voor &enkel bestand:" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:208 msgid "&Priority for conversion jobs:" @@ -2397,11 +2397,11 @@ msgstr "Stuur naar opslag kaart" #: /home/kovid/work/calibre/src/calibre/gui2/main.py:116 #: /home/kovid/work/calibre/src/calibre/gui2/main.py:117 msgid "and delete from library" -msgstr "" +msgstr "en verwijder uit bibliotheek" #: /home/kovid/work/calibre/src/calibre/gui2/main.py:119 msgid "Send to storage card by default" -msgstr "" +msgstr "Bewaar standaard op geheugen kaart" #: /home/kovid/work/calibre/src/calibre/gui2/main.py:131 msgid "Edit metadata individually" @@ -2442,7 +2442,7 @@ msgstr "Opslaan op schijf in een enkele folder" #: /home/kovid/work/calibre/src/calibre/gui2/main.py:154 msgid "Save only %s format to disk" -msgstr "" +msgstr "Bewaar alleen %formaat op schijf" #: /home/kovid/work/calibre/src/calibre/gui2/main.py:157 #: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:281 @@ -2578,10 +2578,12 @@ msgid "" "

Could not save the following books to disk, because the %s format is not " "available for them:

    " msgstr "" +"

    De volgende boeken konden niet worden bewaard op schijf, omdat het %s " +"formaat niet beschikbaar is:

      " #: /home/kovid/work/calibre/src/calibre/gui2/main.py:709 msgid "Could not save some ebooks" -msgstr "" +msgstr "Sommige boeken konden niet worden opgeslagen" #: /home/kovid/work/calibre/src/calibre/gui2/main.py:742 msgid "Fetch news from " diff --git a/src/calibre/translations/pt.po b/src/calibre/translations/pt.po new file mode 100644 index 0000000000..fab9546d23 --- /dev/null +++ b/src/calibre/translations/pt.po @@ -0,0 +1,3006 @@ +# Portuguese translation for calibre +# Copyright (c) 2008 Rosetta Contributors and Canonical Ltd 2008 +# This file is distributed under the same license as the calibre package. +# FIRST AUTHOR , 2008. +# +msgid "" +msgstr "" +"Project-Id-Version: calibre\n" +"Report-Msgid-Bugs-To: FULL NAME \n" +"POT-Creation-Date: 2008-06-30 23:41+0000\n" +"PO-Revision-Date: 2008-07-05 03:33+0000\n" +"Last-Translator: Tiago Silva \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: 2008-07-09 03:20+0000\n" +"X-Generator: Launchpad (build Unknown)\n" + +#: /home/kovid/work/calibre/src/calibre/__init__.py:133 +msgid "%sUsage%s: %s\n" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/__init__.py:170 +msgid "Created by " +msgstr "Criado por " + +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:112 +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:146 +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:174 +msgid "Unable to detect the %s disk drive. Try rebooting." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:355 +msgid "The reader has no storage card connected." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:73 +msgid "Set the title. Default: filename." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:75 +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:76 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:174 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf.py:314 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf.py:429 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:278 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:685 +#: /home/kovid/work/calibre/src/calibre/library/database.py:925 +#: /home/kovid/work/calibre/src/calibre/library/database.py:1433 +#: /home/kovid/work/calibre/src/calibre/library/database.py:1563 +msgid "Unknown" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:78 +msgid "Set the comment." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:80 +msgid "Set the category" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:82 +msgid "Sort key for the title" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:84 +msgid "Sort key for the author" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:86 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:39 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search.py:16 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:409 +msgid "Publisher" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:88 +msgid "Path to file containing image to be used as cover" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:90 +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:93 +msgid "Output file name. Default is derived from input filename" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:95 +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:98 +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:100 +msgid "Enable autorotation of images that are wider than the screen width." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:103 +msgid "Set the space between words in pts. Default is %default" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:105 +msgid "Separate paragraphs by blank lines." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:107 +msgid "Add a header to all the pages with title and author." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:109 +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:111 +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:113 +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:115 +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:117 +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:122 +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:128 +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:134 +msgid "Left margin of page. Default is %default px." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:136 +msgid "Right margin of page. Default is %default px." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:138 +msgid "Top margin of page. Default is %default px." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:140 +msgid "Bottom margin of page. Default is %default px." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:142 +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:144 +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:149 +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:153 +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:157 +msgid "Don't add links to the table of contents." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:161 +msgid "Prevent the automatic detection chapters." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:164 +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:167 +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\". Default is %default" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:169 +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:179 +msgid "" +"Force a page break before tags whose names match this regular expression." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:181 +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:184 +msgid "Add detected chapters to the table of contents." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:187 +msgid "Preprocess Baen HTML files to improve generated LRF." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:189 +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:191 +msgid "Use this option on html0 files from Book Designer." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:194 +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:202 +msgid "The serif family of fonts to embed" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:205 +msgid "The sans-serif family of fonts to embed" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:208 +msgid "The monospace family of fonts to embed" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:212 +msgid "Be verbose while processing" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:214 +msgid "Convert to LRS" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:216 +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:218 +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:143 +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:158 +msgid "No file to convert specified." +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:19 +msgid "" +"%prog [options] mybook.fb2\n" +"\n" +"\n" +"%prog converts mybook.fb2 to mybook.lrf" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/fb2/convert_from.py:24 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/txt/convert_from.py:22 +msgid "Print generated HTML to stdout and quit." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/feeds/convert_from.py:22 +msgid "Options to control the behavior of feeds2disk" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/feeds/convert_from.py:24 +msgid "Options to control the behavior of html2lrf" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/feeds/convert_from.py:46 +msgid "Fetching of recipe failed: " +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:315 +msgid "\tBook Designer file detected." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:317 +msgid "\tParsing HTML..." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:339 +msgid "\tBaen file detected. Re-parsing..." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:355 +msgid "Written preprocessed HTML to " +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:372 +msgid "Processing %s" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:386 +msgid "\tConverting to BBeB..." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:529 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:542 +msgid "Could not parse file: %s" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:534 +msgid "%s is an empty file" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:554 +msgid "Failed to parse link %s %s" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:598 +msgid "Cannot add link %s to TOC" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:943 +msgid "Unable to process image %s. Error: %s" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:981 +msgid "Unable to process interlaced PNG %s" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:996 +msgid "" +"Could not process image: %s\n" +"%s" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1743 +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:1745 +msgid "" +"Bad table:\n" +"%s" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1767 +msgid "Table has cell that is too large" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1797 +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:1839 +msgid "Could not read cover image: %s" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1842 +msgid "Cannot read from: %s" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1976 +msgid "Failed to process opf file" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1982 +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:21 +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:132 +msgid "" +"%prog book.lrf\n" +"Convert an LRF file into an LRS (XML UTF-8 encoded) file" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/lrfparser.py:133 +msgid "Output LRS file" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/lrfparser.py:151 +msgid "Parsing LRF..." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/lrfparser.py:154 +msgid "Creating XML..." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/lrfparser.py:156 +msgid "LRS written to " +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/lrs/convert_from.py:243 +msgid "Could not read from thumbnail file:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/lrs/convert_from.py:263 +msgid "" +"%prog [options] file.lrs\n" +"Compile an LRS file into an LRF file." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/lrs/convert_from.py:264 +msgid "Path to output file" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/lrs/convert_from.py:266 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/isbndb.py:113 +msgid "Verbose processing" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/lrs/convert_from.py:268 +msgid "Convert LRS to LRS, useful for debugging." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:455 +msgid "Invalid LRF file. Could not set metadata." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:580 +msgid "" +"%prog [options] mybook.lrf\n" +"\n" +"\n" +"Show/edit the metadata in an LRF file.\n" +"\n" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:587 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:21 +msgid "Set the book title" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:589 +msgid "Set sort key for the title" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:591 +msgid "Set the author" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:593 +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:25 +msgid "The category this book belongs to. E.g.: History" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:598 +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 +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 +msgid "Extract thumbnail from LRF file" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:607 +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:609 +msgid "Set book ID" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:611 +msgid "Don't know what this is for" +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" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/pdf/convert_from.py:42 +msgid "Could not find pdftohtml, check it is in your PATH" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/pdf/convert_from.py:51 +msgid " does not allow copying of text." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/pdf/convert_from.py:54 +msgid "" +" is an image based PDF. Only conversion of text based PDFs is supported." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/pdf/convert_from.py:61 +msgid "" +"%prog [options] mybook.pdf\n" +"\n" +"\n" +"%prog converts mybook.pdf to mybook.lrf" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/pdf/reflow.py:402 +msgid "" +"Path to output directory in which to create the HTML file. Defaults to " +"current directory." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/pdf/reflow.py:404 +msgid "Be more verbose." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/pdf/reflow.py:416 +msgid "You must specify a single PDF file." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/rtf/convert_from.py:20 +msgid "" +"%prog [options] mybook.rtf\n" +"\n" +"\n" +"%prog converts mybook.rtf to mybook.lrf" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/txt/convert_from.py:17 +msgid "" +"%prog [options] mybook.txt\n" +"\n" +"\n" +"%prog converts mybook.txt to mybook.lrf" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:23 +msgid "Set the authors" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:27 +msgid "Set the comment" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/epub.py:100 +msgid "mybook.epub" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/epub.py:100 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/fb2.py:34 +msgid "Usage:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/isbndb.py:95 +msgid "" +"\n" +"%prog [options] key\n" +"\n" +"Fetch metadata for books from isndb.com. You can specify either the \n" +"books ISBN ID or its title and author. If you specify the title and author,\n" +"then more than one book may be returned.\n" +"\n" +"key is the account key you generate after signing up for a free account from " +"isbndb.com.\n" +"\n" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/isbndb.py:106 +msgid "The ISBN ID of the book you want metadata for." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/isbndb.py:108 +msgid "The author whose book to search for." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/isbndb.py:110 +msgid "The title of the book to search for." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/isbndb.py:112 +msgid "The publisher of the book to search for." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/library_thing.py:46 +msgid "" +"Could not fetch cover as server is experiencing high load. Please try again " +"later." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/library_thing.py:47 +msgid " not found." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/library_thing.py:50 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/library_thing.py:81 +msgid "LibraryThing.com server error. Try again later." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/library_thing.py:59 +msgid "" +"\n" +"%prog [options] ISBN\n" +"\n" +"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:751 +msgid "Usage: %s file.lit" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/lit.py:758 +msgid "Cover saved to" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/pdf.py:36 +msgid "Usage: pdf-meta file.pdf" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/pdf.py:37 +msgid "No filename specified." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:341 +msgid "%prog [options] myebook.mobi" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:343 +msgid "Output directory. Defaults to current directory." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:362 +msgid "Raw MOBI HTML saved in" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:364 +msgid "OEB ebook created in" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:22 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:26 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:36 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search.py:14 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:275 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:404 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:755 +msgid "Title" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:27 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info_ui.py:58 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:531 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:283 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search.py:20 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:246 +msgid "Comments" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info_ui.py:55 +msgid "Dialog" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info_ui.py:56 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info_ui.py:57 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_format_ui.py:41 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/password_ui.py:56 +msgid "TextLabel" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_format_ui.py:40 +msgid "Choose Format" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:23 +msgid "Basic" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:24 +msgid "Advanced" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:102 +msgid "
      Must be a directory." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:102 +msgid "Invalid database location " +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:102 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:105 +msgid "Invalid database location" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:105 +msgid "Invalid database location.
      Cannot write to " +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:117 +msgid "Compacting database. This may take a while." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:117 +msgid "Compacting..." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:202 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:265 +msgid "Configuration" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:203 +msgid "&Location of books database (library1.db)" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:204 +msgid "Browse for the new database location" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:205 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:221 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:223 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:513 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:278 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:287 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:289 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:293 +#: /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:226 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:228 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:229 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:258 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:264 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:266 +msgid "..." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:206 +msgid "Use &Roman numerals for series number" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:207 +msgid "Format for &single file save:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:208 +msgid "&Priority for conversion jobs:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:209 +msgid "Default network &timeout:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:210 +msgid "" +"Set the default timeout for network fetches (i.e. anytime we go out to the " +"internet to get information)" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:211 +msgid " seconds" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:212 +msgid "Toolbar" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:213 +msgid "Large" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:214 +msgid "Medium" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:215 +msgid "Small" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:216 +msgid "&Button size in toolbar" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:217 +msgid "Show &text in toolbar buttons" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:218 +msgid "Select visible &columns in library view" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:219 +msgid "Frequently used directories" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:220 +msgid "Add a directory to the frequently used directories list" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:222 +msgid "Remove a directory from the frequently used directories list" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:224 +msgid "Free unused diskspace from the database" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:225 +msgid "&Compact database" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:226 +msgid "&Metadata from file name" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/conversion_error_ui.py:41 +msgid "ERROR" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:37 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:280 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:405 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:756 +msgid "Author(s)" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:38 +msgid "Author Sort" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:40 +msgid "ISBN" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:104 +msgid "Cannot connect" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:105 +msgid "You must specify a valid access key for isbndb.com" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:139 +msgid "Error fetching metadata" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:144 +msgid "No metadata found" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:144 +msgid "" +"No metadata found, try adjusting the title and author or the ISBN key." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata_ui.py:77 +msgid "Fetch metadata" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata_ui.py:78 +msgid "Fetching metadata for %1" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata_ui.py:79 +msgid "" +"Sign up for a free account from
      ISBNdb.com to get an access key." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata_ui.py:80 +msgid "&Access Key:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata_ui.py:81 +msgid "Fetch" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata_ui.py:82 +msgid "Matches" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata_ui.py:83 +msgid "" +"Select the book that most closely matches your copy from the list below" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/job_view_ui.py:31 +msgid "Details of job" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/jobs.py:27 +msgid "Unavailable" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/jobs.py:38 +msgid " - Jobs" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/jobs_ui.py:38 +msgid "Active Jobs" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/jobs_ui.py:39 +msgid "&Stop selected job" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:54 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:291 +msgid "Metadata" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:56 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:292 +msgid "Look & Feel" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:58 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:293 +msgid "Page Setup" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:60 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:294 +msgid "Chapter Detection" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:92 +msgid "No available formats" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:93 +msgid "Cannot convert %s as this book has no supported formats" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:97 +msgid "Choose the format to convert into LRF" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:105 +msgid "Convert %s to LRF" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:108 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:177 +msgid "Set conversion defaults" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:173 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:43 +msgid "Cannot read" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:174 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:44 +msgid "You do not have permission to read the file: " +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:182 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:52 +msgid "Error reading file" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:183 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:53 +msgid "

      There was an error reading from file:
      " +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:189 +msgid " is not a valid picture" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:255 +msgid "" +"Preprocess the file before converting to LRF. This is useful if you know " +"that the file is from a specific source. Known sources:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:256 +msgid "

      1. baen - Books from BAEN Publishers
      2. " +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:257 +msgid "" +"
      3. pdftohtml - HTML files that are the output of the program " +"pdftohtml
      4. " +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:258 +msgid "
      5. book-designer - HTML0 files from Book Designer
      6. " +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:291 +msgid "" +"Specify metadata such as title and author for the book.

        Metadata will be " +"updated in the database as well as the generated LRF file." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:292 +msgid "" +"Adjust the look of the generated LRF file by specifying things like font " +"sizes and the spacing between words." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:293 +msgid "" +"Specify the page settings like margins and the screen size of the target " +"device." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:294 +msgid "Fine tune the detection of chapter and section headings." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:303 +msgid "No help available" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:404 +msgid "Bulk convert ebooks to LRF" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:507 +msgid "Convert to LRF" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:508 +msgid "Category" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:509 +msgid "Options" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:510 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:290 +msgid "Book Cover" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:511 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:291 +msgid "Change &cover image:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:512 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:292 +msgid "Browse for an image to use as the cover of this book." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:514 +msgid "Use cover from &source file" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:515 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:258 +msgid "&Title: " +msgstr "" + +#: /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:259 +msgid "Change the title of this book" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:517 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:116 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:260 +msgid "&Author(s): " +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:518 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:520 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:117 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:261 +msgid "" +"Change the author(s) of this book. Multiple authors should be separated by a " +"comma" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:519 +msgid "Author So&rt:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:521 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:124 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:268 +msgid "&Publisher: " +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:522 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:125 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:269 +msgid "Change the publisher of this book" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:523 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:270 +msgid "Ta&gs: " +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:524 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:127 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:271 +msgid "" +"Tags categorize the book. This is particularly useful while searching. " +"

        They can be any words or phrases, separated by commas." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:525 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:132 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:274 +msgid "&Series:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:526 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:527 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:133 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:134 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:275 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:276 +msgid "List of known series. You can add new series." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:528 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:529 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:279 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:280 +msgid "Series index." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:530 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:281 +msgid "Book " +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:532 +msgid "Base &font size:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:533 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:540 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:542 +msgid " pts" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:534 +msgid "Embedded Fonts" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:535 +msgid "&Serif:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:536 +msgid "S&ans-serif:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:537 +msgid "&Monospace:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:538 +msgid "Source en&coding:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:539 +msgid "Minimum &indent:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:541 +msgid "&Word spacing:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:543 +msgid "Enable auto &rotation of images" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:544 +msgid "Insert &blank lines between paragraphs" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:545 +msgid "Ignore &tables" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:546 +msgid "Ignore &colors" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:547 +msgid "&Preprocess:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:548 +msgid "Header" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:549 +msgid "&Show header" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:550 +msgid "&Header format:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:551 +msgid "Override
        CSS" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:552 +msgid "&Profile:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:553 +msgid "&Left Margin:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:554 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:556 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:558 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:560 +msgid " px" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:555 +msgid "&Right Margin:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:557 +msgid "&Top Margin:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:559 +msgid "&Bottom Margin:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:561 +msgid "&Convert tables to images (good for large/complex tables)" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:562 +msgid "&Multiplier for text size in rendered tables:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:563 +msgid "Title based detection" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:564 +msgid "&Disable chapter detection" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:565 +msgid "&Regular expression:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:566 +msgid "Add &chapters to table of contents" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:567 +msgid "Don't add &links to the table of contents" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:568 +msgid "Tag based detection" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:569 +msgid "&Page break before tag:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:570 +msgid "&Force page break before tag:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:571 +msgid "Force page break before &attribute:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:572 +msgid "Detect chapter &at tag:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:573 +msgid "Help on item" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:574 +msgid "" +"\n" +"\n" +"

        " +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:114 +msgid "Edit Meta information" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:115 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:257 +msgid "Meta information" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:118 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:262 +msgid "Author S&ort: " +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:119 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:263 +msgid "" +"Specify how the author(s) of this book should be sorted. For example Charles " +"Dickens should be sorted as Dickens, Charles." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:120 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:264 +msgid "&Rating:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:121 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:122 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:265 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:266 +msgid "Rating of this book. 0-5 stars" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:123 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:267 +msgid " stars" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:126 +msgid "Add Ta&gs: " +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:128 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:129 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:272 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:273 +msgid "Open Tag Editor" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:130 +msgid "&Remove tags:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:131 +msgid "Comma separated list of tags to remove from the books. " +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:235 +msgid "" +"

        Enter your username and password for LibraryThing.com.
        If you " +"do not have one, you can register " +"for free!.

        " +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:265 +msgid "Could not fetch cover.
        " +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:265 +msgid "Could not fetch cover" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:271 +msgid "Cannot fetch cover" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:271 +msgid "You must specify the ISBN identifier for this book." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:256 +msgid "Edit Meta Information" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:277 +msgid "Remove unused series (Series that have no books)" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:282 +msgid "IS&BN:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:284 +msgid "Fetch metadata from server" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:285 +msgid "Available Formats" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:286 +msgid "Add a new format for this book to the database" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:288 +msgid "Remove the selected formats for this book from the database." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:294 +msgid "Fetch cover image from server" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:295 +msgid "" +"Change the username and/or password for your account at LibraryThing.com" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:296 +msgid "Change password" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/password_ui.py:55 +msgid "Password needed" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/password_ui.py:57 +msgid "&Username:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/password_ui.py:58 +msgid "&Password:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/password_ui.py:59 +msgid "&Show password" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search.py:15 +msgid "Author" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search.py:17 +msgid "Tag" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search.py:18 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:251 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:411 +msgid "Series" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search.py:19 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:689 +msgid "Format" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search.py:21 +msgid "Any" +msgstr "" + +#: /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 "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_item_ui.py:36 +msgid "contains" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_item_ui.py:37 +msgid "The text to search for. It is interpreted as a regular expression." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_item_ui.py:38 +msgid "" +"

        Negate this match. That is, only return results that do not match " +"this query." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_item_ui.py:39 +msgid "Negate" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_ui.py:73 +msgid "Advanced Search" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_ui.py:74 +msgid "Match a&ll of the following criteria" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_ui.py:75 +msgid "Match a&ny of the following criteria" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_ui.py:76 +msgid "Search criteria" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_ui.py:77 +msgid "More" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_ui.py:78 +msgid "Fewer" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_editor_ui.py:123 +msgid "Tag Editor" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_editor_ui.py:124 +msgid "A&vailable tags" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_editor_ui.py:125 +msgid "" +"Delete tag from database. This will unapply the tag from all books and then " +"remove it from the database." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_editor_ui.py:127 +msgid "Apply tag to current book" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_editor_ui.py:129 +msgid "A&pplied tags" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_editor_ui.py:130 +msgid "Unapply (remove) tag from current book" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_editor_ui.py:132 +msgid "&Add tag:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_editor_ui.py:133 +msgid "" +"If the tag you want is not in the available list, you can add it here. " +"Accepts a comma separated list of tags." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_editor_ui.py:134 +msgid "Add tag to available tags and apply it to current book" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:63 +msgid "No recipe selected" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:69 +msgid "The attached file: %s is a recipe to download %s." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:70 +msgid "Recipe for " +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:86 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:97 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:214 +msgid "Switch to Advanced mode" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:92 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:100 +msgid "Switch to Basic mode" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:110 +msgid "Feed must have a title" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:111 +msgid "The feed must have a title" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:115 +msgid "Feed must have a URL" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:116 +msgid "The feed %s must have a URL" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:121 +msgid "Already exists" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:122 +msgid "This feed has already been added to the recipe" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:163 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:172 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:195 +msgid "Invalid input" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:164 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:173 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:196 +msgid "

        Could not create recipe. Error:
        %s" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:179 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:201 +msgid "Replace recipe?" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:180 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:202 +msgid "A custom recipe named %s already exists. Do you want to replace it?" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:188 +msgid "Choose a recipe file" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:188 +msgid "Recipes" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:208 +msgid "Add custom news source" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:209 +msgid "Available user recipes" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:210 +msgid "Add/Update &recipe" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:211 +msgid "&Remove recipe" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:212 +msgid "&Share recipe" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:213 +msgid "&Load recipe from file" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:215 +msgid "" +"\n" +"

        Create a basic news " +"recipe, by adding RSS feeds to it.
        For most feeds, you will have to " +"use the \"Advanced mode\" to further customize the fetch " +"process.

        " +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:219 +msgid "Recipe &title:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:220 +msgid "&Oldest article:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:221 +msgid "The oldest article to download" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:222 +msgid " days" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:223 +msgid "&Max. number of articles per feed:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:224 +msgid "Maximum number of articles to download per feed." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:225 +msgid "Feeds in recipe" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:227 +msgid "Remove feed from recipe" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:230 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:233 +msgid "Add feed to recipe" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:231 +msgid "&Feed title:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:232 +msgid "Feed &URL:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:234 +msgid "&Add feed" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:235 +msgid "" +"For help with writing advanced news recipes, please visit User Recipes" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:236 +msgid "Recipe source code (python)" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:97 +msgid "" +"

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

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

        Use the Test functionality below to test your regular " +"expression on a few sample filenames." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:98 +msgid "Regular &expression" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:99 +msgid "&Test" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:100 +msgid "File &name:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:101 +msgid "Test" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:102 +msgid "Title:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:103 +msgid "Regular expression group name (?P)" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:104 +#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:107 +#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:110 +#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:113 +#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:116 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:45 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:49 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:54 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:59 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:61 +msgid "No match" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:105 +msgid "Authors:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:106 +msgid "Regular expression group name (?P<authors>)" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:108 +msgid "Series:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:109 +msgid "Regular expression group name (?P<series>)" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:111 +msgid "Series index:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:112 +#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:115 +msgid "Regular expression group name (?P<series_index>)" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:114 +msgid "ISBN:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:313 +msgid "Job" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:314 +msgid "Status" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:315 +msgid "Progress" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:316 +msgid "Running time" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:344 +msgid "Error" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:344 +msgid "Finished" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:346 +msgid "Waiting" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:346 +msgid "Working" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:376 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:380 +msgid "Cannot kill job" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:377 +msgid "" +"Cannot kill jobs that are communicating with the device as this may cause " +"data corruption." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:381 +msgid "Cannot kill already completed jobs." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:235 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:241 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:245 +msgid "None" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:236 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:410 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:695 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:759 +msgid "Tags" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:242 +msgid "Formats" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:251 +msgid "Book <font face=\"serif\">%s</font> of %s." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:396 +msgid "Double click to <b>edit</b> me<br><br>" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:406 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:757 +msgid "Size (MB)" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:407 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:758 +msgid "Date" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:408 +msgid "Rating" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:690 +msgid "Path" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:694 +msgid "Timestamp" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:794 +msgid "Search (For Advanced Search click the button to the left)" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/config_ui.py:48 +msgid "Configure Viewer" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/config_ui.py:49 +msgid "Use white background" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/config_ui.py:50 +msgid "Hyphenate" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/config_ui.py:51 +msgid "<b>Changes will only take affect after a restart." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main.py:63 +msgid " - LRF Viewer" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main.py:154 +msgid "<b>No matches</b> for the search phrase <i>%s</i> were found." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main.py:154 +msgid "No matches found" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main_ui.py:128 +msgid "LRF Viewer" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main_ui.py:129 +msgid "Parsing LRF file" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main_ui.py:130 +msgid "LRF Viewer toolbar" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main_ui.py:131 +msgid "Next Page" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main_ui.py:132 +msgid "Previous Page" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main_ui.py:133 +msgid "Back" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main_ui.py:134 +msgid "Forward" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main_ui.py:135 +msgid "Next match" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main_ui.py:136 +msgid "Open ebook" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main_ui.py:137 +msgid "Configure" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:82 +msgid "Error communicating with device" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:95 +msgid "" +"<p>For help visit <a " +"href=\"http://%s.kovidgoyal.net/user_manual\">%s.kovidgoyal.net</a><br>" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:96 +msgid "<b>%s</b>: %s by <b>Kovid Goyal %%(version)s</b><br>%%(device)s</p>" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:114 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:116 +msgid "Send to main memory" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:115 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:117 +msgid "Send to storage card" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:116 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:117 +msgid "and delete from library" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:119 +msgid "Send to storage card by default" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:131 +msgid "Edit metadata individually" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:132 +msgid "Edit metadata in bulk" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:135 +msgid "Add books from a single directory" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:136 +msgid "" +"Add books recursively (One book per directory, assumes every ebook file is " +"the same book in a different format)" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:137 +msgid "" +"Add books recursively (Multiple books per directory, assumes every ebook " +"file is a different book)" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:152 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:275 +msgid "Save to disk" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:153 +msgid "Save to disk in a single directory" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:154 +msgid "Save only %s format to disk" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:157 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:281 +msgid "View" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:158 +msgid "View specific format" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:174 +msgid "Convert individually" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:175 +msgid "Bulk convert" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:309 +msgid " detected." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:309 +msgid "Device: " +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:334 +msgid "Connected " +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:346 +msgid "Device database corrupted" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:347 +msgid "" +"\n" +" <p>The database of books on the reader is corrupted. Try the " +"following:\n" +" <ol>\n" +" <li>Unplug the reader. Wait for it to finish regenerating " +"the database (i.e. wait till it is ready to be used). Plug it back in. Now " +"it should work with %(app)s. If not try the next step.</li>\n" +" <li>Quit %(app)s. Find the file media.xml in the reader's " +"main memory. Delete it. Unplug the reader. Wait for it to regenerate the " +"file. Re-connect it and start %(app)s.</li>\n" +" </ol>\n" +" " +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:399 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:473 +msgid "" +"<p>Books with the same title as the following already exist in the database. " +"Add them anyway?<ul>" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:402 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:476 +msgid "Duplicates found!" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:435 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:448 +msgid "Uploading books to device." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:507 +msgid "No space on device" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:508 +msgid "" +"<p>Cannot upload books to device there is no more free space available " +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:546 +msgid "Deleting books from device." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:578 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:599 +msgid "Cannot edit metadata" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:578 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:599 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:694 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:764 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:834 +msgid "No books selected" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:674 +msgid "Sending books to device." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:677 +msgid "No suitable formats" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:678 +msgid "" +"Could not upload the following books to the device, as no suitable formats " +"were found:<br><ul>%s</ul>" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:694 +msgid "Cannot save to disk" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:705 +msgid "" +"<p>Could not save the following books to disk, because the %s format is not " +"available for them:<ul>" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:709 +msgid "Could not save some ebooks" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:742 +msgid "Fetch news from " +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:744 +msgid "Fetching news from " +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:754 +msgid "News fetched. Uploading to device." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:764 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:834 +msgid "Cannot convert" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:773 +msgid "Starting Bulk conversion of %d books" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:905 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:923 +msgid "No book selected" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:905 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:923 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:937 +msgid "Cannot view" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:911 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:942 +msgid "Choose the format to view" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:938 +msgid "%s has no available formats." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:976 +msgid "Cannot configure" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:976 +msgid "Cannot configure while there are running jobs." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:999 +msgid "Copying database to " +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1014 +msgid "Invalid database" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1015 +msgid "" +"<p>An invalid database already exists at %s, delete it before trying to move " +"the existing database.<br>Error: %s" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1023 +msgid "Could not move database" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1044 +msgid "No detailed info available" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1045 +msgid "No detailed information is available for books on the device." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1087 +msgid "Error talking to device" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1088 +msgid "" +"There was a temporary error talking to the device. Please unplug and " +"reconnect the device and or reboot." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1139 +msgid "Conversion Error" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1158 +msgid "Database does not exist" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1158 +msgid "" +"The directory in which the database should be: %s no longer exists. Please " +"choose a new database location." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1209 +msgid "" +"<span style=\"color:red; font-weight:bold\">Latest version: <a " +"href=\"%s\">%s</a></span>" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1215 +msgid "" +"%s has been updated to version %s. See the <a " +"href=\"http://calibre.kovidgoyal.net/wiki/Changelog\">new features</a>. " +"Visit the download page?" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1215 +msgid "Update available" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:256 +msgid "calibre" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:257 +msgid "Advanced search" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:259 +msgid "Alt+S" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:260 +msgid "&Search:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:261 +msgid "" +"Search the list of books by title or author<br><br>Words separated by spaces " +"are ANDed" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:262 +msgid "" +"Search the list of books by title, author, publisher, tags and " +"comments<br><br>Words separated by spaces are ANDed" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:263 +msgid "Reset Quick Search" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:267 +msgid "Add books" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:268 +msgid "A" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:269 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:270 +msgid "Remove books" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:271 +msgid "Del" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:272 +msgid "Edit meta information" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:273 +msgid "E" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:274 +msgid "Send to device" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:276 +msgid "S" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:277 +msgid "Fetch news" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:278 +msgid "F" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:279 +msgid "Convert E-books" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:280 +msgid "C" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:282 +msgid "V" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main_window.py:17 +msgid "" +"Redirect console output to a dialog window (both stdout and stderr). Useful " +"on windows where GUI apps do not have a output streams." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main_window.py:52 +msgid "ERROR: Unhandled exception" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/news.py:32 +msgid "Add a custom news source" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/news.py:53 +msgid "" +"<p>Please enter your username and password for %s<br>If you do not have one, " +"please subscribe to get access to the articles.<br/> Click OK to proceed." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/news.py:79 +msgid "Custom news sources" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:95 +msgid "Jobs:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:104 +msgid "Click to see list of active jobs." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:133 +msgid "Click to browse books by their covers" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:133 +msgid "Click to turn off Cover Browsing" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:138 +msgid "" +"<p>Browsing books by their covers is disabled.<br>Import of pictureflow " +"module failed:<br>" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:38 +msgid "Invalid regular expression" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:39 +msgid "Invalid regular expression: %s" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:169 +msgid "Library" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:170 +msgid "" +"Reader\n" +"%s available" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:171 +msgid "" +"Card\n" +"%s available" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:175 +msgid "Click to see the list of books available on your computer" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:176 +msgid "Click to see the list of books in the main memory of your reader" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:177 +msgid "Click to see the list of books on the storage card in your reader" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:27 +msgid "" +"Path to the calibre database. Default is to use the path stored in the " +"settings." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:82 +msgid "" +"%prog list [options]\n" +"\n" +"List the books available in the calibre database. \n" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:90 +msgid "" +"The fields to display when listing books in the database. Should be a comma " +"separated list of fields.\n" +"Available fields: %s\n" +"Default: %%default" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:92 +msgid "" +"The field by which to sort the results.\n" +"Available fields: %s\n" +"Default: %%default" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:94 +msgid "Sort results in ascending order" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:96 +msgid "" +"Filter the results by the search query. For the format of the search query, " +"please see the search related documentation in the User Manual. Default is " +"to do no filtering." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:103 +msgid "Invalid fields. Available fields:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:110 +msgid "Invalid sort field. Available fields:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:173 +msgid "" +"The following books were not added as they already exist in the database " +"(see --duplicates option):" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:197 +msgid "" +"%prog add [options] file1 file2 file3 ...\n" +"\n" +"Add the specified files as books to the database. You can also specify " +"directories, see\n" +"the directory related options below. \n" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:206 +msgid "" +"Assume that each directory has only a single logical book and that all files " +"in it are different e-book formats of that book" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:208 +msgid "Process directories recursively" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:210 +msgid "" +"Add books to database even if they already exist. Comparison is done based " +"on book titles." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:215 +msgid "You must specify at least one file to add" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:233 +msgid "" +"%prog remove ids\n" +"\n" +"Remove the books identified by ids from the database. ids should be a comma " +"separated list of id numbers (you can get id numbers by using the list " +"command). For example, 23,34,57-85\n" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:245 +msgid "You must specify at least one book to remove" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:265 +msgid "" +"%prog add_format [options] id ebook_file\n" +"\n" +"Add the ebook in ebook_file to the available formats for the logical book " +"identified by id. You can get id by using the list command. If the format " +"already exists, it is replaced.\n" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:276 +msgid "You must specify an id and an ebook file" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:281 +msgid "ebook file must have an extension" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:289 +msgid "" +"\n" +"%prog remove_format [options] id fmt\n" +"\n" +"Remove the format fmt from the logical book identified by id. You can get id " +"by using the list command. fmt should be a file extension like LRF or TXT or " +"EPUB. If the logical book does not have fmt available, do nothing.\n" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:302 +msgid "You must specify an id and a format" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:320 +msgid "" +"\n" +"%prog show_metadata [options] id\n" +"\n" +"Show the metadata stored in the calibre database for the book identified by " +"id. \n" +"id is an id number from the list command. \n" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:328 +msgid "Print metadata in OPF form (XML)" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:333 +msgid "You must specify an id" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:347 +msgid "" +"\n" +"%prog set_metadata [options] id /path/to/metadata.opf\n" +"\n" +"Set the metadata stored in the calibre database for the book identified by " +"id\n" +"from the OPF file metadata.opf. id is an id number from the list command. " +"You \n" +"can get a quick feel for the OPF format by using the --as-opf switch to the\n" +"show_metadata command.\n" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:360 +msgid "You must specify an id and a metadata file" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:372 +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 "" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:380 +msgid "Export all books in database, ignoring the list of ids." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:382 +msgid "Export books to the specified directory. Default is" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:384 +msgid "Export all books into a single directory" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:386 +msgid "Create file names as author - title instead of title - author" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:391 +msgid "You must specify some ids or the %s option" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:401 +msgid "" +"%%prog command [options] [arguments]\n" +"\n" +"%%prog is the command line interface to the calibre books database. \n" +"\n" +"command is one of:\n" +" %s\n" +" \n" +"For help on an individual command: %%prog command --help\n" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/parallel.py:317 +msgid "Could not launch worker process." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/utils/fontconfig.py:146 +msgid "Could not initialize the fontconfig library" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/utils/sftp.py:53 +msgid "URL must have the scheme sftp" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/utils/sftp.py:57 +msgid "host must be of the form user@hostname" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/utils/sftp.py:68 +msgid "Failed to negotiate SSH session: " +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/utils/sftp.py:71 +msgid "Failed to authenticate with server: %s" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:56 +#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:77 +msgid "Unknown feed" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:95 +#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:117 +msgid "Untitled article" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/web/feeds/main.py:15 +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 "" + +#: /home/kovid/work/calibre/src/calibre/web/feeds/main.py:37 +msgid "" +"Options to control web2disk (used to fetch websites linked from feeds)" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/web/feeds/main.py:40 +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 "" + +#: /home/kovid/work/calibre/src/calibre/web/feeds/main.py:44 +msgid "Be more verbose while processing." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/web/feeds/main.py:46 +msgid "" +"The title for this recipe. Used as the title for any ebooks created from the " +"downloaded feeds." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/web/feeds/main.py:47 +msgid "Username for sites that require a login to access content." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/web/feeds/main.py:48 +msgid "Password for sites that require a login to access content." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/web/feeds/main.py:51 +msgid "" +"Number of levels of links to follow on webpages that are linked to from " +"feeds. Defaul %default" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/web/feeds/main.py:53 +msgid "" +"The directory in which to store the downloaded feeds. Defaults to the " +"current directory." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/web/feeds/main.py:55 +msgid "Dont show the progress bar" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/web/feeds/main.py:57 +msgid "Very verbose output, useful for debugging." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/web/feeds/main.py:59 +msgid "" +"Useful for recipe development. Forces max_articles_per_feed to 2 and " +"downloads at most 2 feeds." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/web/feeds/main.py:84 +#: /home/kovid/work/calibre/src/calibre/web/feeds/main.py:88 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:576 +msgid "Fetching feeds..." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:33 +msgid "Unknown News Source" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:474 +msgid "Download finished" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:476 +msgid "Failed to download the following articles:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:478 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:484 +msgid " from " +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:482 +msgid "Failed to download parts of the following articles:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:486 +msgid "\tFailed links:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:558 +msgid "Could not fetch article. Run with --debug to see the reason" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:580 +msgid "Got feeds from index page" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:584 +msgid "Trying to download cover..." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:636 +msgid "Starting download [%d thread(s)]..." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:649 +msgid "Feeds downloaded to %s" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:659 +msgid "Could not download cover: %s" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:664 +msgid "Downloading cover from %s" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:698 +msgid "Untitled Article" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:744 +msgid "" +"\n" +"Downloaded article %s from %s\n" +"%s" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:750 +msgid "Article downloaded: %s" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:756 +msgid "Failed to download article: %s from %s\n" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:761 +msgid "Article download failed: %s" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:776 +msgid "Fetching feed" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:382 +msgid "" +"%prog URL\n" +"\n" +"Where URL is for example http://google.com" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:385 +msgid "Base directory into which URL is saved. Default is %default" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:388 +msgid "" +"Timeout in seconds to wait for a response from the server. Default: %default " +"s" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:391 +msgid "" +"Maximum number of levels to recurse i.e. depth of links to follow. Default " +"%default" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:394 +msgid "" +"The maximum number of files to download. This only applies to files from <a " +"href> tags. Default is %default" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:396 +msgid "" +"Minimum interval in seconds between consecutive fetches. Default is %default " +"s" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:398 +msgid "" +"The character encoding for the websites you are trying to download. The " +"default is to try and guess the encoding." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:400 +msgid "" +"Only links that match this regular expression will be followed. This option " +"can be specified multiple times, in which case as long as a link matches any " +"one regexp, it will be followed. By default all links are followed." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:402 +msgid "" +"Any link that matches this regular expression will be ignored. This option " +"can be specified multiple times, in which case as long as any regexp matches " +"a link, it will be ignored.By default, no links are ignored. If both --" +"filter-regexp and --match-regexp are specified, then --filter-regexp is " +"applied first." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:404 +msgid "Do not download CSS stylesheets." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:405 +msgid "Show detailed output information. Useful for debugging" +msgstr "" diff --git a/src/calibre/translations/ru.po b/src/calibre/translations/ru.po index d071b3e847..85ceee6bcc 100644 --- a/src/calibre/translations/ru.po +++ b/src/calibre/translations/ru.po @@ -7,13 +7,13 @@ msgstr "" "Project-Id-Version: calibre 0.4.55\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2008-06-30 23:41+0000\n" -"PO-Revision-Date: 2008-07-02 08:05+0000\n" +"PO-Revision-Date: 2008-07-02 21:26+0000\n" "Last-Translator: Danil Semelenov <Unknown>\n" "Language-Team: ru\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2008-07-02 15:52+0000\n" +"X-Launchpad-Export-Date: 2008-07-09 03:20+0000\n" "X-Generator: Launchpad (build Unknown)\n" "Generated-By: pygettext.py 1.5\n" @@ -291,11 +291,21 @@ msgid "" "turn performance of the LRF. Thus this option is ignored if the current page " "has only a few elements." msgstr "" +"Если html2lrf не найдет разрывов страниц в файле html и не сможет определить " +"заголовки глав, то разрывы страниц будут автоматически добавлены до тегов, " +"имена которых будут соответствовать этому регулярному выражению. По " +"умолчанию: %default. Вы можете отключить это, указав в качестве регулярного " +"выражения \"$\". Назначение этой опции — избавиться от очень больших " +"страниц, т.к. это уменьшает скорость перелистывания страниц в LRF. Таким " +"образом эта опция игнорируется, если определенная страница состоит лишь из " +"нескольких элементов." #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:179 msgid "" "Force a page break before tags whose names match this regular expression." msgstr "" +"Устанавливать разрывы страниц после тегов, имена которых соответствуют этому " +"регулярному выражению." #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:181 msgid "" @@ -304,24 +314,27 @@ msgid "" "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:184 msgid "Add detected chapters to the table of contents." -msgstr "" +msgstr "Добавлять найденные главы в содержание." #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:187 msgid "Preprocess Baen HTML files to improve generated LRF." -msgstr "" +msgstr "Обработка файлов Baen HTML для улучшения генерируемого LRF." #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:189 msgid "" "You must add this option if processing files generated by pdftohtml, " "otherwise conversion will fail." msgstr "" +"Вы должны добавить эту опцию, если обрабатываемые файлы были сгенерированы " +"утилитой pdftohtml, иначе преобразования не получится." #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:191 msgid "Use this option on html0 files from Book Designer." -msgstr "" +msgstr "Используйте эту опцию для файлов html0 после Book Designer." #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:194 msgid "" @@ -330,32 +343,41 @@ msgid "" "slower page turns. For example: --serif-family \"Times New Roman\"\n" " " msgstr "" +"Укажите наборы trutype-шрифтов для групп \"serif\", \"sans-serif\" и " +"\"monospace\". Эти шрифты будут включены в файл LRF. Учтите, что " +"использование своих шрифтов приведет к уменьшению скорости переворачивания " +"страниц. Пример: --serif-family \"Times New Roman\"\n" +" " #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:202 +#, fuzzy msgid "The serif family of fonts to embed" -msgstr "" +msgstr "Набор шрифтов серии \"serif\" для использования" #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:205 +#, fuzzy msgid "The sans-serif family of fonts to embed" -msgstr "" +msgstr "Набор шрифтов серии \"sans-serif\" для использования" #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:208 msgid "The monospace family of fonts to embed" -msgstr "" +msgstr "Набор шрифтов серии \"monospace\" для использования" #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:212 msgid "Be verbose while processing" -msgstr "" +msgstr "Отображать избыточную информацию при обработке" #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:214 msgid "Convert to LRS" -msgstr "" +msgstr "Преобразовать в LRF" #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:216 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:218 msgid "" @@ -364,6 +386,11 @@ msgid "" "files from windows computers is cp-1252. Another common choice is utf-8. The " "default is to try and guess the encoding." msgstr "" +"Укажите кодировку исходного файла. Если выходной файл LRF содержит " +"непонятные символы, то попробуйте изменить эту опцию. Распространенная " +"кодировка для файлов на компьютерах с windows — cp-1251. Другой " +"распространенный вариант — utf-8. По умолчанию будет сделана попытка угадать " +"кодировку." #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/any/convert_from.py:143 msgid "" @@ -375,10 +402,18 @@ msgid "" "ZIP archive, looking for an ebook inside the archive.\n" " " msgstr "" +"any2lrf [опции] myfile\n" +"\n" +"Преобразовать электронные книги в различных форматах в LRF. Поддерживаемые " +"форматы:\n" +"LIT, RTF, TXT, HTML, EPUB, MOBI, PRC и PDF. any2lrf также может обработать " +"архивы RAR или\n" +"ZIP, пытаясь обнаружить электронную книгу в архиве.\n" +" " #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/any/convert_from.py:158 msgid "No file to convert specified." -msgstr "" +msgstr "Не указан файл для преобразования." #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/epub/convert_from.py:17 msgid "" @@ -387,6 +422,10 @@ msgid "" " \n" "%prog converts mybook.epub to mybook.lrf" msgstr "" +"Использование: %prog [опции] mybook.epub\n" +"\n" +"\n" +"%prog преобразует mybook.epub в mybook.lrf" #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/fb2/convert_from.py:19 msgid "" @@ -395,52 +434,57 @@ msgid "" "\n" "%prog converts mybook.fb2 to mybook.lrf" msgstr "" +"%prog [опции] mybook.fb2\n" +"\n" +"\n" +"%prog преобразует mybook.fb2 в mybook.lrf" #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/fb2/convert_from.py:24 #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/txt/convert_from.py:22 msgid "Print generated HTML to stdout and quit." -msgstr "" +msgstr "Распечатать сгенерированный HTML в stdout и выйти." #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/feeds/convert_from.py:22 msgid "Options to control the behavior of feeds2disk" -msgstr "" +msgstr "Опции управления поведением feeds2disk" #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/feeds/convert_from.py:24 msgid "Options to control the behavior of html2lrf" -msgstr "" +msgstr "Опции управления поведением html2lrf" #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/feeds/convert_from.py:46 msgid "Fetching of recipe failed: " -msgstr "" +msgstr "Скачивание подпорки не удалось: " #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:315 msgid "\tBook Designer file detected." -msgstr "" +msgstr "\tОпределен файл в формате Book Designer." #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:317 msgid "\tParsing HTML..." -msgstr "" +msgstr "\tРазбор HTML..." #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:339 msgid "\tBaen file detected. Re-parsing..." -msgstr "" +msgstr "\tОпределен файл в формате Baen. Повторный разбор..." #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:355 +#, fuzzy msgid "Written preprocessed HTML to " -msgstr "" +msgstr "Предварительно обработанный HTML сохранен в " #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:372 msgid "Processing %s" -msgstr "" +msgstr "Обработка %s" #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:386 msgid "\tConverting to BBeB..." -msgstr "" +msgstr "\tПреобразование в BBeB..." #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:529 #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:542 msgid "Could not parse file: %s" -msgstr "" +msgstr "Не удалось разобрать файл: %s" #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:534 msgid "%s is an empty file" diff --git a/src/calibre/translations/sl.po b/src/calibre/translations/sl.po index 3fb01e25ce..966dd43216 100644 --- a/src/calibre/translations/sl.po +++ b/src/calibre/translations/sl.po @@ -13,7 +13,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2008-07-02 15:52+0000\n" +"X-Launchpad-Export-Date: 2008-07-09 03:20+0000\n" "X-Generator: Launchpad (build Unknown)\n" "Generated-By: pygettext.py 1.5\n" diff --git a/src/calibre/translations/te.po b/src/calibre/translations/te.po index 36f665befd..ff5a09866f 100644 --- a/src/calibre/translations/te.po +++ b/src/calibre/translations/te.po @@ -14,7 +14,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2008-07-02 15:52+0000\n" +"X-Launchpad-Export-Date: 2008-07-09 03:20+0000\n" "X-Generator: Launchpad (build Unknown)\n" #: /home/kovid/work/calibre/src/calibre/__init__.py:133 From 75cff97097178ad412e5535bc8d0a203c94fc270 Mon Sep 17 00:00:00 2001 From: Kovid Goyal <kovid@kovidgoyal.net> Date: Wed, 9 Jul 2008 08:22:52 -0700 Subject: [PATCH 06/34] version 0.4.77 --- src/calibre/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/calibre/__init__.py b/src/calibre/__init__.py index 721d93dcfd..acd5d2e930 100644 --- a/src/calibre/__init__.py +++ b/src/calibre/__init__.py @@ -1,7 +1,7 @@ ''' E-book management software''' __license__ = 'GPL v3' __copyright__ = '2008, Kovid Goyal <kovid at kovidgoyal.net>' -__version__ = '0.4.76' +__version__ = '0.4.77' __docformat__ = "epytext" __author__ = "Kovid Goyal <kovid at kovidgoyal.net>" __appname__ = 'calibre' From a6f0c17b94611597a28525a20ddb621b33ca22cb Mon Sep 17 00:00:00 2001 From: Kovid Goyal <kovid@kovidgoyal.net> Date: Wed, 9 Jul 2008 08:30:02 -0700 Subject: [PATCH 07/34] IGN:Tag release From 5a4f440e5a735e9abbe730824c5813932052c3d8 Mon Sep 17 00:00:00 2001 From: Kovid Goyal <kovid@kovidgoyal.net> Date: Wed, 9 Jul 2008 08:45:44 -0700 Subject: [PATCH 08/34] IGN: Add date to changelog --- src/calibre/trac/plugins/Changelog.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/calibre/trac/plugins/Changelog.py b/src/calibre/trac/plugins/Changelog.py index 2d3ba45d81..35c54b1bda 100644 --- a/src/calibre/trac/plugins/Changelog.py +++ b/src/calibre/trac/plugins/Changelog.py @@ -1,7 +1,7 @@ ''' Trac Macro to generate an end use Changelog from the svn logs. ''' -import re, collections +import re, collections, time from bzrlib import log as blog, branch @@ -33,7 +33,8 @@ class ChangelogFormatter(blog.LogFormatter): if match: if self.current_entry is not None: self.entries.append((self.current_entry, set(self.messages))) - self.current_entry = match.group(1) + timestamp = r.rev.timezone + r.rev.timestamp + self.current_entry = match.group(1) + time.strftime(' (%d %b, %Y)', time.gmtime(timestamp)) self.messages = collections.deque() else: From 147c5d77117b5c6ab5dde207d8063d49cad3a527 Mon Sep 17 00:00:00 2001 From: Kovid Goyal <kovid@kovidgoyal.net> Date: Wed, 9 Jul 2008 13:48:04 -0700 Subject: [PATCH 09/34] IGN:Add commit hook to bzr to automatically close trac tickets based on commit comments. --- src/calibre/trac/bzr_commit_plugin.py | 115 ++++++++++++++++++++++++++ 1 file changed, 115 insertions(+) create mode 100644 src/calibre/trac/bzr_commit_plugin.py diff --git a/src/calibre/trac/bzr_commit_plugin.py b/src/calibre/trac/bzr_commit_plugin.py new file mode 100644 index 0000000000..2715730e8f --- /dev/null +++ b/src/calibre/trac/bzr_commit_plugin.py @@ -0,0 +1,115 @@ +#!/usr/bin/env python + +__license__ = 'GPL v3' +__copyright__ = '2008, Kovid Goyal kovid@kovidgoyal.net' +__docformat__ = 'restructuredtext en' + +''' +Plugin to make the commit command automatically close bugs when the commit +message contains `Fix #number` or `Implement #number`. Also updates the commit +message with the summary of the closed bug. It also set the `--fixes` metadata +appropriately. Currently only works with a Trac bug repository with the XMLRPC +plugin enabled. + +To use copy this file into `~/.bazaar/plugins` and add the following to branch.conf +in the working tree you want to use it with:: + + trac_reponame_url = <url> + trac_reponame_username = <username> + trac_reponame_password = <password> + +''' +import os, re, xmlrpclib +from bzrlib.builtins import cmd_commit as _cmd_commit, tree_files +from bzrlib import branch +import bzrlib + + +class cmd_commit(_cmd_commit): + + @classmethod + def trac_url(self, username, password, url): + return url.replace('//', '//%s:%s@'%(username, password))+'/login/xmlrpc' + + def get_trac_summary(self, bug, url): + server = xmlrpclib.ServerProxy(url) + try: + attributes = server.ticket.get(int(bug))[-1] + return attributes['summary'] + except: + raise + pass + + + def expand_bug(self, msg, nick, config, bug_tracker, type='trac'): + prefix = '%s_%s_'%(type, nick) + username = config.get_user_option(prefix+'username') + password = config.get_user_option(prefix+'password') + close_bug = config.get_user_option(prefix+'pattern') + if close_bug is None: + close_bug = r'(Fix|Implement)\s+#(\d+)' + close_bug_pat = re.compile(close_bug, re.IGNORECASE) + match = close_bug_pat.search(msg) + if not match: + return msg, None, None, None + action, bug = match.group(1), match.group(2) + summary = '' + if type == 'trac': + url = self.trac_url(username, password, bug_tracker) + summary = self.get_trac_summary(bug, url) + if summary: + msg = msg.replace('#%s'%bug, '#%s (%s)'%(bug, summary)) + return msg, bug, url, action + + + def get_bugtracker(self, basedir, type='trac'): + config = os.path.join(basedir, '.bzr', 'branch', 'branch.conf') + bugtracker, nick = None, None + if os.access(config, os.R_OK): + for line in open(config).readlines(): + match = re.search(r'%s_(\S+)_url\s*=\s*(\S+)'%type, line) + if match: + nick, bugtracker = match.group(1), match.group(2) + break + return nick, bugtracker + + def expand_message(self, msg, tree): + nick, bugtracker = self.get_bugtracker(tree.basedir, type='trac') + if not bugtracker: + return msg + config = branch.Branch.open(tree.basedir).get_config() + msg, bug, url, action = self.expand_bug(msg, nick, config, bugtracker) + + return msg, bug, url, action, nick, config + + def run(self, message=None, file=None, verbose=False, selected_list=None, + unchanged=False, strict=False, local=False, fixes=None, + author=None, show_diff=False): + if message: + message, bug, url, action, nick, config = \ + self.expand_message(message, tree_files(selected_list)[0]) + + if nick and bug and not fixes: + fixes = [nick+':'+bug] + + ret = _cmd_commit.run(self, message=message, file=file, verbose=verbose, + selected_list=selected_list, unchanged=unchanged, + strict=strict, local=local, fixes=fixes, + author=author, show_diff=show_diff) + if message and bug and action and nick and config: + self.close_bug(bug, action, url, config) + return ret + + def close_bug(self, bug, action, url, config): + nick = config.get_nickname() + suffix = config.get_user_option('bug_close_comment') + if suffix is None: + suffix = 'The fix will be in the next release.' + action = action+'ed' + msg = '%s in branch %s. %s'%(action, nick, suffix) + server = xmlrpclib.ServerProxy(url) + server.ticket.update(int(bug), msg, + {'status':'closed', 'resolution':'fixed'}, + False) + +bzrlib.commands.register_command(cmd_commit) \ No newline at end of file From c73315bb51a3c6e7fedd7432e60abd5f3a65d3b9 Mon Sep 17 00:00:00 2001 From: Kovid Goyal <kovid@kovidgoyal.net> Date: Wed, 9 Jul 2008 13:54:01 -0700 Subject: [PATCH 10/34] Make xml_to_unicode robust against chardet failing. --- src/calibre/ebooks/chardet/__init__.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/calibre/ebooks/chardet/__init__.py b/src/calibre/ebooks/chardet/__init__.py index 36d3b909de..55257e1962 100644 --- a/src/calibre/ebooks/chardet/__init__.py +++ b/src/calibre/ebooks/chardet/__init__.py @@ -15,6 +15,7 @@ # 02110-1301 USA ######################### END LICENSE BLOCK ######################### + __version__ = "1.0" import re @@ -55,6 +56,9 @@ def xml_to_unicode(raw, verbose=False): print 'WARNING: Encoding detection confidence %d%%'%(chardet['confidence']*100) CHARSET_ALIASES = { "macintosh" : "mac-roman", "x-sjis" : "shift-jis" } + if not encoding: + from calibre import preferred_encoding + encoding = preferred_encoding if encoding: encoding = encoding.lower() if CHARSET_ALIASES.has_key(encoding): From b650764c2a5f4b3425dd9d9830ddcd682518247d Mon Sep 17 00:00:00 2001 From: Kovid Goyal <kovid@kovidgoyal.net> Date: Thu, 10 Jul 2008 11:29:50 -0700 Subject: [PATCH 11/34] Implement google like search query parser --- src/calibre/utils/pyparsing.py | 3600 ++++++++++++++++++++++ src/calibre/utils/search_query_parser.py | 523 ++++ 2 files changed, 4123 insertions(+) create mode 100644 src/calibre/utils/pyparsing.py create mode 100644 src/calibre/utils/search_query_parser.py diff --git a/src/calibre/utils/pyparsing.py b/src/calibre/utils/pyparsing.py new file mode 100644 index 0000000000..85e8c873dd --- /dev/null +++ b/src/calibre/utils/pyparsing.py @@ -0,0 +1,3600 @@ +# module pyparsing.py +# +# Copyright (c) 2003-2008 Paul T. McGuire +# +# Permission is hereby granted, free of charge, to any person obtaining +# a copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, +# distribute, sublicense, and/or sell copies of the Software, and to +# permit persons to whom the Software is furnished to do so, subject to +# the following conditions: +# +# The above copyright notice and this permission notice shall be +# included in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +# CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +# +#from __future__ import generators + +__doc__ = \ +""" +pyparsing module - Classes and methods to define and execute parsing grammars + +The pyparsing module is an alternative approach to creating and executing simple grammars, +vs. the traditional lex/yacc approach, or the use of regular expressions. With pyparsing, you +don't need to learn a new syntax for defining grammars or matching expressions - the parsing module +provides a library of classes that you use to construct the grammar directly in Python. + +Here is a program to parse "Hello, World!" (or any greeting of the form "<salutation>, <addressee>!"):: + + from pyparsing import Word, alphas + + # define grammar of a greeting + greet = Word( alphas ) + "," + Word( alphas ) + "!" + + hello = "Hello, World!" + print hello, "->", greet.parseString( hello ) + +The program outputs the following:: + + Hello, World! -> ['Hello', ',', 'World', '!'] + +The Python representation of the grammar is quite readable, owing to the self-explanatory +class names, and the use of '+', '|' and '^' operators. + +The parsed results returned from parseString() can be accessed as a nested list, a dictionary, or an +object with named attributes. + +The pyparsing module handles some of the problems that are typically vexing when writing text parsers: + - extra or missing whitespace (the above program will also handle "Hello,World!", "Hello , World !", etc.) + - quoted strings + - embedded comments +""" + +__version__ = "1.5.0" +__versionTime__ = "28 May 2008 10:05" +__author__ = "Paul McGuire <ptmcg@users.sourceforge.net>" + +import string +from weakref import ref as wkref +import copy,sys +import warnings +import re +import sre_constants +import xml.sax.saxutils +#~ sys.stderr.write( "testing pyparsing module, version %s, %s\n" % (__version__,__versionTime__ ) ) + +__all__ = [ +'And', 'CaselessKeyword', 'CaselessLiteral', 'CharsNotIn', 'Combine', 'Dict', 'Each', 'Empty', +'FollowedBy', 'Forward', 'GoToColumn', 'Group', 'Keyword', 'LineEnd', 'LineStart', 'Literal', +'MatchFirst', 'NoMatch', 'NotAny', 'OneOrMore', 'OnlyOnce', 'Optional', 'Or', +'ParseBaseException', 'ParseElementEnhance', 'ParseException', 'ParseExpression', 'ParseFatalException', +'ParseResults', 'ParseSyntaxException', 'ParserElement', 'QuotedString', 'RecursiveGrammarException', +'Regex', 'SkipTo', 'StringEnd', 'StringStart', 'Suppress', 'Token', 'TokenConverter', 'Upcase', +'White', 'Word', 'WordEnd', 'WordStart', 'ZeroOrMore', +'alphanums', 'alphas', 'alphas8bit', 'anyCloseTag', 'anyOpenTag', 'cStyleComment', 'col', +'commaSeparatedList', 'commonHTMLEntity', 'countedArray', 'cppStyleComment', 'dblQuotedString', +'dblSlashComment', 'delimitedList', 'dictOf', 'downcaseTokens', 'empty', 'getTokensEndLoc', 'hexnums', +'htmlComment', 'javaStyleComment', 'keepOriginalText', 'line', 'lineEnd', 'lineStart', 'lineno', +'makeHTMLTags', 'makeXMLTags', 'matchOnlyAtCol', 'matchPreviousExpr', 'matchPreviousLiteral', +'nestedExpr', 'nullDebugAction', 'nums', 'oneOf', 'opAssoc', 'operatorPrecedence', 'printables', +'punc8bit', 'pythonStyleComment', 'quotedString', 'removeQuotes', 'replaceHTMLEntity', +'replaceWith', 'restOfLine', 'sglQuotedString', 'srange', 'stringEnd', +'stringStart', 'traceParseAction', 'unicodeString', 'upcaseTokens', 'withAttribute', +'indentedBlock', +] + + +""" +Detect if we are running version 3.X and make appropriate changes +Robert A. Clark +""" +if sys.version_info[0] > 2: + _PY3K = True + _MAX_INT = sys.maxsize + basestring = str +else: + _PY3K = False + _MAX_INT = sys.maxint + +if not _PY3K: + def _ustr(obj): + """Drop-in replacement for str(obj) that tries to be Unicode friendly. It first tries + str(obj). If that fails with a UnicodeEncodeError, then it tries unicode(obj). It + then < returns the unicode object | encodes it with the default encoding | ... >. + """ + try: + # If this works, then _ustr(obj) has the same behaviour as str(obj), so + # it won't break any existing code. + return str(obj) + + except UnicodeEncodeError: + # The Python docs (http://docs.python.org/ref/customization.html#l2h-182) + # state that "The return value must be a string object". However, does a + # unicode object (being a subclass of basestring) count as a "string + # object"? + # If so, then return a unicode object: + return unicode(obj) + # Else encode it... but how? There are many choices... :) + # Replace unprintables with escape codes? + #return unicode(obj).encode(sys.getdefaultencoding(), 'backslashreplace_errors') + # Replace unprintables with question marks? + #return unicode(obj).encode(sys.getdefaultencoding(), 'replace') + # ... +else: + _ustr = str + +def _str2dict(strg): + return dict( [(c,0) for c in strg] ) + #~ return set( [c for c in strg] ) + +class _Constants(object): + pass + +if not _PY3K: + alphas = string.lowercase + string.uppercase +else: + alphas = string.ascii_lowercase + string.ascii_uppercase +nums = string.digits +hexnums = nums + "ABCDEFabcdef" +alphanums = alphas + nums +_bslash = "\\" +printables = "".join( [ c for c in string.printable if c not in string.whitespace ] ) + +class ParseBaseException(Exception): + """base exception class for all parsing runtime exceptions""" + __slots__ = ( "loc","msg","pstr","parserElement" ) + # Performance tuning: we construct a *lot* of these, so keep this + # constructor as small and fast as possible + def __init__( self, pstr, loc=0, msg=None, elem=None ): + self.loc = loc + if msg is None: + self.msg = pstr + self.pstr = "" + else: + self.msg = msg + self.pstr = pstr + self.parserElement = elem + + def __getattr__( self, aname ): + """supported attributes by name are: + - lineno - returns the line number of the exception text + - col - returns the column number of the exception text + - line - returns the line containing the exception text + """ + if( aname == "lineno" ): + return lineno( self.loc, self.pstr ) + elif( aname in ("col", "column") ): + return col( self.loc, self.pstr ) + elif( aname == "line" ): + return line( self.loc, self.pstr ) + else: + raise AttributeError(aname) + + def __str__( self ): + return "%s (at char %d), (line:%d, col:%d)" % \ + ( self.msg, self.loc, self.lineno, self.column ) + def __repr__( self ): + return _ustr(self) + def markInputline( self, markerString = ">!<" ): + """Extracts the exception line from the input string, and marks + the location of the exception with a special symbol. + """ + line_str = self.line + line_column = self.column - 1 + if markerString: + line_str = "".join( [line_str[:line_column], + markerString, line_str[line_column:]]) + return line_str.strip() + +class ParseException(ParseBaseException): + """exception thrown when parse expressions don't match class; + supported attributes by name are: + - lineno - returns the line number of the exception text + - col - returns the column number of the exception text + - line - returns the line containing the exception text + """ + pass + +class ParseFatalException(ParseBaseException): + """user-throwable exception thrown when inconsistent parse content + is found; stops all parsing immediately""" + pass + +class ParseSyntaxException(ParseFatalException): + """just like ParseFatalException, but thrown internally when an + ErrorStop indicates that parsing is to stop immediately because + an unbacktrackable syntax error has been found""" + def __init__(self, pe): + ParseFatalException.__init__(self, pe.pstr, pe.loc, pe.msg, pe.parserElement) + +#~ class ReparseException(ParseBaseException): + #~ """Experimental class - parse actions can raise this exception to cause + #~ pyparsing to reparse the input string: + #~ - with a modified input string, and/or + #~ - with a modified start location + #~ Set the values of the ReparseException in the constructor, and raise the + #~ exception in a parse action to cause pyparsing to use the new string/location. + #~ Setting the values as None causes no change to be made. + #~ """ + #~ def __init_( self, newstring, restartLoc ): + #~ self.newParseText = newstring + #~ self.reparseLoc = restartLoc + +class RecursiveGrammarException(Exception): + """exception thrown by validate() if the grammar could be improperly recursive""" + def __init__( self, parseElementList ): + self.parseElementTrace = parseElementList + + def __str__( self ): + return "RecursiveGrammarException: %s" % self.parseElementTrace + +class _ParseResultsWithOffset(object): + def __init__(self,p1,p2): + self.tup = (p1,p2) + def __getitem__(self,i): + return self.tup[i] + def __repr__(self): + return repr(self.tup) + +class ParseResults(object): + """Structured parse results, to provide multiple means of access to the parsed data: + - as a list (len(results)) + - by list index (results[0], results[1], etc.) + - by attribute (results.<resultsName>) + """ + __slots__ = ( "__toklist", "__tokdict", "__doinit", "__name", "__parent", "__accumNames", "__weakref__" ) + def __new__(cls, toklist, name=None, asList=True, modal=True ): + if isinstance(toklist, cls): + return toklist + retobj = object.__new__(cls) + retobj.__doinit = True + return retobj + + # Performance tuning: we construct a *lot* of these, so keep this + # constructor as small and fast as possible + def __init__( self, toklist, name=None, asList=True, modal=True ): + if self.__doinit: + self.__doinit = False + self.__name = None + self.__parent = None + self.__accumNames = {} + if isinstance(toklist, list): + self.__toklist = toklist[:] + else: + self.__toklist = [toklist] + self.__tokdict = dict() + + # this line is related to debugging the asXML bug + #~ asList = False + + if name: + if not modal: + self.__accumNames[name] = 0 + if isinstance(name,int): + name = _ustr(name) # will always return a str, but use _ustr for consistency + self.__name = name + if not toklist in (None,'',[]): + if isinstance(toklist,basestring): + toklist = [ toklist ] + if asList: + if isinstance(toklist,ParseResults): + self[name] = _ParseResultsWithOffset(toklist.copy(),-1) + else: + self[name] = _ParseResultsWithOffset(ParseResults(toklist[0]),-1) + self[name].__name = name + else: + try: + self[name] = toklist[0] + except (KeyError,TypeError): + self[name] = toklist + + def __getitem__( self, i ): + if isinstance( i, (int,slice) ): + return self.__toklist[i] + else: + if i not in self.__accumNames: + return self.__tokdict[i][-1][0] + else: + return ParseResults([ v[0] for v in self.__tokdict[i] ]) + + def __setitem__( self, k, v ): + if isinstance(v,_ParseResultsWithOffset): + self.__tokdict[k] = self.__tokdict.get(k,list()) + [v] + sub = v[0] + elif isinstance(k,int): + self.__toklist[k] = v + sub = v + else: + self.__tokdict[k] = self.__tokdict.get(k,list()) + [_ParseResultsWithOffset(v,0)] + sub = v + if isinstance(sub,ParseResults): + sub.__parent = wkref(self) + + def __delitem__( self, i ): + if isinstance(i,(int,slice)): + mylen = len( self.__toklist ) + del self.__toklist[i] + + # convert int to slice + if isinstance(i, int): + if i < 0: + i += mylen + i = slice(i, i+1) + # get removed indices + removed = list(range(*i.indices(mylen))) + removed.reverse() + # fixup indices in token dictionary + for name in self.__tokdict: + occurrences = self.__tokdict[name] + for j in removed: + for k, (value, position) in enumerate(occurrences): + occurrences[k] = _ParseResultsWithOffset(value, position - (position > j)) + else: + del self.__tokdict[i] + + def __contains__( self, k ): + return k in self.__tokdict + + def __len__( self ): return len( self.__toklist ) + def __bool__(self): return len( self.__toklist ) > 0 + __nonzero__ = __bool__ + def __iter__( self ): return iter( self.__toklist ) + def __reversed__( self ): return iter( reversed(self.__toklist) ) + def keys( self ): + """Returns all named result keys.""" + return self.__tokdict.keys() + + def pop( self, index=-1 ): + """Removes and returns item at specified index (default=last). + Will work with either numeric indices or dict-key indicies.""" + ret = self[index] + del self[index] + return ret + + def get(self, key, defaultValue=None): + """Returns named result matching the given key, or if there is no + such name, then returns the given defaultValue or None if no + defaultValue is specified.""" + if key in self: + return self[key] + else: + return defaultValue + + def insert( self, index, insStr ): + self.__toklist.insert(index, insStr) + # fixup indices in token dictionary + for name in self.__tokdict: + occurrences = self.__tokdict[name] + for k, (value, position) in enumerate(occurrences): + occurrences[k] = _ParseResultsWithOffset(value, position + (position > j)) + + def items( self ): + """Returns all named result keys and values as a list of tuples.""" + return [(k,self[k]) for k in self.__tokdict] + + def values( self ): + """Returns all named result values.""" + return [ v[-1][0] for v in self.__tokdict.values() ] + + def __getattr__( self, name ): + if name not in self.__slots__: + if name in self.__tokdict: + if name not in self.__accumNames: + return self.__tokdict[name][-1][0] + else: + return ParseResults([ v[0] for v in self.__tokdict[name] ]) + else: + return "" + return None + + def __add__( self, other ): + ret = self.copy() + ret += other + return ret + + def __iadd__( self, other ): + if other.__tokdict: + offset = len(self.__toklist) + addoffset = ( lambda a: (a<0 and offset) or (a+offset) ) + otheritems = other.__tokdict.items() + otherdictitems = [(k, _ParseResultsWithOffset(v[0],addoffset(v[1])) ) + for (k,vlist) in otheritems for v in vlist] + for k,v in otherdictitems: + self[k] = v + if isinstance(v[0],ParseResults): + v[0].__parent = wkref(self) + self.__toklist += other.__toklist + self.__accumNames.update( other.__accumNames ) + del other + return self + + def __repr__( self ): + return "(%s, %s)" % ( repr( self.__toklist ), repr( self.__tokdict ) ) + + def __str__( self ): + out = "[" + sep = "" + for i in self.__toklist: + if isinstance(i, ParseResults): + out += sep + _ustr(i) + else: + out += sep + repr(i) + sep = ", " + out += "]" + return out + + def _asStringList( self, sep='' ): + out = [] + for item in self.__toklist: + if out and sep: + out.append(sep) + if isinstance( item, ParseResults ): + out += item._asStringList() + else: + out.append( _ustr(item) ) + return out + + def asList( self ): + """Returns the parse results as a nested list of matching tokens, all converted to strings.""" + out = [] + for res in self.__toklist: + if isinstance(res,ParseResults): + out.append( res.asList() ) + else: + out.append( res ) + return out + + def asDict( self ): + """Returns the named parse results as dictionary.""" + return dict( self.items() ) + + def copy( self ): + """Returns a new copy of a ParseResults object.""" + ret = ParseResults( self.__toklist ) + ret.__tokdict = self.__tokdict.copy() + ret.__parent = self.__parent + ret.__accumNames.update( self.__accumNames ) + ret.__name = self.__name + return ret + + def asXML( self, doctag=None, namedItemsOnly=False, indent="", formatted=True ): + """Returns the parse results as XML. Tags are created for tokens and lists that have defined results names.""" + nl = "\n" + out = [] + namedItems = dict( [ (v[1],k) for (k,vlist) in self.__tokdict.items() + for v in vlist ] ) + nextLevelIndent = indent + " " + + # collapse out indents if formatting is not desired + if not formatted: + indent = "" + nextLevelIndent = "" + nl = "" + + selfTag = None + if doctag is not None: + selfTag = doctag + else: + if self.__name: + selfTag = self.__name + + if not selfTag: + if namedItemsOnly: + return "" + else: + selfTag = "ITEM" + + out += [ nl, indent, "<", selfTag, ">" ] + + worklist = self.__toklist + for i,res in enumerate(worklist): + if isinstance(res,ParseResults): + if i in namedItems: + out += [ res.asXML(namedItems[i], + namedItemsOnly and doctag is None, + nextLevelIndent, + formatted)] + else: + out += [ res.asXML(None, + namedItemsOnly and doctag is None, + nextLevelIndent, + formatted)] + else: + # individual token, see if there is a name for it + resTag = None + if i in namedItems: + resTag = namedItems[i] + if not resTag: + if namedItemsOnly: + continue + else: + resTag = "ITEM" + xmlBodyText = xml.sax.saxutils.escape(_ustr(res)) + out += [ nl, nextLevelIndent, "<", resTag, ">", + xmlBodyText, + "</", resTag, ">" ] + + out += [ nl, indent, "</", selfTag, ">" ] + return "".join(out) + + def __lookup(self,sub): + for k,vlist in self.__tokdict.items(): + for v,loc in vlist: + if sub is v: + return k + return None + + def getName(self): + """Returns the results name for this token expression.""" + if self.__name: + return self.__name + elif self.__parent: + par = self.__parent() + if par: + return par.__lookup(self) + else: + return None + elif (len(self) == 1 and + len(self.__tokdict) == 1 and + self.__tokdict.values()[0][0][1] in (0,-1)): + return self.__tokdict.keys()[0] + else: + return None + + def dump(self,indent='',depth=0): + """Diagnostic method for listing out the contents of a ParseResults. + Accepts an optional indent argument so that this string can be embedded + in a nested display of other data.""" + out = [] + out.append( indent+_ustr(self.asList()) ) + keys = self.items() + keys.sort() + for k,v in keys: + if out: + out.append('\n') + out.append( "%s%s- %s: " % (indent,(' '*depth), k) ) + if isinstance(v,ParseResults): + if v.keys(): + #~ out.append('\n') + out.append( v.dump(indent,depth+1) ) + #~ out.append('\n') + else: + out.append(_ustr(v)) + else: + out.append(_ustr(v)) + #~ out.append('\n') + return "".join(out) + + # add support for pickle protocol + def __getstate__(self): + return ( self.__toklist, + ( self.__tokdict.copy(), + self.__parent is not None and self.__parent() or None, + self.__accumNames, + self.__name ) ) + + def __setstate__(self,state): + self.__toklist = state[0] + self.__tokdict, \ + par, \ + inAccumNames, \ + self.__name = state[1] + self.__accumNames = {} + self.__accumNames.update(inAccumNames) + if par is not None: + self.__parent = wkref(par) + else: + self.__parent = None + + +def col (loc,strg): + """Returns current column within a string, counting newlines as line separators. + The first column is number 1. + + Note: the default parsing behavior is to expand tabs in the input string + before starting the parsing process. See L{I{ParserElement.parseString}<ParserElement.parseString>} for more information + on parsing strings containing <TAB>s, and suggested methods to maintain a + consistent view of the parsed string, the parse location, and line and column + positions within the parsed string. + """ + return (loc<len(strg) and strg[loc] == '\n') and 1 or loc - strg.rfind("\n", 0, loc) + +def lineno(loc,strg): + """Returns current line number within a string, counting newlines as line separators. + The first line is number 1. + + Note: the default parsing behavior is to expand tabs in the input string + before starting the parsing process. See L{I{ParserElement.parseString}<ParserElement.parseString>} for more information + on parsing strings containing <TAB>s, and suggested methods to maintain a + consistent view of the parsed string, the parse location, and line and column + positions within the parsed string. + """ + return strg.count("\n",0,loc) + 1 + +def line( loc, strg ): + """Returns the line of text containing loc within a string, counting newlines as line separators. + """ + lastCR = strg.rfind("\n", 0, loc) + nextCR = strg.find("\n", loc) + if nextCR > 0: + return strg[lastCR+1:nextCR] + else: + return strg[lastCR+1:] + +def _defaultStartDebugAction( instring, loc, expr ): + print ("Match " + _ustr(expr) + " at loc " + _ustr(loc) + "(%d,%d)" % ( lineno(loc,instring), col(loc,instring) )) + +def _defaultSuccessDebugAction( instring, startloc, endloc, expr, toks ): + print ("Matched " + _ustr(expr) + " -> " + str(toks.asList())) + +def _defaultExceptionDebugAction( instring, loc, expr, exc ): + print ("Exception raised:" + _ustr(exc)) + +def nullDebugAction(*args): + """'Do-nothing' debug action, to suppress debugging output during parsing.""" + pass + +class ParserElement(object): + """Abstract base level parser element class.""" + DEFAULT_WHITE_CHARS = " \n\t\r" + + def setDefaultWhitespaceChars( chars ): + """Overrides the default whitespace chars + """ + ParserElement.DEFAULT_WHITE_CHARS = chars + setDefaultWhitespaceChars = staticmethod(setDefaultWhitespaceChars) + + def __init__( self, savelist=False ): + self.parseAction = list() + self.failAction = None + #~ self.name = "<unknown>" # don't define self.name, let subclasses try/except upcall + self.strRepr = None + self.resultsName = None + self.saveAsList = savelist + self.skipWhitespace = True + self.whiteChars = ParserElement.DEFAULT_WHITE_CHARS + self.copyDefaultWhiteChars = True + self.mayReturnEmpty = False # used when checking for left-recursion + self.keepTabs = False + self.ignoreExprs = list() + self.debug = False + self.streamlined = False + self.mayIndexError = True # used to optimize exception handling for subclasses that don't advance parse index + self.errmsg = "" + self.modalResults = True # used to mark results names as modal (report only last) or cumulative (list all) + self.debugActions = ( None, None, None ) #custom debug actions + self.re = None + self.callPreparse = True # used to avoid redundant calls to preParse + self.callDuringTry = False + + def copy( self ): + """Make a copy of this ParserElement. Useful for defining different parse actions + for the same parsing pattern, using copies of the original parse element.""" + cpy = copy.copy( self ) + cpy.parseAction = self.parseAction[:] + cpy.ignoreExprs = self.ignoreExprs[:] + if self.copyDefaultWhiteChars: + cpy.whiteChars = ParserElement.DEFAULT_WHITE_CHARS + return cpy + + def setName( self, name ): + """Define name for this expression, for use in debugging.""" + self.name = name + self.errmsg = "Expected " + self.name + if hasattr(self,"exception"): + self.exception.msg = self.errmsg + return self + + def setResultsName( self, name, listAllMatches=False ): + """Define name for referencing matching tokens as a nested attribute + of the returned parse results. + NOTE: this returns a *copy* of the original ParserElement object; + this is so that the client can define a basic element, such as an + integer, and reference it in multiple places with different names. + """ + newself = self.copy() + newself.resultsName = name + newself.modalResults = not listAllMatches + return newself + + def setBreak(self,breakFlag = True): + """Method to invoke the Python pdb debugger when this element is + about to be parsed. Set breakFlag to True to enable, False to + disable. + """ + if breakFlag: + _parseMethod = self._parse + def breaker(instring, loc, doActions=True, callPreParse=True): + import pdb + pdb.set_trace() + _parseMethod( instring, loc, doActions, callPreParse ) + breaker._originalParseMethod = _parseMethod + self._parse = breaker + else: + if hasattr(self._parse,"_originalParseMethod"): + self._parse = self._parse._originalParseMethod + return self + + def _normalizeParseActionArgs( f ): + """Internal method used to decorate parse actions that take fewer than 3 arguments, + so that all parse actions can be called as f(s,l,t).""" + STAR_ARGS = 4 + + try: + restore = None + if isinstance(f,type): + restore = f + f = f.__init__ + if not _PY3K: + codeObj = f.func_code + else: + codeObj = f.code + if codeObj.co_flags & STAR_ARGS: + return f + numargs = codeObj.co_argcount + if not _PY3K: + if hasattr(f,"im_self"): + numargs -= 1 + else: + if hasattr(f,"__self__"): + numargs -= 1 + if restore: + f = restore + except AttributeError: + try: + if not _PY3K: + call_im_func_code = f.__call__.im_func.func_code + else: + call_im_func_code = f.__code__ + + # not a function, must be a callable object, get info from the + # im_func binding of its bound __call__ method + if call_im_func_code.co_flags & STAR_ARGS: + return f + numargs = call_im_func_code.co_argcount + if not _PY3K: + if hasattr(f.__call__,"im_self"): + numargs -= 1 + else: + if hasattr(f.__call__,"__self__"): + numargs -= 0 + except AttributeError: + if not _PY3K: + call_func_code = f.__call__.func_code + else: + call_func_code = f.__call__.__code__ + # not a bound method, get info directly from __call__ method + if call_func_code.co_flags & STAR_ARGS: + return f + numargs = call_func_code.co_argcount + if not _PY3K: + if hasattr(f.__call__,"im_self"): + numargs -= 1 + else: + if hasattr(f.__call__,"__self__"): + numargs -= 1 + + + #~ print ("adding function %s with %d args" % (f.func_name,numargs)) + if numargs == 3: + return f + else: + if numargs > 3: + def tmp(s,l,t): + return f(f.__call__.__self__, s,l,t) + if numargs == 2: + def tmp(s,l,t): + return f(l,t) + elif numargs == 1: + def tmp(s,l,t): + return f(t) + else: #~ numargs == 0: + def tmp(s,l,t): + return f() + try: + tmp.__name__ = f.__name__ + except (AttributeError,TypeError): + # no need for special handling if attribute doesnt exist + pass + try: + tmp.__doc__ = f.__doc__ + except (AttributeError,TypeError): + # no need for special handling if attribute doesnt exist + pass + try: + tmp.__dict__.update(f.__dict__) + except (AttributeError,TypeError): + # no need for special handling if attribute doesnt exist + pass + return tmp + _normalizeParseActionArgs = staticmethod(_normalizeParseActionArgs) + + def setParseAction( self, *fns, **kwargs ): + """Define action to perform when successfully matching parse element definition. + Parse action fn is a callable method with 0-3 arguments, called as fn(s,loc,toks), + fn(loc,toks), fn(toks), or just fn(), where: + - s = the original string being parsed (see note below) + - loc = the location of the matching substring + - toks = a list of the matched tokens, packaged as a ParseResults object + If the functions in fns modify the tokens, they can return them as the return + value from fn, and the modified list of tokens will replace the original. + Otherwise, fn does not need to return any value. + + Note: the default parsing behavior is to expand tabs in the input string + before starting the parsing process. See L{I{parseString}<parseString>} for more information + on parsing strings containing <TAB>s, and suggested methods to maintain a + consistent view of the parsed string, the parse location, and line and column + positions within the parsed string. + """ + self.parseAction = list(map(self._normalizeParseActionArgs, list(fns))) + self.callDuringTry = ("callDuringTry" in kwargs and kwargs["callDuringTry"]) + return self + + def addParseAction( self, *fns, **kwargs ): + """Add parse action to expression's list of parse actions. See L{I{setParseAction}<setParseAction>}.""" + self.parseAction += list(map(self._normalizeParseActionArgs, list(fns))) + self.callDuringTry = self.callDuringTry or ("callDuringTry" in kwargs and kwargs["callDuringTry"]) + return self + + def setFailAction( self, fn ): + """Define action to perform if parsing fails at this expression. + Fail acton fn is a callable function that takes the arguments + fn(s,loc,expr,err) where: + - s = string being parsed + - loc = location where expression match was attempted and failed + - expr = the parse expression that failed + - err = the exception thrown + The function returns no value. It may throw ParseFatalException + if it is desired to stop parsing immediately.""" + self.failAction = fn + return self + + def _skipIgnorables( self, instring, loc ): + exprsFound = True + while exprsFound: + exprsFound = False + for e in self.ignoreExprs: + try: + while 1: + loc,dummy = e._parse( instring, loc ) + exprsFound = True + except ParseException: + pass + return loc + + def preParse( self, instring, loc ): + if self.ignoreExprs: + loc = self._skipIgnorables( instring, loc ) + + if self.skipWhitespace: + wt = self.whiteChars + instrlen = len(instring) + while loc < instrlen and instring[loc] in wt: + loc += 1 + + return loc + + def parseImpl( self, instring, loc, doActions=True ): + return loc, [] + + def postParse( self, instring, loc, tokenlist ): + return tokenlist + + #~ @profile + def _parseNoCache( self, instring, loc, doActions=True, callPreParse=True ): + debugging = ( self.debug ) #and doActions ) + + if debugging or self.failAction: + #~ print ("Match",self,"at loc",loc,"(%d,%d)" % ( lineno(loc,instring), col(loc,instring) )) + if (self.debugActions[0] ): + self.debugActions[0]( instring, loc, self ) + if callPreParse and self.callPreparse: + preloc = self.preParse( instring, loc ) + else: + preloc = loc + tokensStart = loc + try: + try: + loc,tokens = self.parseImpl( instring, preloc, doActions ) + except IndexError: + raise ParseException( instring, len(instring), self.errmsg, self ) + except ParseBaseException, err: + #~ print ("Exception raised:", err) + if self.debugActions[2]: + self.debugActions[2]( instring, tokensStart, self, err ) + if self.failAction: + self.failAction( instring, tokensStart, self, err ) + raise + else: + if callPreParse and self.callPreparse: + preloc = self.preParse( instring, loc ) + else: + preloc = loc + tokensStart = loc + if self.mayIndexError or loc >= len(instring): + try: + loc,tokens = self.parseImpl( instring, preloc, doActions ) + except IndexError: + raise ParseException( instring, len(instring), self.errmsg, self ) + else: + loc,tokens = self.parseImpl( instring, preloc, doActions ) + + tokens = self.postParse( instring, loc, tokens ) + + retTokens = ParseResults( tokens, self.resultsName, asList=self.saveAsList, modal=self.modalResults ) + if self.parseAction and (doActions or self.callDuringTry): + if debugging: + try: + for fn in self.parseAction: + tokens = fn( instring, tokensStart, retTokens ) + if tokens is not None: + retTokens = ParseResults( tokens, + self.resultsName, + asList=self.saveAsList and isinstance(tokens,(ParseResults,list)), + modal=self.modalResults ) + except ParseBaseException, err: + #~ print "Exception raised in user parse action:", err + if (self.debugActions[2] ): + self.debugActions[2]( instring, tokensStart, self, err ) + raise + else: + for fn in self.parseAction: + tokens = fn( instring, tokensStart, retTokens ) + if tokens is not None: + retTokens = ParseResults( tokens, + self.resultsName, + asList=self.saveAsList and isinstance(tokens,(ParseResults,list)), + modal=self.modalResults ) + + if debugging: + #~ print ("Matched",self,"->",retTokens.asList()) + if (self.debugActions[1] ): + self.debugActions[1]( instring, tokensStart, loc, self, retTokens ) + + return loc, retTokens + + def tryParse( self, instring, loc ): + try: + return self._parse( instring, loc, doActions=False )[0] + except ParseFatalException: + raise ParseException( instring, loc, self.errmsg, self) + + # this method gets repeatedly called during backtracking with the same arguments - + # we can cache these arguments and save ourselves the trouble of re-parsing the contained expression + def _parseCache( self, instring, loc, doActions=True, callPreParse=True ): + lookup = (self,instring,loc,callPreParse,doActions) + if lookup in ParserElement._exprArgCache: + value = ParserElement._exprArgCache[ lookup ] + if isinstance(value,Exception): + raise value + return value + else: + try: + value = self._parseNoCache( instring, loc, doActions, callPreParse ) + ParserElement._exprArgCache[ lookup ] = (value[0],value[1].copy()) + return value + except ParseBaseException, pe: + ParserElement._exprArgCache[ lookup ] = pe + raise + + _parse = _parseNoCache + + # argument cache for optimizing repeated calls when backtracking through recursive expressions + _exprArgCache = {} + def resetCache(): + ParserElement._exprArgCache.clear() + resetCache = staticmethod(resetCache) + + _packratEnabled = False + def enablePackrat(): + """Enables "packrat" parsing, which adds memoizing to the parsing logic. + Repeated parse attempts at the same string location (which happens + often in many complex grammars) can immediately return a cached value, + instead of re-executing parsing/validating code. Memoizing is done of + both valid results and parsing exceptions. + + This speedup may break existing programs that use parse actions that + have side-effects. For this reason, packrat parsing is disabled when + you first import pyparsing. To activate the packrat feature, your + program must call the class method ParserElement.enablePackrat(). If + your program uses psyco to "compile as you go", you must call + enablePackrat before calling psyco.full(). If you do not do this, + Python will crash. For best results, call enablePackrat() immediately + after importing pyparsing. + """ + if not ParserElement._packratEnabled: + ParserElement._packratEnabled = True + ParserElement._parse = ParserElement._parseCache + enablePackrat = staticmethod(enablePackrat) + + def parseString( self, instring, parseAll=False ): + """Execute the parse expression with the given string. + This is the main interface to the client code, once the complete + expression has been built. + + If you want the grammar to require that the entire input string be + successfully parsed, then set parseAll to True (equivalent to ending + the grammar with StringEnd()). + + Note: parseString implicitly calls expandtabs() on the input string, + in order to report proper column numbers in parse actions. + If the input string contains tabs and + the grammar uses parse actions that use the loc argument to index into the + string being parsed, you can ensure you have a consistent view of the input + string by: + - calling parseWithTabs on your grammar before calling parseString + (see L{I{parseWithTabs}<parseWithTabs>}) + - define your parse action using the full (s,loc,toks) signature, and + reference the input string using the parse action's s argument + - explictly expand the tabs in your input string before calling + parseString + """ + ParserElement.resetCache() + if not self.streamlined: + self.streamline() + #~ self.saveAsList = True + for e in self.ignoreExprs: + e.streamline() + if not self.keepTabs: + instring = instring.expandtabs() + loc, tokens = self._parse( instring, 0 ) + if parseAll: + StringEnd()._parse( instring, loc ) + return tokens + + def scanString( self, instring, maxMatches=_MAX_INT ): + """Scan the input string for expression matches. Each match will return the + matching tokens, start location, and end location. May be called with optional + maxMatches argument, to clip scanning after 'n' matches are found. + + Note that the start and end locations are reported relative to the string + being parsed. See L{I{parseString}<parseString>} for more information on parsing + strings with embedded tabs.""" + if not self.streamlined: + self.streamline() + for e in self.ignoreExprs: + e.streamline() + + if not self.keepTabs: + instring = _ustr(instring).expandtabs() + instrlen = len(instring) + loc = 0 + preparseFn = self.preParse + parseFn = self._parse + ParserElement.resetCache() + matches = 0 + while loc <= instrlen and matches < maxMatches: + try: + preloc = preparseFn( instring, loc ) + nextLoc,tokens = parseFn( instring, preloc, callPreParse=False ) + except ParseException: + loc = preloc+1 + else: + matches += 1 + yield tokens, preloc, nextLoc + loc = nextLoc + + def transformString( self, instring ): + """Extension to scanString, to modify matching text with modified tokens that may + be returned from a parse action. To use transformString, define a grammar and + attach a parse action to it that modifies the returned token list. + Invoking transformString() on a target string will then scan for matches, + and replace the matched text patterns according to the logic in the parse + action. transformString() returns the resulting transformed string.""" + out = [] + lastE = 0 + # force preservation of <TAB>s, to minimize unwanted transformation of string, and to + # keep string locs straight between transformString and scanString + self.keepTabs = True + for t,s,e in self.scanString( instring ): + out.append( instring[lastE:s] ) + if t: + if isinstance(t,ParseResults): + out += t.asList() + elif isinstance(t,list): + out += t + else: + out.append(t) + lastE = e + out.append(instring[lastE:]) + return "".join(map(_ustr,out)) + + def searchString( self, instring, maxMatches=_MAX_INT ): + """Another extension to scanString, simplifying the access to the tokens found + to match the given parse expression. May be called with optional + maxMatches argument, to clip searching after 'n' matches are found. + """ + return ParseResults([ t for t,s,e in self.scanString( instring, maxMatches ) ]) + + def __add__(self, other ): + """Implementation of + operator - returns And""" + if isinstance( other, basestring ): + other = Literal( other ) + if not isinstance( other, ParserElement ): + warnings.warn("Cannot combine element of type %s with ParserElement" % type(other), + SyntaxWarning, stacklevel=2) + return None + return And( [ self, other ] ) + + def __radd__(self, other ): + """Implementation of + operator when left operand is not a ParserElement""" + if isinstance( other, basestring ): + other = Literal( other ) + if not isinstance( other, ParserElement ): + warnings.warn("Cannot combine element of type %s with ParserElement" % type(other), + SyntaxWarning, stacklevel=2) + return None + return other + self + + def __sub__(self, other): + """Implementation of - operator, returns And with error stop""" + if isinstance( other, basestring ): + other = Literal( other ) + if not isinstance( other, ParserElement ): + warnings.warn("Cannot combine element of type %s with ParserElement" % type(other), + SyntaxWarning, stacklevel=2) + return None + return And( [ self, And._ErrorStop(), other ] ) + + def __rsub__(self, other ): + """Implementation of - operator when left operand is not a ParserElement""" + if isinstance( other, basestring ): + other = Literal( other ) + if not isinstance( other, ParserElement ): + warnings.warn("Cannot combine element of type %s with ParserElement" % type(other), + SyntaxWarning, stacklevel=2) + return None + return other - self + + def __mul__(self,other): + if isinstance(other,int): + minElements, optElements = other,0 + elif isinstance(other,tuple): + if len(other)==0: + other = (None,None) + elif len(other)==1: + other = (other[0],None) + if len(other)==2: + if other[0] is None: + other = (0, other[1]) + if isinstance(other[0],int) and other[1] is None: + if other[0] == 0: + return ZeroOrMore(self) + if other[0] == 1: + return OneOrMore(self) + else: + return self*other[0] + ZeroOrMore(self) + elif isinstance(other[0],int) and isinstance(other[1],int): + minElements, optElements = other + optElements -= minElements + else: + raise TypeError("cannot multiply 'ParserElement' and ('%s','%s') objects", type(other[0]),type(other[1])) + else: + raise TypeError("can only multiply 'ParserElement' and int or (int,int) objects") + else: + raise TypeError("cannot multiply 'ParserElement' and '%s' objects", type(other)) + + if minElements < 0: + raise ValueError("cannot multiply ParserElement by negative value") + if optElements < 0: + raise ValueError("second tuple value must be greater or equal to first tuple value") + if minElements == optElements == 0: + raise ValueError("cannot multiply ParserElement by 0 or (0,0)") + + if (optElements): + def makeOptionalList(n): + if n>1: + return Optional(self + makeOptionalList(n-1)) + else: + return Optional(self) + if minElements: + if minElements == 1: + ret = self + makeOptionalList(optElements) + else: + ret = And([self]*minElements) + makeOptionalList(optElements) + else: + ret = makeOptionalList(optElements) + else: + if minElements == 1: + ret = self + else: + ret = And([self]*minElements) + return ret + + def __rmul__(self, other): + return self.__mul__(other) + + def __or__(self, other ): + """Implementation of | operator - returns MatchFirst""" + if isinstance( other, basestring ): + other = Literal( other ) + if not isinstance( other, ParserElement ): + warnings.warn("Cannot combine element of type %s with ParserElement" % type(other), + SyntaxWarning, stacklevel=2) + return None + return MatchFirst( [ self, other ] ) + + def __ror__(self, other ): + """Implementation of | operator when left operand is not a ParserElement""" + if isinstance( other, basestring ): + other = Literal( other ) + if not isinstance( other, ParserElement ): + warnings.warn("Cannot combine element of type %s with ParserElement" % type(other), + SyntaxWarning, stacklevel=2) + return None + return other | self + + def __xor__(self, other ): + """Implementation of ^ operator - returns Or""" + if isinstance( other, basestring ): + other = Literal( other ) + if not isinstance( other, ParserElement ): + warnings.warn("Cannot combine element of type %s with ParserElement" % type(other), + SyntaxWarning, stacklevel=2) + return None + return Or( [ self, other ] ) + + def __rxor__(self, other ): + """Implementation of ^ operator when left operand is not a ParserElement""" + if isinstance( other, basestring ): + other = Literal( other ) + if not isinstance( other, ParserElement ): + warnings.warn("Cannot combine element of type %s with ParserElement" % type(other), + SyntaxWarning, stacklevel=2) + return None + return other ^ self + + def __and__(self, other ): + """Implementation of & operator - returns Each""" + if isinstance( other, basestring ): + other = Literal( other ) + if not isinstance( other, ParserElement ): + warnings.warn("Cannot combine element of type %s with ParserElement" % type(other), + SyntaxWarning, stacklevel=2) + return None + return Each( [ self, other ] ) + + def __rand__(self, other ): + """Implementation of & operator when left operand is not a ParserElement""" + if isinstance( other, basestring ): + other = Literal( other ) + if not isinstance( other, ParserElement ): + warnings.warn("Cannot combine element of type %s with ParserElement" % type(other), + SyntaxWarning, stacklevel=2) + return None + return other & self + + def __invert__( self ): + """Implementation of ~ operator - returns NotAny""" + return NotAny( self ) + + def __call__(self, name): + """Shortcut for setResultsName, with listAllMatches=default:: + userdata = Word(alphas).setResultsName("name") + Word(nums+"-").setResultsName("socsecno") + could be written as:: + userdata = Word(alphas)("name") + Word(nums+"-")("socsecno") + """ + return self.setResultsName(name) + + def suppress( self ): + """Suppresses the output of this ParserElement; useful to keep punctuation from + cluttering up returned output. + """ + return Suppress( self ) + + def leaveWhitespace( self ): + """Disables the skipping of whitespace before matching the characters in the + ParserElement's defined pattern. This is normally only used internally by + the pyparsing module, but may be needed in some whitespace-sensitive grammars. + """ + self.skipWhitespace = False + return self + + def setWhitespaceChars( self, chars ): + """Overrides the default whitespace chars + """ + self.skipWhitespace = True + self.whiteChars = chars + self.copyDefaultWhiteChars = False + return self + + def parseWithTabs( self ): + """Overrides default behavior to expand <TAB>s to spaces before parsing the input string. + Must be called before parseString when the input grammar contains elements that + match <TAB> characters.""" + self.keepTabs = True + return self + + def ignore( self, other ): + """Define expression to be ignored (e.g., comments) while doing pattern + matching; may be called repeatedly, to define multiple comment or other + ignorable patterns. + """ + if isinstance( other, Suppress ): + if other not in self.ignoreExprs: + self.ignoreExprs.append( other ) + else: + self.ignoreExprs.append( Suppress( other ) ) + return self + + def setDebugActions( self, startAction, successAction, exceptionAction ): + """Enable display of debugging messages while doing pattern matching.""" + self.debugActions = (startAction or _defaultStartDebugAction, + successAction or _defaultSuccessDebugAction, + exceptionAction or _defaultExceptionDebugAction) + self.debug = True + return self + + def setDebug( self, flag=True ): + """Enable display of debugging messages while doing pattern matching. + Set flag to True to enable, False to disable.""" + if flag: + self.setDebugActions( _defaultStartDebugAction, _defaultSuccessDebugAction, _defaultExceptionDebugAction ) + else: + self.debug = False + return self + + def __str__( self ): + return self.name + + def __repr__( self ): + return _ustr(self) + + def streamline( self ): + self.streamlined = True + self.strRepr = None + return self + + def checkRecursion( self, parseElementList ): + pass + + def validate( self, validateTrace=[] ): + """Check defined expressions for valid structure, check for infinite recursive definitions.""" + self.checkRecursion( [] ) + + def parseFile( self, file_or_filename ): + """Execute the parse expression on the given file or filename. + If a filename is specified (instead of a file object), + the entire file is opened, read, and closed before parsing. + """ + try: + file_contents = file_or_filename.read() + except AttributeError: + f = open(file_or_filename, "rb") + file_contents = f.read() + f.close() + return self.parseString(file_contents) + + def getException(self): + return ParseException("",0,self.errmsg,self) + + def __getattr__(self,aname): + if aname == "myException": + self.myException = ret = self.getException(); + return ret; + else: + raise AttributeError("no such attribute " + aname) + + def __eq__(self,other): + if isinstance(other, basestring): + try: + (self + StringEnd()).parseString(_ustr(other)) + return True + except ParseBaseException: + return False + else: + return super(ParserElement,self)==other + + def __hash__(self): + return hash(id(self)) + + def __req__(self,other): + return self == other + + +class Token(ParserElement): + """Abstract ParserElement subclass, for defining atomic matching patterns.""" + def __init__( self ): + super(Token,self).__init__( savelist=False ) + #self.myException = ParseException("",0,"",self) + + def setName(self, name): + s = super(Token,self).setName(name) + self.errmsg = "Expected " + self.name + #s.myException.msg = self.errmsg + return s + + +class Empty(Token): + """An empty token, will always match.""" + def __init__( self ): + super(Empty,self).__init__() + self.name = "Empty" + self.mayReturnEmpty = True + self.mayIndexError = False + + +class NoMatch(Token): + """A token that will never match.""" + def __init__( self ): + super(NoMatch,self).__init__() + self.name = "NoMatch" + self.mayReturnEmpty = True + self.mayIndexError = False + self.errmsg = "Unmatchable token" + #self.myException.msg = self.errmsg + + def parseImpl( self, instring, loc, doActions=True ): + exc = self.myException + exc.loc = loc + exc.pstr = instring + raise exc + + +class Literal(Token): + """Token to exactly match a specified string.""" + def __init__( self, matchString ): + super(Literal,self).__init__() + self.match = matchString + self.matchLen = len(matchString) + try: + self.firstMatchChar = matchString[0] + except IndexError: + warnings.warn("null string passed to Literal; use Empty() instead", + SyntaxWarning, stacklevel=2) + self.__class__ = Empty + self.name = '"%s"' % _ustr(self.match) + self.errmsg = "Expected " + self.name + self.mayReturnEmpty = False + #self.myException.msg = self.errmsg + self.mayIndexError = False + + # Performance tuning: this routine gets called a *lot* + # if this is a single character match string and the first character matches, + # short-circuit as quickly as possible, and avoid calling startswith + #~ @profile + def parseImpl( self, instring, loc, doActions=True ): + if (instring[loc] == self.firstMatchChar and + (self.matchLen==1 or instring.startswith(self.match,loc)) ): + return loc+self.matchLen, self.match + #~ raise ParseException( instring, loc, self.errmsg ) + exc = self.myException + exc.loc = loc + exc.pstr = instring + raise exc +_L = Literal + +class Keyword(Token): + """Token to exactly match a specified string as a keyword, that is, it must be + immediately followed by a non-keyword character. Compare with Literal:: + Literal("if") will match the leading 'if' in 'ifAndOnlyIf'. + Keyword("if") will not; it will only match the leading 'if in 'if x=1', or 'if(y==2)' + Accepts two optional constructor arguments in addition to the keyword string: + identChars is a string of characters that would be valid identifier characters, + defaulting to all alphanumerics + "_" and "$"; caseless allows case-insensitive + matching, default is False. + """ + DEFAULT_KEYWORD_CHARS = alphanums+"_$" + + def __init__( self, matchString, identChars=DEFAULT_KEYWORD_CHARS, caseless=False ): + super(Keyword,self).__init__() + self.match = matchString + self.matchLen = len(matchString) + try: + self.firstMatchChar = matchString[0] + except IndexError: + warnings.warn("null string passed to Keyword; use Empty() instead", + SyntaxWarning, stacklevel=2) + self.name = '"%s"' % self.match + self.errmsg = "Expected " + self.name + self.mayReturnEmpty = False + #self.myException.msg = self.errmsg + self.mayIndexError = False + self.caseless = caseless + if caseless: + self.caselessmatch = matchString.upper() + identChars = identChars.upper() + self.identChars = _str2dict(identChars) + + def parseImpl( self, instring, loc, doActions=True ): + if self.caseless: + if ( (instring[ loc:loc+self.matchLen ].upper() == self.caselessmatch) and + (loc >= len(instring)-self.matchLen or instring[loc+self.matchLen].upper() not in self.identChars) and + (loc == 0 or instring[loc-1].upper() not in self.identChars) ): + return loc+self.matchLen, self.match + else: + if (instring[loc] == self.firstMatchChar and + (self.matchLen==1 or instring.startswith(self.match,loc)) and + (loc >= len(instring)-self.matchLen or instring[loc+self.matchLen] not in self.identChars) and + (loc == 0 or instring[loc-1] not in self.identChars) ): + return loc+self.matchLen, self.match + #~ raise ParseException( instring, loc, self.errmsg ) + exc = self.myException + exc.loc = loc + exc.pstr = instring + raise exc + + def copy(self): + c = super(Keyword,self).copy() + c.identChars = Keyword.DEFAULT_KEYWORD_CHARS + return c + + def setDefaultKeywordChars( chars ): + """Overrides the default Keyword chars + """ + Keyword.DEFAULT_KEYWORD_CHARS = chars + setDefaultKeywordChars = staticmethod(setDefaultKeywordChars) + + +class CaselessLiteral(Literal): + """Token to match a specified string, ignoring case of letters. + Note: the matched results will always be in the case of the given + match string, NOT the case of the input text. + """ + def __init__( self, matchString ): + super(CaselessLiteral,self).__init__( matchString.upper() ) + # Preserve the defining literal. + self.returnString = matchString + self.name = "'%s'" % self.returnString + self.errmsg = "Expected " + self.name + #self.myException.msg = self.errmsg + + def parseImpl( self, instring, loc, doActions=True ): + if instring[ loc:loc+self.matchLen ].upper() == self.match: + return loc+self.matchLen, self.returnString + #~ raise ParseException( instring, loc, self.errmsg ) + exc = self.myException + exc.loc = loc + exc.pstr = instring + raise exc + +class CaselessKeyword(Keyword): + def __init__( self, matchString, identChars=Keyword.DEFAULT_KEYWORD_CHARS ): + super(CaselessKeyword,self).__init__( matchString, identChars, caseless=True ) + + def parseImpl( self, instring, loc, doActions=True ): + if ( (instring[ loc:loc+self.matchLen ].upper() == self.caselessmatch) and + (loc >= len(instring)-self.matchLen or instring[loc+self.matchLen].upper() not in self.identChars) ): + return loc+self.matchLen, self.match + #~ raise ParseException( instring, loc, self.errmsg ) + exc = self.myException + exc.loc = loc + exc.pstr = instring + raise exc + +class Word(Token): + """Token for matching words composed of allowed character sets. + Defined with string containing all allowed initial characters, + an optional string containing allowed body characters (if omitted, + defaults to the initial character set), and an optional minimum, + maximum, and/or exact length. The default value for min is 1 (a + minimum value < 1 is not valid); the default values for max and exact + are 0, meaning no maximum or exact length restriction. + """ + def __init__( self, initChars, bodyChars=None, min=1, max=0, exact=0, asKeyword=False ): + super(Word,self).__init__() + self.initCharsOrig = initChars + self.initChars = _str2dict(initChars) + if bodyChars : + self.bodyCharsOrig = bodyChars + self.bodyChars = _str2dict(bodyChars) + else: + self.bodyCharsOrig = initChars + self.bodyChars = _str2dict(initChars) + + self.maxSpecified = max > 0 + + if min < 1: + raise ValueError("cannot specify a minimum length < 1; use Optional(Word()) if zero-length word is permitted") + + self.minLen = min + + if max > 0: + self.maxLen = max + else: + self.maxLen = _MAX_INT + + if exact > 0: + self.maxLen = exact + self.minLen = exact + + self.name = _ustr(self) + self.errmsg = "Expected " + self.name + #self.myException.msg = self.errmsg + self.mayIndexError = False + self.asKeyword = asKeyword + + if ' ' not in self.initCharsOrig+self.bodyCharsOrig and (min==1 and max==0 and exact==0): + if self.bodyCharsOrig == self.initCharsOrig: + self.reString = "[%s]+" % _escapeRegexRangeChars(self.initCharsOrig) + elif len(self.bodyCharsOrig) == 1: + self.reString = "%s[%s]*" % \ + (re.escape(self.initCharsOrig), + _escapeRegexRangeChars(self.bodyCharsOrig),) + else: + self.reString = "[%s][%s]*" % \ + (_escapeRegexRangeChars(self.initCharsOrig), + _escapeRegexRangeChars(self.bodyCharsOrig),) + if self.asKeyword: + self.reString = r"\b"+self.reString+r"\b" + try: + self.re = re.compile( self.reString ) + except: + self.re = None + + def parseImpl( self, instring, loc, doActions=True ): + if self.re: + result = self.re.match(instring,loc) + if not result: + exc = self.myException + exc.loc = loc + exc.pstr = instring + raise exc + + loc = result.end() + return loc,result.group() + + if not(instring[ loc ] in self.initChars): + #~ raise ParseException( instring, loc, self.errmsg ) + exc = self.myException + exc.loc = loc + exc.pstr = instring + raise exc + start = loc + loc += 1 + instrlen = len(instring) + bodychars = self.bodyChars + maxloc = start + self.maxLen + maxloc = min( maxloc, instrlen ) + while loc < maxloc and instring[loc] in bodychars: + loc += 1 + + throwException = False + if loc - start < self.minLen: + throwException = True + if self.maxSpecified and loc < instrlen and instring[loc] in bodychars: + throwException = True + if self.asKeyword: + if (start>0 and instring[start-1] in bodychars) or (loc<instrlen and instring[loc] in bodychars): + throwException = True + + if throwException: + #~ raise ParseException( instring, loc, self.errmsg ) + exc = self.myException + exc.loc = loc + exc.pstr = instring + raise exc + + return loc, instring[start:loc] + + def __str__( self ): + try: + return super(Word,self).__str__() + except: + pass + + + if self.strRepr is None: + + def charsAsStr(s): + if len(s)>4: + return s[:4]+"..." + else: + return s + + if ( self.initCharsOrig != self.bodyCharsOrig ): + self.strRepr = "W:(%s,%s)" % ( charsAsStr(self.initCharsOrig), charsAsStr(self.bodyCharsOrig) ) + else: + self.strRepr = "W:(%s)" % charsAsStr(self.initCharsOrig) + + return self.strRepr + + +class Regex(Token): + """Token for matching strings that match a given regular expression. + Defined with string specifying the regular expression in a form recognized by the inbuilt Python re module. + """ + def __init__( self, pattern, flags=0): + """The parameters pattern and flags are passed to the re.compile() function as-is. See the Python re module for an explanation of the acceptable patterns and flags.""" + super(Regex,self).__init__() + + if len(pattern) == 0: + warnings.warn("null string passed to Regex; use Empty() instead", + SyntaxWarning, stacklevel=2) + + self.pattern = pattern + self.flags = flags + + try: + self.re = re.compile(self.pattern, self.flags) + self.reString = self.pattern + except sre_constants.error: + warnings.warn("invalid pattern (%s) passed to Regex" % pattern, + SyntaxWarning, stacklevel=2) + raise + + self.name = _ustr(self) + self.errmsg = "Expected " + self.name + #self.myException.msg = self.errmsg + self.mayIndexError = False + self.mayReturnEmpty = True + + def parseImpl( self, instring, loc, doActions=True ): + result = self.re.match(instring,loc) + if not result: + exc = self.myException + exc.loc = loc + exc.pstr = instring + raise exc + + loc = result.end() + d = result.groupdict() + ret = ParseResults(result.group()) + if d: + for k in d: + ret[k] = d[k] + return loc,ret + + def __str__( self ): + try: + return super(Regex,self).__str__() + except: + pass + + if self.strRepr is None: + self.strRepr = "Re:(%s)" % repr(self.pattern) + + return self.strRepr + + +class QuotedString(Token): + """Token for matching strings that are delimited by quoting characters. + """ + def __init__( self, quoteChar, escChar=None, escQuote=None, multiline=False, unquoteResults=True, endQuoteChar=None): + """ + Defined with the following parameters: + - quoteChar - string of one or more characters defining the quote delimiting string + - escChar - character to escape quotes, typically backslash (default=None) + - escQuote - special quote sequence to escape an embedded quote string (such as SQL's "" to escape an embedded ") (default=None) + - multiline - boolean indicating whether quotes can span multiple lines (default=False) + - unquoteResults - boolean indicating whether the matched text should be unquoted (default=True) + - endQuoteChar - string of one or more characters defining the end of the quote delimited string (default=None => same as quoteChar) + """ + super(QuotedString,self).__init__() + + # remove white space from quote chars - wont work anyway + quoteChar = quoteChar.strip() + if len(quoteChar) == 0: + warnings.warn("quoteChar cannot be the empty string",SyntaxWarning,stacklevel=2) + raise SyntaxError() + + if endQuoteChar is None: + endQuoteChar = quoteChar + else: + endQuoteChar = endQuoteChar.strip() + if len(endQuoteChar) == 0: + warnings.warn("endQuoteChar cannot be the empty string",SyntaxWarning,stacklevel=2) + raise SyntaxError() + + self.quoteChar = quoteChar + self.quoteCharLen = len(quoteChar) + self.firstQuoteChar = quoteChar[0] + self.endQuoteChar = endQuoteChar + self.endQuoteCharLen = len(endQuoteChar) + self.escChar = escChar + self.escQuote = escQuote + self.unquoteResults = unquoteResults + + if multiline: + self.flags = re.MULTILINE | re.DOTALL + self.pattern = r'%s(?:[^%s%s]' % \ + ( re.escape(self.quoteChar), + _escapeRegexRangeChars(self.endQuoteChar[0]), + (escChar is not None and _escapeRegexRangeChars(escChar) or '') ) + else: + self.flags = 0 + self.pattern = r'%s(?:[^%s\n\r%s]' % \ + ( re.escape(self.quoteChar), + _escapeRegexRangeChars(self.endQuoteChar[0]), + (escChar is not None and _escapeRegexRangeChars(escChar) or '') ) + if len(self.endQuoteChar) > 1: + self.pattern += ( + '|(?:' + ')|(?:'.join(["%s[^%s]" % (re.escape(self.endQuoteChar[:i]), + _escapeRegexRangeChars(self.endQuoteChar[i])) + for i in range(len(self.endQuoteChar)-1,0,-1)]) + ')' + ) + if escQuote: + self.pattern += (r'|(?:%s)' % re.escape(escQuote)) + if escChar: + self.pattern += (r'|(?:%s.)' % re.escape(escChar)) + self.escCharReplacePattern = re.escape(self.escChar)+"(.)" + self.pattern += (r')*%s' % re.escape(self.endQuoteChar)) + + try: + self.re = re.compile(self.pattern, self.flags) + self.reString = self.pattern + except sre_constants.error: + warnings.warn("invalid pattern (%s) passed to Regex" % self.pattern, + SyntaxWarning, stacklevel=2) + raise + + self.name = _ustr(self) + self.errmsg = "Expected " + self.name + #self.myException.msg = self.errmsg + self.mayIndexError = False + self.mayReturnEmpty = True + + def parseImpl( self, instring, loc, doActions=True ): + result = instring[loc] == self.firstQuoteChar and self.re.match(instring,loc) or None + if not result: + exc = self.myException + exc.loc = loc + exc.pstr = instring + raise exc + + loc = result.end() + ret = result.group() + + if self.unquoteResults: + + # strip off quotes + ret = ret[self.quoteCharLen:-self.endQuoteCharLen] + + if isinstance(ret,basestring): + # replace escaped characters + if self.escChar: + ret = re.sub(self.escCharReplacePattern,"\g<1>",ret) + + # replace escaped quotes + if self.escQuote: + ret = ret.replace(self.escQuote, self.endQuoteChar) + + return loc, ret + + def __str__( self ): + try: + return super(QuotedString,self).__str__() + except: + pass + + if self.strRepr is None: + self.strRepr = "quoted string, starting with %s ending with %s" % (self.quoteChar, self.endQuoteChar) + + return self.strRepr + + +class CharsNotIn(Token): + """Token for matching words composed of characters *not* in a given set. + Defined with string containing all disallowed characters, and an optional + minimum, maximum, and/or exact length. The default value for min is 1 (a + minimum value < 1 is not valid); the default values for max and exact + are 0, meaning no maximum or exact length restriction. + """ + def __init__( self, notChars, min=1, max=0, exact=0 ): + super(CharsNotIn,self).__init__() + self.skipWhitespace = False + self.notChars = notChars + + if min < 1: + raise ValueError("cannot specify a minimum length < 1; use Optional(CharsNotIn()) if zero-length char group is permitted") + + self.minLen = min + + if max > 0: + self.maxLen = max + else: + self.maxLen = _MAX_INT + + if exact > 0: + self.maxLen = exact + self.minLen = exact + + self.name = _ustr(self) + self.errmsg = "Expected " + self.name + self.mayReturnEmpty = ( self.minLen == 0 ) + #self.myException.msg = self.errmsg + self.mayIndexError = False + + def parseImpl( self, instring, loc, doActions=True ): + if instring[loc] in self.notChars: + #~ raise ParseException( instring, loc, self.errmsg ) + exc = self.myException + exc.loc = loc + exc.pstr = instring + raise exc + + start = loc + loc += 1 + notchars = self.notChars + maxlen = min( start+self.maxLen, len(instring) ) + while loc < maxlen and \ + (instring[loc] not in notchars): + loc += 1 + + if loc - start < self.minLen: + #~ raise ParseException( instring, loc, self.errmsg ) + exc = self.myException + exc.loc = loc + exc.pstr = instring + raise exc + + return loc, instring[start:loc] + + def __str__( self ): + try: + return super(CharsNotIn, self).__str__() + except: + pass + + if self.strRepr is None: + if len(self.notChars) > 4: + self.strRepr = "!W:(%s...)" % self.notChars[:4] + else: + self.strRepr = "!W:(%s)" % self.notChars + + return self.strRepr + +class White(Token): + """Special matching class for matching whitespace. Normally, whitespace is ignored + by pyparsing grammars. This class is included when some whitespace structures + are significant. Define with a string containing the whitespace characters to be + matched; default is " \\t\\n". Also takes optional min, max, and exact arguments, + as defined for the Word class.""" + whiteStrs = { + " " : "<SPC>", + "\t": "<TAB>", + "\n": "<LF>", + "\r": "<CR>", + "\f": "<FF>", + } + def __init__(self, ws=" \t\r\n", min=1, max=0, exact=0): + super(White,self).__init__() + self.matchWhite = ws + self.setWhitespaceChars( "".join([c for c in self.whiteChars if c not in self.matchWhite]) ) + #~ self.leaveWhitespace() + self.name = ("".join([White.whiteStrs[c] for c in self.matchWhite])) + self.mayReturnEmpty = True + self.errmsg = "Expected " + self.name + #self.myException.msg = self.errmsg + + self.minLen = min + + if max > 0: + self.maxLen = max + else: + self.maxLen = _MAX_INT + + if exact > 0: + self.maxLen = exact + self.minLen = exact + + def parseImpl( self, instring, loc, doActions=True ): + if not(instring[ loc ] in self.matchWhite): + #~ raise ParseException( instring, loc, self.errmsg ) + exc = self.myException + exc.loc = loc + exc.pstr = instring + raise exc + start = loc + loc += 1 + maxloc = start + self.maxLen + maxloc = min( maxloc, len(instring) ) + while loc < maxloc and instring[loc] in self.matchWhite: + loc += 1 + + if loc - start < self.minLen: + #~ raise ParseException( instring, loc, self.errmsg ) + exc = self.myException + exc.loc = loc + exc.pstr = instring + raise exc + + return loc, instring[start:loc] + + +class _PositionToken(Token): + def __init__( self ): + super(_PositionToken,self).__init__() + self.name=self.__class__.__name__ + self.mayReturnEmpty = True + self.mayIndexError = False + +class GoToColumn(_PositionToken): + """Token to advance to a specific column of input text; useful for tabular report scraping.""" + def __init__( self, colno ): + super(GoToColumn,self).__init__() + self.col = colno + + def preParse( self, instring, loc ): + if col(loc,instring) != self.col: + instrlen = len(instring) + if self.ignoreExprs: + loc = self._skipIgnorables( instring, loc ) + while loc < instrlen and instring[loc].isspace() and col( loc, instring ) != self.col : + loc += 1 + return loc + + def parseImpl( self, instring, loc, doActions=True ): + thiscol = col( loc, instring ) + if thiscol > self.col: + raise ParseException( instring, loc, "Text not in expected column", self ) + newloc = loc + self.col - thiscol + ret = instring[ loc: newloc ] + return newloc, ret + +class LineStart(_PositionToken): + """Matches if current position is at the beginning of a line within the parse string""" + def __init__( self ): + super(LineStart,self).__init__() + self.setWhitespaceChars( " \t" ) + self.errmsg = "Expected start of line" + #self.myException.msg = self.errmsg + + def preParse( self, instring, loc ): + preloc = super(LineStart,self).preParse(instring,loc) + if instring[preloc] == "\n": + loc += 1 + return loc + + def parseImpl( self, instring, loc, doActions=True ): + if not( loc==0 or + (loc == self.preParse( instring, 0 )) or + (instring[loc-1] == "\n") ): #col(loc, instring) != 1: + #~ raise ParseException( instring, loc, "Expected start of line" ) + exc = self.myException + exc.loc = loc + exc.pstr = instring + raise exc + return loc, [] + +class LineEnd(_PositionToken): + """Matches if current position is at the end of a line within the parse string""" + def __init__( self ): + super(LineEnd,self).__init__() + self.setWhitespaceChars( " \t" ) + self.errmsg = "Expected end of line" + #self.myException.msg = self.errmsg + + def parseImpl( self, instring, loc, doActions=True ): + if loc<len(instring): + if instring[loc] == "\n": + return loc+1, "\n" + else: + #~ raise ParseException( instring, loc, "Expected end of line" ) + exc = self.myException + exc.loc = loc + exc.pstr = instring + raise exc + elif loc == len(instring): + return loc+1, [] + else: + exc = self.myException + exc.loc = loc + exc.pstr = instring + raise exc + +class StringStart(_PositionToken): + """Matches if current position is at the beginning of the parse string""" + def __init__( self ): + super(StringStart,self).__init__() + self.errmsg = "Expected start of text" + #self.myException.msg = self.errmsg + + def parseImpl( self, instring, loc, doActions=True ): + if loc != 0: + # see if entire string up to here is just whitespace and ignoreables + if loc != self.preParse( instring, 0 ): + #~ raise ParseException( instring, loc, "Expected start of text" ) + exc = self.myException + exc.loc = loc + exc.pstr = instring + raise exc + return loc, [] + +class StringEnd(_PositionToken): + """Matches if current position is at the end of the parse string""" + def __init__( self ): + super(StringEnd,self).__init__() + self.errmsg = "Expected end of text" + #self.myException.msg = self.errmsg + + def parseImpl( self, instring, loc, doActions=True ): + if loc < len(instring): + #~ raise ParseException( instring, loc, "Expected end of text" ) + exc = self.myException + exc.loc = loc + exc.pstr = instring + raise exc + elif loc == len(instring): + return loc+1, [] + elif loc > len(instring): + return loc, [] + else: + exc = self.myException + exc.loc = loc + exc.pstr = instring + raise exc + +class WordStart(_PositionToken): + """Matches if the current position is at the beginning of a Word, and + is not preceded by any character in a given set of wordChars + (default=printables). To emulate the \b behavior of regular expressions, + use WordStart(alphanums). WordStart will also match at the beginning of + the string being parsed, or at the beginning of a line. + """ + def __init__(self, wordChars = printables): + super(WordStart,self).__init__() + self.wordChars = _str2dict(wordChars) + self.errmsg = "Not at the start of a word" + + def parseImpl(self, instring, loc, doActions=True ): + if loc != 0: + if (instring[loc-1] in self.wordChars or + instring[loc] not in self.wordChars): + exc = self.myException + exc.loc = loc + exc.pstr = instring + raise exc + return loc, [] + +class WordEnd(_PositionToken): + """Matches if the current position is at the end of a Word, and + is not followed by any character in a given set of wordChars + (default=printables). To emulate the \b behavior of regular expressions, + use WordEnd(alphanums). WordEnd will also match at the end of + the string being parsed, or at the end of a line. + """ + def __init__(self, wordChars = printables): + super(WordEnd,self).__init__() + self.wordChars = _str2dict(wordChars) + self.skipWhitespace = False + self.errmsg = "Not at the end of a word" + + def parseImpl(self, instring, loc, doActions=True ): + instrlen = len(instring) + if instrlen>0 and loc<instrlen: + if (instring[loc] in self.wordChars or + instring[loc-1] not in self.wordChars): + #~ raise ParseException( instring, loc, "Expected end of word" ) + exc = self.myException + exc.loc = loc + exc.pstr = instring + raise exc + return loc, [] + + +class ParseExpression(ParserElement): + """Abstract subclass of ParserElement, for combining and post-processing parsed tokens.""" + def __init__( self, exprs, savelist = False ): + super(ParseExpression,self).__init__(savelist) + if isinstance( exprs, list ): + self.exprs = exprs + elif isinstance( exprs, basestring ): + self.exprs = [ Literal( exprs ) ] + else: + self.exprs = [ exprs ] + self.callPreparse = False + + def __getitem__( self, i ): + return self.exprs[i] + + def append( self, other ): + self.exprs.append( other ) + self.strRepr = None + return self + + def leaveWhitespace( self ): + """Extends leaveWhitespace defined in base class, and also invokes leaveWhitespace on + all contained expressions.""" + self.skipWhitespace = False + self.exprs = [ e.copy() for e in self.exprs ] + for e in self.exprs: + e.leaveWhitespace() + return self + + def ignore( self, other ): + if isinstance( other, Suppress ): + if other not in self.ignoreExprs: + super( ParseExpression, self).ignore( other ) + for e in self.exprs: + e.ignore( self.ignoreExprs[-1] ) + else: + super( ParseExpression, self).ignore( other ) + for e in self.exprs: + e.ignore( self.ignoreExprs[-1] ) + return self + + def __str__( self ): + try: + return super(ParseExpression,self).__str__() + except: + pass + + if self.strRepr is None: + self.strRepr = "%s:(%s)" % ( self.__class__.__name__, _ustr(self.exprs) ) + return self.strRepr + + def streamline( self ): + super(ParseExpression,self).streamline() + + for e in self.exprs: + e.streamline() + + # collapse nested And's of the form And( And( And( a,b), c), d) to And( a,b,c,d ) + # but only if there are no parse actions or resultsNames on the nested And's + # (likewise for Or's and MatchFirst's) + if ( len(self.exprs) == 2 ): + other = self.exprs[0] + if ( isinstance( other, self.__class__ ) and + not(other.parseAction) and + other.resultsName is None and + not other.debug ): + self.exprs = other.exprs[:] + [ self.exprs[1] ] + self.strRepr = None + self.mayReturnEmpty |= other.mayReturnEmpty + self.mayIndexError |= other.mayIndexError + + other = self.exprs[-1] + if ( isinstance( other, self.__class__ ) and + not(other.parseAction) and + other.resultsName is None and + not other.debug ): + self.exprs = self.exprs[:-1] + other.exprs[:] + self.strRepr = None + self.mayReturnEmpty |= other.mayReturnEmpty + self.mayIndexError |= other.mayIndexError + + return self + + def setResultsName( self, name, listAllMatches=False ): + ret = super(ParseExpression,self).setResultsName(name,listAllMatches) + return ret + + def validate( self, validateTrace=[] ): + tmp = validateTrace[:]+[self] + for e in self.exprs: + e.validate(tmp) + self.checkRecursion( [] ) + +class And(ParseExpression): + """Requires all given ParseExpressions to be found in the given order. + Expressions may be separated by whitespace. + May be constructed using the '+' operator. + """ + + class _ErrorStop(Empty): + def __new__(cls,*args,**kwargs): + return And._ErrorStop.instance + _ErrorStop.instance = Empty() + _ErrorStop.instance.leaveWhitespace() + + def __init__( self, exprs, savelist = True ): + super(And,self).__init__(exprs, savelist) + self.mayReturnEmpty = True + for e in self.exprs: + if not e.mayReturnEmpty: + self.mayReturnEmpty = False + break + self.setWhitespaceChars( exprs[0].whiteChars ) + self.skipWhitespace = exprs[0].skipWhitespace + self.callPreparse = True + + def parseImpl( self, instring, loc, doActions=True ): + # pass False as last arg to _parse for first element, since we already + # pre-parsed the string as part of our And pre-parsing + loc, resultlist = self.exprs[0]._parse( instring, loc, doActions, callPreParse=False ) + errorStop = False + for e in self.exprs[1:]: + if e is And._ErrorStop.instance: + errorStop = True + continue + if errorStop: + try: + loc, exprtokens = e._parse( instring, loc, doActions ) + except ParseBaseException, pe: + raise ParseSyntaxException(pe) + except IndexError, ie: + raise ParseSyntaxException( ParseException(instring, len(instring), self.errmsg, self) ) + else: + loc, exprtokens = e._parse( instring, loc, doActions ) + if exprtokens or exprtokens.keys(): + resultlist += exprtokens + return loc, resultlist + + def __iadd__(self, other ): + if isinstance( other, basestring ): + other = Literal( other ) + return self.append( other ) #And( [ self, other ] ) + + def checkRecursion( self, parseElementList ): + subRecCheckList = parseElementList[:] + [ self ] + for e in self.exprs: + e.checkRecursion( subRecCheckList ) + if not e.mayReturnEmpty: + break + + def __str__( self ): + if hasattr(self,"name"): + return self.name + + if self.strRepr is None: + self.strRepr = "{" + " ".join( [ _ustr(e) for e in self.exprs ] ) + "}" + + return self.strRepr + + +class Or(ParseExpression): + """Requires that at least one ParseExpression is found. + If two expressions match, the expression that matches the longest string will be used. + May be constructed using the '^' operator. + """ + def __init__( self, exprs, savelist = False ): + super(Or,self).__init__(exprs, savelist) + self.mayReturnEmpty = False + for e in self.exprs: + if e.mayReturnEmpty: + self.mayReturnEmpty = True + break + + def parseImpl( self, instring, loc, doActions=True ): + maxExcLoc = -1 + maxMatchLoc = -1 + maxException = None + for e in self.exprs: + try: + loc2 = e.tryParse( instring, loc ) + except ParseException, err: + if err.loc > maxExcLoc: + maxException = err + maxExcLoc = err.loc + except IndexError: + if len(instring) > maxExcLoc: + maxException = ParseException(instring,len(instring),e.errmsg,self) + maxExcLoc = len(instring) + else: + if loc2 > maxMatchLoc: + maxMatchLoc = loc2 + maxMatchExp = e + + if maxMatchLoc < 0: + if maxException is not None: + raise maxException + else: + raise ParseException(instring, loc, "no defined alternatives to match", self) + + return maxMatchExp._parse( instring, loc, doActions ) + + def __ixor__(self, other ): + if isinstance( other, basestring ): + other = Literal( other ) + return self.append( other ) #Or( [ self, other ] ) + + def __str__( self ): + if hasattr(self,"name"): + return self.name + + if self.strRepr is None: + self.strRepr = "{" + " ^ ".join( [ _ustr(e) for e in self.exprs ] ) + "}" + + return self.strRepr + + def checkRecursion( self, parseElementList ): + subRecCheckList = parseElementList[:] + [ self ] + for e in self.exprs: + e.checkRecursion( subRecCheckList ) + + +class MatchFirst(ParseExpression): + """Requires that at least one ParseExpression is found. + If two expressions match, the first one listed is the one that will match. + May be constructed using the '|' operator. + """ + def __init__( self, exprs, savelist = False ): + super(MatchFirst,self).__init__(exprs, savelist) + if exprs: + self.mayReturnEmpty = False + for e in self.exprs: + if e.mayReturnEmpty: + self.mayReturnEmpty = True + break + else: + self.mayReturnEmpty = True + + def parseImpl( self, instring, loc, doActions=True ): + maxExcLoc = -1 + maxException = None + for e in self.exprs: + try: + ret = e._parse( instring, loc, doActions ) + return ret + except ParseException, err: + if err.loc > maxExcLoc: + maxException = err + maxExcLoc = err.loc + except IndexError: + if len(instring) > maxExcLoc: + maxException = ParseException(instring,len(instring),e.errmsg,self) + maxExcLoc = len(instring) + + # only got here if no expression matched, raise exception for match that made it the furthest + else: + if maxException is not None: + raise maxException + else: + raise ParseException(instring, loc, "no defined alternatives to match", self) + + def __ior__(self, other ): + if isinstance( other, basestring ): + other = Literal( other ) + return self.append( other ) #MatchFirst( [ self, other ] ) + + def __str__( self ): + if hasattr(self,"name"): + return self.name + + if self.strRepr is None: + self.strRepr = "{" + " | ".join( [ _ustr(e) for e in self.exprs ] ) + "}" + + return self.strRepr + + def checkRecursion( self, parseElementList ): + subRecCheckList = parseElementList[:] + [ self ] + for e in self.exprs: + e.checkRecursion( subRecCheckList ) + + +class Each(ParseExpression): + """Requires all given ParseExpressions to be found, but in any order. + Expressions may be separated by whitespace. + May be constructed using the '&' operator. + """ + def __init__( self, exprs, savelist = True ): + super(Each,self).__init__(exprs, savelist) + self.mayReturnEmpty = True + for e in self.exprs: + if not e.mayReturnEmpty: + self.mayReturnEmpty = False + break + self.skipWhitespace = True + self.initExprGroups = True + + def parseImpl( self, instring, loc, doActions=True ): + if self.initExprGroups: + self.optionals = [ e.expr for e in self.exprs if isinstance(e,Optional) ] + self.multioptionals = [ e.expr for e in self.exprs if isinstance(e,ZeroOrMore) ] + self.multirequired = [ e.expr for e in self.exprs if isinstance(e,OneOrMore) ] + self.required = [ e for e in self.exprs if not isinstance(e,(Optional,ZeroOrMore,OneOrMore)) ] + self.required += self.multirequired + self.initExprGroups = False + tmpLoc = loc + tmpReqd = self.required[:] + tmpOpt = self.optionals[:] + matchOrder = [] + + keepMatching = True + while keepMatching: + tmpExprs = tmpReqd + tmpOpt + self.multioptionals + self.multirequired + failed = [] + for e in tmpExprs: + try: + tmpLoc = e.tryParse( instring, tmpLoc ) + except ParseException: + failed.append(e) + else: + matchOrder.append(e) + if e in tmpReqd: + tmpReqd.remove(e) + elif e in tmpOpt: + tmpOpt.remove(e) + if len(failed) == len(tmpExprs): + keepMatching = False + + if tmpReqd: + missing = ", ".join( [ _ustr(e) for e in tmpReqd ] ) + raise ParseException(instring,loc,"Missing one or more required elements (%s)" % missing ) + + # add any unmatched Optionals, in case they have default values defined + matchOrder += list(e for e in self.exprs if isinstance(e,Optional) and e.expr in tmpOpt) + + resultlist = [] + for e in matchOrder: + loc,results = e._parse(instring,loc,doActions) + resultlist.append(results) + + finalResults = ParseResults([]) + for r in resultlist: + dups = {} + for k in r.keys(): + if k in finalResults.keys(): + tmp = ParseResults(finalResults[k]) + tmp += ParseResults(r[k]) + dups[k] = tmp + finalResults += ParseResults(r) + for k,v in dups.items(): + finalResults[k] = v + return loc, finalResults + + def __str__( self ): + if hasattr(self,"name"): + return self.name + + if self.strRepr is None: + self.strRepr = "{" + " & ".join( [ _ustr(e) for e in self.exprs ] ) + "}" + + return self.strRepr + + def checkRecursion( self, parseElementList ): + subRecCheckList = parseElementList[:] + [ self ] + for e in self.exprs: + e.checkRecursion( subRecCheckList ) + + +class ParseElementEnhance(ParserElement): + """Abstract subclass of ParserElement, for combining and post-processing parsed tokens.""" + def __init__( self, expr, savelist=False ): + super(ParseElementEnhance,self).__init__(savelist) + if isinstance( expr, basestring ): + expr = Literal(expr) + self.expr = expr + self.strRepr = None + if expr is not None: + self.mayIndexError = expr.mayIndexError + self.mayReturnEmpty = expr.mayReturnEmpty + self.setWhitespaceChars( expr.whiteChars ) + self.skipWhitespace = expr.skipWhitespace + self.saveAsList = expr.saveAsList + self.callPreparse = expr.callPreparse + self.ignoreExprs.extend(expr.ignoreExprs) + + def parseImpl( self, instring, loc, doActions=True ): + if self.expr is not None: + return self.expr._parse( instring, loc, doActions, callPreParse=False ) + else: + raise ParseException("",loc,self.errmsg,self) + + def leaveWhitespace( self ): + self.skipWhitespace = False + self.expr = self.expr.copy() + if self.expr is not None: + self.expr.leaveWhitespace() + return self + + def ignore( self, other ): + if isinstance( other, Suppress ): + if other not in self.ignoreExprs: + super( ParseElementEnhance, self).ignore( other ) + if self.expr is not None: + self.expr.ignore( self.ignoreExprs[-1] ) + else: + super( ParseElementEnhance, self).ignore( other ) + if self.expr is not None: + self.expr.ignore( self.ignoreExprs[-1] ) + return self + + def streamline( self ): + super(ParseElementEnhance,self).streamline() + if self.expr is not None: + self.expr.streamline() + return self + + def checkRecursion( self, parseElementList ): + if self in parseElementList: + raise RecursiveGrammarException( parseElementList+[self] ) + subRecCheckList = parseElementList[:] + [ self ] + if self.expr is not None: + self.expr.checkRecursion( subRecCheckList ) + + def validate( self, validateTrace=[] ): + tmp = validateTrace[:]+[self] + if self.expr is not None: + self.expr.validate(tmp) + self.checkRecursion( [] ) + + def __str__( self ): + try: + return super(ParseElementEnhance,self).__str__() + except: + pass + + if self.strRepr is None and self.expr is not None: + self.strRepr = "%s:(%s)" % ( self.__class__.__name__, _ustr(self.expr) ) + return self.strRepr + + +class FollowedBy(ParseElementEnhance): + """Lookahead matching of the given parse expression. FollowedBy + does *not* advance the parsing position within the input string, it only + verifies that the specified parse expression matches at the current + position. FollowedBy always returns a null token list.""" + def __init__( self, expr ): + super(FollowedBy,self).__init__(expr) + self.mayReturnEmpty = True + + def parseImpl( self, instring, loc, doActions=True ): + self.expr.tryParse( instring, loc ) + return loc, [] + + +class NotAny(ParseElementEnhance): + """Lookahead to disallow matching with the given parse expression. NotAny + does *not* advance the parsing position within the input string, it only + verifies that the specified parse expression does *not* match at the current + position. Also, NotAny does *not* skip over leading whitespace. NotAny + always returns a null token list. May be constructed using the '~' operator.""" + def __init__( self, expr ): + super(NotAny,self).__init__(expr) + #~ self.leaveWhitespace() + self.skipWhitespace = False # do NOT use self.leaveWhitespace(), don't want to propagate to exprs + self.mayReturnEmpty = True + self.errmsg = "Found unwanted token, "+_ustr(self.expr) + #self.myException = ParseException("",0,self.errmsg,self) + + def parseImpl( self, instring, loc, doActions=True ): + try: + self.expr.tryParse( instring, loc ) + except (ParseException,IndexError): + pass + else: + #~ raise ParseException(instring, loc, self.errmsg ) + exc = self.myException + exc.loc = loc + exc.pstr = instring + raise exc + return loc, [] + + def __str__( self ): + if hasattr(self,"name"): + return self.name + + if self.strRepr is None: + self.strRepr = "~{" + _ustr(self.expr) + "}" + + return self.strRepr + + +class ZeroOrMore(ParseElementEnhance): + """Optional repetition of zero or more of the given expression.""" + def __init__( self, expr ): + super(ZeroOrMore,self).__init__(expr) + self.mayReturnEmpty = True + + def parseImpl( self, instring, loc, doActions=True ): + tokens = [] + try: + loc, tokens = self.expr._parse( instring, loc, doActions, callPreParse=False ) + hasIgnoreExprs = ( len(self.ignoreExprs) > 0 ) + while 1: + if hasIgnoreExprs: + preloc = self._skipIgnorables( instring, loc ) + else: + preloc = loc + loc, tmptokens = self.expr._parse( instring, preloc, doActions ) + if tmptokens or tmptokens.keys(): + tokens += tmptokens + except (ParseException,IndexError): + pass + + return loc, tokens + + def __str__( self ): + if hasattr(self,"name"): + return self.name + + if self.strRepr is None: + self.strRepr = "[" + _ustr(self.expr) + "]..." + + return self.strRepr + + def setResultsName( self, name, listAllMatches=False ): + ret = super(ZeroOrMore,self).setResultsName(name,listAllMatches) + ret.saveAsList = True + return ret + + +class OneOrMore(ParseElementEnhance): + """Repetition of one or more of the given expression.""" + def parseImpl( self, instring, loc, doActions=True ): + # must be at least one + loc, tokens = self.expr._parse( instring, loc, doActions, callPreParse=False ) + try: + hasIgnoreExprs = ( len(self.ignoreExprs) > 0 ) + while 1: + if hasIgnoreExprs: + preloc = self._skipIgnorables( instring, loc ) + else: + preloc = loc + loc, tmptokens = self.expr._parse( instring, preloc, doActions ) + if tmptokens or tmptokens.keys(): + tokens += tmptokens + except (ParseException,IndexError): + pass + + return loc, tokens + + def __str__( self ): + if hasattr(self,"name"): + return self.name + + if self.strRepr is None: + self.strRepr = "{" + _ustr(self.expr) + "}..." + + return self.strRepr + + def setResultsName( self, name, listAllMatches=False ): + ret = super(OneOrMore,self).setResultsName(name,listAllMatches) + ret.saveAsList = True + return ret + +class _NullToken(object): + def __bool__(self): + return False + __nonzero__ = __bool__ + def __str__(self): + return "" + +_optionalNotMatched = _NullToken() +class Optional(ParseElementEnhance): + """Optional matching of the given expression. + A default return string can also be specified, if the optional expression + is not found. + """ + def __init__( self, exprs, default=_optionalNotMatched ): + super(Optional,self).__init__( exprs, savelist=False ) + self.defaultValue = default + self.mayReturnEmpty = True + + def parseImpl( self, instring, loc, doActions=True ): + try: + loc, tokens = self.expr._parse( instring, loc, doActions, callPreParse=False ) + except (ParseException,IndexError): + if self.defaultValue is not _optionalNotMatched: + if self.expr.resultsName: + tokens = ParseResults([ self.defaultValue ]) + tokens[self.expr.resultsName] = self.defaultValue + else: + tokens = [ self.defaultValue ] + else: + tokens = [] + return loc, tokens + + def __str__( self ): + if hasattr(self,"name"): + return self.name + + if self.strRepr is None: + self.strRepr = "[" + _ustr(self.expr) + "]" + + return self.strRepr + + +class SkipTo(ParseElementEnhance): + """Token for skipping over all undefined text until the matched expression is found. + If include is set to true, the matched expression is also consumed. The ignore + argument is used to define grammars (typically quoted strings and comments) that + might contain false matches. + """ + def __init__( self, other, include=False, ignore=None ): + super( SkipTo, self ).__init__( other ) + if ignore is not None: + self.expr = self.expr.copy() + self.expr.ignore(ignore) + self.mayReturnEmpty = True + self.mayIndexError = False + self.includeMatch = include + self.asList = False + self.errmsg = "No match found for "+_ustr(self.expr) + #self.myException = ParseException("",0,self.errmsg,self) + + def parseImpl( self, instring, loc, doActions=True ): + startLoc = loc + instrlen = len(instring) + expr = self.expr + while loc <= instrlen: + try: + loc = expr._skipIgnorables( instring, loc ) + expr._parse( instring, loc, doActions=False, callPreParse=False ) + if self.includeMatch: + skipText = instring[startLoc:loc] + loc,mat = expr._parse(instring,loc,doActions,callPreParse=False) + if mat: + skipRes = ParseResults( skipText ) + skipRes += mat + return loc, [ skipRes ] + else: + return loc, [ skipText ] + else: + return loc, [ instring[startLoc:loc] ] + except (ParseException,IndexError): + loc += 1 + exc = self.myException + exc.loc = loc + exc.pstr = instring + raise exc + +class Forward(ParseElementEnhance): + """Forward declaration of an expression to be defined later - + used for recursive grammars, such as algebraic infix notation. + When the expression is known, it is assigned to the Forward variable using the '<<' operator. + + Note: take care when assigning to Forward not to overlook precedence of operators. + Specifically, '|' has a lower precedence than '<<', so that:: + fwdExpr << a | b | c + will actually be evaluated as:: + (fwdExpr << a) | b | c + thereby leaving b and c out as parseable alternatives. It is recommended that you + explicitly group the values inserted into the Forward:: + fwdExpr << (a | b | c) + """ + def __init__( self, other=None ): + super(Forward,self).__init__( other, savelist=False ) + + def __lshift__( self, other ): + if isinstance( other, basestring ): + other = Literal(other) + self.expr = other + self.mayReturnEmpty = other.mayReturnEmpty + self.strRepr = None + self.mayIndexError = self.expr.mayIndexError + self.mayReturnEmpty = self.expr.mayReturnEmpty + self.setWhitespaceChars( self.expr.whiteChars ) + self.skipWhitespace = self.expr.skipWhitespace + self.saveAsList = self.expr.saveAsList + self.ignoreExprs.extend(self.expr.ignoreExprs) + return None + + def leaveWhitespace( self ): + self.skipWhitespace = False + return self + + def streamline( self ): + if not self.streamlined: + self.streamlined = True + if self.expr is not None: + self.expr.streamline() + return self + + def validate( self, validateTrace=[] ): + if self not in validateTrace: + tmp = validateTrace[:]+[self] + if self.expr is not None: + self.expr.validate(tmp) + self.checkRecursion([]) + + def __str__( self ): + if hasattr(self,"name"): + return self.name + + self.__class__ = _ForwardNoRecurse + try: + if self.expr is not None: + retString = _ustr(self.expr) + else: + retString = "None" + finally: + self.__class__ = Forward + return "Forward: "+retString + + def copy(self): + if self.expr is not None: + return super(Forward,self).copy() + else: + ret = Forward() + ret << self + return ret + +class _ForwardNoRecurse(Forward): + def __str__( self ): + return "..." + +class TokenConverter(ParseElementEnhance): + """Abstract subclass of ParseExpression, for converting parsed results.""" + def __init__( self, expr, savelist=False ): + super(TokenConverter,self).__init__( expr )#, savelist ) + self.saveAsList = False + +class Upcase(TokenConverter): + """Converter to upper case all matching tokens.""" + def __init__(self, *args): + super(Upcase,self).__init__(*args) + warnings.warn("Upcase class is deprecated, use upcaseTokens parse action instead", + DeprecationWarning,stacklevel=2) + + def postParse( self, instring, loc, tokenlist ): + return list(map( string.upper, tokenlist )) + + +class Combine(TokenConverter): + """Converter to concatenate all matching tokens to a single string. + By default, the matching patterns must also be contiguous in the input string; + this can be disabled by specifying 'adjacent=False' in the constructor. + """ + def __init__( self, expr, joinString="", adjacent=True ): + super(Combine,self).__init__( expr ) + # suppress whitespace-stripping in contained parse expressions, but re-enable it on the Combine itself + if adjacent: + self.leaveWhitespace() + self.adjacent = adjacent + self.skipWhitespace = True + self.joinString = joinString + + def ignore( self, other ): + if self.adjacent: + ParserElement.ignore(self, other) + else: + super( Combine, self).ignore( other ) + return self + + def postParse( self, instring, loc, tokenlist ): + retToks = tokenlist.copy() + del retToks[:] + retToks += ParseResults([ "".join(tokenlist._asStringList(self.joinString)) ], modal=self.modalResults) + + if self.resultsName and len(retToks.keys())>0: + return [ retToks ] + else: + return retToks + +class Group(TokenConverter): + """Converter to return the matched tokens as a list - useful for returning tokens of ZeroOrMore and OneOrMore expressions.""" + def __init__( self, expr ): + super(Group,self).__init__( expr ) + self.saveAsList = True + + def postParse( self, instring, loc, tokenlist ): + return [ tokenlist ] + +class Dict(TokenConverter): + """Converter to return a repetitive expression as a list, but also as a dictionary. + Each element can also be referenced using the first token in the expression as its key. + Useful for tabular report scraping when the first column can be used as a item key. + """ + def __init__( self, exprs ): + super(Dict,self).__init__( exprs ) + self.saveAsList = True + + def postParse( self, instring, loc, tokenlist ): + for i,tok in enumerate(tokenlist): + if len(tok) == 0: + continue + ikey = tok[0] + if isinstance(ikey,int): + ikey = _ustr(tok[0]).strip() + if len(tok)==1: + tokenlist[ikey] = _ParseResultsWithOffset("",i) + elif len(tok)==2 and not isinstance(tok[1],ParseResults): + tokenlist[ikey] = _ParseResultsWithOffset(tok[1],i) + else: + dictvalue = tok.copy() #ParseResults(i) + del dictvalue[0] + if len(dictvalue)!= 1 or (isinstance(dictvalue,ParseResults) and dictvalue.keys()): + tokenlist[ikey] = _ParseResultsWithOffset(dictvalue,i) + else: + tokenlist[ikey] = _ParseResultsWithOffset(dictvalue[0],i) + + if self.resultsName: + return [ tokenlist ] + else: + return tokenlist + + +class Suppress(TokenConverter): + """Converter for ignoring the results of a parsed expression.""" + def postParse( self, instring, loc, tokenlist ): + return [] + + def suppress( self ): + return self + + +class OnlyOnce(object): + """Wrapper for parse actions, to ensure they are only called once.""" + def __init__(self, methodCall): + self.callable = ParserElement._normalizeParseActionArgs(methodCall) + self.called = False + def __call__(self,s,l,t): + if not self.called: + results = self.callable(s,l,t) + self.called = True + return results + raise ParseException(s,l,"") + def reset(self): + self.called = False + +def traceParseAction(f): + """Decorator for debugging parse actions.""" + f = ParserElement._normalizeParseActionArgs(f) + def z(*paArgs): + thisFunc = f.func_name + s,l,t = paArgs[-3:] + if len(paArgs)>3: + thisFunc = paArgs[0].__class__.__name__ + '.' + thisFunc + sys.stderr.write( ">>entering %s(line: '%s', %d, %s)\n" % (thisFunc,line(l,s),l,t) ) + try: + ret = f(*paArgs) + except Exception, exc: + sys.stderr.write( "<<leaving %s (exception: %s)\n" % (thisFunc,exc) ) + raise + sys.stderr.write( "<<leaving %s (ret: %s)\n" % (thisFunc,ret) ) + return ret + try: + z.__name__ = f.__name__ + except AttributeError: + pass + return z + +# +# global helpers +# +def delimitedList( expr, delim=",", combine=False ): + """Helper to define a delimited list of expressions - the delimiter defaults to ','. + By default, the list elements and delimiters can have intervening whitespace, and + comments, but this can be overridden by passing 'combine=True' in the constructor. + If combine is set to True, the matching tokens are returned as a single token + string, with the delimiters included; otherwise, the matching tokens are returned + as a list of tokens, with the delimiters suppressed. + """ + dlName = _ustr(expr)+" ["+_ustr(delim)+" "+_ustr(expr)+"]..." + if combine: + return Combine( expr + ZeroOrMore( delim + expr ) ).setName(dlName) + else: + return ( expr + ZeroOrMore( Suppress( delim ) + expr ) ).setName(dlName) + +def countedArray( expr ): + """Helper to define a counted list of expressions. + This helper defines a pattern of the form:: + integer expr expr expr... + where the leading integer tells how many expr expressions follow. + The matched tokens returns the array of expr tokens as a list - the leading count token is suppressed. + """ + arrayExpr = Forward() + def countFieldParseAction(s,l,t): + n = int(t[0]) + arrayExpr << (n and Group(And([expr]*n)) or Group(empty)) + return [] + return ( Word(nums).setName("arrayLen").setParseAction(countFieldParseAction, callDuringTry=True) + arrayExpr ) + +def _flatten(L): + if type(L) is not list: return [L] + if L == []: return L + return _flatten(L[0]) + _flatten(L[1:]) + +def matchPreviousLiteral(expr): + """Helper to define an expression that is indirectly defined from + the tokens matched in a previous expression, that is, it looks + for a 'repeat' of a previous expression. For example:: + first = Word(nums) + second = matchPreviousLiteral(first) + matchExpr = first + ":" + second + will match "1:1", but not "1:2". Because this matches a + previous literal, will also match the leading "1:1" in "1:10". + If this is not desired, use matchPreviousExpr. + Do *not* use with packrat parsing enabled. + """ + rep = Forward() + def copyTokenToRepeater(s,l,t): + if t: + if len(t) == 1: + rep << t[0] + else: + # flatten t tokens + tflat = _flatten(t.asList()) + rep << And( [ Literal(tt) for tt in tflat ] ) + else: + rep << Empty() + expr.addParseAction(copyTokenToRepeater, callDuringTry=True) + return rep + +def matchPreviousExpr(expr): + """Helper to define an expression that is indirectly defined from + the tokens matched in a previous expression, that is, it looks + for a 'repeat' of a previous expression. For example:: + first = Word(nums) + second = matchPreviousExpr(first) + matchExpr = first + ":" + second + will match "1:1", but not "1:2". Because this matches by + expressions, will *not* match the leading "1:1" in "1:10"; + the expressions are evaluated first, and then compared, so + "1" is compared with "10". + Do *not* use with packrat parsing enabled. + """ + rep = Forward() + e2 = expr.copy() + rep << e2 + def copyTokenToRepeater(s,l,t): + matchTokens = _flatten(t.asList()) + def mustMatchTheseTokens(s,l,t): + theseTokens = _flatten(t.asList()) + if theseTokens != matchTokens: + raise ParseException("",0,"") + rep.setParseAction( mustMatchTheseTokens, callDuringTry=True ) + expr.addParseAction(copyTokenToRepeater, callDuringTry=True) + return rep + +def _escapeRegexRangeChars(s): + #~ escape these chars: ^-] + for c in r"\^-]": + s = s.replace(c,"\\"+c) + s = s.replace("\n",r"\n") + s = s.replace("\t",r"\t") + return _ustr(s) + +def oneOf( strs, caseless=False, useRegex=True ): + """Helper to quickly define a set of alternative Literals, and makes sure to do + longest-first testing when there is a conflict, regardless of the input order, + but returns a MatchFirst for best performance. + + Parameters: + - strs - a string of space-delimited literals, or a list of string literals + - caseless - (default=False) - treat all literals as caseless + - useRegex - (default=True) - as an optimization, will generate a Regex + object; otherwise, will generate a MatchFirst object (if caseless=True, or + if creating a Regex raises an exception) + """ + if caseless: + isequal = ( lambda a,b: a.upper() == b.upper() ) + masks = ( lambda a,b: b.upper().startswith(a.upper()) ) + parseElementClass = CaselessLiteral + else: + isequal = ( lambda a,b: a == b ) + masks = ( lambda a,b: b.startswith(a) ) + parseElementClass = Literal + + if isinstance(strs,(list,tuple)): + symbols = strs[:] + elif isinstance(strs,basestring): + symbols = strs.split() + else: + warnings.warn("Invalid argument to oneOf, expected string or list", + SyntaxWarning, stacklevel=2) + + i = 0 + while i < len(symbols)-1: + cur = symbols[i] + for j,other in enumerate(symbols[i+1:]): + if ( isequal(other, cur) ): + del symbols[i+j+1] + break + elif ( masks(cur, other) ): + del symbols[i+j+1] + symbols.insert(i,other) + cur = other + break + else: + i += 1 + + if not caseless and useRegex: + #~ print (strs,"->", "|".join( [ _escapeRegexChars(sym) for sym in symbols] )) + try: + if len(symbols)==len("".join(symbols)): + return Regex( "[%s]" % "".join( [ _escapeRegexRangeChars(sym) for sym in symbols] ) ) + else: + return Regex( "|".join( [ re.escape(sym) for sym in symbols] ) ) + except: + warnings.warn("Exception creating Regex for oneOf, building MatchFirst", + SyntaxWarning, stacklevel=2) + + + # last resort, just use MatchFirst + return MatchFirst( [ parseElementClass(sym) for sym in symbols ] ) + +def dictOf( key, value ): + """Helper to easily and clearly define a dictionary by specifying the respective patterns + for the key and value. Takes care of defining the Dict, ZeroOrMore, and Group tokens + in the proper order. The key pattern can include delimiting markers or punctuation, + as long as they are suppressed, thereby leaving the significant key text. The value + pattern can include named results, so that the Dict results can include named token + fields. + """ + return Dict( ZeroOrMore( Group ( key + value ) ) ) + +# convenience constants for positional expressions +empty = Empty().setName("empty") +lineStart = LineStart().setName("lineStart") +lineEnd = LineEnd().setName("lineEnd") +stringStart = StringStart().setName("stringStart") +stringEnd = StringEnd().setName("stringEnd") + +_escapedPunc = Word( _bslash, r"\[]-*.$+^?()~ ", exact=2 ).setParseAction(lambda s,l,t:t[0][1]) +_printables_less_backslash = "".join([ c for c in printables if c not in r"\]" ]) +_escapedHexChar = Combine( Suppress(_bslash + "0x") + Word(hexnums) ).setParseAction(lambda s,l,t:unichr(int(t[0],16))) +_escapedOctChar = Combine( Suppress(_bslash) + Word("0","01234567") ).setParseAction(lambda s,l,t:unichr(int(t[0],8))) +_singleChar = _escapedPunc | _escapedHexChar | _escapedOctChar | Word(_printables_less_backslash,exact=1) +_charRange = Group(_singleChar + Suppress("-") + _singleChar) +_reBracketExpr = Literal("[") + Optional("^").setResultsName("negate") + Group( OneOrMore( _charRange | _singleChar ) ).setResultsName("body") + "]" + +_expanded = lambda p: (isinstance(p,ParseResults) and ''.join([ unichr(c) for c in range(ord(p[0]),ord(p[1])+1) ]) or p) + +def srange(s): + r"""Helper to easily define string ranges for use in Word construction. Borrows + syntax from regexp '[]' string range definitions:: + srange("[0-9]") -> "0123456789" + srange("[a-z]") -> "abcdefghijklmnopqrstuvwxyz" + srange("[a-z$_]") -> "abcdefghijklmnopqrstuvwxyz$_" + The input string must be enclosed in []'s, and the returned string is the expanded + character set joined into a single string. + The values enclosed in the []'s may be:: + a single character + an escaped character with a leading backslash (such as \- or \]) + an escaped hex character with a leading '\0x' (\0x21, which is a '!' character) + an escaped octal character with a leading '\0' (\041, which is a '!' character) + a range of any of the above, separated by a dash ('a-z', etc.) + any combination of the above ('aeiouy', 'a-zA-Z0-9_$', etc.) + """ + try: + return "".join([_expanded(part) for part in _reBracketExpr.parseString(s).body]) + except: + return "" + +def matchOnlyAtCol(n): + """Helper method for defining parse actions that require matching at a specific + column in the input text. + """ + def verifyCol(strg,locn,toks): + if col(locn,strg) != n: + raise ParseException(strg,locn,"matched token not at column %d" % n) + return verifyCol + +def replaceWith(replStr): + """Helper method for common parse actions that simply return a literal value. Especially + useful when used with transformString(). + """ + def _replFunc(*args): + return [replStr] + return _replFunc + +def removeQuotes(s,l,t): + """Helper parse action for removing quotation marks from parsed quoted strings. + To use, add this parse action to quoted string using:: + quotedString.setParseAction( removeQuotes ) + """ + return t[0][1:-1] + +def upcaseTokens(s,l,t): + """Helper parse action to convert tokens to upper case.""" + return [ tt.upper() for tt in map(_ustr,t) ] + +def downcaseTokens(s,l,t): + """Helper parse action to convert tokens to lower case.""" + return [ tt.lower() for tt in map(_ustr,t) ] + +def keepOriginalText(s,startLoc,t): + """Helper parse action to preserve original parsed text, + overriding any nested parse actions.""" + try: + endloc = getTokensEndLoc() + except ParseException: + raise ParseFatalException("incorrect usage of keepOriginalText - may only be called as a parse action") + del t[:] + t += ParseResults(s[startLoc:endloc]) + return t + +def getTokensEndLoc(): + """Method to be called from within a parse action to determine the end + location of the parsed tokens.""" + import inspect + fstack = inspect.stack() + try: + # search up the stack (through intervening argument normalizers) for correct calling routine + for f in fstack[2:]: + if f[3] == "_parseNoCache": + endloc = f[0].f_locals["loc"] + return endloc + else: + raise ParseFatalException("incorrect usage of getTokensEndLoc - may only be called from within a parse action") + finally: + del fstack + +def _makeTags(tagStr, xml): + """Internal helper to construct opening and closing tag expressions, given a tag name""" + if isinstance(tagStr,basestring): + resname = tagStr + tagStr = Keyword(tagStr, caseless=not xml) + else: + resname = tagStr.name + + tagAttrName = Word(alphas,alphanums+"_-:") + if (xml): + tagAttrValue = dblQuotedString.copy().setParseAction( removeQuotes ) + openTag = Suppress("<") + tagStr + \ + Dict(ZeroOrMore(Group( tagAttrName + Suppress("=") + tagAttrValue ))) + \ + Optional("/",default=[False]).setResultsName("empty").setParseAction(lambda s,l,t:t[0]=='/') + Suppress(">") + else: + printablesLessRAbrack = "".join( [ c for c in printables if c not in ">" ] ) + tagAttrValue = quotedString.copy().setParseAction( removeQuotes ) | Word(printablesLessRAbrack) + openTag = Suppress("<") + tagStr + \ + Dict(ZeroOrMore(Group( tagAttrName.setParseAction(downcaseTokens) + \ + Optional( Suppress("=") + tagAttrValue ) ))) + \ + Optional("/",default=[False]).setResultsName("empty").setParseAction(lambda s,l,t:t[0]=='/') + Suppress(">") + closeTag = Combine(_L("</") + tagStr + ">") + + openTag = openTag.setResultsName("start"+"".join(resname.replace(":"," ").title().split())).setName("<%s>" % tagStr) + closeTag = closeTag.setResultsName("end"+"".join(resname.replace(":"," ").title().split())).setName("</%s>" % tagStr) + + return openTag, closeTag + +def makeHTMLTags(tagStr): + """Helper to construct opening and closing tag expressions for HTML, given a tag name""" + return _makeTags( tagStr, False ) + +def makeXMLTags(tagStr): + """Helper to construct opening and closing tag expressions for XML, given a tag name""" + return _makeTags( tagStr, True ) + +def withAttribute(*args,**attrDict): + """Helper to create a validating parse action to be used with start tags created + with makeXMLTags or makeHTMLTags. Use withAttribute to qualify a starting tag + with a required attribute value, to avoid false matches on common tags such as + <TD> or <DIV>. + + Call withAttribute with a series of attribute names and values. Specify the list + of filter attributes names and values as: + - keyword arguments, as in (class="Customer",align="right"), or + - a list of name-value tuples, as in ( ("ns1:class", "Customer"), ("ns2:align","right") ) + For attribute names with a namespace prefix, you must use the second form. Attribute + names are matched insensitive to upper/lower case. + + To verify that the attribute exists, but without specifying a value, pass + withAttribute.ANY_VALUE as the value. + """ + if args: + attrs = args[:] + else: + attrs = attrDict.items() + attrs = [(k,v) for k,v in attrs] + def pa(s,l,tokens): + for attrName,attrValue in attrs: + if attrName not in tokens: + raise ParseException(s,l,"no matching attribute " + attrName) + if attrValue != withAttribute.ANY_VALUE and tokens[attrName] != attrValue: + raise ParseException(s,l,"attribute '%s' has value '%s', must be '%s'" % + (attrName, tokens[attrName], attrValue)) + return pa +withAttribute.ANY_VALUE = object() + +opAssoc = _Constants() +opAssoc.LEFT = object() +opAssoc.RIGHT = object() + +def operatorPrecedence( baseExpr, opList ): + """Helper method for constructing grammars of expressions made up of + operators working in a precedence hierarchy. Operators may be unary or + binary, left- or right-associative. Parse actions can also be attached + to operator expressions. + + Parameters: + - baseExpr - expression representing the most basic element for the nested + - opList - list of tuples, one for each operator precedence level in the + expression grammar; each tuple is of the form + (opExpr, numTerms, rightLeftAssoc, parseAction), where: + - opExpr is the pyparsing expression for the operator; + may also be a string, which will be converted to a Literal; + if numTerms is 3, opExpr is a tuple of two expressions, for the + two operators separating the 3 terms + - numTerms is the number of terms for this operator (must + be 1, 2, or 3) + - rightLeftAssoc is the indicator whether the operator is + right or left associative, using the pyparsing-defined + constants opAssoc.RIGHT and opAssoc.LEFT. + - parseAction is the parse action to be associated with + expressions matching this operator expression (the + parse action tuple member may be omitted) + """ + ret = Forward() + lastExpr = baseExpr | ( Suppress('(') + ret + Suppress(')') ) + for i,operDef in enumerate(opList): + opExpr,arity,rightLeftAssoc,pa = (operDef + (None,))[:4] + if arity == 3: + if opExpr is None or len(opExpr) != 2: + raise ValueError("if numterms=3, opExpr must be a tuple or list of two expressions") + opExpr1, opExpr2 = opExpr + thisExpr = Forward()#.setName("expr%d" % i) + if rightLeftAssoc == opAssoc.LEFT: + if arity == 1: + matchExpr = FollowedBy(lastExpr + opExpr) + Group( lastExpr + OneOrMore( opExpr ) ) + elif arity == 2: + if opExpr is not None: + matchExpr = FollowedBy(lastExpr + opExpr + lastExpr) + Group( lastExpr + OneOrMore( opExpr + lastExpr ) ) + else: + matchExpr = FollowedBy(lastExpr+lastExpr) + Group( lastExpr + OneOrMore(lastExpr) ) + elif arity == 3: + matchExpr = FollowedBy(lastExpr + opExpr1 + lastExpr + opExpr2 + lastExpr) + \ + Group( lastExpr + opExpr1 + lastExpr + opExpr2 + lastExpr ) + else: + raise ValueError("operator must be unary (1), binary (2), or ternary (3)") + elif rightLeftAssoc == opAssoc.RIGHT: + if arity == 1: + # try to avoid LR with this extra test + if not isinstance(opExpr, Optional): + opExpr = Optional(opExpr) + matchExpr = FollowedBy(opExpr.expr + thisExpr) + Group( opExpr + thisExpr ) + elif arity == 2: + if opExpr is not None: + matchExpr = FollowedBy(lastExpr + opExpr + thisExpr) + Group( lastExpr + OneOrMore( opExpr + thisExpr ) ) + else: + matchExpr = FollowedBy(lastExpr + thisExpr) + Group( lastExpr + OneOrMore( thisExpr ) ) + elif arity == 3: + matchExpr = FollowedBy(lastExpr + opExpr1 + thisExpr + opExpr2 + thisExpr) + \ + Group( lastExpr + opExpr1 + thisExpr + opExpr2 + thisExpr ) + else: + raise ValueError("operator must be unary (1), binary (2), or ternary (3)") + else: + raise ValueError("operator must indicate right or left associativity") + if pa: + matchExpr.setParseAction( pa ) + thisExpr << ( matchExpr | lastExpr ) + lastExpr = thisExpr + ret << lastExpr + return ret + +dblQuotedString = Regex(r'"(?:[^"\n\r\\]|(?:"")|(?:\\x[0-9a-fA-F]+)|(?:\\.))*"').setName("string enclosed in double quotes") +sglQuotedString = Regex(r"'(?:[^'\n\r\\]|(?:'')|(?:\\x[0-9a-fA-F]+)|(?:\\.))*'").setName("string enclosed in single quotes") +quotedString = Regex(r'''(?:"(?:[^"\n\r\\]|(?:"")|(?:\\x[0-9a-fA-F]+)|(?:\\.))*")|(?:'(?:[^'\n\r\\]|(?:'')|(?:\\x[0-9a-fA-F]+)|(?:\\.))*')''').setName("quotedString using single or double quotes") +unicodeString = Combine(_L('u') + quotedString.copy()) + +def nestedExpr(opener="(", closer=")", content=None, ignoreExpr=quotedString): + """Helper method for defining nested lists enclosed in opening and closing + delimiters ("(" and ")" are the default). + + Parameters: + - opener - opening character for a nested list (default="("); can also be a pyparsing expression + - closer - closing character for a nested list (default=")"); can also be a pyparsing expression + - content - expression for items within the nested lists (default=None) + - ignoreExpr - expression for ignoring opening and closing delimiters (default=quotedString) + + If an expression is not provided for the content argument, the nested + expression will capture all whitespace-delimited content between delimiters + as a list of separate values. + + Use the ignoreExpr argument to define expressions that may contain + opening or closing characters that should not be treated as opening + or closing characters for nesting, such as quotedString or a comment + expression. Specify multiple expressions using an Or or MatchFirst. + The default is quotedString, but if no expressions are to be ignored, + then pass None for this argument. + """ + if opener == closer: + raise ValueError("opening and closing strings cannot be the same") + if content is None: + if isinstance(opener,basestring) and isinstance(closer,basestring): + if ignoreExpr is not None: + content = (Combine(OneOrMore(~ignoreExpr + + CharsNotIn(opener+closer+ParserElement.DEFAULT_WHITE_CHARS,exact=1)) + ).setParseAction(lambda t:t[0].strip())) + else: + content = (empty+CharsNotIn(opener+closer+ParserElement.DEFAULT_WHITE_CHARS).setParseAction(lambda t:t[0].strip())) + else: + raise ValueError("opening and closing arguments must be strings if no content expression is given") + ret = Forward() + if ignoreExpr is not None: + ret << Group( Suppress(opener) + ZeroOrMore( ignoreExpr | ret | content ) + Suppress(closer) ) + else: + ret << Group( Suppress(opener) + ZeroOrMore( ret | content ) + Suppress(closer) ) + return ret + +def indentedBlock(blockStatementExpr, indentStack, indent=True): + """Helper method for defining space-delimited indentation blocks, such as + those used to define block statements in Python source code. + + Parameters: + - blockStatementExpr - expression defining syntax of statement that + is repeated within the indented block + - indentStack - list created by caller to manage indentation stack + (multiple statementWithIndentedBlock expressions within a single grammar + should share a common indentStack) + - indent - boolean indicating whether block must be indented beyond the + the current level; set to False for block of left-most statements + (default=True) + + A valid block must contain at least one blockStatement. + """ + def checkPeerIndent(s,l,t): + if l >= len(s): return + curCol = col(l,s) + if curCol != indentStack[-1]: + if curCol > indentStack[-1]: + raise ParseFatalException(s,l,"illegal nesting") + raise ParseException(s,l,"not a peer entry") + + def checkSubIndent(s,l,t): + curCol = col(l,s) + if curCol > indentStack[-1]: + indentStack.append( curCol ) + else: + raise ParseException(s,l,"not a subentry") + + def checkUnindent(s,l,t): + if l >= len(s): return + curCol = col(l,s) + if not(indentStack and curCol < indentStack[-1] and curCol <= indentStack[-2]): + raise ParseException(s,l,"not an unindent") + indentStack.pop() + + NL = OneOrMore(LineEnd().setWhitespaceChars("\t ").suppress()) + INDENT = Empty() + Empty().setParseAction(checkSubIndent) + PEER = Empty().setParseAction(checkPeerIndent) + UNDENT = Empty().setParseAction(checkUnindent) + if indent: + smExpr = Group( Optional(NL) + + FollowedBy(blockStatementExpr) + + INDENT + (OneOrMore( PEER + Group(blockStatementExpr) + Optional(NL) )) + UNDENT) + else: + smExpr = Group( Optional(NL) + + (OneOrMore( PEER + Group(blockStatementExpr) + Optional(NL) )) ) + blockStatementExpr.ignore("\\" + LineEnd()) + return smExpr + +alphas8bit = srange(r"[\0xc0-\0xd6\0xd8-\0xf6\0xf8-\0xff]") +punc8bit = srange(r"[\0xa1-\0xbf\0xd7\0xf7]") + +anyOpenTag,anyCloseTag = makeHTMLTags(Word(alphas,alphanums+"_:")) +commonHTMLEntity = Combine(_L("&") + oneOf("gt lt amp nbsp quot").setResultsName("entity") +";") +_htmlEntityMap = dict(zip("gt lt amp nbsp quot".split(),"><& '")) +replaceHTMLEntity = lambda t : t.entity in _htmlEntityMap and _htmlEntityMap[t.entity] or None + +# it's easy to get these comment structures wrong - they're very common, so may as well make them available +cStyleComment = Regex(r"/\*(?:[^*]*\*+)+?/").setName("C style comment") + +htmlComment = Regex(r"<!--[\s\S]*?-->") +restOfLine = Regex(r".*").leaveWhitespace() +dblSlashComment = Regex(r"\/\/(\\\n|.)*").setName("// comment") +cppStyleComment = Regex(r"/(?:\*(?:[^*]*\*+)+?/|/[^\n]*(?:\n[^\n]*)*?(?:(?<!\\)|\Z))").setName("C++ style comment") + +javaStyleComment = cppStyleComment +pythonStyleComment = Regex(r"#.*").setName("Python style comment") +_noncomma = "".join( [ c for c in printables if c != "," ] ) +_commasepitem = Combine(OneOrMore(Word(_noncomma) + + Optional( Word(" \t") + + ~Literal(",") + ~LineEnd() ) ) ).streamline().setName("commaItem") +commaSeparatedList = delimitedList( Optional( quotedString | _commasepitem, default="") ).setName("commaSeparatedList") + + +if __name__ == "__main__": + + def test( teststring ): + try: + tokens = simpleSQL.parseString( teststring ) + tokenlist = tokens.asList() + print (teststring + "->" + str(tokenlist)) + print ("tokens = " + str(tokens)) + print ("tokens.columns = " + str(tokens.columns)) + print ("tokens.tables = " + str(tokens.tables)) + print (tokens.asXML("SQL",True)) + except ParseBaseException,err: + print (teststring + "->") + print (err.line) + print (" "*(err.column-1) + "^") + print (err) + print() + + selectToken = CaselessLiteral( "select" ) + fromToken = CaselessLiteral( "from" ) + + ident = Word( alphas, alphanums + "_$" ) + columnName = delimitedList( ident, ".", combine=True ).setParseAction( upcaseTokens ) + columnNameList = Group( delimitedList( columnName ) )#.setName("columns") + tableName = delimitedList( ident, ".", combine=True ).setParseAction( upcaseTokens ) + tableNameList = Group( delimitedList( tableName ) )#.setName("tables") + simpleSQL = ( selectToken + \ + ( '*' | columnNameList ).setResultsName( "columns" ) + \ + fromToken + \ + tableNameList.setResultsName( "tables" ) ) + + test( "SELECT * from XYZZY, ABC" ) + test( "select * from SYS.XYZZY" ) + test( "Select A from Sys.dual" ) + test( "Select AA,BB,CC from Sys.dual" ) + test( "Select A, B, C from Sys.dual" ) + test( "Select A, B, C from Sys.dual" ) + test( "Xelect A, B, C from Sys.dual" ) + test( "Select A, B, C frox Sys.dual" ) + test( "Select" ) + test( "Select ^^^ frox Sys.dual" ) + test( "Select A, B, C from Sys.dual, Table2 " ) diff --git a/src/calibre/utils/search_query_parser.py b/src/calibre/utils/search_query_parser.py new file mode 100644 index 0000000000..7c5a49c946 --- /dev/null +++ b/src/calibre/utils/search_query_parser.py @@ -0,0 +1,523 @@ +#!/usr/bin/env python +# encoding: utf-8 +__license__ = 'GPL v3' +__copyright__ = '2008, Kovid Goyal kovid@kovidgoyal.net' +__docformat__ = 'restructuredtext en' + +''' +A parser for search queries with a syntax very similar to that used by +the Google search engine. + +For details on the search query syntax see :class:`SearchQueryParser`. +To use the parser, subclass :class:`SearchQueryParser` and implement the +methods :method:`SearchQueryParser.universal_set` and +:method:`SearchQueryParser.get_matches`. See for example :class:`Tester`. + +If this module is run, it will perform a series of unit tests. +''' + +import sys, string, operator + +from calibre.utils.pyparsing import Keyword, Group, Forward, CharsNotIn, Suppress, \ + OneOrMore, oneOf, CaselessLiteral, Optional, NoMatch + + +class SearchQueryParser(object): + ''' + Parses a search query. + + A search query consists of tokens. The tokens can be combined using + the `or`, `and` and `not` operators as well as grouped using parentheses. + When no operator is specified between two tokens, `and` is assumed. + + Each token is a string of the form `location:query`. `location` is a string + from :member:`LOCATIONS`. It is optional. If it is omitted, it is assumed to + be `all`. `query` is an arbitrary string that must not contain parentheses. + If it contains whitespace, it should be quoted by enclosing it in `"` marks. + + Examples:: + + * `Asimov` [search for the string "Asimov" in location `all`] + * `comments:"This is a good book"` [search for "This is a good book" in `comments`] + * `author:Asimov tag:unread` [search for books by Asimov that have been tagged as unread] + * `author:Asimov or author:Hardy` [search for books by Asimov or Hardy] + * `(author:Asimov or author:Hardy) and not tag:read` [search for unread books by Asimov or Hardy] + ''' + + LOCATIONS = [ + 'tag', + 'title', + 'author', + 'publisher', + 'series', + 'comments', + 'format', + 'all', + ] + + @staticmethod + def run_tests(parser, result, tests): + failed = [] + for test in tests: + print '\tTesting:', test[0], + res = parser.parseString(test[0]) + if list(res.get(result, None)) == test[1]: + print 'OK' + else: + print 'FAILED:', 'Expected:', test[1], 'Got:', list(res.get(result, None)) + failed.append(test[0]) + return failed + + def __init__(self, test=False): + self._tests_failed = False + # Define a token + locations = map(lambda x : CaselessLiteral(x)+Suppress(':'), + self.LOCATIONS) + location = NoMatch() + for l in locations: + location |= l + location = Optional(location, default='all') + word_query = CharsNotIn(string.whitespace + '()') + quoted_query = Suppress('"')+CharsNotIn('"')+Suppress('"') + query = quoted_query | word_query + Token = Group(location + query).setResultsName('token') + + if test: + print 'Testing Token parser:' + failed = SearchQueryParser.run_tests(Token, 'token', + ( + ('tag:asd', ['tag', 'asd']), + ('ddsä', ['all', 'ddsä']), + ('"one two"', ['all', 'one two']), + ('title:"one two"', ['title', 'one two']), + ) + ) + + Or = Forward() + + Parenthesis = Group( + Suppress('(') + Or + Suppress(')') + ).setResultsName('parenthesis') | Token + + + Not = Forward() + Not << (Group( + Suppress(Keyword("not", caseless=True)) + Not + ).setResultsName("not") | Parenthesis) + + And = Forward() + And << (Group( + Not + Suppress(Keyword("and", caseless=True)) + And + ).setResultsName("and") | Group( + Not + OneOrMore(~oneOf("and or") + And) + ).setResultsName("and") | Not) + + Or << (Group( + And + Suppress(Keyword("or", caseless=True)) + Or + ).setResultsName("or") | And) + + if test: + Or.validate() + self._tests_failed = bool(failed) + + self._parser = Or + #self._parser.setDebug(True) + self.parse('(tolstoy)') + self._parser.setDebug(False) + + + def parse(self, query): + res = self._parser.parseString(query)[0] + return self.evaluate(res) + + def method(self, group_name): + return getattr(self, 'evaluate_'+group_name) + + def evaluate(self, parse_result): + return self.method(parse_result.getName())(parse_result) + + def evaluate_and(self, argument): + return self.evaluate(argument[0]).intersection(self.evaluate(argument[1])) + + def evaluate_or(self, argument): + return self.evaluate(argument[0]).union(self.evaluate(argument[1])) + + def evaluate_not(self, argument): + return self.universal_set().difference(self.evaluate(argument[0])) + + def evaluate_parenthesis(self, argument): + return self.evaluate(argument[0]) + + def evaluate_token(self, argument): + return self.get_matches(argument[0], argument[1]) + + def get_matches(self, location, query): + ''' + Should return the set of matches for :param:'location` and :param:`query`. + + :param:`location` is one of the items in :member:`SearchQueryParser.LOCATIONS`. + :param:`query` is a string literal. + ''' + return set([]) + + def universal_set(self): + ''' + Should return the set of all matches. + ''' + return set([]) + +class Tester(SearchQueryParser): + + texts = { + 1: [u'Eugenie Grandet', u'Honor\xe9 de Balzac', u'manybooks.net', u'lrf'], + 2: [u'Fanny Hill', u'John Cleland', u'manybooks.net', u'lrf'], + 3: [u'Persuasion', u'Jane Austen', u'manybooks.net', u'lrf'], + 4: [u'Psmith, Journalist', u'P. G. Wodehouse', u'Some Publisher', u'lrf'], + 5: [u'The Complete Works of William Shakespeare', + u'William Shakespeare', + u'manybooks.net', + u'lrf'], + 6: [u'The History of England, Volume I', + u'David Hume', + u'manybooks.net', + u'lrf'], + 7: [u'Someone Comes to Town, Someone Leaves Town', + u'Cory Doctorow', + u'Tor Books', + u'lrf'], + 8: [u'Stalky and Co.', u'Rudyard Kipling', u'manybooks.net', u'lrf'], + 9: [u'A Game of Thrones', u'George R. R. Martin', None, u'lrf,rar'], + 10: [u'A Clash of Kings', u'George R. R. Martin', None, u'lrf,rar'], + 11: [u'A Storm of Swords', u'George R. R. Martin', None, u'lrf,rar'], + 12: [u'Biggles - Pioneer Air Fighter', u'W. E. Johns', None, u'lrf,rtf'], + 13: [u'Biggles of the Camel Squadron', + u'W. E. Johns', + u'London:Thames, (1977)', + u'lrf,rtf'], + 14: [u'A Feast for Crows', u'George R. R. Martin', None, u'lrf,rar'], + 15: [u'Cryptonomicon', u'Neal Stephenson', None, u'lrf,rar'], + 16: [u'Quicksilver', u'Neal Stephenson', None, u'lrf,zip'], + 17: [u'The Comedies of William Shakespeare', + u'William Shakespeare', + None, + u'lrf'], + 18: [u'The Histories of William Shakespeare', + u'William Shakespeare', + None, + u'lrf'], + 19: [u'The Tragedies of William Shakespeare', + u'William Shakespeare', + None, + u'lrf'], + 20: [u'An Ideal Husband', u'Oscar Wilde', u'manybooks.net', u'lrf'], + 21: [u'Flight of the Nighthawks', u'Raymond E. Feist', None, u'lrf,rar'], + 22: [u'Into a Dark Realm', u'Raymond E. Feist', None, u'lrf,rar'], + 23: [u'The Sundering', u'Walter Jon Williams', None, u'lrf,rar'], + 24: [u'The Praxis', u'Walter Jon Williams', None, u'lrf,rar'], + 25: [u'Conventions of War', u'Walter Jon Williams', None, u'lrf,rar'], + 26: [u'Banewreaker', u'Jacqueline Carey', None, u'lrf,rar'], + 27: [u'Godslayer', u'Jacqueline Carey', None, u'lrf,rar'], + 28: [u"Kushiel's Scion", u'Jacqueline Carey', None, u'lrf,rar'], + 29: [u'Underworld', u'Don DeLillo', None, u'lrf,rar'], + 30: [u'Genghis Khan and The Making of the Modern World', + u'Jack Weatherford', + u'Three Rivers Press', + u'lrf,zip'], + 31: [u'The Best and the Brightest', + u'David Halberstam', + u'Modern Library', + u'lrf,zip'], + 32: [u'The Killer Angels', u'Michael Shaara', None, u'html,lrf'], + 33: [u'Band Of Brothers', u'Stephen E Ambrose', None, u'lrf,txt'], + 34: [u'The Gates of Rome', u'Conn Iggulden', None, u'lrf,rar'], + 35: [u'The Death of Kings', u'Conn Iggulden', u'Bantam Dell', u'lit,lrf'], + 36: [u'The Field of Swords', u'Conn Iggulden', None, u'lrf,rar'], + 37: [u'Masterman Ready', u'Marryat, Captain Frederick', None, u'lrf'], + 38: [u'With the Lightnings', + u'David Drake', + u'Baen Publishing Enterprises', + u'lit,lrf'], + 39: [u'Lt. Leary, Commanding', + u'David Drake', + u'Baen Publishing Enterprises', + u'lit,lrf'], + 40: [u'The Far Side of The Stars', + u'David Drake', + u'Baen Publishing Enterprises', + u'lrf,rar'], + 41: [u'The Way to Glory', + u'David Drake', + u'Baen Publishing Enterprises', + u'lrf,rar'], + 42: [u'Some Golden Harbor', u'David Drake', u'Baen Books', u'lrf,rar'], + 43: [u'Harry Potter And The Half-Blood Prince', + u'J. K. Rowling', + None, + u'lrf,rar'], + 44: [u'Harry Potter and the Order of the Phoenix', + u'J. K. Rowling', + None, + u'lrf,rtf'], + 45: [u'The Stars at War', u'David Weber , Steve White', None, u'lrf,rtf'], + 46: [u'The Stars at War II', + u'Steve White', + u'Baen Publishing Enterprises', + u'lrf,rar'], + 47: [u'Exodus', u'Steve White,Shirley Meier', u'Baen Books', u'lrf,rar'], + 48: [u'Harry Potter and the Goblet of Fire', + u'J. K. Rowling', + None, + u'lrf,rar'], + 49: [u'Harry Potter and the Prisoner of Azkaban', + u'J. K. Rowling', + None, + u'lrf,rtf'], + 50: [u'Harry Potter and the Chamber of Secrets', + u'J. K. Rowling', + None, + u'lit,lrf'], + 51: [u'Harry Potter and the Deathly Hallows', + u'J.K. Rowling', + None, + u'lit,lrf,pdf'], + 52: [u"His Majesty's Dragon", u'Naomi Novik', None, u'lrf,rar'], + 53: [u'Throne of Jade', u'Naomi Novik', u'Del Rey', u'lit,lrf'], + 54: [u'Black Powder War', u'Naomi Novik', u'Del Rey', u'lrf,rar'], + 55: [u'War and Peace', u'Leo Tolstoy', u'gutenberg.org', u'lrf,txt'], + 56: [u'Anna Karenina', u'Leo Tolstoy', u'gutenberg.org', u'lrf,txt'], + 57: [u'A Shorter History of Rome', + u'Eugene Lawrence,Sir William Smith', + u'gutenberg.org', + u'lrf,zip'], + 58: [u'The Name of the Rose', u'Umberto Eco', None, u'lrf,rar'], + 71: [u"Wind Rider's Oath", u'David Weber', u'Baen', u'lrf'], + 74: [u'Rally Cry', u'William R Forstchen', None, u'htm,lrf'], + 86: [u'Empire of Ivory', u'Naomi Novik', None, u'lrf,rar'], + 87: [u"Renegade's Magic", u'Robin Hobb', None, u'lrf,rar'], + 89: [u'Master and commander', + u"Patrick O'Brian", + u'Fontana,\n1971', + u'lit,lrf'], + 91: [u'A Companion to Wolves', + u'Sarah Monette,Elizabeth Beär', + None, + u'lrf,rar'], + 92: [u'The Lions of al-Rassan', u'Guy Gavriel Kay', u'Eos', u'lit,lrf'], + 93: [u'Gardens of the Moon', u'Steven Erikson', u'Tor Fantasy', u'lit,lrf'], + 95: [u'The Master and Margarita', + u'Mikhail Bulgakov', + u'N.Y. : Knopf, 1992.', + u'lrf,rtf'], + 120: [u'Deadhouse Gates', + u'Steven Erikson', + u'London : Bantam Books, 2001.', + u'lit,lrf'], + 121: [u'Memories of Ice', u'Steven Erikson', u'Bantam Books', u'lit,lrf'], + 123: [u'House of Chains', u'Steven Erikson', u'Bantam Books', u'lit,lrf'], + 125: [u'Midnight Tides', u'Steven Erikson', u'Bantam Books', u'lit,lrf'], + 126: [u'The Bonehunters', u'Steven Erikson', u'Bantam Press', u'lit,lrf'], + 129: [u'Guns, germs, and steel: the fates of human societies', + u'Jared Diamond', + u'New York : W.W. Norton, c1997.', + u'lit,lrf'], + 136: [u'Wildcards', u'George R. R. Martin', None, u'html,lrf'], + 138: [u'Off Armageddon Reef', u'David Weber', u'Tor Books', u'lit,lrf'], + 144: [u'Atonement', + u'Ian McEwan', + u'New York : Nan A. Talese/Doubleday, 2002.', + u'lrf,rar'], + 146: [u'1632', u'Eric Flint', u'Baen Books', u'lit,lrf'], + 147: [u'1633', u'David Weber,Eric Flint,Dru Blair', u'Baen', u'lit,lrf'], + 148: [u'1634: The Baltic War', + u'David Weber,Eric Flint', + u'Baen', + u'lit,lrf'], + 150: [u'The Dragonbone Chair', u'Tad Williams', u'DAW Trade', u'lrf,rtf'], + 152: [u'The Little Book That Beats the Market', + u'Joel Greenblatt', + u'Wiley', + u'epub,lrf'], + 153: [u'Pride of Carthage', u'David Anthony Durham', u'Anchor', u'lit,lrf'], + 154: [u'Stone of farewell', + u'Tad Williams', + u'New York : DAW Books, 1990.', + u'lrf,txt'], + 166: [u'American Gods', u'Neil Gaiman', u'HarperTorch', u'lit,lrf'], + 176: [u'Pillars of the Earth', + u'Ken Follett', + u'New American Library', + u'lit,lrf'], + 182: [u'The Eye of the world', + u'Robert Jordan', + u'New York : T. Doherty Associates, c1990.', + u'lit,lrf'], + 188: [u'The Great Hunt', u'Robert Jordan', u'ATOM', u'lrf,zip'], + 189: [u'The Dragon Reborn', u'Robert Jordan', None, u'lit,lrf'], + 190: [u'The Shadow Rising', u'Robert Jordan', None, u'lit,lrf'], + 191: [u'The Fires of Heaven', + u'Robert Jordan', + u'Time Warner Books Uk', + u'lit,lrf'], + 216: [u'Lord of chaos', + u'Robert Jordan', + u'New York : TOR, c1994.', + u'lit,lrf'], + 217: [u'A Crown of Swords', u'Robert Jordan', None, u'lit,lrf'], + 236: [u'The Path of Daggers', u'Robert Jordan', None, u'lit,lrf'], + 238: [u'The Client', + u'John Grisham', + u'New York : Island, 1994, c1993.', + u'lit,lrf'], + 240: [u"Winter's Heart", u'Robert Jordan', None, u'lit,lrf'], + 242: [u'In the Beginning was the Command Line', + u'Neal Stephenson', + None, + u'lrf,txt'], + 249: [u'Crossroads of Twilight', u'Robert Jordan', None, u'lit,lrf'], + 251: [u'Caves of Steel', u'Isaac Asimov', u'Del Rey', u'lrf,zip'], + 253: [u"Hunter's Run", + u'George R. R. Martin,Gardner Dozois,Daniel Abraham', + u'Eos', + u'lrf,rar'], + 257: [u'Knife of Dreams', u'Robert Jordan', None, u'lit,lrf'], + 258: [u'Saturday', + u'Ian McEwan', + u'London : Jonathan Cape, 2005.', + u'lrf,txt'], + 259: [u'My name is Red', + u'Orhan Pamuk; translated from the Turkish by Erda\u011f G\xf6knar', + u'New York : Alfred A. Knopf, 2001.', + u'lit,lrf'], + 265: [u'Harbinger', u'David Mack', u'Star Trek', u'lit,lrf'], + 267: [u'Summon the Thunder', + u'Dayton Ward,Kevin Dilmore', + u'Pocket Books', + u'lit,lrf'], + 268: [u'Shalimar the Clown', + u'Salman Rushdie', + u'New York : Random House, 2005.', + u'lit,lrf'], + 269: [u'Reap the Whirlwind', u'David Mack', u'Star Trek', u'lit,lrf'], + 272: [u'Mistborn', u'Brandon Sanderson', u'Tor Fantasy', u'lrf,rar'], + 273: [u'The Thousandfold Thought', + u'R. Scott Bakker', + u'Overlook TP', + u'lrf,rtf'], + 276: [u'Elantris', + u'Brandon Sanderson', + u'New York : Tor, 2005.', + u'lrf,rar'], + 291: [u'Sundiver', + u'David Brin', + u'New York : Bantam Books, 1995.', + u'lit,lrf'], + 299: [u'Imperium', u'Robert Harris', u'Arrow', u'lrf,rar'], + 300: [u'Startide Rising', u'David Brin', u'Bantam', u'htm,lrf'], + 301: [u'The Uplift War', u'David Brin', u'Spectra', u'lit,lrf'], + 304: [u'Brightness Reef', u'David Brin', u'Orbit', u'lrf,rar'], + 305: [u"Infinity's Shore", u'David Brin', u'Spectra', u'txt'], + 306: [u"Heaven's Reach", u'David Brin', u'Spectra', u'lrf,rar'], + 325: [u"Foundation's Triumph", u'David Brin', u'Easton Press', u'lit,lrf'], + 327: [u'I am Charlotte Simmons', u'Tom Wolfe', u'Vintage', u'htm,lrf'], + 335: [u'The Currents of Space', u'Isaac Asimov', None, u'lit,lrf'], + 340: [u'The Other Boleyn Girl', + u'Philippa Gregory', + u'Touchstone', + u'lit,lrf'], + 341: [u"Old Man's War", u'John Scalzi', u'Tor', u'htm,lrf'], + 342: [u'The Ghost Brigades', + u'John Scalzi', + u'Tor Science Fiction', + u'html,lrf'], + 343: [u'The Last Colony', u'John Scalzi', u'Tor Books', u'html,lrf'], + 344: [u'Gossip Girl', u'Cecily von Ziegesar', u'Warner Books', u'lrf,rtf'], + 347: [u'Little Brother', u'Cory Doctorow', u'Tor Teen', u'lrf'], + 348: [u'The Reality Dysfunction', + u'Peter F. Hamilton', + u'Pan MacMillan', + u'lit,lrf'], + 353: [u'A Thousand Splendid Suns', + u'Khaled Hosseini', + u'Center Point Large Print', + u'lit,lrf'], + 354: [u'Amsterdam', u'Ian McEwan', u'Anchor', u'lrf,txt'], + 355: [u'The Neutronium Alchemist', + u'Peter F. Hamilton', + u'Aspect', + u'lit,lrf'], + 356: [u'The Naked God', u'Peter F. Hamilton', u'Aspect', u'lit,lrf'], + 421: [u'A Shadow in Summer', u'Daniel Abraham', u'Tor Fantasy', u'lrf,rar'], + 427: [u'Lonesome Dove', u'Larry McMurtry', None, u'lit,lrf'], + 440: [u'Ghost', u'John Ringo', u'Baen', u'lit,lrf'], + 441: [u'Kildar', u'John Ringo', u'Baen', u'lit,lrf'], + 443: [u'Hidden Empire ', u'Kevin J. Anderson', u'Aspect', u'lrf,rar'], + 444: [u'The Gun Seller', + u'Hugh Laurie', + u'Washington Square Press', + u'lrf,rar'] + } + + tests = { + 'Dysfunction' : set([348]), + 'title:Dysfunction' : set([348]), + 'title:Dysfunction or author:Laurie': set([348, 444]), + '(tag:txt or tag:pdf)': set([33, 258, 354, 305, 242, 51, 55, 56, 154]), + '(tag:txt or tag:pdf) and author:Tolstoy': set([55, 56]), + 'Tolstoy txt': set([55, 56]), + 'Hamilton Amsterdam' : set([]), + u'Beär' : set([91]), + 'dysfunc or tolstoy': set([348, 55, 56]), + 'tag:txt and not tolstoy': set([33, 258, 354, 305, 242, 154]), + 'not tag:lrf' : set([305]), + 'london:thames': set([13]), + 'publisher:london:thames': set([13]), + '"(1977)"': set([13]), + } + fields = {'title':0, 'author':1, 'publisher':2, 'tag':3} + + _universal_set = set(texts.keys()) + + def universal_set(self): + return self._universal_set + + def get_matches(self, location, query): + location = location.lower() + if location in self.fields.keys(): + getter = operator.itemgetter(self.fields[location]) + elif location == 'all': + getter = lambda y: ''.join(x if x else '' for x in y) + else: + getter = lambda x: '' + + if not query: + return set([]) + query = query.lower() + return set(key for key, val in self.texts.items() \ + if query and query in getattr(getter(val), 'lower', lambda : '')()) + + + + def run_tests(self): + failed = [] + for query in self.tests.keys(): + print 'Testing query:', query, + res = self.parse(query) + if res != self.tests[query]: + print 'FAILED', 'Expected:', self.tests[query], 'Got:', res + failed.append(query) + else: + print 'OK' + return failed + + +def main(args=sys.argv): + tester = Tester(test=True) + failed = tester.run_tests() + if tester._tests_failed or failed: + print '>>>>>>>>>>>>>> Tests Failed <<<<<<<<<<<<<<<' + return 1 + + return 0 + +if __name__ == '__main__': + sys.exit(main()) \ No newline at end of file From 40ef97e9a3f97f072d98272b0b05df7340dcedf5 Mon Sep 17 00:00:00 2001 From: "Marshall T. Vandegrift" <llasram@gmail.com> Date: Thu, 10 Jul 2008 23:14:18 -0400 Subject: [PATCH 12/34] Lift "trailing entry" handling out of huff/cdic decompression and to general mobipocket book processing --- src/calibre/ebooks/mobi/huffcdic.py | 26 ++---------------------- src/calibre/ebooks/mobi/reader.py | 31 ++++++++++++++++++++++++++--- 2 files changed, 30 insertions(+), 27 deletions(-) diff --git a/src/calibre/ebooks/mobi/huffcdic.py b/src/calibre/ebooks/mobi/huffcdic.py index 40b3356188..aa3de47925 100644 --- a/src/calibre/ebooks/mobi/huffcdic.py +++ b/src/calibre/ebooks/mobi/huffcdic.py @@ -33,7 +33,7 @@ class BitReader(object): class HuffReader(object): def __init__(self, huffs, extra_flags): - self.huffs, self.extra_flags = huffs, extra_flags + self.huffs = huffs if huffs[0][0:4] != 'HUFF' or huffs[0][4:8] != '\x00\x00\x00\x18': raise MobiError('Invalid HUFF header') @@ -84,32 +84,10 @@ class HuffReader(object): self._unpack(BitReader(data)) return self.r - def sizeof_trailing_entries(self, data): - - def sizeof_trailing_entry(ptr, psize): - bitpos, result = 0, 0 - while True: - v = ord(ptr[psize-1]) - result |= (v & 0x7F) << bitpos - bitpos += 7 - psize -= 1 - if (v & 0x80) != 0 or (bitpos >= 28) or (psize == 0): - return result - - num = 0 - size = len(data) - flags = self.extra_flags >> 1 - while flags: - if flags & 1: - num += sizeof_trailing_entry(data, size - num) - flags >>= 1 - return num - def decompress(self, sections): r = '' for data in sections: - trail_size = self.sizeof_trailing_entries(data) - r += self.unpack(data[:len(data)-trail_size]) + r += self.unpack(data) if r.endswith('#'): r = r[:-1] return r diff --git a/src/calibre/ebooks/mobi/reader.py b/src/calibre/ebooks/mobi/reader.py index dea87dbd8c..31b4510510 100644 --- a/src/calibre/ebooks/mobi/reader.py +++ b/src/calibre/ebooks/mobi/reader.py @@ -89,7 +89,7 @@ class BookHeader(object): print '[WARNING] Unknown codepage %d. Assuming cp-1252'%self.codepage self.codec = 'cp1252' - if ident == 'TEXTREAD' or self.length != 0xE4: + if ident == 'TEXTREAD' or self.length < 0xE4 or 0xE8 < self.length: self.extra_flags = 0 else: self.extra_flags, = struct.unpack('>L', raw[0xF0:0xF4]) @@ -234,8 +234,33 @@ class MobiReader(object): return opf + def sizeof_trailing_entries(self, data): + def sizeof_trailing_entry(ptr, psize): + bitpos, result = 0, 0 + while True: + v = ord(ptr[psize-1]) + result |= (v & 0x7F) << bitpos + bitpos += 7 + psize -= 1 + if (v & 0x80) != 0 or (bitpos >= 28) or (psize == 0): + return result + + num = 0 + size = len(data) + flags = self.book_header.extra_flags >> 1 + while flags: + if flags & 1: + num += sizeof_trailing_entry(data, size - num) + flags >>= 1 + return num + + def text_section(self, index): + data = self.sections[index][0] + trail_size = self.sizeof_trailing_entries(data) + return data[:len(data)-trail_size] + def extract_text(self): - text_sections = [self.sections[i][0] for i in range(1, self.book_header.records+1)] + text_sections = [self.text_section(i) for i in range(1, self.book_header.records+1)] processed_records = list(range(0, self.book_header.records+1)) self.mobi_html = '' @@ -246,7 +271,7 @@ class MobiReader(object): self.book_header.huff_offset+self.book_header.huff_number)] processed_records += list(range(self.book_header.huff_offset, self.book_header.huff_offset+self.book_header.huff_number)) - huff = HuffReader(huffs, self.book_header.extra_flags) + huff = HuffReader(huffs) self.mobi_html = huff.decompress(text_sections) elif self.book_header.compression_type == '\x00\x02': From 4738dd521ce8edc3ea3c113a145ce280c09ae318 Mon Sep 17 00:00:00 2001 From: "Marshall T. Vandegrift" <llasram@gmail.com> Date: Thu, 10 Jul 2008 23:16:56 -0400 Subject: [PATCH 13/34] Removed some extraneous changes --- src/calibre/ebooks/metadata/opf.py | 2 +- src/calibre/ebooks/mobi/reader.py | 2 -- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/src/calibre/ebooks/metadata/opf.py b/src/calibre/ebooks/metadata/opf.py index da35a7de0a..e8075465a7 100644 --- a/src/calibre/ebooks/metadata/opf.py +++ b/src/calibre/ebooks/metadata/opf.py @@ -237,7 +237,7 @@ class OPF(MetaInformation): def get_title(self): title = self.soup.package.metadata.find('dc:title') - if title and title.string: + if title: return self.ENTITY_PATTERN.sub(entity_to_unicode, title.string).strip() return self.default_title.strip() diff --git a/src/calibre/ebooks/mobi/reader.py b/src/calibre/ebooks/mobi/reader.py index 31b4510510..d2c1327714 100644 --- a/src/calibre/ebooks/mobi/reader.py +++ b/src/calibre/ebooks/mobi/reader.py @@ -194,8 +194,6 @@ class MobiReader(object): def cleanup(self): self.processed_html = re.sub(r'<div height="0(pt|px|ex|em|%){0,1}"></div>', '', self.processed_html) - self.processed_html = re.sub(r'<([^>]*) height="([^"]*)"', r'<\1 style="margin-top: \2"', self.processed_html) - self.processed_html = re.sub(r'<([^>]*) width="([^"]*)"', r'<\1 style="text-indent: \2"', self.processed_html) def create_opf(self, htmlfile, guide=None): mi = self.book_header.exth.mi From 718ab0963f012606f48cd6cf993761ec04521b44 Mon Sep 17 00:00:00 2001 From: Kovid Goyal <kovid@kovidgoyal.net> Date: Fri, 11 Jul 2008 07:52:11 -0700 Subject: [PATCH 14/34] IGN:... --- src/calibre/gui2/main.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/calibre/gui2/main.py b/src/calibre/gui2/main.py index b70f02c576..d09922848f 100644 --- a/src/calibre/gui2/main.py +++ b/src/calibre/gui2/main.py @@ -1259,12 +1259,12 @@ path_to_ebook to the database. if __name__ == '__main__': try: sys.exit(main()) - except: + except Exception, err: if not iswindows: raise + tb = traceback.format_exc() from PyQt4.QtGui import QErrorMessage logfile = os.path.join(os.path.expanduser('~'), 'calibre.log') if os.path.exists(logfile): - log = open(logfile).read() - if log.strip(): - d = QErrorMessage() - d.showMessage(log) + log = open(logfile).read().decode('utf-8', 'ignore') + d = QErrorMessage('<b>Error:</b>%s<br><b>Traceback:</b><br>%s<b>Log:</b><br>'%(unicode(err), unicode(tb), log)) + d.exec_() From b28b7343547ab4bcb3f2eb0f772f962b84164ecd Mon Sep 17 00:00:00 2001 From: Kovid Goyal <kovid@kovidgoyal.net> Date: Fri, 11 Jul 2008 08:02:40 -0700 Subject: [PATCH 15/34] Implement #870 (Convert Mobipocket proprietary attributes to CSS) --- src/calibre/ebooks/mobi/reader.py | 28 +++++++++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/src/calibre/ebooks/mobi/reader.py b/src/calibre/ebooks/mobi/reader.py index d2c1327714..dd44393672 100644 --- a/src/calibre/ebooks/mobi/reader.py +++ b/src/calibre/ebooks/mobi/reader.py @@ -13,7 +13,7 @@ except ImportError: import Image as PILImage from calibre import __appname__ -from calibre.ebooks.BeautifulSoup import BeautifulSoup +from calibre.ebooks.BeautifulSoup import BeautifulSoup, Tag from calibre.ebooks.mobi import MobiError from calibre.ebooks.mobi.huffcdic import HuffReader from calibre.ebooks.mobi.palmdoc import decompress_doc @@ -165,13 +165,14 @@ class MobiReader(object): self.processed_html = self.processed_html.decode(self.book_header.codec, 'ignore') self.extract_images(processed_records, output_dir) self.replace_page_breaks() - self.cleanup() + self.cleanup_html() self.processed_html = re.compile('<head>', re.IGNORECASE).sub( '<head>\n<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />\n', self.processed_html) soup = BeautifulSoup(self.processed_html.replace('> <', '>\n<')) + self.cleanup_soup(soup) guide = soup.find('guide') for elem in soup.findAll(['metadata', 'guide']): elem.extract() @@ -192,9 +193,30 @@ class MobiReader(object): if ncx: open(os.path.splitext(htmlfile)[0]+'.ncx', 'wb').write(ncx) - def cleanup(self): + def cleanup_html(self): self.processed_html = re.sub(r'<div height="0(pt|px|ex|em|%){0,1}"></div>', '', self.processed_html) + def cleanup_soup(self, soup): + for tag in soup.recursiveChildGenerator(): + if not isinstance(tag, Tag): continue + styles = [] + try: + styles.append(tag['style']) + except KeyError: + pass + try: + styles.append('margin-top: %s' % tag['height']) + del tag['height'] + except KeyError: + pass + try: + styles.append('text-indent: %s' % tag['width']) + del tag['width'] + except KeyError: + pass + if styles: + tag['style'] = '; '.join(styles) + def create_opf(self, htmlfile, guide=None): mi = self.book_header.exth.mi opf = OPFCreator(os.path.dirname(htmlfile), mi) From d7c3df5f43146b6f2fcfb28c41a3aac728b83831 Mon Sep 17 00:00:00 2001 From: "Marshall T. Vandegrift" <llasram@gmail.com> Date: Sat, 12 Jul 2008 12:01:15 -0400 Subject: [PATCH 16/34] Fix HUFF/CDIC decompression regression. --- src/calibre/ebooks/mobi/huffcdic.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/calibre/ebooks/mobi/huffcdic.py b/src/calibre/ebooks/mobi/huffcdic.py index aa3de47925..693eb314d5 100644 --- a/src/calibre/ebooks/mobi/huffcdic.py +++ b/src/calibre/ebooks/mobi/huffcdic.py @@ -32,7 +32,7 @@ class BitReader(object): class HuffReader(object): - def __init__(self, huffs, extra_flags): + def __init__(self, huffs): self.huffs = huffs if huffs[0][0:4] != 'HUFF' or huffs[0][4:8] != '\x00\x00\x00\x18': From 36d987eed63ac98d6565b168793d704522827958 Mon Sep 17 00:00:00 2001 From: Kovid Goyal <kovid@kovidgoyal.net> Date: Sat, 12 Jul 2008 14:38:20 -0700 Subject: [PATCH 17/34] IGN:... --- src/calibre/manual/faq.rst | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/calibre/manual/faq.rst b/src/calibre/manual/faq.rst index 9a12253b62..cb381cb8aa 100644 --- a/src/calibre/manual/faq.rst +++ b/src/calibre/manual/faq.rst @@ -131,7 +131,14 @@ Why does |app| show only some of my fonts on OS X? The graphical user interface of |app| is not starting on Windows? ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -If you've never used the graphical user interface before, try deleting the file library1.db (it will be somewhere under :file:`C:\\Documents and Settings` on Windows XP and :file:`C:\\Users` on Windows Vista. If that doesn't fix the problem, locate the file calibre.log (in the same places as library1.db) and post its contents in a help message on the `Forums <http://calibre.kovidgoyal.net/discussion>`_. +If you've never used the graphical user interface before, try deleting the file library1.db (it will be somewhere under :file:`C:\\Documents and Settings` on Windows XP and :file:`C:\\Users` on Windows Vista. If that doesn't fix the problem, locate the file calibre.log (in the same places as library1.db) and post its contents in a help message on the `Forums <http://calibre.kovidgoyal.net/discussion>`_. If you can't find either file, try using the windows find feature to search for them. If the files dont exist on your system, try the following: + +Start a command prompt (press the windows key and R and type cmd.exe in the run dialog). At the command prompt type the command `calibre-debug` and press enter. You will se a new, green prompt. At theis prompt, type the following two lines:: + + from calibre.gui2.main import main + main() + +Post any output you see when asking for help. I want some feature added to |app|. What can I do? ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ From 37eceaf02fd0ad4ccd29bba11186a6c95fe4066d Mon Sep 17 00:00:00 2001 From: Kovid Goyal <kovid@kovidgoyal.net> Date: Tue, 15 Jul 2008 18:26:42 -0700 Subject: [PATCH 18/34] Fix linux binary installer to work with dumb terminals --- src/calibre/linux_installer.py | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/calibre/linux_installer.py b/src/calibre/linux_installer.py index db9c8dd1b1..2ae669fdf0 100644 --- a/src/calibre/linux_installer.py +++ b/src/calibre/linux_installer.py @@ -240,13 +240,21 @@ def do_postinstall(destdir): os.chdir(cwd) def download_tarball(): - pb = ProgressBar(TerminalController(sys.stdout), 'Downloading calibre...') + try: + pb = ProgressBar(TerminalController(sys.stdout), 'Downloading calibre...') + except ValueError: + print 'Downloading calibre...' + pb = None src = urllib2.urlopen(MOBILEREAD+'calibre-%version-i686.tar.bz2') size = int(src.info()['content-length']) f = tempfile.NamedTemporaryFile() while f.tell() < size: f.write(src.read(4*1024)) - pb.update(f.tell()/float(size)) + percent = f.tell()/float(size) + if pb is not None: + pb.update(percent) + else: + print '%d%, '%int(percent*100) f.seek(0) return f From 97c15c0993377bb0276164270ae2e437b2323f77 Mon Sep 17 00:00:00 2001 From: Kovid Goyal <kovid@kovidgoyal.net> Date: Tue, 15 Jul 2008 19:34:27 -0700 Subject: [PATCH 19/34] Fix linux binary installer on dumb terminals --- src/calibre/trac/plugins/Changelog.py | 2 +- src/calibre/trac/plugins/templates/pyinstaller.html | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/calibre/trac/plugins/Changelog.py b/src/calibre/trac/plugins/Changelog.py index 35c54b1bda..ff15329859 100644 --- a/src/calibre/trac/plugins/Changelog.py +++ b/src/calibre/trac/plugins/Changelog.py @@ -69,4 +69,4 @@ class ChangeLogMacro(WikiMacroBase): if __name__ == '__main__': print bzr_log_to_txt() - \ No newline at end of file + diff --git a/src/calibre/trac/plugins/templates/pyinstaller.html b/src/calibre/trac/plugins/templates/pyinstaller.html index c04fd13da4..4061b0aadc 100644 --- a/src/calibre/trac/plugins/templates/pyinstaller.html +++ b/src/calibre/trac/plugins/templates/pyinstaller.html @@ -44,4 +44,4 @@ </div> </div> </body> -</html> \ No newline at end of file +</html> From c4eb7fea8b44425b3c3051efcc70d594b6f2cf56 Mon Sep 17 00:00:00 2001 From: Kovid Goyal <kovid@kovidgoyal.net> Date: Tue, 15 Jul 2008 21:42:18 -0700 Subject: [PATCH 20/34] IGN:... --- src/calibre/linux_installer.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/calibre/linux_installer.py b/src/calibre/linux_installer.py index 2ae669fdf0..8b012339f2 100644 --- a/src/calibre/linux_installer.py +++ b/src/calibre/linux_installer.py @@ -254,7 +254,7 @@ def download_tarball(): if pb is not None: pb.update(percent) else: - print '%d%, '%int(percent*100) + print '%d%%, '%int(percent*100) f.seek(0) return f @@ -277,4 +277,4 @@ def main(args=sys.argv): return 0 if __name__ == '__main__': - sys.exit(main()) \ No newline at end of file + sys.exit(main()) From 28a93ca9c7d2fe85be259b926115fe56ee8f2b93 Mon Sep 17 00:00:00 2001 From: Kovid Goyal <kovid@kovidgoyal.net> Date: Wed, 16 Jul 2008 13:10:03 -0700 Subject: [PATCH 21/34] IGN:Fix localization of timestamp for device files --- src/calibre/__init__.py | 7 ++++++- src/calibre/gui2/library.py | 4 ++-- src/calibre/linux_installer.py | 2 +- src/calibre/utils/fontconfig.py | 8 ++++---- 4 files changed, 13 insertions(+), 8 deletions(-) diff --git a/src/calibre/__init__.py b/src/calibre/__init__.py index acd5d2e930..5c55632da9 100644 --- a/src/calibre/__init__.py +++ b/src/calibre/__init__.py @@ -30,7 +30,12 @@ islinux = not(iswindows or isosx) try: locale.setlocale(locale.LC_ALL, '') except: - pass + dl = locale.getdefaultlocale() + try: + if dl: + locale.setlocale(dl[0]) + except: + pass try: preferred_encoding = locale.getpreferredencoding() diff --git a/src/calibre/gui2/library.py b/src/calibre/gui2/library.py index 70f92e2805..76527c3034 100644 --- a/src/calibre/gui2/library.py +++ b/src/calibre/gui2/library.py @@ -574,7 +574,7 @@ class DeviceBooksModel(BooksModel): for row in rows: if not succeeded: indices = self.row_indices(self.index(row, 0)) - self.emit(SIGNAL('dataChanged(QModelIndex, QModelIndex)'), indices[0], indices[-1]) + self.emit(SIGNAL('dataChanged(QModelIndex, QModelIndex)'), indices[0], indices[-1]) def paths_deleted(self, paths): self.map = list(range(0, len(self.db))) @@ -691,7 +691,7 @@ class DeviceBooksModel(BooksModel): dt = item.datetime dt = datetime(*dt[0:6]) dt = dt - timedelta(seconds=time.timezone) + timedelta(hours=time.daylight) - data[_('Timestamp')] = dt.ctime() + data[_('Timestamp')] = dt.strftime('%a %b %d %H:%M:%S %Y') data[_('Tags')] = ', '.join(item.tags) self.emit(SIGNAL('new_bookdisplay_data(PyQt_PyObject)'), data) diff --git a/src/calibre/linux_installer.py b/src/calibre/linux_installer.py index 8b012339f2..145b255b05 100644 --- a/src/calibre/linux_installer.py +++ b/src/calibre/linux_installer.py @@ -254,7 +254,7 @@ def download_tarball(): if pb is not None: pb.update(percent) else: - print '%d%%, '%int(percent*100) + print '%d%%, '%int(percent*100), f.seek(0) return f diff --git a/src/calibre/utils/fontconfig.py b/src/calibre/utils/fontconfig.py index 3a92a76670..0f6357609c 100644 --- a/src/calibre/utils/fontconfig.py +++ b/src/calibre/utils/fontconfig.py @@ -33,7 +33,7 @@ except: preferred_encoding = 'utf-8' iswindows = 'win32' in sys.platform or 'win64' in sys.platform -isosx = 'darwin' in sys.platform +isosx = 'darwin' in sys.platform def load_library(): if isosx: @@ -94,7 +94,7 @@ class FcValue(Structure): _fields_ = [ ('type', c_int), ('u', _FcValue) - ] + ] lib = load_library() lib.FcPatternCreate.restype = c_void_p @@ -145,12 +145,12 @@ if hasattr(sys, 'frameworks_dir'): elif not lib.FcInit(): raise RuntimeError(_('Could not initialize the fontconfig library')) -def find_font_families(allowed_extensions=['ttf']): +def find_font_families(allowed_extensions=['ttf', 'otf']): ''' Return an alphabetically sorted list of font families available on the system. `allowed_extensions`: A list of allowed extensions for font file types. Defaults to - `['ttf']`. If it is empty, it is ignored. + `['ttf', 'otf']`. If it is empty, it is ignored. ''' allowed_extensions = [i.lower() for i in allowed_extensions] From e6bfebed5a8070105a3b9ffcd75920e5150005b9 Mon Sep 17 00:00:00 2001 From: Kovid Goyal <kovid@kovidgoyal.net> Date: Wed, 16 Jul 2008 23:42:41 -0700 Subject: [PATCH 22/34] Move scanning of system fonts into a separate thread. This will greatly reduce first run startup times. --- src/calibre/gui2/main.py | 3 ++ src/calibre/utils/fontconfig.py | 51 +++++++++++++++++++++++---------- 2 files changed, 39 insertions(+), 15 deletions(-) diff --git a/src/calibre/gui2/main.py b/src/calibre/gui2/main.py index d09922848f..5dafe3c683 100644 --- a/src/calibre/gui2/main.py +++ b/src/calibre/gui2/main.py @@ -59,6 +59,9 @@ class Main(MainWindow, Ui_MainWindow): def __init__(self, single_instance, opts, parent=None): MainWindow.__init__(self, opts, parent) + # Initialize fontconfig in a separate thread as this can be a lengthy + # process if run for the first time on this machine + self.fc = __import__('calibre.utils.fontconfig', fromlist=1) self.single_instance = single_instance if self.single_instance is not None: self.connect(self.single_instance, SIGNAL('message_received(PyQt_PyObject)'), diff --git a/src/calibre/utils/fontconfig.py b/src/calibre/utils/fontconfig.py index 0f6357609c..3e74362720 100644 --- a/src/calibre/utils/fontconfig.py +++ b/src/calibre/utils/fontconfig.py @@ -128,22 +128,40 @@ lib.FcConfigParseAndLoad.restype = c_int lib.FcConfigBuildFonts.argtypes = [c_void_p] lib.FcConfigBuildFonts.restype = c_int +_init_error = None +_initialized = False +from threading import Timer +def _do_init(): + # Initialize the fontconfig library. This has to be done manually + # for the OS X bundle as it may have its own private fontconfig. + if hasattr(sys, 'frameworks_dir'): + config_dir = os.path.join(os.path.dirname(getattr(sys, 'frameworks_dir')), 'Resources', 'fonts') + if isinstance(config_dir, unicode): + config_dir = config_dir.encode(sys.getfilesystemencoding()) + config = lib.FcConfigCreate() + if not lib.FcConfigParseAndLoad(config, os.path.join(config_dir, 'fonts.conf'), 1): + _init_error = 'Could not parse the fontconfig configuration' + return + if not lib.FcConfigBuildFonts(config): + _init_error = 'Could not build fonts' + return + if not lib.FcConfigSetCurrent(config): + _init_error = 'Could not set font config' + return + elif not lib.FcInit(): + _init_error = _('Could not initialize the fontconfig library') + return + global _initialized + _initialized = True + + +_init_timer = Timer(0.1, _do_init) +_init_timer.start() -# Initialize the fontconfig library. This has to be done manually -# for the OS X bundle as it may have its own private fontconfig. -if hasattr(sys, 'frameworks_dir'): - config_dir = os.path.join(os.path.dirname(getattr(sys, 'frameworks_dir')), 'Resources', 'fonts') - if isinstance(config_dir, unicode): - config_dir = config_dir.encode(sys.getfilesystemencoding()) - config = lib.FcConfigCreate() - if not lib.FcConfigParseAndLoad(config, os.path.join(config_dir, 'fonts.conf'), 1): - raise RuntimeError('Could not parse the fontconfig configuration') - if not lib.FcConfigBuildFonts(config): - raise RuntimeError('Could not build fonts') - if not lib.FcConfigSetCurrent(config): - raise RuntimeError('Could not set font config') -elif not lib.FcInit(): - raise RuntimeError(_('Could not initialize the fontconfig library')) +def join(): + _init_timer.join() + if _init_error is not None: + raise RuntimeError(_init_error) def find_font_families(allowed_extensions=['ttf', 'otf']): ''' @@ -152,6 +170,7 @@ def find_font_families(allowed_extensions=['ttf', 'otf']): `allowed_extensions`: A list of allowed extensions for font file types. Defaults to `['ttf', 'otf']`. If it is empty, it is ignored. ''' + join() allowed_extensions = [i.lower() for i in allowed_extensions] empty_pattern = lib.FcPatternCreate() @@ -193,6 +212,7 @@ def files_for_family(family, normalize=True): they are a tuple (slant, weight) otherwise they are strings from the set `('normal', 'bold', 'italic', 'bi', 'light', 'li')` ''' + join() if isinstance(family, unicode): family = family.encode(preferred_encoding) family_pattern = lib.FcPatternBuild(0, 'family', FcTypeString, family, 0) @@ -268,6 +288,7 @@ def match(name, sort=False, verbose=False): decreasing closeness of matching. `verbose`: If `True` print debugging information to stdout ''' + join() if isinstance(name, unicode): name = name.encode(preferred_encoding) pat = lib.FcNameParse(name) From 25310eb14605d23550f573a2d307e87da4bc5884 Mon Sep 17 00:00:00 2001 From: Kovid Goyal <kovid@kovidgoyal.net> Date: Thu, 17 Jul 2008 09:07:17 -0700 Subject: [PATCH 23/34] IGN:... --- src/calibre/library/cli.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/calibre/library/cli.py b/src/calibre/library/cli.py index 6e4ceb95b8..0e972cb20b 100644 --- a/src/calibre/library/cli.py +++ b/src/calibre/library/cli.py @@ -170,7 +170,8 @@ def do_add(db, paths, one_book_per_directory, recurse, add_duplicates): for mi, formats in dir_dups: db.import_book(mi, formats) else: - print >>sys.stderr, _('The following books were not added as they already exist in the database (see --duplicates option):') + if dir_dups or file_duplicates: + print >>sys.stderr, _('The following books were not added as they already exist in the database (see --duplicates option):') for mi, formats in dir_dups: title = mi.title if isinstance(title, unicode): From 2960781bb022dd7757def1b966091402d1e77393 Mon Sep 17 00:00:00 2001 From: Kovid Goyal <kovid@kovidgoyal.net> Date: Thu, 17 Jul 2008 09:46:36 -0700 Subject: [PATCH 24/34] Add support for extracting cover images to fb2-meta --- src/calibre/ebooks/metadata/fb2.py | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/src/calibre/ebooks/metadata/fb2.py b/src/calibre/ebooks/metadata/fb2.py index 5bffb47409..672fc3e9ee 100644 --- a/src/calibre/ebooks/metadata/fb2.py +++ b/src/calibre/ebooks/metadata/fb2.py @@ -5,7 +5,8 @@ __copyright__ = '2008, Anatoly Shipitsin <norguhtar at gmail.com>' '''Read meta information from fb2 files''' -import sys, os +import sys, os, mimetypes +from base64 import b64decode from calibre.ebooks.BeautifulSoup import BeautifulStoneSoup from calibre.ebooks.metadata import MetaInformation @@ -18,15 +19,30 @@ def get_metadata(stream): author= [firstname+" "+lastname] title = soup.find("book-title").string comments = soup.find("annotation") + cp = soup.find('coverpage') + cdata = None + if cp: + cimage = cp.find('image', attrs={'l:href':True}) + if cimage: + id = cimage['l:href'].replace('#', '') + binary = soup.find('binary', id=id, attrs={'content-type':True}) + if binary: + mt = binary['content-type'] + exts = mimetypes.guess_all_extensions(mt) + if not exts: + exts = ['.jpg'] + cdata = (exts[0][1:], b64decode(binary.string.strip())) + if comments and len(comments) > 1: - comments = comments.p.contents[0] + comments = comments.p.contents[0] series = soup.find("sequence") - # series_index = series.index mi = MetaInformation(title, author) mi.comments = comments + mi.author_sort = lastname+'; '+firstname if series: mi.series = series.get('name', None) - # mi.series_index = series_index + if cdata: + mi.cover_data = cdata return mi def main(args=sys.argv): From 27a0a596ddd87a0fdf60aafc21437812d0bf4637 Mon Sep 17 00:00:00 2001 From: Kovid Goyal <kovid@kovidgoyal.net> Date: Thu, 17 Jul 2008 11:54:18 -0700 Subject: [PATCH 25/34] Fix #882 --- src/calibre/ebooks/lrf/fb2/fb2.xsl | 32 ++++++++++++++++++++++-------- 1 file changed, 24 insertions(+), 8 deletions(-) diff --git a/src/calibre/ebooks/lrf/fb2/fb2.xsl b/src/calibre/ebooks/lrf/fb2/fb2.xsl index 75f3c245ed..f67b05b544 100644 --- a/src/calibre/ebooks/lrf/fb2/fb2.xsl +++ b/src/calibre/ebooks/lrf/fb2/fb2.xsl @@ -128,21 +128,35 @@ </xsl:template> <xsl:template match="fb:section"> - <a name="TOC_{generate-id()}"></a> - <xsl:if test="@id"> - <xsl:element name="a"> - <xsl:attribute name="name"><xsl:value-of select="@id"/></xsl:attribute> - </xsl:element> - </xsl:if> - <xsl:apply-templates/> + <xsl:variable name="section_has_title"> + <xsl:choose> + <xsl:when test="./fb:title"><xsl:value-of select="generate-id()" /></xsl:when> + <xsl:otherwise>None</xsl:otherwise> + </xsl:choose> + </xsl:variable> + <xsl:if test="$section_has_title = 'None'"> + <a name="TOC_{generate-id()}" /> + </xsl:if> + <xsl:apply-templates> + <xsl:with-param name="section_toc_id" select="$section_has_title" /> + </xsl:apply-templates> </xsl:template> <!-- section/title --> <xsl:template match="fb:section/fb:title|fb:poem/fb:title"> + <xsl:param name="section_toc_id" /> <xsl:choose> <xsl:when test="count(ancestor::node()) < 9"> <xsl:element name="{concat('h',count(ancestor::node())-3)}"> + <xsl:if test="../@id"> + <xsl:attribute name="id"><xsl:value-of select="../@id" /></xsl:attribute> + </xsl:if> + <xsl:if test="$section_toc_id != 'None'"> + <xsl:element name="a"> + <xsl:attribute name="name">TOC_<xsl:value-of select="$section_toc_id"/></xsl:attribute> + </xsl:element> + </xsl:if> <a name="TOC_{generate-id()}"></a> <xsl:if test="@id"> <xsl:element name="a"> @@ -166,7 +180,9 @@ </xsl:template> <!-- section/title --> <xsl:template match="fb:body/fb:title"> - <h1><xsl:apply-templates mode="title"/></h1> + <xsl:element name="h1"> + <xsl:apply-templates mode="title"/> + </xsl:element> </xsl:template> <xsl:template match="fb:title/fb:p"> From 1cf4f8661a06bd405c86f9953e860059cb2ea1f7 Mon Sep 17 00:00:00 2001 From: Kovid Goyal <kovid@kovidgoyal.net> Date: Thu, 17 Jul 2008 11:55:01 -0700 Subject: [PATCH 26/34] Fix #883 --- src/calibre/ebooks/lrf/fb2/convert_from.py | 30 +++++++++++----------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/src/calibre/ebooks/lrf/fb2/convert_from.py b/src/calibre/ebooks/lrf/fb2/convert_from.py index 29ceaa11cf..27c55757be 100644 --- a/src/calibre/ebooks/lrf/fb2/convert_from.py +++ b/src/calibre/ebooks/lrf/fb2/convert_from.py @@ -3,15 +3,13 @@ __copyright__ = '2008, Anatoly Shipitsin <norguhtar at gmail.com>' """ Convert .fb2 files to .lrf """ -import os, sys, tempfile, subprocess, shutil, logging, glob +import os, sys, tempfile, shutil, logging +from base64 import b64decode -from calibre.ptempfile import PersistentTemporaryFile from calibre.ebooks.lrf import option_parser as lrf_option_parser from calibre.ebooks.metadata.meta import get_metadata -from calibre.ebooks import ConversionError from calibre.ebooks.lrf.html.convert_from import process_file as html_process_file from calibre import setup_cli_handlers, __appname__ -from calibre.ebooks.BeautifulSoup import BeautifulStoneSoup from calibre.resources import fb2_xsl def option_parser(): @@ -22,25 +20,27 @@ _('''%prog [options] mybook.fb2 %prog converts mybook.fb2 to mybook.lrf''')) parser.add_option('--debug-html-generation', action='store_true', default=False, dest='debug_html_generation', help=_('Print generated HTML to stdout and quit.')) + parser.add_option('--keep-intermediate-files', action='store_true', default=False, + help=_('Keep generated HTML files after completing conversion to LRF.')) return parser +def extract_embedded_content(doc): + for elem in doc.xpath('./*'): + if 'binary' in elem.tag and elem.attrib.has_key('id'): + fname = elem.attrib['id'] + data = b64decode(elem.text.strip()) + open(fname, 'wb').write(data) def generate_html(fb2file, encoding, logger): from lxml import etree - tdir = tempfile.mkdtemp(prefix=__appname__+'_') - ofile = os.path.join(tdir, 'index.xml') + tdir = tempfile.mkdtemp(prefix=__appname__+'_fb2_') cwd = os.getcwdu() os.chdir(tdir) try: logger.info('Parsing XML...') parser = etree.XMLParser(recover=True, no_network=True) - try: - doc = etree.parse(fb2file, parser) - except: - raise - logger.info('Parsing failed. Trying to clean up XML...') - soup = BeautifulStoneSoup(open(fb2file, 'rb').read()) - doc = etree.fromstring(str(soup)) + doc = etree.parse(fb2file, parser) + extract_embedded_content(doc) logger.info('Converting XML to HTML...') styledoc = etree.fromstring(fb2_xsl) @@ -72,7 +72,7 @@ def process_file(path, options, logger=None): options.output = os.path.abspath(os.path.basename(os.path.splitext(path)[0]) + ext) options.output = os.path.abspath(os.path.expanduser(options.output)) if not mi.title: - mi.title = os.path.splitext(os.path.basename(rtf))[0] + mi.title = os.path.splitext(os.path.basename(fb2))[0] if (not options.title or options.title == 'Unknown'): options.title = mi.title if (not options.author or options.author == 'Unknown') and mi.authors: @@ -85,7 +85,7 @@ def process_file(path, options, logger=None): html_process_file(htmlfile, options, logger) finally: os.chdir(cwd) - if hasattr(options, 'keep_intermediate_files') and options.keep_intermediate_files: + if getattr(options, 'keep_intermediate_files', False): logger.debug('Intermediate files in '+ tdir) else: shutil.rmtree(tdir) From 6c339c4d4b17757757a06a6be09273e2084cba97 Mon Sep 17 00:00:00 2001 From: Kovid Goyal <kovid@kovidgoyal.net> Date: Thu, 17 Jul 2008 12:20:49 -0700 Subject: [PATCH 27/34] IGN:... --- src/calibre/ebooks/lrf/fb2/fb2.xsl | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/calibre/ebooks/lrf/fb2/fb2.xsl b/src/calibre/ebooks/lrf/fb2/fb2.xsl index f67b05b544..7a977aee76 100644 --- a/src/calibre/ebooks/lrf/fb2/fb2.xsl +++ b/src/calibre/ebooks/lrf/fb2/fb2.xsl @@ -136,6 +136,11 @@ </xsl:variable> <xsl:if test="$section_has_title = 'None'"> <a name="TOC_{generate-id()}" /> + <xsl:if test="@id"> + <xsl:element name="a"> + <xsl:attribute name="name"><xsl:value-of select="@id"/></xsl:attribute> + </xsl:element> + </xsl:if> </xsl:if> <xsl:apply-templates> <xsl:with-param name="section_toc_id" select="$section_has_title" /> From 669b983d757c4217f7142af7b727153d730b8a0f Mon Sep 17 00:00:00 2001 From: Kovid Goyal <kovid@kovidgoyal.net> Date: Thu, 17 Jul 2008 14:42:15 -0700 Subject: [PATCH 28/34] Fix #884 --- src/calibre/ebooks/metadata/toc.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/calibre/ebooks/metadata/toc.py b/src/calibre/ebooks/metadata/toc.py index a966dd6fae..dc039a7f80 100644 --- a/src/calibre/ebooks/metadata/toc.py +++ b/src/calibre/ebooks/metadata/toc.py @@ -70,7 +70,7 @@ class TOC(list): break if toc is not None: - if toc.lower() != 'ncx': + if toc.lower() not in ('ncx', 'ncxtoc'): toc = urlparse(unquote(toc))[2] toc = toc.replace('/', os.sep) if not os.path.isabs(toc): @@ -88,6 +88,10 @@ class TOC(list): traceback.print_exc(file=sys.stdout) print 'Continuing anyway' else: + path = opfreader.manifest.item(toc.lower()) + if path and os.access(path, os.R_OK): + self.read_ncx_toc(path) + return cwd = os.path.abspath(self.base_path) m = glob.glob(os.path.join(cwd, '*.ncx')) if m: From ab1fae0134268f374776ea6f31a35b2205ef8520 Mon Sep 17 00:00:00 2001 From: "Marshall T. Vandegrift" <llasram@gmail.com> Date: Fri, 18 Jul 2008 00:21:15 -0400 Subject: [PATCH 29/34] Fixed trailing space issue --- src/calibre/ebooks/lrf/html/convert_from.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/calibre/ebooks/lrf/html/convert_from.py b/src/calibre/ebooks/lrf/html/convert_from.py index 15eede6d6c..8f46f1daef 100644 --- a/src/calibre/ebooks/lrf/html/convert_from.py +++ b/src/calibre/ebooks/lrf/html/convert_from.py @@ -222,6 +222,7 @@ class HTMLConverter(object, LoggingInterface): self.memory = [] #: Used to ensure that duplicate CSS unhandled erros are not reported self.tops = {} #: element representing the top of each HTML file in the LRF file self.previous_text = '' #: Used to figure out when to lstrip + self.stripped_space = '' self.preserve_block_style = False #: Used so that <p> tags in <blockquote> elements are handled properly self.avoid_page_break = False self.current_page = book.create_page() @@ -864,6 +865,10 @@ class HTMLConverter(object, LoggingInterface): if collapse_whitespace: src = re.sub(r'\s{1,}', ' ', src) + if self.stripped_space and len(src) == len(src.lstrip(u' \n\r\t')): + src = self.stripped_space + src + src, orig = src.rstrip(u' \n\r\t'), src + self.stripped_space = orig[len(src):] if len(self.previous_text) != len(self.previous_text.rstrip(u' \n\r\t')): src = src.lstrip(u' \n\r\t') if len(src): From 7e20defcd8e87e1e1fc74b85ec8b3ac01010e56e Mon Sep 17 00:00:00 2001 From: Kovid Goyal <kovid@kovidgoyal.net> Date: Fri, 18 Jul 2008 12:06:50 -0700 Subject: [PATCH 30/34] Add option to calibre-debug to update frozen code --- src/calibre/debug.py | 43 +- src/calibre/libunzip.py | 37 +- src/calibre/utils/zipfile.py | 975 +++++++++++++++++++++++++++++++++++ 3 files changed, 1049 insertions(+), 6 deletions(-) create mode 100644 src/calibre/utils/zipfile.py diff --git a/src/calibre/debug.py b/src/calibre/debug.py index ea756b2611..3436026f88 100644 --- a/src/calibre/debug.py +++ b/src/calibre/debug.py @@ -6,12 +6,47 @@ __copyright__ = '2008, Kovid Goyal <kovid at kovidgoyal.net>' Embedded console for debugging. ''' -import sys +import sys, os, re +from calibre import OptionParser, iswindows +from calibre.libunzip import update + +def option_parser(): + parser = OptionParser(usage='''\ +%prog [options] + +Run an embedded python interpreter. +''') + parser.add_option('--update-module', help='Update the specified module in the frozen library. '+ + 'Module specifications are of the form full.name.of.module,path_to_module.py', default=None + ) + return parser + +def update_zipfile(zipfile, mod, path): + pat = re.compile(mod.replace('.', '/')+r'\.py[co]*') + name = mod.replace('.', '/') + os.path.splitext(path)[-1] + update(zipfile, [pat], [path], [name]) + + +def update_module(mod, path): + if not hasattr(sys, 'frozen'): + raise RuntimeError('Modules can only be updated in frozen installs.') + if True or iswindows: + zp = os.path.join(os.path.dirname(sys.executable), 'library.zip') + update_zipfile(zp, mod, path) + else: + raise ValueError('Updating modules is not supported on this platform.') def main(args=sys.argv): - from IPython.Shell import IPShellEmbed - ipshell = IPShellEmbed() - ipshell() + opts, args = option_parser().parse_args(args) + if opts.update_module: + mod, path = opts.update_module.partition(',')[0], opts.update_module.partition(',')[-1] + update_module(mod, os.path.expanduser(path)) + else: + from IPython.Shell import IPShellEmbed + ipshell = IPShellEmbed() + ipshell() + + return 0 diff --git a/src/calibre/libunzip.py b/src/calibre/libunzip.py index edabe8f732..2c24067f7a 100644 --- a/src/calibre/libunzip.py +++ b/src/calibre/libunzip.py @@ -1,8 +1,41 @@ +#!/usr/bin/env python __license__ = 'GPL v3' -__copyright__ = '2008, Kovid Goyal <kovid at kovidgoyal.net>' +__copyright__ = '2008, Kovid Goyal kovid@kovidgoyal.net' +__docformat__ = 'restructuredtext en' -import os, zipfile +import os from cStringIO import StringIO +from calibre.utils import zipfile + +def update(pathtozip, patterns, filepaths, names, compression=zipfile.ZIP_DEFLATED, verbose=True): + ''' + Update files in the zip file at `pathtozip` matching the given + `patterns` with the given `filepaths`. If more than + one file matches, all of the files are replaced. + + :param patterns: A list of compiled regular expressions + :param filepaths: A list of paths to the replacement files. Must have the + same length as `patterns`. + :param names: A list of archive names for each file in filepaths. + A name can be `None` in which case the name of the existing + file in the archive is used. + :param compression: The compression to use when replacing files. Can be + either `zipfile.ZIP_DEFLATED` or `zipfile.ZIP_STORED`. + ''' + assert len(patterns) == len(filepaths) == len(names) + z = zipfile.ZipFile(pathtozip, mode='a') + for name in z.namelist(): + for pat, fname, new_name in zip(patterns, filepaths, names): + if pat.search(name): + if verbose: + print 'Updating %s with %s' % (name, fname) + if new_name is None: + z.replace(fname, arcname=name, compress_type=compression) + else: + z.delete(name) + z.write(fname, new_name, compress_type=compression) + break + z.close() def extract(filename, dir): """ diff --git a/src/calibre/utils/zipfile.py b/src/calibre/utils/zipfile.py new file mode 100644 index 0000000000..bf126d1d4d --- /dev/null +++ b/src/calibre/utils/zipfile.py @@ -0,0 +1,975 @@ +""" +Read and write ZIP files. Modified by Kovid Goyal to allow replacing of files +in the ZIP archive. +""" +import struct, os, time, sys +import binascii, cStringIO + +try: + import zlib # We may need its compression method +except ImportError: + zlib = None + +__all__ = ["BadZipfile", "error", "ZIP_STORED", "ZIP_DEFLATED", "is_zipfile", + "ZipInfo", "ZipFile", "PyZipFile", "LargeZipFile" ] + +class BadZipfile(Exception): + pass + + +class LargeZipFile(Exception): + """ + Raised when writing a zipfile, the zipfile requires ZIP64 extensions + and those extensions are disabled. + """ + +error = BadZipfile # The exception raised by this module + +ZIP64_LIMIT= (1 << 31) - 1 + +# constants for Zip file compression methods +ZIP_STORED = 0 +ZIP_DEFLATED = 8 +# Other ZIP compression methods not supported + +# Here are some struct module formats for reading headers +structEndArchive = "<4s4H2LH" # 9 items, end of archive, 22 bytes +stringEndArchive = "PK\005\006" # magic number for end of archive record +structCentralDir = "<4s4B4HlLL5HLL"# 19 items, central directory, 46 bytes +stringCentralDir = "PK\001\002" # magic number for central directory +structFileHeader = "<4s2B4HlLL2H" # 12 items, file header record, 30 bytes +stringFileHeader = "PK\003\004" # magic number for file header +structEndArchive64Locator = "<4slql" # 4 items, locate Zip64 header, 20 bytes +stringEndArchive64Locator = "PK\x06\x07" # magic token for locator header +structEndArchive64 = "<4sqhhllqqqq" # 10 items, end of archive (Zip64), 56 bytes +stringEndArchive64 = "PK\x06\x06" # magic token for Zip64 header + + +# indexes of entries in the central directory structure +_CD_SIGNATURE = 0 +_CD_CREATE_VERSION = 1 +_CD_CREATE_SYSTEM = 2 +_CD_EXTRACT_VERSION = 3 +_CD_EXTRACT_SYSTEM = 4 # is this meaningful? +_CD_FLAG_BITS = 5 +_CD_COMPRESS_TYPE = 6 +_CD_TIME = 7 +_CD_DATE = 8 +_CD_CRC = 9 +_CD_COMPRESSED_SIZE = 10 +_CD_UNCOMPRESSED_SIZE = 11 +_CD_FILENAME_LENGTH = 12 +_CD_EXTRA_FIELD_LENGTH = 13 +_CD_COMMENT_LENGTH = 14 +_CD_DISK_NUMBER_START = 15 +_CD_INTERNAL_FILE_ATTRIBUTES = 16 +_CD_EXTERNAL_FILE_ATTRIBUTES = 17 +_CD_LOCAL_HEADER_OFFSET = 18 + +# indexes of entries in the local file header structure +_FH_SIGNATURE = 0 +_FH_EXTRACT_VERSION = 1 +_FH_EXTRACT_SYSTEM = 2 # is this meaningful? +_FH_GENERAL_PURPOSE_FLAG_BITS = 3 +_FH_COMPRESSION_METHOD = 4 +_FH_LAST_MOD_TIME = 5 +_FH_LAST_MOD_DATE = 6 +_FH_CRC = 7 +_FH_COMPRESSED_SIZE = 8 +_FH_UNCOMPRESSED_SIZE = 9 +_FH_FILENAME_LENGTH = 10 +_FH_EXTRA_FIELD_LENGTH = 11 + +def is_zipfile(filename): + """Quickly see if file is a ZIP file by checking the magic number.""" + try: + fpin = open(filename, "rb") + endrec = _EndRecData(fpin) + fpin.close() + if endrec: + return True # file has correct magic number + except IOError: + pass + return False + +def _EndRecData64(fpin, offset, endrec): + """ + Read the ZIP64 end-of-archive records and use that to update endrec + """ + locatorSize = struct.calcsize(structEndArchive64Locator) + fpin.seek(offset - locatorSize, 2) + data = fpin.read(locatorSize) + sig, diskno, reloff, disks = struct.unpack(structEndArchive64Locator, data) + if sig != stringEndArchive64Locator: + return endrec + + if diskno != 0 or disks != 1: + raise BadZipfile("zipfiles that span multiple disks are not supported") + + # Assume no 'zip64 extensible data' + endArchiveSize = struct.calcsize(structEndArchive64) + fpin.seek(offset - locatorSize - endArchiveSize, 2) + data = fpin.read(endArchiveSize) + sig, sz, create_version, read_version, disk_num, disk_dir, \ + dircount, dircount2, dirsize, diroffset = \ + struct.unpack(structEndArchive64, data) + if sig != stringEndArchive64: + return endrec + + # Update the original endrec using data from the ZIP64 record + endrec[1] = disk_num + endrec[2] = disk_dir + endrec[3] = dircount + endrec[4] = dircount2 + endrec[5] = dirsize + endrec[6] = diroffset + return endrec + + +def _EndRecData(fpin): + """Return data from the "End of Central Directory" record, or None. + + The data is a list of the nine items in the ZIP "End of central dir" + record followed by a tenth item, the file seek offset of this record.""" + fpin.seek(-22, 2) # Assume no archive comment. + filesize = fpin.tell() + 22 # Get file size + data = fpin.read() + if data[0:4] == stringEndArchive and data[-2:] == "\000\000": + endrec = struct.unpack(structEndArchive, data) + endrec = list(endrec) + endrec.append("") # Append the archive comment + endrec.append(filesize - 22) # Append the record start offset + if endrec[-4] == -1 or endrec[-4] == 0xffffffff: + return _EndRecData64(fpin, -22, endrec) + return endrec + # Search the last END_BLOCK bytes of the file for the record signature. + # The comment is appended to the ZIP file and has a 16 bit length. + # So the comment may be up to 64K long. We limit the search for the + # signature to a few Kbytes at the end of the file for efficiency. + # also, the signature must not appear in the comment. + END_BLOCK = min(filesize, 1024 * 4) + fpin.seek(filesize - END_BLOCK, 0) + data = fpin.read() + start = data.rfind(stringEndArchive) + if start >= 0: # Correct signature string was found + endrec = struct.unpack(structEndArchive, data[start:start+22]) + endrec = list(endrec) + comment = data[start+22:] + if endrec[7] == len(comment): # Comment length checks out + # Append the archive comment and start offset + endrec.append(comment) + endrec.append(filesize - END_BLOCK + start) + if endrec[-4] == -1 or endrec[-4] == 0xffffffff: + return _EndRecData64(fpin, - END_BLOCK + start, endrec) + return endrec + return # Error, return None + + +class ZipInfo (object): + """Class with attributes describing each file in the ZIP archive.""" + + __slots__ = ( + 'orig_filename', + 'filename', + 'date_time', + 'compress_type', + 'comment', + 'extra', + 'create_system', + 'create_version', + 'extract_version', + 'reserved', + 'flag_bits', + 'volume', + 'internal_attr', + 'external_attr', + 'header_offset', + 'CRC', + 'compress_size', + 'file_size', + 'file_offset', + ) + + def __init__(self, filename="NoName", date_time=(1980,1,1,0,0,0)): + self.orig_filename = filename # Original file name in archive + + # Terminate the file name at the first null byte. Null bytes in file + # names are used as tricks by viruses in archives. + null_byte = filename.find(chr(0)) + if null_byte >= 0: + filename = filename[0:null_byte] + # This is used to ensure paths in generated ZIP files always use + # forward slashes as the directory separator, as required by the + # ZIP format specification. + if os.sep != "/" and os.sep in filename: + filename = filename.replace(os.sep, "/") + + self.filename = filename # Normalized file name + self.date_time = date_time # year, month, day, hour, min, sec + # Standard values: + self.compress_type = ZIP_STORED # Type of compression for the file + self.comment = "" # Comment for each file + self.extra = "" # ZIP extra data + if sys.platform == 'win32': + self.create_system = 0 # System which created ZIP archive + else: + # Assume everything else is unix-y + self.create_system = 3 # System which created ZIP archive + self.create_version = 20 # Version which created ZIP archive + self.extract_version = 20 # Version needed to extract archive + self.reserved = 0 # Must be zero + self.flag_bits = 0 # ZIP flag bits + self.volume = 0 # Volume number of file header + self.internal_attr = 0 # Internal attributes + self.external_attr = 0 # External file attributes + self.file_offset = 0 + # Other attributes are set by class ZipFile: + # header_offset Byte offset to the file header + # CRC CRC-32 of the uncompressed file + # compress_size Size of the compressed file + # file_size Size of the uncompressed file + + def FileHeader(self): + """Return the per-file header as a string.""" + dt = self.date_time + dosdate = (dt[0] - 1980) << 9 | dt[1] << 5 | dt[2] + dostime = dt[3] << 11 | dt[4] << 5 | (dt[5] // 2) + if self.flag_bits & 0x08: + # Set these to zero because we write them after the file data + CRC = compress_size = file_size = 0 + else: + CRC = self.CRC + compress_size = self.compress_size + file_size = self.file_size + + extra = self.extra + + if file_size > ZIP64_LIMIT or compress_size > ZIP64_LIMIT: + # File is larger than what fits into a 4 byte integer, + # fall back to the ZIP64 extension + fmt = '<hhqq' + extra = extra + struct.pack(fmt, + 1, struct.calcsize(fmt)-4, file_size, compress_size) + file_size = 0xffffffff # -1 + compress_size = 0xffffffff # -1 + self.extract_version = max(45, self.extract_version) + self.create_version = max(45, self.extract_version) + + header = struct.pack(structFileHeader, stringFileHeader, + self.extract_version, self.reserved, self.flag_bits, + self.compress_type, dostime, dosdate, CRC, + compress_size, file_size, + len(self.filename), len(extra)) + return header + self.filename + extra + + def _decodeExtra(self): + # Try to decode the extra field. + extra = self.extra + unpack = struct.unpack + while extra: + tp, ln = unpack('<hh', extra[:4]) + if tp == 1: + if ln >= 24: + counts = unpack('<qqq', extra[4:28]) + elif ln == 16: + counts = unpack('<qq', extra[4:20]) + elif ln == 8: + counts = unpack('<q', extra[4:12]) + elif ln == 0: + counts = () + else: + raise RuntimeError, "Corrupt extra field %s"%(ln,) + + idx = 0 + + # ZIP64 extension (large files and/or large archives) + if self.file_size == -1 or self.file_size == 0xFFFFFFFFL: + self.file_size = counts[idx] + idx += 1 + + if self.compress_size == -1 or self.compress_size == 0xFFFFFFFFL: + self.compress_size = counts[idx] + idx += 1 + + if self.header_offset == -1 or self.header_offset == 0xffffffffL: + self.header_offset = counts[idx] + idx+=1 + + extra = extra[ln+4:] + + +class ZipFile: + """ Class with methods to open, read, write, close, list and update + zip files. + + z = ZipFile(file, mode="r", compression=ZIP_STORED, allowZip64=True) + + file: Either the path to the file, or a file-like object. + If it is a path, the file will be opened and closed by ZipFile. + mode: The mode can be either read "r", write "w" or append "a". + compression: ZIP_STORED (no compression) or ZIP_DEFLATED (requires zlib). + allowZip64: if True ZipFile will create files with ZIP64 extensions when + needed, otherwise it will raise an exception when this would + be necessary. + + """ + + fp = None # Set here since __del__ checks it + + def __init__(self, file, mode="r", compression=ZIP_STORED, allowZip64=False): + """Open the ZIP file with mode read "r", write "w" or append "a".""" + self._allowZip64 = allowZip64 + self._didModify = False + if compression == ZIP_STORED: + pass + elif compression == ZIP_DEFLATED: + if not zlib: + raise RuntimeError,\ + "Compression requires the (missing) zlib module" + else: + raise RuntimeError, "That compression method is not supported" + self.debug = 0 # Level of printing: 0 through 3 + self.NameToInfo = {} # Find file info given name + self.filelist = [] # List of ZipInfo instances for archive + self.compression = compression # Method of compression + self.mode = key = mode.replace('b', '')[0] + + # Check if we were passed a file-like object + if isinstance(file, basestring): + self._filePassed = 0 + self.filename = file + modeDict = {'r' : 'rb', 'w': 'wb', 'a' : 'r+b'} + self.fp = open(file, modeDict[mode]) + else: + self._filePassed = 1 + self.fp = file + self.filename = getattr(file, 'name', None) + + if key == 'r': + self._GetContents() + elif key == 'w': + pass + elif key == 'a': + try: # See if file is a zip file + self._RealGetContents() + # seek to start of directory and overwrite + self.fp.seek(self.start_dir, 0) + except BadZipfile: # file is not a zip file, just append + self.fp.seek(0, 2) + else: + if not self._filePassed: + self.fp.close() + self.fp = None + raise RuntimeError, 'Mode must be "r", "w" or "a"' + + def _GetContents(self): + """Read the directory, making sure we close the file if the format + is bad.""" + try: + self._RealGetContents() + except BadZipfile: + if not self._filePassed: + self.fp.close() + self.fp = None + raise + + def _RealGetContents(self): + """Read in the table of contents for the ZIP file.""" + fp = self.fp + endrec = _EndRecData(fp) + if not endrec: + raise BadZipfile, "File is not a zip file" + if self.debug > 1: + print endrec + size_cd = endrec[5] # bytes in central directory + offset_cd = endrec[6] # offset of central directory + self.comment = endrec[8] # archive comment + # endrec[9] is the offset of the "End of Central Dir" record + if endrec[9] > ZIP64_LIMIT: + x = endrec[9] - size_cd - 56 - 20 + else: + x = endrec[9] - size_cd + # "concat" is zero, unless zip was concatenated to another file + concat = x - offset_cd + if self.debug > 2: + print "given, inferred, offset", offset_cd, x, concat + # self.start_dir: Position of start of central directory + self.start_dir = offset_cd + concat + fp.seek(self.start_dir, 0) + data = fp.read(size_cd) + fp = cStringIO.StringIO(data) + total = 0 + while total < size_cd: + centdir = fp.read(46) + total = total + 46 + if centdir[0:4] != stringCentralDir: + raise BadZipfile, "Bad magic number for central directory" + centdir = struct.unpack(structCentralDir, centdir) + if self.debug > 2: + print centdir + filename = fp.read(centdir[_CD_FILENAME_LENGTH]) + # Create ZipInfo instance to store file information + x = ZipInfo(filename) + x.extra = fp.read(centdir[_CD_EXTRA_FIELD_LENGTH]) + x.comment = fp.read(centdir[_CD_COMMENT_LENGTH]) + total = (total + centdir[_CD_FILENAME_LENGTH] + + centdir[_CD_EXTRA_FIELD_LENGTH] + + centdir[_CD_COMMENT_LENGTH]) + x.header_offset = centdir[_CD_LOCAL_HEADER_OFFSET] + (x.create_version, x.create_system, x.extract_version, x.reserved, + x.flag_bits, x.compress_type, t, d, + x.CRC, x.compress_size, x.file_size) = centdir[1:12] + x.volume, x.internal_attr, x.external_attr = centdir[15:18] + # Convert date/time code to (year, month, day, hour, min, sec) + x.date_time = ( (d>>9)+1980, (d>>5)&0xF, d&0x1F, + t>>11, (t>>5)&0x3F, (t&0x1F) * 2 ) + + x._decodeExtra() + x.header_offset = x.header_offset + concat + self.filelist.append(x) + self.NameToInfo[x.filename] = x + if self.debug > 2: + print "total", total + self._calculate_file_offsets() + + def _calculate_file_offsets(self): + for zip_info in self.filelist: + self.fp.seek(zip_info.header_offset, 0) + fheader = self.fp.read(30) + if fheader[0:4] != stringFileHeader: + raise BadZipfile, "Bad magic number for file header" + fheader = struct.unpack(structFileHeader, fheader) + # file_offset is computed here, since the extra field for + # the central directory and for the local file header + # refer to different fields, and they can have different + # lengths + file_offset = (zip_info.header_offset + 30 + + fheader[_FH_FILENAME_LENGTH] + + fheader[_FH_EXTRA_FIELD_LENGTH]) + fname = self.fp.read(fheader[_FH_FILENAME_LENGTH]) + if fname != zip_info.orig_filename: + raise RuntimeError, \ + 'File name in directory "%s" and header "%s" differ.' % ( + zip_info.orig_filename, fname) + + zip_info.file_offset = file_offset + + + def replace(self, filename, arcname=None, compress_type=None): + """Delete arcname, and put the bytes from filename into the + archive under the name arcname.""" + deleteName = arcname + if deleteName is None: + deleteName = filename + self.delete(deleteName) + self.write(filename, arcname, compress_type) + + def replacestr(self, zinfo, bytes): + """Delete zinfo.filename, and write a new file into the archive. The + contents is the string 'bytes'.""" + self.delete(zinfo.filename) + self.writestr(zinfo, bytes) + + def delete(self, name): + """Delete the file from the archive. If it appears multiple + times only the first instance will be deleted.""" + for i in range (0, len(self.filelist)): + if self.filelist[i].filename == name: + if self.debug: + print "Removing", name + deleted_offset = self.filelist[i].header_offset + deleted_size = (self.filelist[i].file_offset - self.filelist[i].header_offset) + self.filelist[i].compress_size + zinfo_size = struct.calcsize(structCentralDir) + len(self.filelist[i].filename) + len(self.filelist[i].extra) + # Remove the file's data from the archive. + current_offset = self.fp.tell() + self.fp.seek(0, 2) + archive_size = self.fp.tell() + self.fp.seek(deleted_offset + deleted_size) + buf = self.fp.read() + self.fp.seek(deleted_offset) + self.fp.write(buf) + self.fp.truncate(archive_size - deleted_size - zinfo_size) + if current_offset > deleted_offset + deleted_size: + current_offset -= deleted_size + elif current_offset > deleted_offset: + current_offset = deleted_offset + self.fp.seek(current_offset, 0) + # Remove file from central directory. + del self.filelist[i] + # Adjust the remaining offsets in the central directory. + for j in range (i, len(self.filelist)): + if self.filelist[j].header_offset > deleted_offset: + self.filelist[j].header_offset -= deleted_size + if self.filelist[j].file_offset > deleted_offset: + self.filelist[j].file_offset -= deleted_size + return + if self.debug: + print name, "not in archive" + + def namelist(self): + """Return a list of file names in the archive.""" + l = [] + for data in self.filelist: + l.append(data.filename) + return l + + def infolist(self): + """Return a list of class ZipInfo instances for files in the + archive.""" + return self.filelist + + def printdir(self): + """Print a table of contents for the zip file.""" + print "%-46s %19s %12s" % ("File Name", "Modified ", "Size") + for zinfo in self.filelist: + date = "%d-%02d-%02d %02d:%02d:%02d" % zinfo.date_time[:6] + print "%-46s %s %12d" % (zinfo.filename, date, zinfo.file_size) + + def testzip(self): + """Read all the files and check the CRC.""" + for zinfo in self.filelist: + try: + self.read(zinfo.filename) # Check CRC-32 + except BadZipfile: + return zinfo.filename + + + def getinfo(self, name): + """Return the instance of ZipInfo given 'name'.""" + return self.NameToInfo[name] + + def read(self, name): + """Return file bytes (as a string) for name.""" + if self.mode not in ("r", "a"): + raise RuntimeError, 'read() requires mode "r" or "a"' + if not self.fp: + raise RuntimeError, \ + "Attempt to read ZIP archive that was already closed" + zinfo = self.getinfo(name) + filepos = self.fp.tell() + + self.fp.seek(zinfo.header_offset, 0) + + # Skip the file header: + fheader = self.fp.read(30) + if fheader[0:4] != stringFileHeader: + raise BadZipfile, "Bad magic number for file header" + + fheader = struct.unpack(structFileHeader, fheader) + fname = self.fp.read(fheader[_FH_FILENAME_LENGTH]) + if fheader[_FH_EXTRA_FIELD_LENGTH]: + self.fp.read(fheader[_FH_EXTRA_FIELD_LENGTH]) + + if fname != zinfo.orig_filename: + raise BadZipfile, \ + 'File name in directory "%s" and header "%s" differ.' % ( + zinfo.orig_filename, fname) + + bytes = self.fp.read(zinfo.compress_size) + self.fp.seek(filepos, 0) + if zinfo.compress_type == ZIP_STORED: + pass + elif zinfo.compress_type == ZIP_DEFLATED: + if not zlib: + raise RuntimeError, \ + "De-compression requires the (missing) zlib module" + # zlib compress/decompress code by Jeremy Hylton of CNRI + dc = zlib.decompressobj(-15) + bytes = dc.decompress(bytes) + # need to feed in unused pad byte so that zlib won't choke + ex = dc.decompress('Z') + dc.flush() + if ex: + bytes = bytes + ex + else: + raise BadZipfile, \ + "Unsupported compression method %d for file %s" % \ + (zinfo.compress_type, name) + crc = binascii.crc32(bytes) + if crc != zinfo.CRC: + raise BadZipfile, "Bad CRC-32 for file %s" % name + return bytes + + def _writecheck(self, zinfo): + """Check for errors before writing a file to the archive.""" + if zinfo.filename in self.NameToInfo: + if self.debug: # Warning for duplicate names + print "Duplicate name:", zinfo.filename + if self.mode not in ("w", "a"): + raise RuntimeError, 'write() requires mode "w" or "a"' + if not self.fp: + raise RuntimeError, \ + "Attempt to write ZIP archive that was already closed" + if zinfo.compress_type == ZIP_DEFLATED and not zlib: + raise RuntimeError, \ + "Compression requires the (missing) zlib module" + if zinfo.compress_type not in (ZIP_STORED, ZIP_DEFLATED): + raise RuntimeError, \ + "That compression method is not supported" + if zinfo.file_size > ZIP64_LIMIT: + if not self._allowZip64: + raise LargeZipFile("Filesize would require ZIP64 extensions") + if zinfo.header_offset > ZIP64_LIMIT: + if not self._allowZip64: + raise LargeZipFile("Zipfile size would require ZIP64 extensions") + + def write(self, filename, arcname=None, compress_type=None): + """Put the bytes from filename into the archive under the name + arcname.""" + st = os.stat(filename) + mtime = time.localtime(st.st_mtime) + date_time = mtime[0:6] + # Create ZipInfo instance to store file information + if arcname is None: + arcname = filename + arcname = os.path.normpath(os.path.splitdrive(arcname)[1]) + while arcname[0] in (os.sep, os.altsep): + arcname = arcname[1:] + zinfo = ZipInfo(arcname, date_time) + zinfo.external_attr = (st[0] & 0xFFFF) << 16L # Unix attributes + if compress_type is None: + zinfo.compress_type = self.compression + else: + zinfo.compress_type = compress_type + + zinfo.file_size = st.st_size + zinfo.flag_bits = 0x00 + zinfo.header_offset = self.fp.tell() # Start of header bytes + + self._writecheck(zinfo) + self._didModify = True + fp = open(filename, "rb") + # Must overwrite CRC and sizes with correct data later + zinfo.CRC = CRC = 0 + zinfo.compress_size = compress_size = 0 + zinfo.file_size = file_size = 0 + self.fp.write(zinfo.FileHeader()) + if zinfo.compress_type == ZIP_DEFLATED: + cmpr = zlib.compressobj(zlib.Z_DEFAULT_COMPRESSION, + zlib.DEFLATED, -15) + else: + cmpr = None + while 1: + buf = fp.read(1024 * 8) + if not buf: + break + file_size = file_size + len(buf) + CRC = binascii.crc32(buf, CRC) + if cmpr: + buf = cmpr.compress(buf) + compress_size = compress_size + len(buf) + self.fp.write(buf) + fp.close() + if cmpr: + buf = cmpr.flush() + compress_size = compress_size + len(buf) + self.fp.write(buf) + zinfo.compress_size = compress_size + else: + zinfo.compress_size = file_size + zinfo.CRC = CRC + zinfo.file_size = file_size + # Seek backwards and write CRC and file sizes + position = self.fp.tell() # Preserve current position in file + self.fp.seek(zinfo.header_offset + 14, 0) + self.fp.write(struct.pack("<lLL", zinfo.CRC, zinfo.compress_size, + zinfo.file_size)) + self.fp.seek(position, 0) + self.filelist.append(zinfo) + self.NameToInfo[zinfo.filename] = zinfo + + def writestr(self, zinfo_or_arcname, bytes): + """Write a file into the archive. The contents is the string + 'bytes'. 'zinfo_or_arcname' is either a ZipInfo instance or + the name of the file in the archive.""" + if not isinstance(zinfo_or_arcname, ZipInfo): + zinfo = ZipInfo(filename=zinfo_or_arcname, + date_time=time.localtime(time.time())[:6]) + zinfo.compress_type = self.compression + else: + zinfo = zinfo_or_arcname + zinfo.file_size = len(bytes) # Uncompressed size + zinfo.header_offset = self.fp.tell() # Start of header bytes + self._writecheck(zinfo) + self._didModify = True + zinfo.CRC = binascii.crc32(bytes) # CRC-32 checksum + if zinfo.compress_type == ZIP_DEFLATED: + co = zlib.compressobj(zlib.Z_DEFAULT_COMPRESSION, + zlib.DEFLATED, -15) + bytes = co.compress(bytes) + co.flush() + zinfo.compress_size = len(bytes) # Compressed size + else: + zinfo.compress_size = zinfo.file_size + zinfo.header_offset = self.fp.tell() # Start of header bytes + self.fp.write(zinfo.FileHeader()) + self.fp.write(bytes) + self.fp.flush() + if zinfo.flag_bits & 0x08: + # Write CRC and file sizes after the file data + self.fp.write(struct.pack("<lLL", zinfo.CRC, zinfo.compress_size, + zinfo.file_size)) + self.filelist.append(zinfo) + self.NameToInfo[zinfo.filename] = zinfo + + def __del__(self): + """Call the "close()" method in case the user forgot.""" + self.close() + + def close(self): + """Close the file, and for mode "w" and "a" write the ending + records.""" + if self.fp is None: + return + + if self.mode in ("w", "a") and self._didModify: # write ending records + count = 0 + pos1 = self.fp.tell() + for zinfo in self.filelist: # write central directory + count = count + 1 + dt = zinfo.date_time + dosdate = (dt[0] - 1980) << 9 | dt[1] << 5 | dt[2] + dostime = dt[3] << 11 | dt[4] << 5 | (dt[5] // 2) + extra = [] + if zinfo.file_size > ZIP64_LIMIT \ + or zinfo.compress_size > ZIP64_LIMIT: + extra.append(zinfo.file_size) + extra.append(zinfo.compress_size) + file_size = 0xffffffff #-1 + compress_size = 0xffffffff #-1 + else: + file_size = zinfo.file_size + compress_size = zinfo.compress_size + + if zinfo.header_offset > ZIP64_LIMIT: + extra.append(zinfo.header_offset) + header_offset = -1 # struct "l" format: 32 one bits + else: + header_offset = zinfo.header_offset + + extra_data = zinfo.extra + if extra: + # Append a ZIP64 field to the extra's + extra_data = struct.pack( + '<hh' + 'q'*len(extra), + 1, 8*len(extra), *extra) + extra_data + + extract_version = max(45, zinfo.extract_version) + create_version = max(45, zinfo.create_version) + else: + extract_version = zinfo.extract_version + create_version = zinfo.create_version + + centdir = struct.pack(structCentralDir, + stringCentralDir, create_version, + zinfo.create_system, extract_version, zinfo.reserved, + zinfo.flag_bits, zinfo.compress_type, dostime, dosdate, + zinfo.CRC, compress_size, file_size, + len(zinfo.filename), len(extra_data), len(zinfo.comment), + 0, zinfo.internal_attr, zinfo.external_attr, + header_offset) + self.fp.write(centdir) + self.fp.write(zinfo.filename) + self.fp.write(extra_data) + self.fp.write(zinfo.comment) + + pos2 = self.fp.tell() + # Write end-of-zip-archive record + if pos1 > ZIP64_LIMIT: + # Need to write the ZIP64 end-of-archive records + zip64endrec = struct.pack( + structEndArchive64, stringEndArchive64, + 44, 45, 45, 0, 0, count, count, pos2 - pos1, pos1) + self.fp.write(zip64endrec) + + zip64locrec = struct.pack( + structEndArchive64Locator, + stringEndArchive64Locator, 0, pos2, 1) + self.fp.write(zip64locrec) + + endrec = struct.pack(structEndArchive, stringEndArchive, + 0, 0, count, count, pos2 - pos1, -1, 0) + self.fp.write(endrec) + + else: + endrec = struct.pack(structEndArchive, stringEndArchive, + 0, 0, count, count, pos2 - pos1, pos1, 0) + self.fp.write(endrec) + self.fp.flush() + if not self._filePassed: + self.fp.close() + self.fp = None + + +class PyZipFile(ZipFile): + """Class to create ZIP archives with Python library files and packages.""" + + def writepy(self, pathname, basename = ""): + """Add all files from "pathname" to the ZIP archive. + + If pathname is a package directory, search the directory and + all package subdirectories recursively for all *.py and enter + the modules into the archive. If pathname is a plain + directory, listdir *.py and enter all modules. Else, pathname + must be a Python *.py file and the module will be put into the + archive. Added modules are always module.pyo or module.pyc. + This method will compile the module.py into module.pyc if + necessary. + """ + dir, name = os.path.split(pathname) + if os.path.isdir(pathname): + initname = os.path.join(pathname, "__init__.py") + if os.path.isfile(initname): + # This is a package directory, add it + if basename: + basename = "%s/%s" % (basename, name) + else: + basename = name + if self.debug: + print "Adding package in", pathname, "as", basename + fname, arcname = self._get_codename(initname[0:-3], basename) + if self.debug: + print "Adding", arcname + self.write(fname, arcname) + dirlist = os.listdir(pathname) + dirlist.remove("__init__.py") + # Add all *.py files and package subdirectories + for filename in dirlist: + path = os.path.join(pathname, filename) + ext = os.path.splitext(filename)[-1] + if os.path.isdir(path): + if os.path.isfile(os.path.join(path, "__init__.py")): + # This is a package directory, add it + self.writepy(path, basename) # Recursive call + elif ext == ".py": + fname, arcname = self._get_codename(path[0:-3], + basename) + if self.debug: + print "Adding", arcname + self.write(fname, arcname) + else: + # This is NOT a package directory, add its files at top level + if self.debug: + print "Adding files from directory", pathname + for filename in os.listdir(pathname): + path = os.path.join(pathname, filename) + ext = os.path.splitext(filename)[-1] + if ext == ".py": + fname, arcname = self._get_codename(path[0:-3], + basename) + if self.debug: + print "Adding", arcname + self.write(fname, arcname) + else: + if pathname[-3:] != ".py": + raise RuntimeError, \ + 'Files added with writepy() must end with ".py"' + fname, arcname = self._get_codename(pathname[0:-3], basename) + if self.debug: + print "Adding file", arcname + self.write(fname, arcname) + + def _get_codename(self, pathname, basename): + """Return (filename, archivename) for the path. + + Given a module name path, return the correct file path and + archive name, compiling if necessary. For example, given + /python/lib/string, return (/python/lib/string.pyc, string). + """ + file_py = pathname + ".py" + file_pyc = pathname + ".pyc" + file_pyo = pathname + ".pyo" + if os.path.isfile(file_pyo) and \ + os.stat(file_pyo).st_mtime >= os.stat(file_py).st_mtime: + fname = file_pyo # Use .pyo file + elif not os.path.isfile(file_pyc) or \ + os.stat(file_pyc).st_mtime < os.stat(file_py).st_mtime: + import py_compile + if self.debug: + print "Compiling", file_py + try: + py_compile.compile(file_py, file_pyc, None, True) + except py_compile.PyCompileError,err: + print err.msg + fname = file_pyc + else: + fname = file_pyc + archivename = os.path.split(fname)[1] + if basename: + archivename = "%s/%s" % (basename, archivename) + return (fname, archivename) + + +def main(args = None): + import textwrap + USAGE=textwrap.dedent("""\ + Usage: + zipfile.py -l zipfile.zip # Show listing of a zipfile + zipfile.py -t zipfile.zip # Test if a zipfile is valid + zipfile.py -e zipfile.zip target # Extract zipfile into target dir + zipfile.py -c zipfile.zip src ... # Create zipfile from sources + """) + if args is None: + args = sys.argv[1:] + + if not args or args[0] not in ('-l', '-c', '-e', '-t'): + print USAGE + sys.exit(1) + + if args[0] == '-l': + if len(args) != 2: + print USAGE + sys.exit(1) + zf = ZipFile(args[1], 'r') + zf.printdir() + zf.close() + + elif args[0] == '-t': + if len(args) != 2: + print USAGE + sys.exit(1) + zf = ZipFile(args[1], 'r') + zf.testzip() + print "Done testing" + + elif args[0] == '-e': + if len(args) != 3: + print USAGE + sys.exit(1) + + zf = ZipFile(args[1], 'r') + out = args[2] + for path in zf.namelist(): + if path.startswith('./'): + tgt = os.path.join(out, path[2:]) + else: + tgt = os.path.join(out, path) + + tgtdir = os.path.dirname(tgt) + if not os.path.exists(tgtdir): + os.makedirs(tgtdir) + fp = open(tgt, 'wb') + fp.write(zf.read(path)) + fp.close() + zf.close() + + elif args[0] == '-c': + if len(args) < 3: + print USAGE + sys.exit(1) + + def addToZip(zf, path, zippath): + if os.path.isfile(path): + zf.write(path, zippath, ZIP_DEFLATED) + elif os.path.isdir(path): + for nm in os.listdir(path): + addToZip(zf, + os.path.join(path, nm), os.path.join(zippath, nm)) + # else: ignore + + zf = ZipFile(args[1], 'w', allowZip64=True) + for src in args[2:]: + addToZip(zf, src, os.path.basename(src)) + + zf.close() + +if __name__ == "__main__": + main() From f5e4e33abbf9418902382bb0f492c4efe85d0b99 Mon Sep 17 00:00:00 2001 From: Kovid Goyal <kovid@kovidgoyal.net> Date: Fri, 18 Jul 2008 13:06:03 -0700 Subject: [PATCH 31/34] IGN:Switch to using InstallJammer to build windows installer. Also add uninstaller to linux binary installer --- .bzrignore | 1 + installer/windows/build_installer.py | 46 + installer/windows/calibre/calibre.mpi | 2282 +++++++++++++++++++++++++ installer/windows/freeze.py | 207 +++ src/calibre/libunrar.py | 4 +- src/calibre/linux.py | 33 +- src/calibre/linux_installer.py | 41 +- src/calibre/utils/zipfile.py | 3 +- upload.py | 17 +- 9 files changed, 2614 insertions(+), 20 deletions(-) create mode 100644 installer/windows/build_installer.py create mode 100644 installer/windows/calibre/calibre.mpi create mode 100644 installer/windows/freeze.py diff --git a/.bzrignore b/.bzrignore index 4c564339fa..e27f39a864 100644 --- a/.bzrignore +++ b/.bzrignore @@ -19,3 +19,4 @@ src/calibre/gui2/pictureflow/debug/ src/calibre/gui2/pictureflow/pictureflow_resource.rc src/calibre/gui2/pictureflow/release/ src/calibre/translations/compiled.py +installer/windows/calibre/build.log diff --git a/installer/windows/build_installer.py b/installer/windows/build_installer.py new file mode 100644 index 0000000000..949ef2c190 --- /dev/null +++ b/installer/windows/build_installer.py @@ -0,0 +1,46 @@ +#!/usr/bin/env python +__license__ = 'GPL v3' +__copyright__ = '2008, Kovid Goyal kovid@kovidgoyal.net' +__docformat__ = 'restructuredtext en' + +''' +''' +import sys, time, subprocess, os +from calibre import __appname__, __version__ + +cmdline = [ + '/usr/local/installjammer/installjammer', + '--build-dir', '/tmp/calibre-installjammer', + '-DAppName', __appname__, + '-DShortAppName', __appname__, + '-DApplicationURL', 'http://%s.kovidgoyal.net'%__appname__, + '-DCopyright', time.strftime('%Y Kovid Goyal'), + '-DPackageDescription', '%s is an e-book library manager. It can view, convert and catalog e-books in most of the major e-book formats. It can also talk to a few e-book reader devices. It can go out to the internet and fetch metadata for your books. It can download newspapers and convert them into e-books for convenient reading.'%__appname__, + '-DPackageSummary', '%s: E-book library management'%__appname__, + '-DVersion', __version__, + '-DInstallVersion', __version__ + '.0', + '-DLicense', open(os.path.join(os.path.dirname(os.path.dirname(os.path.dirname(__file__))), 'LICENSE')).read().replace('\n', '\r\n'), + '--output-dir', os.path.join(os.path.dirname(os.path.dirname(os.path.dirname(__file__))), 'dist'), + '--platform', 'Windows', +] + +def run_install_jammer(installer_name='<%AppName%>-<%Version%><%Ext%>', build_for_release=True): + global cmdline + mpi = os.path.abspath(os.path.join(os.path.dirname(__file__), 'calibre', 'calibre.mpi')) + cmdline.extend(['-DWindows,Executable', installer_name]) + compression = 'zlib' + if build_for_release: + cmdline += ['--build-for-release'] + compression = 'lzma (solid)' + cmdline += ['-DCompressionMethod', compression] + cmdline += ['--build', mpi] + #print 'Running installjammer with cmdline:' + #print cmdline + subprocess.check_call(cmdline) + +def main(args=sys.argv): + run_install_jammer(build_for_release=False) + return 0 + +if __name__ == '__main__': + sys.exit(main()) \ No newline at end of file diff --git a/installer/windows/calibre/calibre.mpi b/installer/windows/calibre/calibre.mpi new file mode 100644 index 0000000000..571b7c40c1 --- /dev/null +++ b/installer/windows/calibre/calibre.mpi @@ -0,0 +1,2282 @@ +array set info { +AllowLanguageSelection +No + +AppName +calibre + +ApplicationID +EA5B0AA7-D6AE-0996-E42A-F9BBBE08F74F + +ApplicationURL +http://calibre.kovidgoyal.net + +AutoRefreshFiles +Yes + +BuildFailureAction +{Fail (recommended)} + +CancelledInstallAction +{Rollback and Stop} + +CleanupCancelledInstall +Yes + +CommandLineFailureAction +{Fail (recommended)} + +Company +kovidgoyal.net + +CompressionLevel +9 + +CompressionMethod +{lzma (solid)} + +Copyright +{2008 Kovid Goyal} + +CreateDesktopShortcut +Yes + +CreateQuickLaunchShortcut +Yes + +DefaultDirectoryLocation +{} + +DefaultLanguage +English + +Ext +{} + +ExtractSolidArchivesOnStartup +No + +Icon +Modern/Small/SetupModernSmall01.gif + +Image +Modern/SetupModern01.gif + +IncludeDebugging +Yes + +InstallPassword +{} + +InstallVersion +1.0.0.0 + +Language,de +No + +Language,en +Yes + +Language,es +No + +Language,fr +No + +Language,hu +No + +Language,it +No + +Language,nl +No + +Language,pl +No + +Language,pt_br +No + +Language,ru +No + +LaunchApplication +Yes + +PackageDescription +{calibre: E-book library management} + +PackageLicense +GPL-3 + +PackageMaintainer +{Kovid Goyal <kovid@kovidgoyal.net>} + +PackageName +<%ShortAppName%> + +PackagePackager +{Kovid Goyal <kovid@kovidgoyal.net>} + +PackageRelease +<%PatchVersion%> + +PackageSummary +{calibre: E-book library management} + +PackageVersion +<%MajorVersion%>.<%MinorVersion%> + +PreserveFileAttributes +Yes + +PreserveFilePermissions +Yes + +ProjectID +DA98A0C6-9102-73EC-2516-B147E972D3F7 + +ProjectVersion +1.2.7.0 + +SaveOnlyToplevelDirs +No + +ScriptExt +.sh + +ShortAppName +calibre + +SkipUnusedFileGroups +Yes + +SystemLanguage +c + +Theme +Modern_Wizard + +ThemeDir +Modern_Wizard + +ThemeVersion +1 + +UpgradeApplicationID +{} + +Version +1.0 + +WizardHeight +365 + +WizardWidth +500 + +} + +array set ::InstallJammer::InstallCommandLineOptions { +debug +{Debugging Switch Yes No {} {run installer in debug mode}} + +debugconsole +{ShowConsole Switch Yes No {} {run installer with a debug console open}} + +mode +{InstallMode Choice No No {Console Default Silent Standard} {set the mode to run the installer in}} + +prefix +{InstallDir String No No {} {set the installation directory}} + +test +{Testing Switch Yes No {} {run installer without installing any files}} + +} +array set ::InstallJammer::UninstallCommandLineOptions { +debugconsole +{ShowConsole Switch Yes No {} {run uninstaller with a debug console open}} + +mode +{UninstallMode Choice No No {Console Silent Standard} {set the mode to run the uninstaller in}} + +test +{Testing Switch Yes No {} {run uninstaller without uninstalling any files}} + +} +FileGroup ::BEF8D398-58BA-1F66-39D6-D4A63D5BEEF9 -setup Install -active Yes -platforms {AIX-ppc FreeBSD-4-x86 FreeBSD-x86 HPUX-hppa Linux-x86 Solaris-sparc Windows TarArchive ZipArchive} -name {Program Files} -parent FileGroups +File ::6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 -filemethod {Always overwrite files} -type dir -directory <%InstallDir%> -name /home/kovid/work/calibre/build/py2exe -parent BEF8D398-58BA-1F66-39D6-D4A63D5BEEF9 +File ::B444456B-BA8D-A058-8C9B-AAC2BBB1560D -type dir -name bin -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::D9A3AF75-5939-CB51-9F33-5A048911103E -type dir -name etc -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::A628E495-239B-DAF4-D858-BCE36CB41E6E -type dir -name imageformats -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::0A533DB2-D494-A9ED-1334-DECC357BD426 -type dir -name codecs -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::0F47A44E-E347-1CD4-E89F-37B447C4A270 -type dir -name driver -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::19A416A8-8DDD-658B-A3D4-F89ABD02CFBB -type dir -name ImageMagick -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::A146565C-D163-7F68-7C70-A6A336B32526 -type dir -name iconengines -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::3245B06C-1C22-1A8A-5710-6D36651AAA70 -name etree.pyd -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::B49A5610-13F6-FB5D-0673-DB47C6BB385D -name rtf-meta.exe.local -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::1F7D32C6-D61D-A09F-6D9E-690F7DD10D04 -name clit.exe.local -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::CE4F2A21-12CC-2B9A-6D48-6A0FEA7C9D13 -name _compiled_base.pyd -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::D6C46340-8335-7FC4-A027-D701DF1B70AB -name pdf2lrf.exe -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::53F2B07D-8F92-2328-C55E-5F7F0E63D5DB -name opf-meta.exe.local -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::63A13E6F-CF99-4D85-2F82-5DFBBB7D8180 -name sqlite3.dll -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::B69EBBDA-04FA-A67F-E3ED-3C2E7D761B92 -name _sqlite3.pyd -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::24CC4E53-95EB-A527-21C3-B8166080D181 -name lrs2lrf.exe.local -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::99B750DB-EC00-5521-E93E-7FABEA416B0C -name lit2lrf.exe.local -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::D8FC08E6-B361-307C-8F62-953A739B2F40 -name txt2lrf.exe -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::3FCD0C96-DC3A-EC73-7E3A-46A02CE631B0 -name web2disk.exe -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::71F6F80A-0F8E-A96E-CA1B-974F928A0D9B -name calibre-parallel.exe.local -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::EBC815EE-7438-6588-97F9-FBFC39715044 -name html2lrf.exe -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::AB47ED69-BD17-198D-DE41-0AF44257480F -name LICENSE -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::10537419-4DBF-EE7D-6561-6B0DD6875C47 -name lapack_lite.pyd -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::8CF0C9F4-3813-7EDE-139F-D78C6FC38694 -name feeds2disk.exe -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::95B4ACBF-CCB7-421E-8956-3C96D6D85DE4 -name calibre.exe.local -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::4B78188A-11BC-E7DA-8583-C690270FDD8B -name web2lrf.exe -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::8CA63124-E326-1CC2-9B86-C118157ED034 -name QtNetwork4.dll -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::431AD2DB-AD8C-4AEB-709C-E1CB8382F8FA -name win32ui.pyd -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::B145A772-C20C-A6F2-E872-ACC229FFE1C7 -name fb2-meta.exe -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::168973D9-DEE6-7307-9A2E-746EB9456311 -name txt2lrf.exe.local -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::BD39D6F0-5125-F3A3-043F-E8FD1C87A823 -name isbndb.exe -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::6C294A11-52D4-C567-64F7-1DCF21AB06D7 -name epub2lrf.exe -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::BBE8D78B-6646-5327-563C-7F8EE5842D7B -name pictureflow.pyd -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::A9BB9531-5BC4-92C1-F614-B84B93F8698F -name pywintypes25.dll -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::AA725BD8-5FFA-B426-733F-5A1264A30DA2 -name Qt.pyd -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::B48D9BFD-326D-1C92-4D94-C17F9ACD9207 -name epub2lrf.exe.local -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::9104E2C3-8E0D-8275-59EB-6B5E57C7F7C1 -name isbndb.exe.local -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::EAE07E71-7B94-DE2F-4A30-4DAF1ADDB591 -name any2lrf.exe.local -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::4140B65A-A7F4-0CD2-4613-BED2E87DA01B -name library.zip -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::F59AC283-F006-F856-3EA4-694FE4DD4A88 -name unicodedata.pyd -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::479B1590-634A-1847-54E9-EF29C239E8E7 -name win32api.pyd -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::9E7341CF-0A6A-8F36-9B87-BF50C7C825AA -name libfontconfig-1.dll -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::223E6E1F-F83C-1144-9952-98ED4E80F38C -name QtSvg.pyd -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::A0C13AC8-184A-2F9A-FCD5-D6DA18A7200D -name win32pdh.pyd -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::153509C0-E955-D07B-4A7E-0AD74877F530 -name lrs2lrf.exe -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::2C03CD3B-6A0E-D31D-FB58-91E48B96E3B1 -name fftpack_lite.pyd -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::CFA05433-447F-F504-F050-D6B6966D6A74 -name win32clipboard.pyd -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::931DA8AF-4252-E09A-BBCD-9591BBACC7FA -name pdfreflow.exe.local -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::C42D8FFA-561F-552E-78DD-A3E441F630CA -name sip.pyd -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::E1C0697F-BA9B-17AA-3581-079553DCDCAF -name pdfreflow.exe -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::9E2D6AAA-3606-82C2-9074-F51017624305 -name pdf-meta.exe.local -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::A665DBDD-BE19-0818-3F30-FA4924AC811F -name rtf-meta.exe -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::2AABAB06-38EF-6F8C-3675-575D8B044E0C -name calibredb.exe -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::A7EA318A-0542-FBB8-5C93-A39B364A51D9 -name epub-meta.exe.local -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::4CD878C5-1487-1FFD-99A1-EDFC90892F0A -name win32security.pyd -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::ADFDF202-EED8-0319-0D69-DF1C44AE465B -name librarything.exe.local -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::B522E7CC-3C9B-325B-B0BA-3CAFD0228B6D -name pictureflow0.dll -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::0E83E956-FF8D-27AB-9BE9-A24C57F8886A -name pythoncom25.dll -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::F8DAAE4E-9BF0-F75A-78BD-81E0F4BD1F99 -name epub-meta.exe -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::E2982BD3-D0BB-70B4-0BF8-18B2B68C9918 -name QtWebKit4.dll -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::73F6E879-EF13-E4D2-D66D-C4A50D5B7A68 -name freetype6.dll -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::47B3352F-C480-8704-0D8D-7CF0FE1D1E8F -name QtCore.pyd -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::DDAB10F5-6B92-D2E0-F192-441694C26EB0 -name fb22lrf.exe.local -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::8995CD27-3E9E-8689-5B49-E965E7E52D9A -name pyexpat.pyd -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::E081A898-F163-D9F4-11E2-C691636BA702 -name calibre-debug.exe -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::801BE53F-D9E4-CA5A-0702-DAF30B96CC04 -name select.pyd -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::215B915B-F0FE-C029-C022-24CE35D4A5C1 -name pdf-meta.exe -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::D13FB9B3-0A36-B7CA-CA0B-3EF7376A2943 -name feeds2lrf.exe.local -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::5404250A-4A38-AE68-7EE1-96947457D92D -name _imagingmath.pyd -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::82E7B1F5-0866-8B48-453B-0F7C0A978141 -name QtGui4.dll -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::B1711D23-A1F1-5660-F7E7-0F30539B7513 -name markdown-calibre.exe.local -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::AEA3C386-69EF-7BF9-44AC-86CA6B303366 -name lrf-meta.exe.local -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::F4B61311-9341-EEB0-92D6-1756B1923358 -name _hashlib.pyd -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::AFD6F6A1-BD1D-2755-0F72-F5558E5C4C3F -name feeds2lrf.exe -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::C68EDFE9-EF12-E041-8FF4-240CDC7E23D0 -name libexpat.dll -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::C22C6509-C1A2-E883-A675-A97E063FBE73 -name calibre-fontconfig.exe.local -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::33A4D1AC-78C9-AD8F-BE8E-8136EF0AA299 -name fb22lrf.exe -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::E108A8AD-174E-0A51-2C2B-F5A5BB07E0F5 -name unrar.dll -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::BA5B6556-608D-2844-4151-25BCA476153B -name mobi2oeb.exe.local -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::53A8A015-111B-957E-6702-3E3A44E61521 -name pdf2lrf.exe.local -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::8B8A372C-1473-880E-BBD9-D82DE09F9CCC -name QtGui.pyd -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::0DF5DAF8-1B14-9D00-30A6-882DAFB107EE -name any2lrf.exe -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::D75E742F-EF44-769A-EBEF-1EC81B1CCCA7 -name markdown-calibre.exe -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::4B02260C-E90F-7B9E-5831-A5F881483BCB -name lit2lrf.exe -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::942A727E-E6EE-FE2A-6720-FDB19B8029AA -name calibre-debug.exe.local -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::A61FDA7B-009F-C397-D7F5-E39DC30F14F2 -name prs500.exe.local -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::5324C64E-8774-E051-91EE-CD10289346C7 -name QtXml4.dll -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::C75049A3-5ADA-664D-8708-133B879C4D3E -name rtf2lrf.exe.local -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::A95D56FB-74E0-5A49-ACAE-29F99B4848C0 -name pdftohtml.exe.local -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::1F00E5E9-7298-E356-0294-CCE7EEE92D22 -name opf-meta.exe -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::E5E3FC49-D699-001C-5C97-724CD74FA013 -name web2disk.exe.local -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::0B4D16CB-03A7-36A8-F507-FA6E09DFC303 -name rtf2lrf.exe -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::F2FEFC47-D830-1A6E-473E-156B3C7C7707 -name QtWebKit.pyd -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::CDD6643D-5510-EEE5-95F2-D610F8B17801 -name lrfviewer.exe.local -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::9BF1A1FD-61FA-B173-135B-F8CC6AF85ADC -name lrfviewer.exe -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::0D47D92A-B91F-76AF-CF1F-81FF655A3E6E -name mobi2lrf.exe.local -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::EFB240F8-2D21-655E-6086-764B1ADBD3DB -name lit-meta.exe.local -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::27D31189-89C1-8B44-70A7-5DB3C2693761 -name umath.pyd -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::768C94EF-7C5E-88C9-9513-0ACB7DF63B54 -name _ssl.pyd -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::D22ADBFF-B91B-4668-400C-F5FCC8ECD23E -name multiarray.pyd -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::DD83F9CC-D1CA-F525-64A4-75F5788292B5 -name w9xpopen.exe -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::7ED462B5-9B9B-5476-5D91-16AA65FD08C2 -name _sort.pyd -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::2132131C-549D-8E7E-AD2D-DEEBECEA8441 -name QtNetwork.pyd -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::EBAFE980-DF41-5535-5934-1CEA5F4489E8 -name prs500.exe -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::E1C90FD6-DE05-2BFC-3B69-586DC4F169F3 -name win32wnet.pyd -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::AA00495C-C441-F486-B0C0-A3BACB4A2551 -name mtrand.pyd -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::31CEC572-AA14-134B-1A4A-FCD9A74DF2FB -name lrf2lrs.exe.local -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::C30F4910-D164-FEA3-4D53-8A559250C071 -name feeds2disk.exe.local -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::E34D773E-A263-F166-3771-59D87FBBF2B8 -name mobi2lrf.exe -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::A4261177-EB5E-5DD7-2818-4A70C10C5FB7 -name lrf-meta.exe -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::B3B72A4E-8B11-2352-A591-0C43E52A2329 -name fb2-meta.exe.local -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::99EE1D50-3EA6-C2C0-130A-0B830763BC99 -name calibre-fontconfig.exe -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::068F9CD2-4429-9BDC-33E2-417F7A89DF46 -name win32file.pyd -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::0B892D2B-69B9-A0EF-4CDE-DC13F50EE47A -name lrf2html.exe -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::56F70DCF-A20E-985F-B754-498323515A88 -name lit-meta.exe -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::642F88FB-A6AF-65BA-2D3F-6DFFC51E962F -name MSVCR71.dll -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::8D888F32-B960-6FAE-16D1-207449570FD9 -name web2lrf.exe.local -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::086AC033-B68D-0CF2-4317-0EA0D6A13202 -name win32process.pyd -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::B1DDA977-5BAF-FA72-5A94-886F142D6AE8 -name librarything.exe -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::00220302-54D5-8D81-4DD1-D5F05F36F5C5 -name lrf2html.exe.local -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::C8FC6F5A-7B18-6760-2843-600214FD9C00 -name calibredb.exe.local -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::9AE97139-D6D6-CA2C-70DF-91F97F6C8E66 -name _win32sysloader.pyd -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::74B69813-5F2F-4096-6940-EED8EAB7E5C8 -name pdftohtml.exe -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::15FE9B66-6A50-987C-6D0A-FAC4FB65D085 -name QtCore4.dll -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::91513702-1C71-C2CA-D686-B66501E3E150 -name lrf2lrs.exe -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::0F6E5A2A-8D26-31C5-7075-8621CEE7472F -name python25.dll -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::50892EC8-2ED5-92E0-5136-28FE9E6F9501 -name _ctypes.pyd -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::40C5FFA9-C3FD-2E0A-E25D-F2AA4C2CD672 -name QtSvg4.dll -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::9ECEF6F4-E95D-3F1A-6400-8726EBE14A6B -name win32event.pyd -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::6C60B310-E979-5950-4316-B19333F266D8 -name _imagingft.pyd -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::23FC9D7B-EC4D-1FB5-1E4D-8AA052A4790B -name html2lrf.exe.local -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::B0DBCC9A-8FE2-D917-4FE0-B6D05971F8E8 -name calibre-parallel.exe -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::6A287FDE-AB84-041E-886A-923F1D4EADA7 -name _dotblas.pyd -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::7CDDA16F-629B-5F03-EA19-2508B9C00942 -name win32pipe.pyd -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::24A8B830-B46D-207C-6A91-B5E6856E99A4 -name _imaging.pyd -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::95782943-BCB9-9A8B-4DB8-1186D35F84E7 -name mingwm10.dll -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::058A6811-F130-999C-B46A-FA86915CDA4E -name calibre.exe -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::BEAEEC0C-8321-922D-A113-A2E03C94DC7C -name scalarmath.pyd -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::ACE1537B-B234-3C90-759A-8947A7AADC77 -name mobi2oeb.exe -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::92701E8F-1D91-A796-C899-2A266029F61D -name _socket.pyd -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::45BD27B5-B910-7633-C827-37E82E89C27C -name w9xpopen.exe.local -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::45C27909-D761-787F-84B2-66596E5C4E99 -name bz2.pyd -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +File ::7B2DE5D8-17A6-B167-ABC7-799AEBCC1C02 -name clit.exe -parent 6CCF3F71-74BB-ED69-D0E6-9F12348ABDD3 +Component ::F6829AB7-9F66-4CEE-CA0E-21F54C6D3609 -setup Install -active Yes -platforms {AIX-ppc FreeBSD-4-x86 FreeBSD-x86 HPUX-hppa Linux-x86 Solaris-sparc Windows} -name Main -parent Components +SetupType ::D9ADE41C-B744-690C-2CED-CF826BF03D2E -setup Install -active Yes -platforms {AIX-ppc FreeBSD-4-x86 FreeBSD-x86 HPUX-hppa Linux-x86 Solaris-sparc Windows} -name Typical -parent SetupTypes + +InstallComponent 3EA07B17-04D8-6508-B535-96CC7173B49A -setup Install -type pane -title {Welcome Screen} -component Welcome -active Yes -parent StandardInstall +InstallComponent 7CCDA4BB-861C-C21E-3011-E93DB58F07D6 -setup Install -type action -title {Check for Previous Install} -component CheckForPreviousInstall -active Yes -parent 3EA07B17-04D8-6508-B535-96CC7173B49A +InstallComponent 580ACF2C-517F-5E48-9DEF-7DAEFBA59FDD -setup Install -type action -conditions 6DE3B369-9D6B-6BC1-4EA0-2C54ECE159EB -title {Set Virtual Text} -component SetVirtualText -command reorder -active Yes -parent 3EA07B17-04D8-6508-B535-96CC7173B49A +Condition 6DE3B369-9D6B-6BC1-4EA0-2C54ECE159EB -active Yes -parent 580ACF2C-517F-5E48-9DEF-7DAEFBA59FDD -title {String Is Condition} -component StringIsCondition -TreeObject::id 6DE3B369-9D6B-6BC1-4EA0-2C54ECE159EB +InstallComponent 9ACCDC35-E034-F142-ED42-AC8EC2B9AE2D -setup Install -type pane -title {License Agreement} -component License -active Yes -parent StandardInstall +InstallComponent AAEC34E6-7F02-18F2-30BB-744738192A3B -setup Install -type action -conditions {081A479A-572E-5133-4979-84456DB40EFA A4388F3F-0D32-F14E-BA00-1BE7F54B05ED} -title {Modify Widget} -component ModifyWidget -command insert -active Yes -parent 9ACCDC35-E034-F142-ED42-AC8EC2B9AE2D +Condition 081A479A-572E-5133-4979-84456DB40EFA -active Yes -parent AAEC34E6-7F02-18F2-30BB-744738192A3B -title {String Is Condition} -component StringIsCondition -TreeObject::id 081A479A-572E-5133-4979-84456DB40EFA +Condition A4388F3F-0D32-F14E-BA00-1BE7F54B05ED -active Yes -parent AAEC34E6-7F02-18F2-30BB-744738192A3B -title {String Is Condition} -component StringIsCondition -TreeObject::id A4388F3F-0D32-F14E-BA00-1BE7F54B05ED +InstallComponent 6661142D-D174-F52E-CD1D-6BFB3649BC64 -setup Install -type pane -conditions {B3F43ECF-D504-F7A0-45FE-A735D202B6F0 9E0D138E-5FFC-0F18-F110-F093644E4DD2} -title {Select Destination} -component SelectDestination -command insert -active Yes -parent StandardInstall +Condition B3F43ECF-D504-F7A0-45FE-A735D202B6F0 -active Yes -parent 6661142D-D174-F52E-CD1D-6BFB3649BC64 -title {Script Condition} -component ScriptCondition -TreeObject::id B3F43ECF-D504-F7A0-45FE-A735D202B6F0 +Condition 9E0D138E-5FFC-0F18-F110-F093644E4DD2 -active Yes -parent 6661142D-D174-F52E-CD1D-6BFB3649BC64 -title {File Permission Condition} -component FilePermissionCondition -TreeObject::id 9E0D138E-5FFC-0F18-F110-F093644E4DD2 +InstallComponent 28FDA3F4-B799-901F-8A27-AA04F0C022AB -setup Install -type pane -title {Copying Files} -component CopyFiles -active Yes -parent StandardInstall +InstallComponent A75C97CC-01AC-C12A-D663-A54E3257F11B -setup Install -type action -title {Disable Buttons} -component ModifyWidget -active Yes -parent 28FDA3F4-B799-901F-8A27-AA04F0C022AB +InstallComponent B6D03F99-8B73-BE6E-1050-721B286D3D60 -setup Install -type action -title {Execute Action} -component ExecuteAction -active Yes -parent 28FDA3F4-B799-901F-8A27-AA04F0C022AB +InstallComponent 91AB3DE5-D61C-522D-5B3B-F2953E1DE771 -setup Install -type action -title {Move Forward} -component MoveForward -active Yes -parent 28FDA3F4-B799-901F-8A27-AA04F0C022AB +InstallComponent D6631BA5-577E-B30C-A73D-2B12B826811A -setup Install -type pane -conditions C6DE83DD-5C2A-AC5B-6ABA-84D73AE38655 -title {Install USB Driver} -component CustomBlankPane1 -command insert -active Yes -parent StandardInstall +Condition C6DE83DD-5C2A-AC5B-6ABA-84D73AE38655 -active Yes -parent D6631BA5-577E-B30C-A73D-2B12B826811A -title {Platform Condition} -component PlatformCondition -TreeObject::id C6DE83DD-5C2A-AC5B-6ABA-84D73AE38655 +InstallComponent 1B9E77A3-10D6-9EDD-160B-64B5EBB31981 -setup Install -type action -title {Add Widget} -component AddWidget -command reorder -active Yes -parent D6631BA5-577E-B30C-A73D-2B12B826811A +InstallComponent 8A7FD0C2-F053-8764-F204-4BAE71E05708 -setup Install -type pane -title {Setup Complete} -component SetupComplete -active Yes -parent StandardInstall +InstallComponent 710F2507-2557-652D-EA55-440D710EFDFA -setup Install -type action -conditions {69188956-D764-5B26-B048-46A4239C3733 08195201-0797-932C-4B51-E5EF9D1D41BD 2E18F4AE-F1BB-5C62-2900-73A576A49261} -title {Install USB Driver} -component ExecuteExternalProgram -command reorder -alias {Install USB Driver} -active Yes -parent 8A7FD0C2-F053-8764-F204-4BAE71E05708 +Condition 69188956-D764-5B26-B048-46A4239C3733 -active Yes -parent 710F2507-2557-652D-EA55-440D710EFDFA -title {Platform Condition} -component PlatformCondition -TreeObject::id 69188956-D764-5B26-B048-46A4239C3733 +Condition 08195201-0797-932C-4B51-E5EF9D1D41BD -active Yes -parent 710F2507-2557-652D-EA55-440D710EFDFA -title {String Is Condition} -component StringIsCondition -TreeObject::id 08195201-0797-932C-4B51-E5EF9D1D41BD +Condition 2E18F4AE-F1BB-5C62-2900-73A576A49261 -active Yes -parent 710F2507-2557-652D-EA55-440D710EFDFA -title {String Is Condition} -component StringIsCondition -TreeObject::id 2E18F4AE-F1BB-5C62-2900-73A576A49261 +InstallComponent 21B897C4-24BE-70D1-58EA-DE78EFA60719 -setup Install -type action -conditions 76FA3CA2-1F09-75C5-C6CF-72719A8EC4A5 -title {Message Box} -component MessageBox -command reorder -active Yes -parent 8A7FD0C2-F053-8764-F204-4BAE71E05708 +Condition 76FA3CA2-1F09-75C5-C6CF-72719A8EC4A5 -active Yes -parent 21B897C4-24BE-70D1-58EA-DE78EFA60719 -title {String Is Condition} -component StringIsCondition -TreeObject::id 76FA3CA2-1F09-75C5-C6CF-72719A8EC4A5 +InstallComponent 5D20DD8D-064A-9922-29E1-A7FABEF3666A -setup Install -type action -conditions {E5D227F7-E549-EFA9-1781-EFA6C5EEEC5C A8856922-E6C1-160B-E55C-5C1806A89136} -title {Launch Application Checkbutton} -component AddWidget -command insert -active Yes -parent 8A7FD0C2-F053-8764-F204-4BAE71E05708 +Condition E5D227F7-E549-EFA9-1781-EFA6C5EEEC5C -active Yes -parent 5D20DD8D-064A-9922-29E1-A7FABEF3666A -title {File Exists Condition} -component FileExistsCondition -TreeObject::id E5D227F7-E549-EFA9-1781-EFA6C5EEEC5C +Condition A8856922-E6C1-160B-E55C-5C1806A89136 -active Yes -parent 5D20DD8D-064A-9922-29E1-A7FABEF3666A -title {String Is Condition} -component StringIsCondition -TreeObject::id A8856922-E6C1-160B-E55C-5C1806A89136 +InstallComponent 940F7FED-7D20-7264-3BF9-ED78205A76B3 -setup Install -type action -conditions {96440B8B-C6D0-FCCA-6D3C-7ECE1C304CC0 FBA33088-C809-DD6B-D337-EADBF1CEE966} -title {Desktop Shortcut Checkbutton} -component AddWidget -command insert -active Yes -parent 8A7FD0C2-F053-8764-F204-4BAE71E05708 +Condition 96440B8B-C6D0-FCCA-6D3C-7ECE1C304CC0 -active Yes -parent 940F7FED-7D20-7264-3BF9-ED78205A76B3 -title {File Exists Condition} -component FileExistsCondition -TreeObject::id 96440B8B-C6D0-FCCA-6D3C-7ECE1C304CC0 +Condition FBA33088-C809-DD6B-D337-EADBF1CEE966 -active Yes -parent 940F7FED-7D20-7264-3BF9-ED78205A76B3 -title {String Is Condition} -component StringIsCondition -TreeObject::id FBA33088-C809-DD6B-D337-EADBF1CEE966 +InstallComponent 27B44808-381F-7202-A0D9-40788CD679D0 -setup Install -type action -conditions {1039BE84-4163-2FCB-9798-D85E6C37B668 657FDE96-809B-821F-3294-15E637B85E6E B7F0CB71-720B-7DC9-5C5E-AA1AF92D78E2} -title {Quick Launch Shortcut Checkbutton} -component AddWidget -command insert -active Yes -parent 8A7FD0C2-F053-8764-F204-4BAE71E05708 +Condition 1039BE84-4163-2FCB-9798-D85E6C37B668 -active Yes -parent 27B44808-381F-7202-A0D9-40788CD679D0 -title {Platform Condition} -component PlatformCondition -TreeObject::id 1039BE84-4163-2FCB-9798-D85E6C37B668 +Condition 657FDE96-809B-821F-3294-15E637B85E6E -active Yes -parent 27B44808-381F-7202-A0D9-40788CD679D0 -title {File Exists Condition} -component FileExistsCondition -TreeObject::id 657FDE96-809B-821F-3294-15E637B85E6E +Condition B7F0CB71-720B-7DC9-5C5E-AA1AF92D78E2 -active Yes -parent 27B44808-381F-7202-A0D9-40788CD679D0 -title {String Is Condition} -component StringIsCondition -TreeObject::id B7F0CB71-720B-7DC9-5C5E-AA1AF92D78E2 +InstallComponent FAE98A0F-B6A9-30D2-A9EA-33F9D5F8B3D0 -setup Install -type pane -title {Copying Files} -component CopyFiles -active Yes -parent DefaultInstall +InstallComponent 5C66451D-6042-DBDE-0D8C-31156EE244AD -setup Install -type action -title {Disable Buttons} -component ModifyWidget -active Yes -parent FAE98A0F-B6A9-30D2-A9EA-33F9D5F8B3D0 +InstallComponent A05E9D13-9686-83DD-C6AD-2A4D912C5B81 -setup Install -type action -title {Execute Action} -component ExecuteAction -active Yes -parent FAE98A0F-B6A9-30D2-A9EA-33F9D5F8B3D0 +InstallComponent 137ED7CE-70C6-DEC3-4929-CAE747038617 -setup Install -type action -title {Move Forward} -component MoveForward -active Yes -parent FAE98A0F-B6A9-30D2-A9EA-33F9D5F8B3D0 +InstallComponent A5A97363-4CD6-4A6A-3D39-6EFC56BA9D39 -setup Install -type pane -title {Setup Complete} -component SetupComplete -active Yes -parent DefaultInstall +InstallComponent 7C57D3D3-B1DB-0888-B098-B46AD4F99F7E -setup Install -type action -conditions {37A46164-C287-5D4A-E55A-A2329E25E829 CFBE4459-450B-1FAB-3422-609544334AA2} -title {Launch Application Checkbutton} -component AddWidget -command insert -active Yes -parent A5A97363-4CD6-4A6A-3D39-6EFC56BA9D39 +Condition 37A46164-C287-5D4A-E55A-A2329E25E829 -active Yes -parent 7C57D3D3-B1DB-0888-B098-B46AD4F99F7E -title {File Exists Condition} -component FileExistsCondition -TreeObject::id 37A46164-C287-5D4A-E55A-A2329E25E829 +Condition CFBE4459-450B-1FAB-3422-609544334AA2 -active Yes -parent 7C57D3D3-B1DB-0888-B098-B46AD4F99F7E -title {String Is Condition} -component StringIsCondition -TreeObject::id CFBE4459-450B-1FAB-3422-609544334AA2 +InstallComponent C7D6444E-DB8B-EE24-3E12-A2AF8A392C5D -setup Install -type action -conditions {52ACF73B-2106-3106-B7F0-D8587A4A6A3B 7C2D1F15-9A28-9938-3C1B-681A4D79C7B2} -title {Desktop Shortcut Checkbutton} -component AddWidget -command insert -active Yes -parent A5A97363-4CD6-4A6A-3D39-6EFC56BA9D39 +Condition 52ACF73B-2106-3106-B7F0-D8587A4A6A3B -active Yes -parent C7D6444E-DB8B-EE24-3E12-A2AF8A392C5D -title {File Exists Condition} -component FileExistsCondition -TreeObject::id 52ACF73B-2106-3106-B7F0-D8587A4A6A3B +Condition 7C2D1F15-9A28-9938-3C1B-681A4D79C7B2 -active Yes -parent C7D6444E-DB8B-EE24-3E12-A2AF8A392C5D -title {String Is Condition} -component StringIsCondition -TreeObject::id 7C2D1F15-9A28-9938-3C1B-681A4D79C7B2 +InstallComponent A246E5D4-5489-19CC-C7B1-AA0C98D55F85 -setup Install -type action -conditions {E57B5080-47C0-3209-40DC-144F41FBF866 BDC2A4B5-C169-A971-4F35-13B1BF3F8C24 AAF04AF0-329D-75A6-BB68-60ECF2EB74F0} -title {Quick Launch Shortcut Checkbutton} -component AddWidget -command insert -active Yes -parent A5A97363-4CD6-4A6A-3D39-6EFC56BA9D39 +Condition E57B5080-47C0-3209-40DC-144F41FBF866 -active Yes -parent A246E5D4-5489-19CC-C7B1-AA0C98D55F85 -title {Platform Condition} -component PlatformCondition -TreeObject::id E57B5080-47C0-3209-40DC-144F41FBF866 +Condition BDC2A4B5-C169-A971-4F35-13B1BF3F8C24 -active Yes -parent A246E5D4-5489-19CC-C7B1-AA0C98D55F85 -title {File Exists Condition} -component FileExistsCondition -TreeObject::id BDC2A4B5-C169-A971-4F35-13B1BF3F8C24 +Condition AAF04AF0-329D-75A6-BB68-60ECF2EB74F0 -active Yes -parent A246E5D4-5489-19CC-C7B1-AA0C98D55F85 -title {String Is Condition} -component StringIsCondition -TreeObject::id AAF04AF0-329D-75A6-BB68-60ECF2EB74F0 +InstallComponent C93967A6-0618-9A8C-9554-35292F85F61B -setup Install -type action -title {Console Ask Yes Or No} -component ConsoleAskYesOrNo -active Yes -parent ConsoleInstall +InstallComponent 361C9910-C284-B9BE-FA0C-B94309DB19A7 -setup Install -type action -conditions 825CDD1E-9B3D-E64E-5381-5C5557D204A2 -title Exit -component Exit -command insert -active Yes -parent ConsoleInstall +Condition 825CDD1E-9B3D-E64E-5381-5C5557D204A2 -active Yes -parent 361C9910-C284-B9BE-FA0C-B94309DB19A7 -title {String Is Condition} -component StringIsCondition -TreeObject::id 825CDD1E-9B3D-E64E-5381-5C5557D204A2 +InstallComponent A1E6AD62-FD68-14BF-2D05-264DC2B370A5 -setup Install -type action -conditions F6C53555-674E-0479-7EC0-FE737201EA0A -title {Console Get User Input} -component ConsoleGetUserInput -command insert -active Yes -parent ConsoleInstall +Condition F6C53555-674E-0479-7EC0-FE737201EA0A -active Yes -parent A1E6AD62-FD68-14BF-2D05-264DC2B370A5 -title {File Permission Condition} -component FilePermissionCondition -TreeObject::id F6C53555-674E-0479-7EC0-FE737201EA0A +InstallComponent 1356216E-90D2-8324-0EEB-975A64F23EB8 -setup Install -type action -title {Console Message} -component ConsoleMessage -active Yes -parent ConsoleInstall +InstallComponent BFD200F2-6AC9-8FE2-046F-48E5126BE639 -setup Install -type action -title {Execute Action} -component ExecuteAction -active Yes -parent ConsoleInstall +InstallComponent E611105F-DC85-9E20-4F7B-E63C54E5DF06 -setup Install -type action -title {Console Message} -component ConsoleMessage -active Yes -parent ConsoleInstall +InstallComponent C5AD5B0C-26BE-16E5-899A-9A9436C8F688 -setup Install -type action -title Exit -component Exit -active Yes -parent ConsoleInstall +InstallComponent 1D757BEB-2EA2-269E-B331-C41CB71831EF -setup Install -type action -title {Execute Action} -component ExecuteAction -active Yes -parent SilentInstall +InstallComponent 67F58321-C0AF-1721-C519-0FCCABD66FE9 -setup Install -type action -title Exit -component Exit -active Yes -parent SilentInstall +InstallComponent 7C1E2A34-CD5C-F707-9DF3-92DF130C3BFD -setup Install -type actiongroup -title {Setup Actions} -alias {Setup Actions} -active Yes -parent ActionGroupsInstall +InstallComponent 3F2A14F0-06AC-C9D3-1F07-311F41E1338E -setup Install -type actiongroup -title {Startup Actions} -alias {Startup Actions} -active Yes -parent ActionGroupsInstall +InstallComponent 001FA257-6A8E-7CEA-ED5E-492247DF5E5A -setup Install -type action -title {Create Install Panes} -component CreateInstallPanes -active Yes -parent 3F2A14F0-06AC-C9D3-1F07-311F41E1338E +InstallComponent 2DF93B55-41E5-75D5-E815-BD9FDC32D9F8 -setup Install -type actiongroup -title {Install Actions} -alias {Install Actions} -active Yes -parent ActionGroupsInstall +InstallComponent 54B45A5F-FF59-0E99-952F-165BAA590889 -setup Install -type action -title {Install Selected Files} -component InstallSelectedFiles -active Yes -parent 2DF93B55-41E5-75D5-E815-BD9FDC32D9F8 +InstallComponent BE4A731E-1FC2-87A1-547D-91E2CA467AA7 -setup Install -type action -title {Add Directory To Path} -component AddDirectoryToPath -active Yes -parent 2DF93B55-41E5-75D5-E815-BD9FDC32D9F8 +InstallComponent C14CC317-9757-2C79-64C6-BC6C8A267CB1 -setup Install -type action -conditions 4AAFE838-3E44-5147-0F04-65DB5B647191 -title {Install Uninstaller} -component InstallUninstaller -command insert -active Yes -parent 2DF93B55-41E5-75D5-E815-BD9FDC32D9F8 +Condition 4AAFE838-3E44-5147-0F04-65DB5B647191 -active Yes -parent C14CC317-9757-2C79-64C6-BC6C8A267CB1 -title {String Is Condition} -component StringIsCondition -TreeObject::id 4AAFE838-3E44-5147-0F04-65DB5B647191 +InstallComponent EDD03974-B223-B62F-DA4B-FD5E94861CFE -setup Install -type action -conditions 1ADA4DE6-31A7-E816-7719-4C8558F5378D -title {Windows Uninstall Registry} -component AddWindowsUninstallEntry -command insert -active Yes -parent 2DF93B55-41E5-75D5-E815-BD9FDC32D9F8 +Condition 1ADA4DE6-31A7-E816-7719-4C8558F5378D -active Yes -parent EDD03974-B223-B62F-DA4B-FD5E94861CFE -title {String Is Condition} -component StringIsCondition -TreeObject::id 1ADA4DE6-31A7-E816-7719-4C8558F5378D +InstallComponent 48596410-DF5A-1E56-D59C-1B1E2F094FCA -setup Install -type action -conditions A75C28A7-801B-22B3-C00A-B4B6F148DAA5 -title {Program Shortcut} -component InstallProgramFolderShortcut -command insert -active Yes -parent 2DF93B55-41E5-75D5-E815-BD9FDC32D9F8 +Condition A75C28A7-801B-22B3-C00A-B4B6F148DAA5 -active Yes -parent 48596410-DF5A-1E56-D59C-1B1E2F094FCA -title {String Is Condition} -component StringIsCondition -TreeObject::id A75C28A7-801B-22B3-C00A-B4B6F148DAA5 +InstallComponent EE3AF196-AF0F-4947-CD75-7894634F48A6 -setup Install -type action -conditions C5416030-8AB4-3466-F341-9A0BBFEA55EF -title {Uninstall Shortcut} -component InstallProgramFolderShortcut -command insert -active Yes -parent 2DF93B55-41E5-75D5-E815-BD9FDC32D9F8 +Condition C5416030-8AB4-3466-F341-9A0BBFEA55EF -active Yes -parent EE3AF196-AF0F-4947-CD75-7894634F48A6 -title {String Is Condition} -component StringIsCondition -TreeObject::id C5416030-8AB4-3466-F341-9A0BBFEA55EF +InstallComponent 77D1144B-1013-79B5-034B-5D6BDA6B2FD2 -setup Install -type action -title {LRFViewer Shortcut} -component InstallProgramFolderShortcut -active Yes -parent 2DF93B55-41E5-75D5-E815-BD9FDC32D9F8 +InstallComponent 28BAE662-E103-4E3F-D298-C8FBA36361FC -setup Install -type actiongroup -title {Finish Actions} -alias {Finish Actions} -active Yes -parent ActionGroupsInstall +InstallComponent E32519F3-A540-C8F3-957F-4C1DB5B25DFE -setup Install -type action -conditions {72D8B44E-E4CF-7551-645E-FB57C5B000E9 03FA7EEF-F626-B69A-09C6-0AA7A54EE9E7} -title {Install Desktop Shortcut} -component InstallDesktopShortcut -command insert -active Yes -parent 28BAE662-E103-4E3F-D298-C8FBA36361FC +Condition 72D8B44E-E4CF-7551-645E-FB57C5B000E9 -active Yes -parent E32519F3-A540-C8F3-957F-4C1DB5B25DFE -title {String Is Condition} -component StringIsCondition -TreeObject::id 72D8B44E-E4CF-7551-645E-FB57C5B000E9 +Condition 03FA7EEF-F626-B69A-09C6-0AA7A54EE9E7 -active Yes -parent E32519F3-A540-C8F3-957F-4C1DB5B25DFE -title {File Exists Condition} -component FileExistsCondition -TreeObject::id 03FA7EEF-F626-B69A-09C6-0AA7A54EE9E7 +InstallComponent D86BBA5C-4903-33BA-59F8-4266A3D45896 -setup Install -type action -conditions {C4C0A903-CF2A-D25A-27AB-A64219FB7E70 5EC7056B-6F90-311E-2C6F-76E96164CFFD} -title {Install Quick Launch Shortcut} -component InstallWindowsShortcut -command insert -active Yes -parent 28BAE662-E103-4E3F-D298-C8FBA36361FC +Condition C4C0A903-CF2A-D25A-27AB-A64219FB7E70 -active Yes -parent D86BBA5C-4903-33BA-59F8-4266A3D45896 -title {String Is Condition} -component StringIsCondition -TreeObject::id C4C0A903-CF2A-D25A-27AB-A64219FB7E70 +Condition 5EC7056B-6F90-311E-2C6F-76E96164CFFD -active Yes -parent D86BBA5C-4903-33BA-59F8-4266A3D45896 -title {File Exists Condition} -component FileExistsCondition -TreeObject::id 5EC7056B-6F90-311E-2C6F-76E96164CFFD +InstallComponent 2A230259-3A6F-8669-8B8B-23C3E7C1BFC2 -setup Install -type action -conditions {4E5FC4FE-5D37-B216-CFFE-E046A2D6321E E560F3A1-208D-2B4F-2C87-E08595F8E1CD 9C1E4BD9-066D-ABCE-28D0-9E194B9F8475} -title {Launch Application} -component ExecuteExternalProgram -command insert -active Yes -parent 28BAE662-E103-4E3F-D298-C8FBA36361FC +Condition 4E5FC4FE-5D37-B216-CFFE-E046A2D6321E -active Yes -parent 2A230259-3A6F-8669-8B8B-23C3E7C1BFC2 -title {String Is Condition} -component StringIsCondition -TreeObject::id 4E5FC4FE-5D37-B216-CFFE-E046A2D6321E +Condition E560F3A1-208D-2B4F-2C87-E08595F8E1CD -active Yes -parent 2A230259-3A6F-8669-8B8B-23C3E7C1BFC2 -title {String Is Condition} -component StringIsCondition -TreeObject::id E560F3A1-208D-2B4F-2C87-E08595F8E1CD +Condition 9C1E4BD9-066D-ABCE-28D0-9E194B9F8475 -active Yes -parent 2A230259-3A6F-8669-8B8B-23C3E7C1BFC2 -title {File Exists Condition} -component FileExistsCondition -TreeObject::id 9C1E4BD9-066D-ABCE-28D0-9E194B9F8475 +InstallComponent 6B66969B-8882-7EFE-A351-31DEBA7E384E -setup Install -type actiongroup -title {Cancel Actions} -alias {Cancel Actions} -active Yes -parent ActionGroupsInstall +InstallComponent 4603766D-70BD-919C-AF5F-C4D7B1C181DB -setup Uninstall -type pane -title Uninstall -component Uninstall -active Yes -parent StandardUninstall +InstallComponent E5CBB018-A89D-3145-CFF5-CFC3B62BEA97 -setup Uninstall -type action -title {Modify Widget} -component ModifyWidget -active Yes -parent 4603766D-70BD-919C-AF5F-C4D7B1C181DB +InstallComponent 3F1FF865-1284-2577-16AB-65B308DCE28F -setup Uninstall -type action -title {Execute Action} -component ExecuteAction -active Yes -parent 4603766D-70BD-919C-AF5F-C4D7B1C181DB +InstallComponent C9AF2317-503F-07D9-EC26-343C95E4831C -setup Uninstall -type action -title {Move Forward} -component MoveForward -active Yes -parent 4603766D-70BD-919C-AF5F-C4D7B1C181DB +InstallComponent EE91F1AF-8AEB-B248-D932-3702CC788AF9 -setup Uninstall -type pane -conditions 173ABC5E-D4D9-9CAE-D79F-E3067EC87EC7 -title {Uninstall Details} -component UninstallDetails -command insert -active Yes -parent StandardUninstall +Condition 173ABC5E-D4D9-9CAE-D79F-E3067EC87EC7 -active Yes -parent EE91F1AF-8AEB-B248-D932-3702CC788AF9 -title {String Is Condition} -component StringIsCondition -TreeObject::id 173ABC5E-D4D9-9CAE-D79F-E3067EC87EC7 +InstallComponent B3012DC5-8A65-EBF0-8641-CE533A8A7A2D -setup Uninstall -type pane -title {Uninstall Complete} -component UninstallComplete -active Yes -parent StandardUninstall +InstallComponent 58863721-5610-F284-0B46-D2D1D4B93D16 -setup Uninstall -type action -title {Console Ask Yes Or No} -component ConsoleAskYesOrNo -active Yes -parent ConsoleUninstall +InstallComponent FB99914F-F566-94B5-8F96-F5A9A07DF1FA -setup Uninstall -type action -conditions 797C84AD-91E9-78BB-A794-B1406EEA6ABF -title Exit -component Exit -command insert -active Yes -parent ConsoleUninstall +Condition 797C84AD-91E9-78BB-A794-B1406EEA6ABF -active Yes -parent FB99914F-F566-94B5-8F96-F5A9A07DF1FA -title {String Is Condition} -component StringIsCondition -TreeObject::id 797C84AD-91E9-78BB-A794-B1406EEA6ABF +InstallComponent C3E9E5D9-58C8-C2C5-DF75-21D908A64782 -setup Uninstall -type action -title {Console Message} -component ConsoleMessage -active Yes -parent ConsoleUninstall +InstallComponent B113E8EE-10BD-0792-4CD3-7E0ADC8CD7FA -setup Uninstall -type action -title {Execute Action} -component ExecuteAction -active Yes -parent ConsoleUninstall +InstallComponent 442920D9-8A51-9476-14E4-787D5C230E84 -setup Uninstall -type action -title {Console Message} -component ConsoleMessage -active Yes -parent ConsoleUninstall +InstallComponent BF3067ED-139A-269F-F6DA-9D43B840779A -setup Uninstall -type action -title Exit -component Exit -active Yes -parent ConsoleUninstall +InstallComponent 9B935DA3-A0E5-9C04-D692-9D10B44ADC90 -setup Uninstall -type action -title {Execute Action} -component ExecuteAction -active Yes -parent SilentUninstall +InstallComponent D79DC0D2-38BC-9D9F-2DF4-3C76D89BF933 -setup Uninstall -type action -title Exit -component Exit -active Yes -parent SilentUninstall +InstallComponent 678C30B6-BF0A-238C-524A-2BFEC6876FC5 -setup Uninstall -type actiongroup -title {Setup Actions} -alias {Setup Actions} -active Yes -parent ActionGroupsUninstall +InstallComponent 3D180445-8990-20F7-13DC-93B6909B907F -setup Uninstall -type actiongroup -title {Startup Actions} -alias {Startup Actions} -active Yes -parent ActionGroupsUninstall +InstallComponent 1CA13495-CB19-27A9-56E5-9BCF91958249 -setup Uninstall -type action -conditions {F8921FAD-AFBD-348C-F26C-67855FA4691D 64B8D0F3-4B11-DA22-D6E7-7248872D5FA7} -title Exit -component Exit -command insert -active Yes -parent 3D180445-8990-20F7-13DC-93B6909B907F +Condition F8921FAD-AFBD-348C-F26C-67855FA4691D -active Yes -parent 1CA13495-CB19-27A9-56E5-9BCF91958249 -title {String Is Condition} -component StringIsCondition -TreeObject::id F8921FAD-AFBD-348C-F26C-67855FA4691D +Condition 64B8D0F3-4B11-DA22-D6E7-7248872D5FA7 -active Yes -parent 1CA13495-CB19-27A9-56E5-9BCF91958249 -title {Ask Yes or No} -component AskYesOrNo -TreeObject::id 64B8D0F3-4B11-DA22-D6E7-7248872D5FA7 +InstallComponent 521E782E-2C93-8C60-9B2A-B65552FFA8E4 -setup Uninstall -type actiongroup -title {Uninstall Actions} -alias {Uninstall Actions} -active Yes -parent ActionGroupsUninstall +InstallComponent 79C2EE18-497D-DE39-8AB6-777CE25D9484 -setup Uninstall -type action -title {Uninstall Selected Files} -component UninstallSelectedFiles -active Yes -parent 521E782E-2C93-8C60-9B2A-B65552FFA8E4 +InstallComponent 2D445859-68B9-1761-BA4F-DE91AFE5B9EB -setup Uninstall -type action -title {Uninstall Leftover Files} -component UninstallLeftoverFiles -active Yes -parent 521E782E-2C93-8C60-9B2A-B65552FFA8E4 +InstallComponent 95ED4967-8F0C-7BA2-A7EE-FF9FAACEEADF -setup Uninstall -type action -conditions {3AF1A348-10F4-EEB2-FE44-6B5F622C947D 4CF47FDD-7E34-1485-8F10-5B566D536573} -title {Uninstall USB Driver} -component ExecuteExternalProgram -command reorder -active Yes -parent 521E782E-2C93-8C60-9B2A-B65552FFA8E4 +Condition 3AF1A348-10F4-EEB2-FE44-6B5F622C947D -active Yes -parent 95ED4967-8F0C-7BA2-A7EE-FF9FAACEEADF -title {String Is Condition} -component StringIsCondition -TreeObject::id F87E8940-2590-D852-28C3-4E131EC549D8 +Condition 4CF47FDD-7E34-1485-8F10-5B566D536573 -active Yes -parent 95ED4967-8F0C-7BA2-A7EE-FF9FAACEEADF -title {Platform Condition} -component PlatformCondition -TreeObject::id 42367477-D72D-7957-4D43-198F0C713618 +InstallComponent A57E3390-AA3E-A868-2C7D-75ADF12D8471 -setup Uninstall -type actiongroup -title {Finish Actions} -alias {Finish Actions} -active Yes -parent ActionGroupsUninstall +InstallComponent AAFE58A0-2DFB-CA20-1F6E-D3815F885996 -setup Uninstall -type actiongroup -title {Cancel Actions} -alias {Cancel Actions} -active Yes -parent ActionGroupsUninstall + +array set Properties { +001FA257-6A8E-7CEA-ED5E-492247DF5E5A,Conditions +{0 conditions} + +03FA7EEF-F626-B69A-09C6-0AA7A54EE9E7,CheckCondition +{Before Action is Executed} + +03FA7EEF-F626-B69A-09C6-0AA7A54EE9E7,Filename +<%ProgramExecutable%> + +08195201-0797-932C-4B51-E5EF9D1D41BD,CheckCondition +{Before Action is Executed} + +08195201-0797-932C-4B51-E5EF9D1D41BD,String +<%InstallUSBDriver%> + +081A479A-572E-5133-4979-84456DB40EFA,CheckCondition +{Before Action is Executed} + +081A479A-572E-5133-4979-84456DB40EFA,String +{<%Property <%CurrentPane%> UserMustAcceptLicense%>} + +1039BE84-4163-2FCB-9798-D85E6C37B668,CheckCondition +{Before Action is Executed} + +1039BE84-4163-2FCB-9798-D85E6C37B668,Platform +Windows + +1356216E-90D2-8324-0EEB-975A64F23EB8,Message,subst +1 + +173ABC5E-D4D9-9CAE-D79F-E3067EC87EC7,String +<%ErrorsOccurred%> + +1ADA4DE6-31A7-E816-7719-4C8558F5378D,CheckCondition +{Before Action is Executed} + +1ADA4DE6-31A7-E816-7719-4C8558F5378D,Operator +false + +1ADA4DE6-31A7-E816-7719-4C8558F5378D,String +<%UpgradeInstall%> + +1B9E77A3-10D6-9EDD-160B-64B5EBB31981,Checked +No + +1B9E77A3-10D6-9EDD-160B-64B5EBB31981,Conditions +{0 conditions} + +1B9E77A3-10D6-9EDD-160B-64B5EBB31981,ExecuteAction +{Before Pane is Displayed} + +1B9E77A3-10D6-9EDD-160B-64B5EBB31981,Text,subst +1 + +1B9E77A3-10D6-9EDD-160B-64B5EBB31981,Type +checkbutton + +1B9E77A3-10D6-9EDD-160B-64B5EBB31981,VirtualText +InstallUSBDriver + +1B9E77A3-10D6-9EDD-160B-64B5EBB31981,X +185 + +1B9E77A3-10D6-9EDD-160B-64B5EBB31981,Y +220 + +1CA13495-CB19-27A9-56E5-9BCF91958249,Comment +{Ask the user if they want to proceed with the uninstall.} + +1D757BEB-2EA2-269E-B331-C41CB71831EF,Action +{Install Actions} + +1D757BEB-2EA2-269E-B331-C41CB71831EF,Conditions +{0 conditions} + +21B897C4-24BE-70D1-58EA-DE78EFA60719,Conditions +{1 condition} + +21B897C4-24BE-70D1-58EA-DE78EFA60719,IgnoreErrors +Yes + +21B897C4-24BE-70D1-58EA-DE78EFA60719,Message,subst +1 + +21B897C4-24BE-70D1-58EA-DE78EFA60719,Title,subst +1 + +27B44808-381F-7202-A0D9-40788CD679D0,Background +white + +27B44808-381F-7202-A0D9-40788CD679D0,Checked +No + +27B44808-381F-7202-A0D9-40788CD679D0,Conditions +{3 conditions} + +27B44808-381F-7202-A0D9-40788CD679D0,Text,subst +1 + +27B44808-381F-7202-A0D9-40788CD679D0,Type +checkbutton + +27B44808-381F-7202-A0D9-40788CD679D0,VirtualText +CreateQuickLaunchShortcut + +27B44808-381F-7202-A0D9-40788CD679D0,X +185 + +27B44808-381F-7202-A0D9-40788CD679D0,Y +170 + +28BAE662-E103-4E3F-D298-C8FBA36361FC,Alias +{Finish Actions} + +28BAE662-E103-4E3F-D298-C8FBA36361FC,Conditions +{0 conditions} + +28FDA3F4-B799-901F-8A27-AA04F0C022AB,BackButton,subst +1 + +28FDA3F4-B799-901F-8A27-AA04F0C022AB,CancelButton,subst +1 + +28FDA3F4-B799-901F-8A27-AA04F0C022AB,Caption,subst +1 + +28FDA3F4-B799-901F-8A27-AA04F0C022AB,Conditions +{0 conditions} + +28FDA3F4-B799-901F-8A27-AA04F0C022AB,FileLabel,subst +1 + +28FDA3F4-B799-901F-8A27-AA04F0C022AB,Message,subst +1 + +28FDA3F4-B799-901F-8A27-AA04F0C022AB,NextButton,subst +1 + +28FDA3F4-B799-901F-8A27-AA04F0C022AB,ProgressValue,subst +1 + +28FDA3F4-B799-901F-8A27-AA04F0C022AB,Subtitle,subst +1 + +28FDA3F4-B799-901F-8A27-AA04F0C022AB,Title,subst +1 + +2A230259-3A6F-8669-8B8B-23C3E7C1BFC2,Conditions +{3 conditions} + +2A230259-3A6F-8669-8B8B-23C3E7C1BFC2,ProgramCommandLine +<%ProgramExecutable%> + +2A230259-3A6F-8669-8B8B-23C3E7C1BFC2,WaitForProgram +No + +2A230259-3A6F-8669-8B8B-23C3E7C1BFC2,WorkingDirectory +<%InstallDir%> + +2D445859-68B9-1761-BA4F-DE91AFE5B9EB,Conditions +{0 conditions} + +2DF93B55-41E5-75D5-E815-BD9FDC32D9F8,Alias +{Install Actions} + +2DF93B55-41E5-75D5-E815-BD9FDC32D9F8,Conditions +{0 conditions} + +2E18F4AE-F1BB-5C62-2900-73A576A49261,CheckCondition +{Before Action is Executed} + +2E18F4AE-F1BB-5C62-2900-73A576A49261,Operator +false + +2E18F4AE-F1BB-5C62-2900-73A576A49261,String +<%UpgradeInstall%> + +37A46164-C287-5D4A-E55A-A2329E25E829,CheckCondition +{Before Action is Executed} + +37A46164-C287-5D4A-E55A-A2329E25E829,Filename +<%ProgramExecutable%> + +3AF1A348-10F4-EEB2-FE44-6B5F622C947D,CheckCondition +{Before Action is Executed} + +3AF1A348-10F4-EEB2-FE44-6B5F622C947D,String +<%InstallUSBDriver%> + +3D180445-8990-20F7-13DC-93B6909B907F,Alias +{Startup Actions} + +3EA07B17-04D8-6508-B535-96CC7173B49A,BackButton,subst +1 + +3EA07B17-04D8-6508-B535-96CC7173B49A,CancelButton,subst +1 + +3EA07B17-04D8-6508-B535-96CC7173B49A,Caption,subst +1 + +3EA07B17-04D8-6508-B535-96CC7173B49A,Conditions +{0 conditions} + +3EA07B17-04D8-6508-B535-96CC7173B49A,Message,subst +1 + +3EA07B17-04D8-6508-B535-96CC7173B49A,NextButton,subst +1 + +3F1FF865-1284-2577-16AB-65B308DCE28F,Action +{Uninstall Actions} + +3F2A14F0-06AC-C9D3-1F07-311F41E1338E,Alias +{Startup Actions} + +442920D9-8A51-9476-14E4-787D5C230E84,Message,subst +1 + +4603766D-70BD-919C-AF5F-C4D7B1C181DB,BackButton,subst +1 + +4603766D-70BD-919C-AF5F-C4D7B1C181DB,CancelButton,subst +1 + +4603766D-70BD-919C-AF5F-C4D7B1C181DB,Caption,subst +1 + +4603766D-70BD-919C-AF5F-C4D7B1C181DB,Conditions +{0 conditions} + +4603766D-70BD-919C-AF5F-C4D7B1C181DB,FileValue,subst +1 + +4603766D-70BD-919C-AF5F-C4D7B1C181DB,Message,subst +1 + +4603766D-70BD-919C-AF5F-C4D7B1C181DB,NextButton,subst +1 + +4603766D-70BD-919C-AF5F-C4D7B1C181DB,ProgressValue,subst +1 + +4603766D-70BD-919C-AF5F-C4D7B1C181DB,Subtitle,subst +1 + +4603766D-70BD-919C-AF5F-C4D7B1C181DB,Title,subst +1 + +48596410-DF5A-1E56-D59C-1B1E2F094FCA,Conditions +{1 condition} + +48596410-DF5A-1E56-D59C-1B1E2F094FCA,ShortcutName +<%AppName%> + +48596410-DF5A-1E56-D59C-1B1E2F094FCA,TargetFileName +<%ProgramExecutable%> + +48596410-DF5A-1E56-D59C-1B1E2F094FCA,WorkingDirectory +<%InstallDir%> + +4AAFE838-3E44-5147-0F04-65DB5B647191,CheckCondition +{Before Action is Executed} + +4AAFE838-3E44-5147-0F04-65DB5B647191,Operator +false + +4AAFE838-3E44-5147-0F04-65DB5B647191,String +<%UpgradeInstall%> + +4CF47FDD-7E34-1485-8F10-5B566D536573,CheckCondition +{Before Action is Executed} + +4CF47FDD-7E34-1485-8F10-5B566D536573,Platform +Windows + +4E5FC4FE-5D37-B216-CFFE-E046A2D6321E,CheckCondition +{Before Action is Executed} + +4E5FC4FE-5D37-B216-CFFE-E046A2D6321E,String +<%GuiMode%> + +521E782E-2C93-8C60-9B2A-B65552FFA8E4,Alias +{Uninstall Actions} + +521E782E-2C93-8C60-9B2A-B65552FFA8E4,Conditions +{0 conditions} + +52ACF73B-2106-3106-B7F0-D8587A4A6A3B,CheckCondition +{Before Action is Executed} + +52ACF73B-2106-3106-B7F0-D8587A4A6A3B,Filename +<%ProgramExecutable%> + +54B45A5F-FF59-0E99-952F-165BAA590889,Conditions +{0 conditions} + +580ACF2C-517F-5E48-9DEF-7DAEFBA59FDD,AutoUpdate +Yes + +580ACF2C-517F-5E48-9DEF-7DAEFBA59FDD,Conditions +{1 condition} + +580ACF2C-517F-5E48-9DEF-7DAEFBA59FDD,SubstituteValue +Yes + +580ACF2C-517F-5E48-9DEF-7DAEFBA59FDD,Value +<%PreviousInstallDir%> + +580ACF2C-517F-5E48-9DEF-7DAEFBA59FDD,VirtualText +InstallDir + +58863721-5610-F284-0B46-D2D1D4B93D16,Default +Yes + +58863721-5610-F284-0B46-D2D1D4B93D16,Prompt +<%UninstallStartupText%> + +5C66451D-6042-DBDE-0D8C-31156EE244AD,Conditions +{0 conditions} + +5C66451D-6042-DBDE-0D8C-31156EE244AD,State +disabled + +5C66451D-6042-DBDE-0D8C-31156EE244AD,Widget +{Back Button;Next Button} + +5D20DD8D-064A-9922-29E1-A7FABEF3666A,Background +white + +5D20DD8D-064A-9922-29E1-A7FABEF3666A,Conditions +{2 conditions} + +5D20DD8D-064A-9922-29E1-A7FABEF3666A,Text,subst +1 + +5D20DD8D-064A-9922-29E1-A7FABEF3666A,Type +checkbutton + +5D20DD8D-064A-9922-29E1-A7FABEF3666A,VirtualText +LaunchApplication + +5D20DD8D-064A-9922-29E1-A7FABEF3666A,X +185 + +5D20DD8D-064A-9922-29E1-A7FABEF3666A,Y +130 + +5EC7056B-6F90-311E-2C6F-76E96164CFFD,CheckCondition +{Before Action is Executed} + +5EC7056B-6F90-311E-2C6F-76E96164CFFD,Filename +<%ProgramExecutable%> + +64B8D0F3-4B11-DA22-D6E7-7248872D5FA7,CheckCondition +{Before Action is Executed} + +64B8D0F3-4B11-DA22-D6E7-7248872D5FA7,Message,subst +1 + +64B8D0F3-4B11-DA22-D6E7-7248872D5FA7,Title,subst +1 + +64B8D0F3-4B11-DA22-D6E7-7248872D5FA7,TrueValue +No + +657FDE96-809B-821F-3294-15E637B85E6E,CheckCondition +{Before Action is Executed} + +657FDE96-809B-821F-3294-15E637B85E6E,Filename +<%ProgramExecutable%> + +6661142D-D174-F52E-CD1D-6BFB3649BC64,BackButton,subst +1 + +6661142D-D174-F52E-CD1D-6BFB3649BC64,BrowseButton,subst +1 + +6661142D-D174-F52E-CD1D-6BFB3649BC64,BrowseText,subst +1 + +6661142D-D174-F52E-CD1D-6BFB3649BC64,CancelButton,subst +1 + +6661142D-D174-F52E-CD1D-6BFB3649BC64,Caption,subst +1 + +6661142D-D174-F52E-CD1D-6BFB3649BC64,Conditions +{2 conditions} + +6661142D-D174-F52E-CD1D-6BFB3649BC64,DestinationLabel,subst +0 + +6661142D-D174-F52E-CD1D-6BFB3649BC64,Message,subst +1 + +6661142D-D174-F52E-CD1D-6BFB3649BC64,NextButton,subst +1 + +6661142D-D174-F52E-CD1D-6BFB3649BC64,Subtitle,subst +1 + +6661142D-D174-F52E-CD1D-6BFB3649BC64,Title,subst +1 + +678C30B6-BF0A-238C-524A-2BFEC6876FC5,Alias +{Setup Actions} + +67F58321-C0AF-1721-C519-0FCCABD66FE9,ExitType +Finish + +69188956-D764-5B26-B048-46A4239C3733,CheckCondition +{Before Action is Executed} + +69188956-D764-5B26-B048-46A4239C3733,Platform +Windows + +6B66969B-8882-7EFE-A351-31DEBA7E384E,Alias +{Cancel Actions} + +6B66969B-8882-7EFE-A351-31DEBA7E384E,Conditions +{0 conditions} + +6DE3B369-9D6B-6BC1-4EA0-2C54ECE159EB,CheckCondition +{Before Action is Executed} + +6DE3B369-9D6B-6BC1-4EA0-2C54ECE159EB,Operator +{not empty} + +6DE3B369-9D6B-6BC1-4EA0-2C54ECE159EB,String +<%PreviousInstallDir%> + +710F2507-2557-652D-EA55-440D710EFDFA,Alias +{Install USB Driver} + +710F2507-2557-652D-EA55-440D710EFDFA,Comment +{Instal the USB driver for the SONY PRS500} + +710F2507-2557-652D-EA55-440D710EFDFA,Conditions +{3 conditions} + +710F2507-2557-652D-EA55-440D710EFDFA,ConsoleTitle +{} + +710F2507-2557-652D-EA55-440D710EFDFA,ExecuteAction +{Before Pane is Displayed} + +710F2507-2557-652D-EA55-440D710EFDFA,IncludeStderr +Yes + +710F2507-2557-652D-EA55-440D710EFDFA,ProgramCommandLine +{<%InstallDir%>\driver\devcon.exe install <%InstallDir%>\driver\prs500.inf "USB\VID_054C&PID_029B"} + +710F2507-2557-652D-EA55-440D710EFDFA,ResultVirtualText +DevconResult + +710F2507-2557-652D-EA55-440D710EFDFA,StatusVirtualText +DevconStatus + +710F2507-2557-652D-EA55-440D710EFDFA,WorkingDirectory +{<%InstallDir\driver>} + +72D8B44E-E4CF-7551-645E-FB57C5B000E9,CheckCondition +{Before Action is Executed} + +72D8B44E-E4CF-7551-645E-FB57C5B000E9,String +<%CreateDesktopShortcut%> + +76FA3CA2-1F09-75C5-C6CF-72719A8EC4A5,CheckCondition +{Before Action is Executed} + +76FA3CA2-1F09-75C5-C6CF-72719A8EC4A5,String +<%InstallUSBDriver%> + +77D1144B-1013-79B5-034B-5D6BDA6B2FD2,Conditions +{0 conditions} + +77D1144B-1013-79B5-034B-5D6BDA6B2FD2,FileName +{} + +77D1144B-1013-79B5-034B-5D6BDA6B2FD2,IconPath +{<%InstallDir%>\lrfviewer<%Ext%>} + +77D1144B-1013-79B5-034B-5D6BDA6B2FD2,InstallForAllUsers +Yes + +77D1144B-1013-79B5-034B-5D6BDA6B2FD2,ShortcutName +{LRF Viewer} + +77D1144B-1013-79B5-034B-5D6BDA6B2FD2,TargetFileName +{<%InstallDir%>\lrfviewer<%Ext%>} + +77D1144B-1013-79B5-034B-5D6BDA6B2FD2,WorkingDirectory +<%InstallDir%> + +797C84AD-91E9-78BB-A794-B1406EEA6ABF,CheckCondition +{Before Action is Executed} + +797C84AD-91E9-78BB-A794-B1406EEA6ABF,Operator +false + +797C84AD-91E9-78BB-A794-B1406EEA6ABF,String +<%Answer%> + +7C1E2A34-CD5C-F707-9DF3-92DF130C3BFD,Alias +{Setup Actions} + +7C1E2A34-CD5C-F707-9DF3-92DF130C3BFD,Conditions +{0 conditions} + +7C2D1F15-9A28-9938-3C1B-681A4D79C7B2,CheckCondition +{Before Action is Executed} + +7C2D1F15-9A28-9938-3C1B-681A4D79C7B2,Operator +false + +7C2D1F15-9A28-9938-3C1B-681A4D79C7B2,String +<%InstallStopped%> + +7C57D3D3-B1DB-0888-B098-B46AD4F99F7E,Background +white + +7C57D3D3-B1DB-0888-B098-B46AD4F99F7E,Text,subst +1 + +7C57D3D3-B1DB-0888-B098-B46AD4F99F7E,Type +checkbutton + +7C57D3D3-B1DB-0888-B098-B46AD4F99F7E,VirtualText +LaunchApplication + +7C57D3D3-B1DB-0888-B098-B46AD4F99F7E,X +185 + +7C57D3D3-B1DB-0888-B098-B46AD4F99F7E,Y +160 + +7CCDA4BB-861C-C21E-3011-E93DB58F07D6,Conditions +{0 conditions} + +7CCDA4BB-861C-C21E-3011-E93DB58F07D6,ExecuteAction +{Before Pane is Displayed} + +825CDD1E-9B3D-E64E-5381-5C5557D204A2,CheckCondition +{Before Action is Executed} + +825CDD1E-9B3D-E64E-5381-5C5557D204A2,Operator +false + +825CDD1E-9B3D-E64E-5381-5C5557D204A2,String +<%Answer%> + +8A7FD0C2-F053-8764-F204-4BAE71E05708,BackButton,subst +1 + +8A7FD0C2-F053-8764-F204-4BAE71E05708,CancelButton,subst +1 + +8A7FD0C2-F053-8764-F204-4BAE71E05708,Caption,subst +1 + +8A7FD0C2-F053-8764-F204-4BAE71E05708,Conditions +{0 conditions} + +8A7FD0C2-F053-8764-F204-4BAE71E05708,Message,subst +1 + +8A7FD0C2-F053-8764-F204-4BAE71E05708,NextButton,subst +1 + +940F7FED-7D20-7264-3BF9-ED78205A76B3,Background +white + +940F7FED-7D20-7264-3BF9-ED78205A76B3,Conditions +{2 conditions} + +940F7FED-7D20-7264-3BF9-ED78205A76B3,Text,subst +1 + +940F7FED-7D20-7264-3BF9-ED78205A76B3,Type +checkbutton + +940F7FED-7D20-7264-3BF9-ED78205A76B3,VirtualText +CreateDesktopShortcut + +940F7FED-7D20-7264-3BF9-ED78205A76B3,X +185 + +940F7FED-7D20-7264-3BF9-ED78205A76B3,Y +150 + +95ED4967-8F0C-7BA2-A7EE-FF9FAACEEADF,Conditions +{2 conditions} + +95ED4967-8F0C-7BA2-A7EE-FF9FAACEEADF,IgnoreErrors +Yes + +95ED4967-8F0C-7BA2-A7EE-FF9FAACEEADF,ProgramCommandLine +{<%InstallDir%>\driver\devcon.exe remove "USB\VID_054C&PID_029B"} + +95ED4967-8F0C-7BA2-A7EE-FF9FAACEEADF,ResultVirtualText +UninstallDevconResult + +95ED4967-8F0C-7BA2-A7EE-FF9FAACEEADF,StatusVirtualText +UninstallDevconStatus + +96440B8B-C6D0-FCCA-6D3C-7ECE1C304CC0,CheckCondition +{Before Action is Executed} + +96440B8B-C6D0-FCCA-6D3C-7ECE1C304CC0,Filename +<%ProgramExecutable%> + +9ACCDC35-E034-F142-ED42-AC8EC2B9AE2D,AcceptRadiobutton,subst +0 + +9ACCDC35-E034-F142-ED42-AC8EC2B9AE2D,Active +Yes + +9ACCDC35-E034-F142-ED42-AC8EC2B9AE2D,BackButton,subst +1 + +9ACCDC35-E034-F142-ED42-AC8EC2B9AE2D,Buttons +Next/Cancel + +9ACCDC35-E034-F142-ED42-AC8EC2B9AE2D,CancelButton,subst +1 + +9ACCDC35-E034-F142-ED42-AC8EC2B9AE2D,Caption,subst +1 + +9ACCDC35-E034-F142-ED42-AC8EC2B9AE2D,Conditions +{0 conditions} + +9ACCDC35-E034-F142-ED42-AC8EC2B9AE2D,DeclineRadiobutton,subst +0 + +9ACCDC35-E034-F142-ED42-AC8EC2B9AE2D,Message,subst +1 + +9ACCDC35-E034-F142-ED42-AC8EC2B9AE2D,NextButton,subst +1 + +9ACCDC35-E034-F142-ED42-AC8EC2B9AE2D,Subtitle,subst +1 + +9ACCDC35-E034-F142-ED42-AC8EC2B9AE2D,Text,subst +1 + +9ACCDC35-E034-F142-ED42-AC8EC2B9AE2D,Title,subst +1 + +9B935DA3-A0E5-9C04-D692-9D10B44ADC90,Action +{Uninstall Actions} + +9C1E4BD9-066D-ABCE-28D0-9E194B9F8475,CheckCondition +{Before Action is Executed} + +9C1E4BD9-066D-ABCE-28D0-9E194B9F8475,Filename +<%ProgramExecutable%> + +9E0D138E-5FFC-0F18-F110-F093644E4DD2,CheckCondition +{Before Next Pane is Displayed} + +9E0D138E-5FFC-0F18-F110-F093644E4DD2,FailureMessage +<%DirectoryPermissionText%> + +9E0D138E-5FFC-0F18-F110-F093644E4DD2,Filename +<%InstallDir%> + +9E0D138E-5FFC-0F18-F110-F093644E4DD2,Permission +{can create} + +A05E9D13-9686-83DD-C6AD-2A4D912C5B81,Action +{Install Actions} + +A05E9D13-9686-83DD-C6AD-2A4D912C5B81,Conditions +{0 conditions} + +A1E6AD62-FD68-14BF-2D05-264DC2B370A5,Prompt +<%ConsoleSelectDestinationText%> + +A1E6AD62-FD68-14BF-2D05-264DC2B370A5,VirtualText +InstallDir + +A246E5D4-5489-19CC-C7B1-AA0C98D55F85,Background +white + +A246E5D4-5489-19CC-C7B1-AA0C98D55F85,Checked +No + +A246E5D4-5489-19CC-C7B1-AA0C98D55F85,Conditions +{3 conditions} + +A246E5D4-5489-19CC-C7B1-AA0C98D55F85,Text,subst +1 + +A246E5D4-5489-19CC-C7B1-AA0C98D55F85,Type +checkbutton + +A246E5D4-5489-19CC-C7B1-AA0C98D55F85,VirtualText +CreateQuickLaunchShortcut + +A246E5D4-5489-19CC-C7B1-AA0C98D55F85,X +185 + +A246E5D4-5489-19CC-C7B1-AA0C98D55F85,Y +200 + +A4388F3F-0D32-F14E-BA00-1BE7F54B05ED,CheckCondition +{Before Action is Executed} + +A4388F3F-0D32-F14E-BA00-1BE7F54B05ED,Operator +false + +A4388F3F-0D32-F14E-BA00-1BE7F54B05ED,String +<%LicenseAccepted%> + +A57E3390-AA3E-A868-2C7D-75ADF12D8471,Alias +{Finish Actions} + +A5A97363-4CD6-4A6A-3D39-6EFC56BA9D39,BackButton,subst +1 + +A5A97363-4CD6-4A6A-3D39-6EFC56BA9D39,CancelButton,subst +1 + +A5A97363-4CD6-4A6A-3D39-6EFC56BA9D39,Caption,subst +1 + +A5A97363-4CD6-4A6A-3D39-6EFC56BA9D39,Conditions +{0 conditions} + +A5A97363-4CD6-4A6A-3D39-6EFC56BA9D39,Message,subst +1 + +A5A97363-4CD6-4A6A-3D39-6EFC56BA9D39,NextButton,subst +1 + +A75C28A7-801B-22B3-C00A-B4B6F148DAA5,CheckCondition +{Before Action is Executed} + +A75C28A7-801B-22B3-C00A-B4B6F148DAA5,Operator +false + +A75C28A7-801B-22B3-C00A-B4B6F148DAA5,String +<%UpgradeInstall%> + +A75C97CC-01AC-C12A-D663-A54E3257F11B,State +disabled + +A75C97CC-01AC-C12A-D663-A54E3257F11B,Widget +{Back Button;Next Button} + +A8856922-E6C1-160B-E55C-5C1806A89136,CheckCondition +{Before Action is Executed} + +A8856922-E6C1-160B-E55C-5C1806A89136,Operator +false + +A8856922-E6C1-160B-E55C-5C1806A89136,String +<%InstallStopped%> + +AAEC34E6-7F02-18F2-30BB-744738192A3B,Conditions +{2 conditions} + +AAEC34E6-7F02-18F2-30BB-744738192A3B,State +disabled + +AAEC34E6-7F02-18F2-30BB-744738192A3B,Widget +NextButton + +AAF04AF0-329D-75A6-BB68-60ECF2EB74F0,CheckCondition +{Before Action is Executed} + +AAF04AF0-329D-75A6-BB68-60ECF2EB74F0,Operator +false + +AAF04AF0-329D-75A6-BB68-60ECF2EB74F0,String +<%InstallStopped%> + +AAFE58A0-2DFB-CA20-1F6E-D3815F885996,Alias +{Cancel Actions} + +AIX-ppc,Active +No + +AIX-ppc,DefaultDirectoryPermission +0755 + +AIX-ppc,DefaultFilePermission +0755 + +AIX-ppc,Executable +<%AppName%>-<%Version%>-<%Platform%>-Install<%Ext%> + +AIX-ppc,FallBackToConsole +Yes + +AIX-ppc,InstallDir +<%Home%>/<%ShortAppName%> + +AIX-ppc,InstallMode +Standard + +AIX-ppc,InstallType +Typical + +AIX-ppc,ProgramExecutable +<%InstallDir%>/calibre + +AIX-ppc,ProgramFolderAllUsers +No + +AIX-ppc,ProgramFolderName +<%AppName%> + +AIX-ppc,ProgramLicense +<%InstallDir%>/LICENSE + +AIX-ppc,ProgramName +{} + +AIX-ppc,ProgramReadme +<%InstallDir%>/README.txt + +AIX-ppc,PromptForRoot +Yes + +AIX-ppc,RequireRoot +No + +AIX-ppc,RootInstallDir +/usr/local/<%ShortAppName%> + +B113E8EE-10BD-0792-4CD3-7E0ADC8CD7FA,Action +{Uninstall Actions} + +B3012DC5-8A65-EBF0-8641-CE533A8A7A2D,BackButton,subst +1 + +B3012DC5-8A65-EBF0-8641-CE533A8A7A2D,CancelButton,subst +1 + +B3012DC5-8A65-EBF0-8641-CE533A8A7A2D,Caption,subst +1 + +B3012DC5-8A65-EBF0-8641-CE533A8A7A2D,Message,subst +1 + +B3012DC5-8A65-EBF0-8641-CE533A8A7A2D,NextButton,subst +1 + +B3F43ECF-D504-F7A0-45FE-A735D202B6F0,Comment +{Do not display this pane if this is an upgrade install unless there is more than one installation present} + +B3F43ECF-D504-F7A0-45FE-A735D202B6F0,Script +{!<%UpgradeInstall%> || <%PreviousInstallCount%> != 1} + +B6D03F99-8B73-BE6E-1050-721B286D3D60,Action +{Install Actions} + +B6D03F99-8B73-BE6E-1050-721B286D3D60,Conditions +{0 conditions} + +B7F0CB71-720B-7DC9-5C5E-AA1AF92D78E2,CheckCondition +{Before Action is Executed} + +B7F0CB71-720B-7DC9-5C5E-AA1AF92D78E2,Operator +false + +B7F0CB71-720B-7DC9-5C5E-AA1AF92D78E2,String +<%InstallStopped%> + +BDC2A4B5-C169-A971-4F35-13B1BF3F8C24,CheckCondition +{Before Action is Executed} + +BDC2A4B5-C169-A971-4F35-13B1BF3F8C24,Filename +<%ProgramExecutable%> + +BE4A731E-1FC2-87A1-547D-91E2CA467AA7,Conditions +{0 conditions} + +BE4A731E-1FC2-87A1-547D-91E2CA467AA7,Directory +<%InstallDir%> + +BE4A731E-1FC2-87A1-547D-91E2CA467AA7,ExecuteAction +{Before Pane is Displayed} + +BE4A731E-1FC2-87A1-547D-91E2CA467AA7,Level +system + +BE4A731E-1FC2-87A1-547D-91E2CA467AA7,Location +beginning + +BEF8D398-58BA-1F66-39D6-D4A63D5BEEF9,Destination +<%InstallDir%> + +BEF8D398-58BA-1F66-39D6-D4A63D5BEEF9,Name +{Program Files} + +BF3067ED-139A-269F-F6DA-9D43B840779A,ExitType +Finish + +BFD200F2-6AC9-8FE2-046F-48E5126BE639,Action +{Install Actions} + +C14CC317-9757-2C79-64C6-BC6C8A267CB1,Conditions +{1 condition} + +C3E9E5D9-58C8-C2C5-DF75-21D908A64782,Message,subst +1 + +C4C0A903-CF2A-D25A-27AB-A64219FB7E70,CheckCondition +{Before Action is Executed} + +C4C0A903-CF2A-D25A-27AB-A64219FB7E70,String +<%CreateQuickLaunchShortcut%> + +C5416030-8AB4-3466-F341-9A0BBFEA55EF,CheckCondition +{Before Action is Executed} + +C5416030-8AB4-3466-F341-9A0BBFEA55EF,Operator +false + +C5416030-8AB4-3466-F341-9A0BBFEA55EF,String +<%UpgradeInstall%> + +C5AD5B0C-26BE-16E5-899A-9A9436C8F688,ExitType +Finish + +C6DE83DD-5C2A-AC5B-6ABA-84D73AE38655,Platform +Windows + +C7D6444E-DB8B-EE24-3E12-A2AF8A392C5D,Background +white + +C7D6444E-DB8B-EE24-3E12-A2AF8A392C5D,Conditions +{2 conditions} + +C7D6444E-DB8B-EE24-3E12-A2AF8A392C5D,Text,subst +1 + +C7D6444E-DB8B-EE24-3E12-A2AF8A392C5D,Type +checkbutton + +C7D6444E-DB8B-EE24-3E12-A2AF8A392C5D,VirtualText +CreateDesktopShortcut + +C7D6444E-DB8B-EE24-3E12-A2AF8A392C5D,X +185 + +C7D6444E-DB8B-EE24-3E12-A2AF8A392C5D,Y +180 + +C93967A6-0618-9A8C-9554-35292F85F61B,Conditions +{0 conditions} + +C93967A6-0618-9A8C-9554-35292F85F61B,Default +Yes + +C93967A6-0618-9A8C-9554-35292F85F61B,Prompt +<%InstallStartupText%> + +CFBE4459-450B-1FAB-3422-609544334AA2,CheckCondition +{Before Action is Executed} + +CFBE4459-450B-1FAB-3422-609544334AA2,Operator +false + +CFBE4459-450B-1FAB-3422-609544334AA2,String +<%InstallStopped%> + +D6631BA5-577E-B30C-A73D-2B12B826811A,Active +Yes + +D6631BA5-577E-B30C-A73D-2B12B826811A,BackButton,subst +1 + +D6631BA5-577E-B30C-A73D-2B12B826811A,CancelButton,subst +1 + +D6631BA5-577E-B30C-A73D-2B12B826811A,Caption,subst +1 + +D6631BA5-577E-B30C-A73D-2B12B826811A,Conditions +{1 condition} + +D6631BA5-577E-B30C-A73D-2B12B826811A,Message,subst +1 + +D6631BA5-577E-B30C-A73D-2B12B826811A,NextButton,subst +1 + +D79DC0D2-38BC-9D9F-2DF4-3C76D89BF933,ExitType +Finish + +D86BBA5C-4903-33BA-59F8-4266A3D45896,Conditions +{2 conditions} + +D86BBA5C-4903-33BA-59F8-4266A3D45896,ShortcutDirectory +<%QUICK_LAUNCH%> + +D86BBA5C-4903-33BA-59F8-4266A3D45896,ShortcutName +<%AppName%> + +D86BBA5C-4903-33BA-59F8-4266A3D45896,TargetFileName +<%ProgramExecutable%> + +D86BBA5C-4903-33BA-59F8-4266A3D45896,WorkingDirectory +<%InstallDir%> + +D9ADE41C-B744-690C-2CED-CF826BF03D2E,Components +F6829AB7-9F66-4CEE-CA0E-21F54C6D3609 + +D9ADE41C-B744-690C-2CED-CF826BF03D2E,Description,subst +1 + +D9ADE41C-B744-690C-2CED-CF826BF03D2E,DisplayName,subst +1 + +D9ADE41C-B744-690C-2CED-CF826BF03D2E,Name +Typical + +E32519F3-A540-C8F3-957F-4C1DB5B25DFE,Conditions +{2 conditions} + +E32519F3-A540-C8F3-957F-4C1DB5B25DFE,ShortcutName +<%AppName%> + +E32519F3-A540-C8F3-957F-4C1DB5B25DFE,TargetFileName +<%ProgramExecutable%> + +E32519F3-A540-C8F3-957F-4C1DB5B25DFE,WorkingDirectory +<%InstallDir%> + +E560F3A1-208D-2B4F-2C87-E08595F8E1CD,CheckCondition +{Before Action is Executed} + +E560F3A1-208D-2B4F-2C87-E08595F8E1CD,String +<%LaunchApplication%> + +E57B5080-47C0-3209-40DC-144F41FBF866,CheckCondition +{Before Action is Executed} + +E57B5080-47C0-3209-40DC-144F41FBF866,Platform +Windows + +E5CBB018-A89D-3145-CFF5-CFC3B62BEA97,State +disabled + +E5CBB018-A89D-3145-CFF5-CFC3B62BEA97,Widget +{NextButton; CancelButton} + +E5D227F7-E549-EFA9-1781-EFA6C5EEEC5C,CheckCondition +{Before Action is Executed} + +E5D227F7-E549-EFA9-1781-EFA6C5EEEC5C,Filename +<%ProgramExecutable%> + +E611105F-DC85-9E20-4F7B-E63C54E5DF06,Message,subst +1 + +EDD03974-B223-B62F-DA4B-FD5E94861CFE,Conditions +{1 condition} + +EE3AF196-AF0F-4947-CD75-7894634F48A6,Conditions +{1 condition} + +EE3AF196-AF0F-4947-CD75-7894634F48A6,FileName +<%ShortAppName%>-uninstall + +EE3AF196-AF0F-4947-CD75-7894634F48A6,ShortcutName +{Uninstall <%AppName%>} + +EE3AF196-AF0F-4947-CD75-7894634F48A6,TargetFileName +<%Uninstaller%> + +EE3AF196-AF0F-4947-CD75-7894634F48A6,WorkingDirectory +<%InstallDir%> + +EE91F1AF-8AEB-B248-D932-3702CC788AF9,BackButton,subst +1 + +EE91F1AF-8AEB-B248-D932-3702CC788AF9,CancelButton,subst +1 + +EE91F1AF-8AEB-B248-D932-3702CC788AF9,Caption,subst +1 + +EE91F1AF-8AEB-B248-D932-3702CC788AF9,Message,subst +1 + +EE91F1AF-8AEB-B248-D932-3702CC788AF9,NextButton,subst +1 + +EE91F1AF-8AEB-B248-D932-3702CC788AF9,Subtitle,subst +1 + +EE91F1AF-8AEB-B248-D932-3702CC788AF9,Text,subst +1 + +EE91F1AF-8AEB-B248-D932-3702CC788AF9,Title,subst +1 + +F6829AB7-9F66-4CEE-CA0E-21F54C6D3609,Description,subst +1 + +F6829AB7-9F66-4CEE-CA0E-21F54C6D3609,DisplayName,subst +1 + +F6829AB7-9F66-4CEE-CA0E-21F54C6D3609,FileGroups +BEF8D398-58BA-1F66-39D6-D4A63D5BEEF9 + +F6829AB7-9F66-4CEE-CA0E-21F54C6D3609,Name +Main + +F6829AB7-9F66-4CEE-CA0E-21F54C6D3609,RequiredComponent +Yes + +F6C53555-674E-0479-7EC0-FE737201EA0A,CheckCondition +{Before Next Action is Executed} + +F6C53555-674E-0479-7EC0-FE737201EA0A,FailureMessage +<%DirectoryPermissionText%> + +F6C53555-674E-0479-7EC0-FE737201EA0A,Filename +<%InstallDir%> + +F6C53555-674E-0479-7EC0-FE737201EA0A,Permission +{can create} + +F8921FAD-AFBD-348C-F26C-67855FA4691D,CheckCondition +{Before Action is Executed} + +F8921FAD-AFBD-348C-F26C-67855FA4691D,String +<%GuiMode%> + +FAE98A0F-B6A9-30D2-A9EA-33F9D5F8B3D0,BackButton,subst +1 + +FAE98A0F-B6A9-30D2-A9EA-33F9D5F8B3D0,CancelButton,subst +1 + +FAE98A0F-B6A9-30D2-A9EA-33F9D5F8B3D0,Caption,subst +1 + +FAE98A0F-B6A9-30D2-A9EA-33F9D5F8B3D0,Conditions +{0 conditions} + +FAE98A0F-B6A9-30D2-A9EA-33F9D5F8B3D0,FileLabel,subst +1 + +FAE98A0F-B6A9-30D2-A9EA-33F9D5F8B3D0,Message,subst +1 + +FAE98A0F-B6A9-30D2-A9EA-33F9D5F8B3D0,NextButton,subst +1 + +FAE98A0F-B6A9-30D2-A9EA-33F9D5F8B3D0,ProgressValue,subst +1 + +FAE98A0F-B6A9-30D2-A9EA-33F9D5F8B3D0,Subtitle,subst +1 + +FAE98A0F-B6A9-30D2-A9EA-33F9D5F8B3D0,Title,subst +1 + +FBA33088-C809-DD6B-D337-EADBF1CEE966,CheckCondition +{Before Action is Executed} + +FBA33088-C809-DD6B-D337-EADBF1CEE966,Operator +false + +FBA33088-C809-DD6B-D337-EADBF1CEE966,String +<%InstallStopped%> + +FreeBSD-4-x86,Active +No + +FreeBSD-4-x86,DefaultDirectoryPermission +0755 + +FreeBSD-4-x86,DefaultFilePermission +0755 + +FreeBSD-4-x86,Executable +<%AppName%>-<%Version%>-<%Platform%>-Install<%Ext%> + +FreeBSD-4-x86,FallBackToConsole +Yes + +FreeBSD-4-x86,InstallDir +<%Home%>/<%ShortAppName%> + +FreeBSD-4-x86,InstallMode +Standard + +FreeBSD-4-x86,InstallType +Typical + +FreeBSD-4-x86,ProgramExecutable +<%InstallDir%>/calibre + +FreeBSD-4-x86,ProgramFolderAllUsers +No + +FreeBSD-4-x86,ProgramFolderName +<%AppName%> + +FreeBSD-4-x86,ProgramLicense +<%InstallDir%>/LICENSE.txt + +FreeBSD-4-x86,ProgramName +{} + +FreeBSD-4-x86,ProgramReadme +<%InstallDir%>/README.txt + +FreeBSD-4-x86,PromptForRoot +Yes + +FreeBSD-4-x86,RequireRoot +No + +FreeBSD-4-x86,RootInstallDir +/usr/local/<%ShortAppName%> + +FreeBSD-x86,Active +No + +FreeBSD-x86,DefaultDirectoryPermission +0755 + +FreeBSD-x86,DefaultFilePermission +0755 + +FreeBSD-x86,Executable +<%AppName%>-<%Version%>-<%Platform%>-Install<%Ext%> + +FreeBSD-x86,FallBackToConsole +Yes + +FreeBSD-x86,InstallDir +<%Home%>/<%ShortAppName%> + +FreeBSD-x86,InstallMode +Standard + +FreeBSD-x86,InstallType +Typical + +FreeBSD-x86,ProgramExecutable +<%InstallDir%>/calibre + +FreeBSD-x86,ProgramFolderAllUsers +No + +FreeBSD-x86,ProgramFolderName +<%AppName%> + +FreeBSD-x86,ProgramLicense +<%InstallDir%>/LICENSE.txt + +FreeBSD-x86,ProgramName +{} + +FreeBSD-x86,ProgramReadme +<%InstallDir%>/README.txt + +FreeBSD-x86,PromptForRoot +Yes + +FreeBSD-x86,RequireRoot +No + +FreeBSD-x86,RootInstallDir +/usr/local/<%ShortAppName%> + +HPUX-hppa,Active +No + +HPUX-hppa,DefaultDirectoryPermission +0755 + +HPUX-hppa,DefaultFilePermission +0755 + +HPUX-hppa,Executable +<%AppName%>-<%Version%>-<%Platform%>-Install<%Ext%> + +HPUX-hppa,FallBackToConsole +Yes + +HPUX-hppa,InstallDir +<%Home%>/<%ShortAppName%> + +HPUX-hppa,InstallMode +Standard + +HPUX-hppa,InstallType +Typical + +HPUX-hppa,ProgramExecutable +<%InstallDir%>/calibre + +HPUX-hppa,ProgramFolderAllUsers +No + +HPUX-hppa,ProgramFolderName +<%AppName%> + +HPUX-hppa,ProgramLicense +<%InstallDir%>/LICENSE.txt + +HPUX-hppa,ProgramName +{} + +HPUX-hppa,ProgramReadme +<%InstallDir%>/README.txt + +HPUX-hppa,PromptForRoot +Yes + +HPUX-hppa,RequireRoot +No + +HPUX-hppa,RootInstallDir +/usr/local/<%ShortAppName%> + +Linux-x86,Active +No + +Linux-x86,DefaultDirectoryPermission +0755 + +Linux-x86,DefaultFilePermission +0755 + +Linux-x86,Executable +<%AppName%>-<%Version%>-<%Platform%>-Install<%Ext%> + +Linux-x86,FallBackToConsole +Yes + +Linux-x86,InstallDir +<%Home%>/<%ShortAppName%> + +Linux-x86,InstallMode +Standard + +Linux-x86,InstallType +Typical + +Linux-x86,ProgramExecutable +<%InstallDir%>/calibre + +Linux-x86,ProgramFolderAllUsers +No + +Linux-x86,ProgramFolderName +<%AppName%> + +Linux-x86,ProgramLicense +<%InstallDir%>/LICENSE.txt + +Linux-x86,ProgramName +{} + +Linux-x86,ProgramReadme +<%InstallDir%>/README.txt + +Linux-x86,PromptForRoot +Yes + +Linux-x86,RequireRoot +Yes + +Linux-x86,RootInstallDir +/opt/<%ShortAppName%> + +Solaris-sparc,Active +No + +Solaris-sparc,DefaultDirectoryPermission +0755 + +Solaris-sparc,DefaultFilePermission +0755 + +Solaris-sparc,Executable +<%AppName%>-<%Version%>-<%Platform%>-Install<%Ext%> + +Solaris-sparc,FallBackToConsole +Yes + +Solaris-sparc,InstallDir +<%Home%>/<%ShortAppName%> + +Solaris-sparc,InstallMode +Standard + +Solaris-sparc,InstallType +Typical + +Solaris-sparc,ProgramExecutable +<%InstallDir%>/calibre + +Solaris-sparc,ProgramFolderAllUsers +No + +Solaris-sparc,ProgramFolderName +<%AppName%> + +Solaris-sparc,ProgramLicense +<%InstallDir%>/LICENSE.txt + +Solaris-sparc,ProgramName +{} + +Solaris-sparc,ProgramReadme +<%InstallDir%>/README.txt + +Solaris-sparc,PromptForRoot +Yes + +Solaris-sparc,RequireRoot +No + +Solaris-sparc,RootInstallDir +/usr/local/<%ShortAppName%> + +TarArchive,Active +No + +TarArchive,CompressionLevel +6 + +TarArchive,DefaultDirectoryPermission +0755 + +TarArchive,DefaultFilePermission +0755 + +TarArchive,Executable +<%AppName%>-<%Version%>-<%Platform%>-Install<%Ext%> + +TarArchive,FallBackToConsole +Yes + +TarArchive,InstallDir +<%Home%>/<%ShortAppName%> + +TarArchive,InstallMode +Standard + +TarArchive,InstallType +Typical + +TarArchive,OutputFileName +<%ShortAppName%>-<%Version%>.tar.gz + +TarArchive,ProgramExecutable +{} + +TarArchive,ProgramFolderAllUsers +No + +TarArchive,ProgramFolderName +<%AppName%> + +TarArchive,ProgramLicense +<%InstallDir%>/LICENSE.txt + +TarArchive,ProgramName +{} + +TarArchive,ProgramReadme +<%InstallDir%>/README.txt + +TarArchive,PromptForRoot +Yes + +TarArchive,RequireRoot +No + +TarArchive,RootInstallDir +/usr/local/<%ShortAppName%> + +TarArchive,VirtualTextMap +{<%InstallDir%> <%ShortAppName%>} + +Windows,Active +Yes + +Windows,Executable +<%AppName%>-<%Version%><%Ext%> + +Windows,IncludeTWAPI +Yes + +Windows,InstallDir +<%PROGRAM_FILES%>/<%AppName%> + +Windows,InstallMode +Standard + +Windows,InstallType +Typical + +Windows,ProgramExecutable +<%InstallDir%>/calibre.exe + +Windows,ProgramFolderAllUsers +Yes + +Windows,ProgramFolderName +<%AppName%> + +Windows,ProgramLicense +<%InstallDir%>/LICENSE + +Windows,ProgramName +{} + +Windows,ProgramReadme +<%InstallDir%>/README.txt + +Windows,WindowsIcon +{Setup Blue Screen.ico} + +ZipArchive,Active +No + +ZipArchive,CompressionLevel +6 + +ZipArchive,DefaultDirectoryPermission +0755 + +ZipArchive,DefaultFilePermission +0755 + +ZipArchive,Executable +<%AppName%>-<%Version%>-<%Platform%>-Install<%Ext%> + +ZipArchive,FallBackToConsole +Yes + +ZipArchive,InstallDir +<%Home%>/<%ShortAppName%> + +ZipArchive,InstallMode +Standard + +ZipArchive,InstallType +Typical + +ZipArchive,OutputFileName +<%ShortAppName%>-<%Version%>.zip + +ZipArchive,ProgramExecutable +{} + +ZipArchive,ProgramFolderAllUsers +No + +ZipArchive,ProgramFolderName +<%AppName%> + +ZipArchive,ProgramLicense +<%InstallDir%>/LICENSE.txt + +ZipArchive,ProgramName +{} + +ZipArchive,ProgramReadme +<%InstallDir%>/README.txt + +ZipArchive,PromptForRoot +Yes + +ZipArchive,RequireRoot +No + +ZipArchive,RootInstallDir +/usr/local/<%ShortAppName%> + +ZipArchive,VirtualTextMap +{<%InstallDir%> <%ShortAppName%>} + +} + +::msgcat::mcmset de { +1356216E-90D2-8324-0EEB-975A64F23EB8,Message +<%InstallingApplicationText%> + +442920D9-8A51-9476-14E4-787D5C230E84,Message +<%UninstallCompleteText%> + +C3E9E5D9-58C8-C2C5-DF75-21D908A64782,Message +<%UninstallingApplicationText%> + +E611105F-DC85-9E20-4F7B-E63C54E5DF06,Message +<%InstallationCompleteText%> + +} +::msgcat::mcmset en { +1356216E-90D2-8324-0EEB-975A64F23EB8,Message +<%InstallingApplicationText%> + +1B9E77A3-10D6-9EDD-160B-64B5EBB31981,Text +{Install USB driver for the SONY PRS500} + +21B897C4-24BE-70D1-58EA-DE78EFA60719,Message +{USB Driver installation failed with return code <%DevconStatus%> and concole output \n\n<%DevconResult%>} + +21B897C4-24BE-70D1-58EA-DE78EFA60719,Title +{USB Driver installation failed} + +27B44808-381F-7202-A0D9-40788CD679D0,Text +<%CreateQuickLaunchShortcutText%> + +3EA07B17-04D8-6508-B535-96CC7173B49A,Caption +{Welcome to the installer for <%AppName%>} + +3EA07B17-04D8-6508-B535-96CC7173B49A,Message +{<%AppName%> version <%Version%> created by Kovid Goyal + +Click Next to continue or Cancel to exit Setup.} + +442920D9-8A51-9476-14E4-787D5C230E84,Message +<%UninstallCompleteText%> + +48E8A9D6-B57E-C506-680D-898C65DD2A1B,Message +<%InstallStartupText%> + +48E8A9D6-B57E-C506-680D-898C65DD2A1B,Title +<%InstallApplicationText%> + +5D20DD8D-064A-9922-29E1-A7FABEF3666A,Text +<%LaunchApplicationText%> + +64B8D0F3-4B11-DA22-D6E7-7248872D5FA7,Message +<%UninstallStartupText%> + +64B8D0F3-4B11-DA22-D6E7-7248872D5FA7,Title +<%UninstallApplicationText%> + +7C57D3D3-B1DB-0888-B098-B46AD4F99F7E,Text +<%LaunchApplicationText%> + +8A7FD0C2-F053-8764-F204-4BAE71E05708,Caption +{<%AppName%> Installation complete} + +8A7FD0C2-F053-8764-F204-4BAE71E05708,Message +{Installation of <%AppName%> was successful. Click Finish to quit the installer.} + +940F7FED-7D20-7264-3BF9-ED78205A76B3,Text +<%CreateDesktopShortcutText%> + +9ACCDC35-E034-F142-ED42-AC8EC2B9AE2D,CancelButton +<%Cancel%> + +9ACCDC35-E034-F142-ED42-AC8EC2B9AE2D,NextButton +<%Next%> + +9ACCDC35-E034-F142-ED42-AC8EC2B9AE2D,Text +<%License%> + +A246E5D4-5489-19CC-C7B1-AA0C98D55F85,Text +<%CreateQuickLaunchShortcutText%> + +C3E9E5D9-58C8-C2C5-DF75-21D908A64782,Message +<%UninstallingApplicationText%> + +C7D6444E-DB8B-EE24-3E12-A2AF8A392C5D,Text +<%CreateDesktopShortcutText%> + +D6631BA5-577E-B30C-A73D-2B12B826811A,Caption +{Install USB Driver} + +D6631BA5-577E-B30C-A73D-2B12B826811A,Message +{If you intend to use <%AppName%> to manage your SONY PRS500, you have to install the USB driver. Note that you cannot use the PRS500 in both <%AppName%> and the SONY E-library software.} + +D9ADE41C-B744-690C-2CED-CF826BF03D2E,Description +<%TypicalInstallDescription%> + +E611105F-DC85-9E20-4F7B-E63C54E5DF06,Message +<%InstallationCompleteText%> + +F6829AB7-9F66-4CEE-CA0E-21F54C6D3609,Description +<%ProgramFilesDescription%> + +} +::msgcat::mcmset es { +1356216E-90D2-8324-0EEB-975A64F23EB8,Message +<%InstallingApplicationText%> + +442920D9-8A51-9476-14E4-787D5C230E84,Message +<%UninstallCompleteText%> + +C3E9E5D9-58C8-C2C5-DF75-21D908A64782,Message +<%UninstallingApplicationText%> + +E611105F-DC85-9E20-4F7B-E63C54E5DF06,Message +<%InstallationCompleteText%> + +} +::msgcat::mcmset fr { +1356216E-90D2-8324-0EEB-975A64F23EB8,Message +<%InstallingApplicationText%> + +442920D9-8A51-9476-14E4-787D5C230E84,Message +<%UninstallCompleteText%> + +C3E9E5D9-58C8-C2C5-DF75-21D908A64782,Message +<%UninstallingApplicationText%> + +E611105F-DC85-9E20-4F7B-E63C54E5DF06,Message +<%InstallationCompleteText%> + +} +::msgcat::mcmset hu { +1356216E-90D2-8324-0EEB-975A64F23EB8,Message +<%InstallingApplicationText%> + +442920D9-8A51-9476-14E4-787D5C230E84,Message +<%UninstallCompleteText%> + +C3E9E5D9-58C8-C2C5-DF75-21D908A64782,Message +<%UninstallingApplicationText%> + +E611105F-DC85-9E20-4F7B-E63C54E5DF06,Message +<%InstallationCompleteText%> + +} +::msgcat::mcmset it { +1356216E-90D2-8324-0EEB-975A64F23EB8,Message +<%InstallingApplicationText%> + +442920D9-8A51-9476-14E4-787D5C230E84,Message +<%UninstallCompleteText%> + +C3E9E5D9-58C8-C2C5-DF75-21D908A64782,Message +<%UninstallingApplicationText%> + +E611105F-DC85-9E20-4F7B-E63C54E5DF06,Message +<%InstallationCompleteText%> + +} +::msgcat::mcmset nl { +1356216E-90D2-8324-0EEB-975A64F23EB8,Message +<%InstallingApplicationText%> + +442920D9-8A51-9476-14E4-787D5C230E84,Message +<%UninstallCompleteText%> + +C3E9E5D9-58C8-C2C5-DF75-21D908A64782,Message +<%UninstallingApplicationText%> + +E611105F-DC85-9E20-4F7B-E63C54E5DF06,Message +<%InstallationCompleteText%> + +} +::msgcat::mcmset pl { +1356216E-90D2-8324-0EEB-975A64F23EB8,Message +<%InstallingApplicationText%> + +442920D9-8A51-9476-14E4-787D5C230E84,Message +<%UninstallCompleteText%> + +C3E9E5D9-58C8-C2C5-DF75-21D908A64782,Message +<%UninstallingApplicationText%> + +E611105F-DC85-9E20-4F7B-E63C54E5DF06,Message +<%InstallationCompleteText%> + +} +::msgcat::mcmset pt_br { +1356216E-90D2-8324-0EEB-975A64F23EB8,Message +<%InstallingApplicationText%> + +442920D9-8A51-9476-14E4-787D5C230E84,Message +<%UninstallCompleteText%> + +C3E9E5D9-58C8-C2C5-DF75-21D908A64782,Message +<%UninstallingApplicationText%> + +E611105F-DC85-9E20-4F7B-E63C54E5DF06,Message +<%InstallationCompleteText%> + +} +::msgcat::mcmset ru { +1356216E-90D2-8324-0EEB-975A64F23EB8,Message +<%InstallingApplicationText%> + +442920D9-8A51-9476-14E4-787D5C230E84,Message +<%UninstallCompleteText%> + +C3E9E5D9-58C8-C2C5-DF75-21D908A64782,Message +<%UninstallingApplicationText%> + +E611105F-DC85-9E20-4F7B-E63C54E5DF06,Message +<%InstallationCompleteText%> + +} + diff --git a/installer/windows/freeze.py b/installer/windows/freeze.py new file mode 100644 index 0000000000..7dc5a8bbf3 --- /dev/null +++ b/installer/windows/freeze.py @@ -0,0 +1,207 @@ +#!/usr/bin/env python +__license__ = 'GPL v3' +__copyright__ = '2008, Kovid Goyal kovid@kovidgoyal.net' +__docformat__ = 'restructuredtext en' + +''' +Freeze app into executable using py2exe. +''' +QT_DIR = 'C:\\Qt\\4.4.0' +DEVCON = 'C:\\devcon\\i386\\devcon.exe' +LIBUSB_DIR = 'C:\\libusb' +LIBUNRAR = 'C:\\Program Files\\UnrarDLL\\unrar.dll' +CLIT = 'C:\\clit\\clit.exe' +PDFTOHTML = 'C:\\pdftohtml\\pdftohtml.exe' +IMAGEMAGICK_DIR = 'C:\\ImageMagick' +FONTCONFIG_DIR = 'C:\\fontconfig' + + +import sys, os, py2exe, shutil, zipfile, glob, subprocess +from distutils.core import setup +from distutils.filelist import FileList +BASE_DIR = os.path.dirname(os.path.dirname(os.path.dirname(__file__))) +sys.path.insert(0, BASE_DIR) +from setup import VERSION, APPNAME, entry_points, scripts, basenames +sys.path.remove(BASE_DIR) + +PY2EXE_DIR = os.path.join(BASE_DIR, 'build','py2exe') + +class BuildEXE(py2exe.build_exe.py2exe): + manifest_resource_id = 0 + + MANIFEST_TEMPLATE = ''' +<?xml version="1.0" encoding="UTF-8" standalone="yes"?> +<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> + <assemblyIdentity version="%(version)s" + processorArchitecture="x86" + name="net.kovidgoyal.%(prog)s" + type="win32" + /> + <description>Ebook management application</description> + <!-- Identify the application security requirements. --> + <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2"> + <security> + <requestedPrivileges> + <requestedExecutionLevel + level="asInvoker" + uiAccess="false"/> + </requestedPrivileges> + </security> + </trustInfo> +</assembly> +''' + def build_plugins(self): + cwd = os.getcwd() + dd = os.path.join(cwd, self.dist_dir) + try: + os.chdir(os.path.join('src', 'calibre', 'gui2', 'pictureflow')) + if os.path.exists('.build'): + shutil.rmtree('.build') + os.mkdir('.build') + os.chdir('.build') + subprocess.check_call(['qmake', '../pictureflow.pro']) + subprocess.check_call(['mingw32-make', '-f', 'Makefile.Release']) + shutil.copyfile('release\\pictureflow0.dll', os.path.join(dd, 'pictureflow0.dll')) + os.chdir('..\\PyQt') + if not os.path.exists('.build'): + os.mkdir('.build') + os.chdir('.build') + subprocess.check_call(['python', '..\\configure.py']) + subprocess.check_call(['mingw32-make', '-f', 'Makefile']) + shutil.copyfile('pictureflow.pyd', os.path.join(dd, 'pictureflow.pyd')) + os.chdir('..') + shutil.rmtree('.build', True) + os.chdir('..') + shutil.rmtree('.build', True) + finally: + os.chdir(cwd) + + def run(self): + if not os.path.exists(self.dist_dir): + os.makedirs(self.dist_dir) + print 'Building custom plugins...' + self.build_plugins() + py2exe.build_exe.py2exe.run(self) + qtsvgdll = None + for other in self.other_depends: + if 'qtsvg4.dll' in other.lower(): + qtsvgdll = other + break + shutil.copyfile('LICENSE', os.path.join(self.dist_dir, 'LICENSE')) + print + if qtsvgdll: + print 'Adding', qtsvgdll + shutil.copyfile(qtsvgdll, os.path.join(self.dist_dir, os.path.basename(qtsvgdll))) + qtxmldll = os.path.join(os.path.dirname(qtsvgdll), 'QtXml4.dll') + print 'Adding', qtxmldll + shutil.copyfile(qtxmldll, + os.path.join(self.dist_dir, os.path.basename(qtxmldll))) + print 'Adding plugins...', + qt_prefix = QT_DIR + if qtsvgdll: + qt_prefix = os.path.dirname(os.path.dirname(qtsvgdll)) + plugdir = os.path.join(qt_prefix, 'plugins') + for d in ('imageformats', 'codecs', 'iconengines'): + print d, + imfd = os.path.join(plugdir, d) + tg = os.path.join(self.dist_dir, d) + if os.path.exists(tg): + shutil.rmtree(tg) + shutil.copytree(imfd, tg) + + print + print 'Adding main scripts' + f = zipfile.ZipFile(os.path.join(PY2EXE_DIR, 'library.zip'), 'a', zipfile.ZIP_DEFLATED) + for i in scripts['console'] + scripts['gui']: + f.write(i, i.partition('\\')[-1]) + f.close() + + print + print 'Adding third party dependencies' + print '\tAdding devcon' + tdir = os.path.join(PY2EXE_DIR, 'driver') + os.makedirs(tdir) + for pat in ('*.dll', '*.sys', '*.cat', '*.inf'): + for f in glob.glob(os.path.join(LIBUSB_DIR, pat)): + shutil.copyfile(f, os.path.join(tdir, os.path.basename(f))) + shutil.copyfile(DEVCON, os.path.join(tdir, os.path.basename(DEVCON))) + print '\tAdding unrar' + shutil.copyfile(LIBUNRAR, os.path.join(PY2EXE_DIR, os.path.basename(LIBUNRAR))) + print '\tAdding ConvertLIT' + shutil.copyfile(CLIT, os.path.join(PY2EXE_DIR, os.path.basename(CLIT))) + print '\tAdding pdftohtml' + shutil.copyfile(PDFTOHTML, os.path.join(PY2EXE_DIR, os.path.basename(PDFTOHTML))) + print '\tAdding ImageMagick' + shutil.copytree(IMAGEMAGICK_DIR, os.path.join(PY2EXE_DIR, 'ImageMagick')) + print '\tCopying fontconfig' + for f in glob.glob(os.path.join(FONTCONFIG_DIR, '*')): + tgt = os.path.join(PY2EXE_DIR, os.path.basename(f)) + if os.path.isdir(f): + shutil.copytree(f, tgt) + else: + shutil.copyfile(f, tgt) + + print + print 'Doing DLL redirection' # See http://msdn.microsoft.com/en-us/library/ms682600(VS.85).aspx + for f in glob.glob(os.path.join(PY2EXE_DIR, '*.exe')): + open(f + '.local', 'w').write('\n') + + + @classmethod + def manifest(cls, prog): + cls.manifest_resource_id += 1 + return (24, cls.manifest_resource_id, + cls.MANIFEST_TEMPLATE % dict(prog=prog, version=VERSION+'.0')) + + +def main(args=sys.argv): + sys.argv[1:2] = ['py2exe'] + if os.path.exists(PY2EXE_DIR): + shutil.rmtree(PY2EXE_DIR) + + console = [dict(dest_base=basenames['console'][i], script=scripts['console'][i]) + for i in range(len(scripts['console']))] + + setup( + cmdclass = {'py2exe': BuildEXE}, + windows = [ + {'script' : scripts['gui'][0], + 'dest_base' : APPNAME, + 'icon_resources' : [(1, os.path.join(BASE_DIR, 'icons', 'library.ico'))], + 'other_resources' : [BuildEXE.manifest(APPNAME)], + }, + {'script' : scripts['gui'][1], + 'dest_base' : 'lrfviewer', + 'icon_resources' : [(1, os.path.join(BASE_DIR, 'icons', 'viewer.ico'))], + 'other_resources' : [BuildEXE.manifest('lrfviewer')], + }, + ], + console = console, + options = { 'py2exe' : {'compressed': 1, + 'optimize' : 2, + 'dist_dir' : PY2EXE_DIR, + 'includes' : [ + 'sip', 'pkg_resources', 'PyQt4.QtSvg', + 'mechanize', 'ClientForm', 'wmi', + 'win32file', 'pythoncom', 'rtf2xml', + 'win32process', 'win32api', 'msvcrt', + 'win32event', 'calibre.ebooks.lrf.any.*', + 'calibre.ebooks.lrf.feeds.*', + 'lxml', 'lxml._elementpath', 'genshi', + 'path', 'pydoc', 'IPython.Extensions.*', + 'calibre.web.feeds.recipes.*', + 'PyQt4.QtWebKit', 'PyQt4.QtNetwork', + ], + 'packages' : ['PIL'], + 'excludes' : ["Tkconstants", "Tkinter", "tcl", + "_imagingtk", "ImageTk", "FixTk" + ], + 'dll_excludes' : ['mswsock.dll'], + }, + }, + + ) + return 0 + +if __name__ == '__main__': + sys.exit(main()) \ No newline at end of file diff --git a/src/calibre/libunrar.py b/src/calibre/libunrar.py index 149b83d1b1..0d7a679f71 100644 --- a/src/calibre/libunrar.py +++ b/src/calibre/libunrar.py @@ -5,7 +5,7 @@ This module provides a thin ctypes based wrapper around libunrar. See ftp://ftp.rarlabs.com/rar/unrarsrc-3.7.5.tar.gz """ -import os, ctypes +import os, ctypes, sys from ctypes import Structure, c_char_p, c_uint, c_void_p, POINTER, \ byref, c_wchar_p, c_int, c_char, c_wchar from StringIO import StringIO @@ -18,6 +18,8 @@ if iswindows: Structure._pack_ = 1 _librar_name = 'unrar' cdll = ctypes.windll +if hasattr(sys, 'frozen') and iswindows: + _libunrar = cdll.LoadLibrary(os.path.join(os.path.dirname(sys.executable), 'unrar.dll')) _libunrar = load_library(_librar_name, cdll) RAR_OM_LIST = 0 diff --git a/src/calibre/linux.py b/src/calibre/linux.py index d292f244ce..5d3ead778e 100644 --- a/src/calibre/linux.py +++ b/src/calibre/linux.py @@ -167,7 +167,9 @@ def setup_completion(fatal_errors): f = open_file('/etc/bash_completion.d/libprs500') f.close() os.remove(f.name) + manifest = [] f = open_file('/etc/bash_completion.d/calibre') + manifest.append(f.name) f.write('# calibre Bash Shell Completion\n') f.write(opts_and_exts('html2lrf', htmlop, @@ -275,18 +277,22 @@ complete -o nospace -F _prs500 prs500 print 'failed' import traceback traceback.print_exc() + return manifest def setup_udev_rules(group_file, reload, fatal_errors): print 'Trying to setup udev rules...' + manifest = [] sys.stdout.flush() groups = open(group_file, 'rb').read() group = 'plugdev' if 'plugdev' in groups else 'usb' udev = open_file('/etc/udev/rules.d/95-calibre.rules') + manifest.append(udev.name) udev.write('''# Sony Reader PRS-500\n''' '''BUS=="usb", SYSFS{idProduct}=="029b", SYSFS{idVendor}=="054c", MODE="660", GROUP="%s"\n'''%(group,) ) udev.close() fdi = open_file('/usr/share/hal/fdi/policy/20thirdparty/10-calibre.fdi') + manifest.append(fdi.name) fdi.write('<?xml version="1.0" encoding="UTF-8"?>\n\n<deviceinfo version="0.2">\n') for cls in DEVICES: fdi.write(\ @@ -326,6 +332,7 @@ def setup_udev_rules(group_file, reload, fatal_errors): if fatal_errors: raise Exception("Couldn't reload udev, you may have to reboot") print >>sys.stderr, "Couldn't reload udev, you may have to reboot" + return manifest def option_parser(): from optparse import OptionParser @@ -340,6 +347,8 @@ def option_parser(): help='If set, do not check if we are root.') parser.add_option('--make-errors-fatal', action='store_true', default=False, dest='fatal_errors', help='If set die on errors.') + parser.add_option('--save-manifest-to', default=None, + help='Save a manifest of all installed files to the specified location') return parser def install_man_pages(fatal_errors): @@ -350,6 +359,7 @@ def install_man_pages(fatal_errors): f = open_file('/tmp/man_extra', 'wb') f.write('[see also]\nhttp://%s.kovidgoyal.net\n'%__appname__) f.close() + manifest = [] for src in entry_points['console_scripts']: prog = src[:src.index('=')].strip() if prog in ('prs500', 'pdf-meta', 'epub-meta', 'lit-meta', @@ -360,6 +370,7 @@ def install_man_pages(fatal_errors): '--section', '1', '--no-info', '--include', f.name, '--manual', __appname__) manfile = os.path.join(manpath, prog+'.1'+__appname__+'.bz2') + print '\tInstalling MAN page for', prog try: p = subprocess.Popen(help2man, stdout=subprocess.PIPE) except OSError, err: @@ -372,10 +383,10 @@ def install_man_pages(fatal_errors): if not raw.strip(): print 'Unable to create MAN page for', prog continue - open_file(manfile).write(compress(raw)) - - - + f2 = open_file(manfile) + manifest.append(f2.name) + f2.write(compress(raw)) + return manifest def post_install(): parser = option_parser() @@ -387,19 +398,21 @@ def post_install(): global use_destdir use_destdir = opts.destdir - - setup_udev_rules(opts.group_file, not opts.dont_reload, opts.fatal_errors) - setup_completion(opts.fatal_errors) + manifest = [] + manifest += setup_udev_rules(opts.group_file, not opts.dont_reload, opts.fatal_errors) + manifest += setup_completion(opts.fatal_errors) setup_desktop_integration(opts.fatal_errors) - install_man_pages(opts.fatal_errors) + manifest += install_man_pages(opts.fatal_errors) try: from PyQt4 import Qt - if Qt.PYQT_VERSION < int('0x40301', 16): - print 'WARNING: You need PyQt >= 4.3.1 for the GUI. You have', Qt.PYQT_VERSION_STR, '\nYou may experience crashes or other strange behavior.' + if Qt.PYQT_VERSION < int('0x40402', 16): + print 'WARNING: You need PyQt >= 4.4.2 for the GUI. You have', Qt.PYQT_VERSION_STR, '\nYou may experience crashes or other strange behavior.' except ImportError: print 'WARNING: You do not have PyQt4 installed. The GUI will not work.' + if opts.save_manifest_to: + open(opts.save_manifest_to, 'wb').write('\n'.join(manifest)+'\n') VIEWER = '''\ diff --git a/src/calibre/linux_installer.py b/src/calibre/linux_installer.py index 145b255b05..fdfae15d07 100644 --- a/src/calibre/linux_installer.py +++ b/src/calibre/linux_installer.py @@ -221,6 +221,7 @@ def extract_tarball(tar, destdir): tarfile.open(tar, 'r').extractall(destdir) def create_launchers(destdir, bindir='/usr/bin'): + manifest = [] for launcher in open(os.path.join(destdir, 'manifest')).readlines(): if 'postinstall' in launcher: continue @@ -229,15 +230,20 @@ def create_launchers(destdir, bindir='/usr/bin'): print 'Creating', lp open(lp, 'wb').write(LAUNCHER%(destdir, launcher)) os.chmod(lp, stat.S_IXUSR|stat.S_IXOTH|stat.S_IXGRP|stat.S_IREAD|stat.S_IWRITE|stat.S_IRGRP|stat.S_IROTH) + manifest.append(lp) + return manifest def do_postinstall(destdir): cwd = os.getcwd() + t = tempfile.NamedTemporaryFile() try: os.chdir(destdir) os.environ['LD_LIBRARY_PATH'] = destdir+':'+os.environ.get('LD_LIBRARY_PATH', '') - subprocess.call((os.path.join(destdir, 'calibre_postinstall'),)) + subprocess.call((os.path.join(destdir, 'calibre_postinstall'), '--save-manifest-to', t.name)) finally: os.chdir(cwd) + t.seek(0) + return list(t.readlines()) def download_tarball(): try: @@ -271,8 +277,37 @@ def main(args=sys.argv): print 'Extracting...' extract_tarball(f, destdir) - create_launchers(destdir) - do_postinstall(destdir) + manifest = create_launchers(destdir) + manifest += do_postinstall(destdir) + + manifest += ['/usr/bin/calibre-uninstall'] + + UNINSTALLER = '''\ +#!/usr/bin/env python +import os, sys +if os.geteuid() != 0: + print 'You must run this uninstaller as root' + sys.exit(0) +manifest = %s +failures = [] +for path in manifest: + print 'Deleting', path + try: + os.unlink(path) + except: + failures.append(path) + +print 'Uninstalling complete.' +if failures: + print 'Failed to remove the following files:' + for f in failures: print f +'''%repr(manifest) + + open('/usr/bin/calibre-uninstall', 'wb').write(UNINSTALLER) + os.chmod('/usr/bin/calibre-uninstall', + stat.S_IXUSR|stat.S_IXOTH|stat.S_IXGRP|stat.S_IREAD|stat.S_IWRITE|stat.S_IRGRP|stat.S_IROTH) + + print 'You can uninstall calibre by running sudo calibre-uninstall' return 0 diff --git a/src/calibre/utils/zipfile.py b/src/calibre/utils/zipfile.py index bf126d1d4d..56fca9349b 100644 --- a/src/calibre/utils/zipfile.py +++ b/src/calibre/utils/zipfile.py @@ -352,6 +352,7 @@ class ZipFile: elif key == 'a': try: # See if file is a zip file self._RealGetContents() + self._calculate_file_offsets() # seek to start of directory and overwrite self.fp.seek(self.start_dir, 0) except BadZipfile: # file is not a zip file, just append @@ -430,7 +431,7 @@ class ZipFile: self.NameToInfo[x.filename] = x if self.debug > 2: print "total", total - self._calculate_file_offsets() + def _calculate_file_offsets(self): for zip_info in self.filelist: diff --git a/upload.py b/upload.py index 306f99ef9c..dfec9905c3 100644 --- a/upload.py +++ b/upload.py @@ -4,7 +4,7 @@ sys.path.append('src') import subprocess from subprocess import check_call as _check_call from functools import partial -#from pyvix.vix import Host, VIX_SERVICEPROVIDER_VMWARE_WORKSTATION + def get_ip_address(ifname): s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) return socket.inet_ntoa(fcntl.ioctl( @@ -66,12 +66,19 @@ def start_vm(vm, ssh_host, build_script, sleep=75): def build_windows(shutdown=True): installer = installer_name('exe') vm = '/vmware/Windows XP/Windows XP Professional.vmx' - start_vm(vm, 'windows', BUILD_SCRIPT%('python setup.py develop', 'python','windows_installer.py')) - subprocess.check_call(('scp', 'windows:build/%s/dist/*.exe'%PROJECT, 'dist')) - if not os.path.exists(installer): - raise Exception('Failed to build installer '+installer) + start_vm(vm, 'windows', BUILD_SCRIPT%('python setup.py develop', 'python','installer\\\\windows\\\\freeze.py')) + subprocess.check_call(('scp', '-rp', 'windows:build/%s/build/py2exe'%PROJECT, 'build')) + if not os.path.exists('build/py2exe'): + raise Exception('Failed to run py2exe') if shutdown: subprocess.Popen(('ssh', 'windows', 'shutdown', '-s', '-t', '0')) + ibp = os.path.abspath('installer/windows') + sys.path.insert(0, ibp) + import build_installer + sys.path.remove(ibp) + build_installer.run_install_jammer(installer_name=os.path.basename(installer)) + if not os.path.exists(installer): + raise Exception('Failed to run installjammer') return os.path.basename(installer) def build_osx(shutdown=True): From 2b585159867b1f97d3acf6e46320f73458dbf9c1 Mon Sep 17 00:00:00 2001 From: Kovid Goyal <kovid@kovidgoyal.net> Date: Fri, 18 Jul 2008 19:31:23 -0700 Subject: [PATCH 32/34] IGN:... --- installer/windows/calibre/calibre.mpi | 61 ++++++++++----------------- src/calibre/debug.py | 3 ++ src/calibre/trac/bzr_commit_plugin.py | 2 + 3 files changed, 27 insertions(+), 39 deletions(-) diff --git a/installer/windows/calibre/calibre.mpi b/installer/windows/calibre/calibre.mpi index 571b7c40c1..6564c3183b 100644 --- a/installer/windows/calibre/calibre.mpi +++ b/installer/windows/calibre/calibre.mpi @@ -356,7 +356,7 @@ SetupType ::D9ADE41C-B744-690C-2CED-CF826BF03D2E -setup Install -active Yes -pla InstallComponent 3EA07B17-04D8-6508-B535-96CC7173B49A -setup Install -type pane -title {Welcome Screen} -component Welcome -active Yes -parent StandardInstall InstallComponent 7CCDA4BB-861C-C21E-3011-E93DB58F07D6 -setup Install -type action -title {Check for Previous Install} -component CheckForPreviousInstall -active Yes -parent 3EA07B17-04D8-6508-B535-96CC7173B49A -InstallComponent 580ACF2C-517F-5E48-9DEF-7DAEFBA59FDD -setup Install -type action -conditions 6DE3B369-9D6B-6BC1-4EA0-2C54ECE159EB -title {Set Virtual Text} -component SetVirtualText -command reorder -active Yes -parent 3EA07B17-04D8-6508-B535-96CC7173B49A +InstallComponent 580ACF2C-517F-5E48-9DEF-7DAEFBA59FDD -setup Install -type action -conditions 6DE3B369-9D6B-6BC1-4EA0-2C54ECE159EB -title {Set Virtual Text} -component SetVirtualText -command insert -active Yes -parent 3EA07B17-04D8-6508-B535-96CC7173B49A Condition 6DE3B369-9D6B-6BC1-4EA0-2C54ECE159EB -active Yes -parent 580ACF2C-517F-5E48-9DEF-7DAEFBA59FDD -title {String Is Condition} -component StringIsCondition -TreeObject::id 6DE3B369-9D6B-6BC1-4EA0-2C54ECE159EB InstallComponent 9ACCDC35-E034-F142-ED42-AC8EC2B9AE2D -setup Install -type pane -title {License Agreement} -component License -active Yes -parent StandardInstall InstallComponent AAEC34E6-7F02-18F2-30BB-744738192A3B -setup Install -type action -conditions {081A479A-572E-5133-4979-84456DB40EFA A4388F3F-0D32-F14E-BA00-1BE7F54B05ED} -title {Modify Widget} -component ModifyWidget -command insert -active Yes -parent 9ACCDC35-E034-F142-ED42-AC8EC2B9AE2D @@ -373,11 +373,11 @@ InstallComponent D6631BA5-577E-B30C-A73D-2B12B826811A -setup Install -type pane Condition C6DE83DD-5C2A-AC5B-6ABA-84D73AE38655 -active Yes -parent D6631BA5-577E-B30C-A73D-2B12B826811A -title {Platform Condition} -component PlatformCondition -TreeObject::id C6DE83DD-5C2A-AC5B-6ABA-84D73AE38655 InstallComponent 1B9E77A3-10D6-9EDD-160B-64B5EBB31981 -setup Install -type action -title {Add Widget} -component AddWidget -command reorder -active Yes -parent D6631BA5-577E-B30C-A73D-2B12B826811A InstallComponent 8A7FD0C2-F053-8764-F204-4BAE71E05708 -setup Install -type pane -title {Setup Complete} -component SetupComplete -active Yes -parent StandardInstall -InstallComponent 710F2507-2557-652D-EA55-440D710EFDFA -setup Install -type action -conditions {69188956-D764-5B26-B048-46A4239C3733 08195201-0797-932C-4B51-E5EF9D1D41BD 2E18F4AE-F1BB-5C62-2900-73A576A49261} -title {Install USB Driver} -component ExecuteExternalProgram -command reorder -alias {Install USB Driver} -active Yes -parent 8A7FD0C2-F053-8764-F204-4BAE71E05708 +InstallComponent 710F2507-2557-652D-EA55-440D710EFDFA -setup Install -type action -conditions {69188956-D764-5B26-B048-46A4239C3733 08195201-0797-932C-4B51-E5EF9D1D41BD 2E18F4AE-F1BB-5C62-2900-73A576A49261} -title {Install USB Driver} -component ExecuteExternalProgram -command insert -alias {Install USB Driver} -active Yes -parent 8A7FD0C2-F053-8764-F204-4BAE71E05708 Condition 69188956-D764-5B26-B048-46A4239C3733 -active Yes -parent 710F2507-2557-652D-EA55-440D710EFDFA -title {Platform Condition} -component PlatformCondition -TreeObject::id 69188956-D764-5B26-B048-46A4239C3733 Condition 08195201-0797-932C-4B51-E5EF9D1D41BD -active Yes -parent 710F2507-2557-652D-EA55-440D710EFDFA -title {String Is Condition} -component StringIsCondition -TreeObject::id 08195201-0797-932C-4B51-E5EF9D1D41BD Condition 2E18F4AE-F1BB-5C62-2900-73A576A49261 -active Yes -parent 710F2507-2557-652D-EA55-440D710EFDFA -title {String Is Condition} -component StringIsCondition -TreeObject::id 2E18F4AE-F1BB-5C62-2900-73A576A49261 -InstallComponent 21B897C4-24BE-70D1-58EA-DE78EFA60719 -setup Install -type action -conditions 76FA3CA2-1F09-75C5-C6CF-72719A8EC4A5 -title {Message Box} -component MessageBox -command reorder -active Yes -parent 8A7FD0C2-F053-8764-F204-4BAE71E05708 +InstallComponent 21B897C4-24BE-70D1-58EA-DE78EFA60719 -setup Install -type action -conditions 76FA3CA2-1F09-75C5-C6CF-72719A8EC4A5 -title {Message Box} -component MessageBox -command insert -active Yes -parent 8A7FD0C2-F053-8764-F204-4BAE71E05708 Condition 76FA3CA2-1F09-75C5-C6CF-72719A8EC4A5 -active Yes -parent 21B897C4-24BE-70D1-58EA-DE78EFA60719 -title {String Is Condition} -component StringIsCondition -TreeObject::id 76FA3CA2-1F09-75C5-C6CF-72719A8EC4A5 InstallComponent 5D20DD8D-064A-9922-29E1-A7FABEF3666A -setup Install -type action -conditions {E5D227F7-E549-EFA9-1781-EFA6C5EEEC5C A8856922-E6C1-160B-E55C-5C1806A89136} -title {Launch Application Checkbutton} -component AddWidget -command insert -active Yes -parent 8A7FD0C2-F053-8764-F204-4BAE71E05708 Condition E5D227F7-E549-EFA9-1781-EFA6C5EEEC5C -active Yes -parent 5D20DD8D-064A-9922-29E1-A7FABEF3666A -title {File Exists Condition} -component FileExistsCondition -TreeObject::id E5D227F7-E549-EFA9-1781-EFA6C5EEEC5C @@ -466,9 +466,7 @@ Condition 64B8D0F3-4B11-DA22-D6E7-7248872D5FA7 -active Yes -parent 1CA13495-CB19 InstallComponent 521E782E-2C93-8C60-9B2A-B65552FFA8E4 -setup Uninstall -type actiongroup -title {Uninstall Actions} -alias {Uninstall Actions} -active Yes -parent ActionGroupsUninstall InstallComponent 79C2EE18-497D-DE39-8AB6-777CE25D9484 -setup Uninstall -type action -title {Uninstall Selected Files} -component UninstallSelectedFiles -active Yes -parent 521E782E-2C93-8C60-9B2A-B65552FFA8E4 InstallComponent 2D445859-68B9-1761-BA4F-DE91AFE5B9EB -setup Uninstall -type action -title {Uninstall Leftover Files} -component UninstallLeftoverFiles -active Yes -parent 521E782E-2C93-8C60-9B2A-B65552FFA8E4 -InstallComponent 95ED4967-8F0C-7BA2-A7EE-FF9FAACEEADF -setup Uninstall -type action -conditions {3AF1A348-10F4-EEB2-FE44-6B5F622C947D 4CF47FDD-7E34-1485-8F10-5B566D536573} -title {Uninstall USB Driver} -component ExecuteExternalProgram -command reorder -active Yes -parent 521E782E-2C93-8C60-9B2A-B65552FFA8E4 -Condition 3AF1A348-10F4-EEB2-FE44-6B5F622C947D -active Yes -parent 95ED4967-8F0C-7BA2-A7EE-FF9FAACEEADF -title {String Is Condition} -component StringIsCondition -TreeObject::id F87E8940-2590-D852-28C3-4E131EC549D8 -Condition 4CF47FDD-7E34-1485-8F10-5B566D536573 -active Yes -parent 95ED4967-8F0C-7BA2-A7EE-FF9FAACEEADF -title {Platform Condition} -component PlatformCondition -TreeObject::id 42367477-D72D-7957-4D43-198F0C713618 +InstallComponent 167174E3-7241-9060-3A3C-1F0D169A1A1F -setup Uninstall -type action -title {Uninstall USB Driver} -component ExecuteExternalProgram -active Yes -parent 521E782E-2C93-8C60-9B2A-B65552FFA8E4 InstallComponent A57E3390-AA3E-A868-2C7D-75ADF12D8471 -setup Uninstall -type actiongroup -title {Finish Actions} -alias {Finish Actions} -active Yes -parent ActionGroupsUninstall InstallComponent AAFE58A0-2DFB-CA20-1F6E-D3815F885996 -setup Uninstall -type actiongroup -title {Cancel Actions} -alias {Cancel Actions} -active Yes -parent ActionGroupsUninstall @@ -503,6 +501,21 @@ Windows 1356216E-90D2-8324-0EEB-975A64F23EB8,Message,subst 1 +167174E3-7241-9060-3A3C-1F0D169A1A1F,Conditions +{0 conditions} + +167174E3-7241-9060-3A3C-1F0D169A1A1F,IgnoreErrors +Yes + +167174E3-7241-9060-3A3C-1F0D169A1A1F,IncludeStderr +Yes + +167174E3-7241-9060-3A3C-1F0D169A1A1F,ProgramCommandLine +{devcon.exe remove "USB\VID_054C&PID_029B"} + +167174E3-7241-9060-3A3C-1F0D169A1A1F,WorkingDirectory +<%InstallDir%>/driver + 173ABC5E-D4D9-9CAE-D79F-E3067EC87EC7,String <%ErrorsOccurred%> @@ -656,12 +669,6 @@ false 37A46164-C287-5D4A-E55A-A2329E25E829,Filename <%ProgramExecutable%> -3AF1A348-10F4-EEB2-FE44-6B5F622C947D,CheckCondition -{Before Action is Executed} - -3AF1A348-10F4-EEB2-FE44-6B5F622C947D,String -<%InstallUSBDriver%> - 3D180445-8990-20F7-13DC-93B6909B907F,Alias {Startup Actions} @@ -743,12 +750,6 @@ false 4AAFE838-3E44-5147-0F04-65DB5B647191,String <%UpgradeInstall%> -4CF47FDD-7E34-1485-8F10-5B566D536573,CheckCondition -{Before Action is Executed} - -4CF47FDD-7E34-1485-8F10-5B566D536573,Platform -Windows - 4E5FC4FE-5D37-B216-CFFE-E046A2D6321E,CheckCondition {Before Action is Executed} @@ -924,7 +925,7 @@ Windows Yes 710F2507-2557-652D-EA55-440D710EFDFA,ProgramCommandLine -{<%InstallDir%>\driver\devcon.exe install <%InstallDir%>\driver\prs500.inf "USB\VID_054C&PID_029B"} +{devcon.exe install prs500.inf "USB\VID_054&PID029B"} 710F2507-2557-652D-EA55-440D710EFDFA,ResultVirtualText DevconResult @@ -933,7 +934,7 @@ DevconResult DevconStatus 710F2507-2557-652D-EA55-440D710EFDFA,WorkingDirectory -{<%InstallDir\driver>} +<%InstallDir%>/driver 72D8B44E-E4CF-7551-645E-FB57C5B000E9,CheckCondition {Before Action is Executed} @@ -1064,21 +1065,6 @@ CreateDesktopShortcut 940F7FED-7D20-7264-3BF9-ED78205A76B3,Y 150 -95ED4967-8F0C-7BA2-A7EE-FF9FAACEEADF,Conditions -{2 conditions} - -95ED4967-8F0C-7BA2-A7EE-FF9FAACEEADF,IgnoreErrors -Yes - -95ED4967-8F0C-7BA2-A7EE-FF9FAACEEADF,ProgramCommandLine -{<%InstallDir%>\driver\devcon.exe remove "USB\VID_054C&PID_029B"} - -95ED4967-8F0C-7BA2-A7EE-FF9FAACEEADF,ResultVirtualText -UninstallDevconResult - -95ED4967-8F0C-7BA2-A7EE-FF9FAACEEADF,StatusVirtualText -UninstallDevconStatus - 96440B8B-C6D0-FCCA-6D3C-7ECE1C304CC0,CheckCondition {Before Action is Executed} @@ -1364,9 +1350,6 @@ BE4A731E-1FC2-87A1-547D-91E2CA467AA7,ExecuteAction BE4A731E-1FC2-87A1-547D-91E2CA467AA7,Level system -BE4A731E-1FC2-87A1-547D-91E2CA467AA7,Location -beginning - BEF8D398-58BA-1F66-39D6-D4A63D5BEEF9,Destination <%InstallDir%> @@ -2087,7 +2070,7 @@ E611105F-DC85-9E20-4F7B-E63C54E5DF06,Message {Install USB driver for the SONY PRS500} 21B897C4-24BE-70D1-58EA-DE78EFA60719,Message -{USB Driver installation failed with return code <%DevconStatus%> and concole output \n\n<%DevconResult%>} +{USB Driver installation failed with return code <%DevconStatus%> and console output \n\n<%DevconResult%>} 21B897C4-24BE-70D1-58EA-DE78EFA60719,Title {USB Driver installation failed} diff --git a/src/calibre/debug.py b/src/calibre/debug.py index 3436026f88..ab990b38a8 100644 --- a/src/calibre/debug.py +++ b/src/calibre/debug.py @@ -19,6 +19,7 @@ Run an embedded python interpreter. parser.add_option('--update-module', help='Update the specified module in the frozen library. '+ 'Module specifications are of the form full.name.of.module,path_to_module.py', default=None ) + parser.add_option('-c', help='Run python code.', default=None, dest='command') return parser def update_zipfile(zipfile, mod, path): @@ -41,6 +42,8 @@ def main(args=sys.argv): if opts.update_module: mod, path = opts.update_module.partition(',')[0], opts.update_module.partition(',')[-1] update_module(mod, os.path.expanduser(path)) + elif opts.command: + exec opts.command else: from IPython.Shell import IPShellEmbed ipshell = IPShellEmbed() diff --git a/src/calibre/trac/bzr_commit_plugin.py b/src/calibre/trac/bzr_commit_plugin.py index 2715730e8f..0174a685a9 100644 --- a/src/calibre/trac/bzr_commit_plugin.py +++ b/src/calibre/trac/bzr_commit_plugin.py @@ -32,6 +32,7 @@ class cmd_commit(_cmd_commit): return url.replace('//', '//%s:%s@'%(username, password))+'/login/xmlrpc' def get_trac_summary(self, bug, url): + print 'Getting bug summary for bug #%s'%bug server = xmlrpclib.ServerProxy(url) try: attributes = server.ticket.get(int(bug))[-1] @@ -101,6 +102,7 @@ class cmd_commit(_cmd_commit): return ret def close_bug(self, bug, action, url, config): + print 'Closing bug #%s'% bug nick = config.get_nickname() suffix = config.get_user_option('bug_close_comment') if suffix is None: From 1ac10a1c0f0d8275e1f38e571ab220d2966c2564 Mon Sep 17 00:00:00 2001 From: Kovid Goyal <kovid@kovidgoyal.net> Date: Fri, 18 Jul 2008 19:55:00 -0700 Subject: [PATCH 33/34] IGN:Updated translations --- src/calibre/translations/bg.po | 432 +++++++++++------------ src/calibre/translations/ca.po | 437 +++++++++++------------ src/calibre/translations/de.po | 439 +++++++++++------------ src/calibre/translations/el.po | 432 +++++++++++------------ src/calibre/translations/es.po | 499 ++++++++++++++------------- src/calibre/translations/fr.po | 594 ++++++++++++++++++-------------- src/calibre/translations/it.po | 439 +++++++++++------------ src/calibre/translations/nds.po | 439 +++++++++++------------ src/calibre/translations/nl.po | 440 +++++++++++------------ src/calibre/translations/pt.po | 432 +++++++++++------------ src/calibre/translations/ru.po | 432 +++++++++++------------ src/calibre/translations/sl.po | 432 +++++++++++------------ src/calibre/translations/te.po | 432 +++++++++++------------ 13 files changed, 3023 insertions(+), 2856 deletions(-) diff --git a/src/calibre/translations/bg.po b/src/calibre/translations/bg.po index b258c9771f..14a309fd3e 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: 2008-06-30 23:41+0000\n" +"POT-Creation-Date: 2008-07-09 04:18+0000\n" "PO-Revision-Date: 2008-05-24 06:23+0000\n" "Last-Translator: Kovid Goyal <Unknown>\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: 2008-07-09 03:20+0000\n" +"X-Launchpad-Export-Date: 2008-07-19 02:36+0000\n" "X-Generator: Launchpad (build Unknown)\n" "Generated-By: pygettext.py 1.5\n" @@ -35,17 +35,17 @@ msgstr "" msgid "The reader has no storage card connected." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:73 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:71 msgid "Set the title. Default: filename." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:75 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:73 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:76 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:74 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:174 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf.py:314 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf.py:429 @@ -57,173 +57,173 @@ msgstr "" msgid "Unknown" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:78 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:76 msgid "Set the comment." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:80 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:78 msgid "Set the category" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:82 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:80 msgid "Sort key for the title" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:84 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:82 msgid "Sort key for the author" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:86 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:84 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:39 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search.py:16 #: /home/kovid/work/calibre/src/calibre/gui2/library.py:409 msgid "Publisher" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:88 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:86 msgid "Path to file containing image to be used as cover" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:90 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:88 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:93 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:91 msgid "Output file name. Default is derived from input filename" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:95 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:93 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:98 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:96 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:100 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:98 msgid "Enable autorotation of images that are wider than the screen width." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:103 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:101 msgid "Set the space between words in pts. Default is %default" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:105 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:103 msgid "Separate paragraphs by blank lines." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:107 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:105 msgid "Add a header to all the pages with title and author." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:109 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:107 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:111 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:109 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:113 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:111 msgid "" "Use the <spine> 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:115 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:113 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:117 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:115 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:122 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:120 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:128 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:126 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:134 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:132 msgid "Left margin of page. Default is %default px." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:136 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:134 msgid "Right margin of page. Default is %default px." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:138 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:136 msgid "Top margin of page. Default is %default px." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:140 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:138 msgid "Bottom margin of page. Default is %default px." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:142 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:140 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:144 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:142 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:149 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:147 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 <a> tags are " "ignored." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:153 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:151 msgid "" "A regular expression. <a> tags whose href matches will be ignored. Defaults " "to %default" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:157 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:155 msgid "Don't add links to the table of contents." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:161 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:159 msgid "Prevent the automatic detection chapters." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:164 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:162 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:167 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:165 msgid "" "Detect a chapter beginning at an element having the specified attribute. The " "format for this option is tagname regexp,attribute name,attribute value " @@ -231,7 +231,7 @@ msgid "" "class=\"chapter\" you would use \"h\\d,class,chapter\". Default is %default" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:169 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:167 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 " @@ -242,12 +242,12 @@ msgid "" "has only a few elements." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:179 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:177 msgid "" "Force a page break before tags whose names match this regular expression." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:181 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:179 msgid "" "Force a page break before an element having the specified attribute. The " "format for this option is tagname regexp,attribute name,attribute value " @@ -255,25 +255,25 @@ msgid "" "class=\"chapter\" you would use \"h\\d,class,chapter\". Default is %default" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:184 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:182 msgid "Add detected chapters to the table of contents." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:187 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:185 msgid "Preprocess Baen HTML files to improve generated LRF." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:189 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:187 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:191 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:189 msgid "Use this option on html0 files from Book Designer." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:194 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:192 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 " @@ -281,33 +281,33 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:202 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:200 msgid "The serif family of fonts to embed" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:205 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:203 msgid "The sans-serif family of fonts to embed" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:208 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:206 msgid "The monospace family of fonts to embed" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:212 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:210 msgid "Be verbose while processing" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:214 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:212 msgid "Convert to LRS" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:216 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:214 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:218 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:216 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 " @@ -315,7 +315,7 @@ msgid "" "default is to try and guess the encoding." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/any/convert_from.py:143 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/any/convert_from.py:144 msgid "" "any2lrf [options] myfile\n" "\n" @@ -326,7 +326,7 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/any/convert_from.py:158 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/any/convert_from.py:159 msgid "No file to convert specified." msgstr "" @@ -379,79 +379,79 @@ msgstr "" msgid "Written preprocessed HTML to " msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:372 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:373 msgid "Processing %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:386 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:387 msgid "\tConverting to BBeB..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:529 -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:542 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:530 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:543 msgid "Could not parse file: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:534 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:535 msgid "%s is an empty file" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:554 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:555 msgid "Failed to parse link %s %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:598 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:599 msgid "Cannot add link %s to TOC" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:943 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:944 msgid "Unable to process image %s. Error: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:981 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:982 msgid "Unable to process interlaced PNG %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:996 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:997 msgid "" "Could not process image: %s\n" "%s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1743 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1744 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:1745 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1746 msgid "" "Bad table:\n" "%s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1767 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1768 msgid "Table has cell that is too large" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1797 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1798 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:1839 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1841 msgid "Could not read cover image: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1842 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1844 msgid "Cannot read from: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1976 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1978 msgid "Failed to process opf file" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1982 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1984 msgid "" "Usage: %prog [options] mybook.html\n" "\n" @@ -722,19 +722,19 @@ msgstr "" msgid "No filename specified." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:341 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:344 msgid "%prog [options] myebook.mobi" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:343 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:346 msgid "Output directory. Defaults to current directory." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:362 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:365 msgid "Raw MOBI HTML saved in" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:364 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:367 msgid "OEB ebook created in" msgstr "" @@ -780,47 +780,47 @@ msgstr "" msgid "Advanced" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:102 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:104 msgid "<br>Must be a directory." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:102 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:104 msgid "Invalid database location " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:102 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:105 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:104 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:107 msgid "Invalid database location" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:105 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:107 msgid "Invalid database location.<br>Cannot write to " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:117 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:119 msgid "Compacting database. This may take a while." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:117 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:119 msgid "Compacting..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:202 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:206 #: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:265 msgid "Configuration" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:203 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:207 msgid "&Location of books database (library1.db)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:204 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:208 msgid "Browse for the new database location" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:205 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:221 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:223 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:209 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:226 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:228 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:513 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:278 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:287 @@ -839,81 +839,85 @@ msgstr "" msgid "..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:206 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:210 msgid "Use &Roman numerals for series number" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:207 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:211 +msgid "Show notification when &new version is available" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:212 msgid "Format for &single file save:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:208 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:213 msgid "&Priority for conversion jobs:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:209 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:214 msgid "Default network &timeout:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:210 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:215 msgid "" "Set the default timeout for network fetches (i.e. anytime we go out to the " "internet to get information)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:211 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:216 msgid " seconds" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:212 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:217 msgid "Toolbar" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:213 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:218 msgid "Large" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:214 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:219 msgid "Medium" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:215 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:220 msgid "Small" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:216 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:221 msgid "&Button size in toolbar" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:217 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:222 msgid "Show &text in toolbar buttons" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:218 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:223 msgid "Select visible &columns in library view" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:219 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:224 msgid "Frequently used directories" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:220 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:225 msgid "Add a directory to the frequently used directories list" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:222 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:227 msgid "Remove a directory from the frequently used directories list" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:224 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:229 msgid "Free unused diskspace from the database" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:225 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:230 msgid "&Compact database" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:226 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:231 msgid "&Metadata from file name" msgstr "" @@ -1045,7 +1049,7 @@ msgid "Convert %s to LRF" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:108 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:177 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:175 msgid "Set conversion defaults" msgstr "" @@ -1996,20 +2000,20 @@ msgstr "" msgid "Search (For Advanced Search click the button to the left)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/config_ui.py:48 +#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/config_ui.py:47 msgid "Configure Viewer" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/config_ui.py:49 +#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/config_ui.py:48 msgid "Use white background" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/config_ui.py:50 +#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/config_ui.py:49 msgid "Hyphenate" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/config_ui.py:51 -msgid "<b>Changes will only take affect after a restart." +#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/config_ui.py:50 +msgid "<b>Changes will only take effect after a restart.</b>" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main.py:63 @@ -2064,110 +2068,110 @@ msgstr "" msgid "Configure" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:82 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:80 msgid "Error communicating with device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:95 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:93 msgid "" "<p>For help visit <a " "href=\"http://%s.kovidgoyal.net/user_manual\">%s.kovidgoyal.net</a><br>" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:96 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:94 msgid "<b>%s</b>: %s by <b>Kovid Goyal %%(version)s</b><br>%%(device)s</p>" msgstr "" +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:112 #: /home/kovid/work/calibre/src/calibre/gui2/main.py:114 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:116 msgid "Send to main memory" msgstr "" +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:113 #: /home/kovid/work/calibre/src/calibre/gui2/main.py:115 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:117 msgid "Send to storage card" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:116 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:117 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:114 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:115 msgid "and delete from library" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:119 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:117 msgid "Send to storage card by default" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:131 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:129 msgid "Edit metadata individually" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:132 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:130 msgid "Edit metadata in bulk" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:135 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:133 msgid "Add books from a single directory" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:136 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:134 msgid "" "Add books recursively (One book per directory, assumes every ebook file is " "the same book in a different format)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:137 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:135 msgid "" "Add books recursively (Multiple books per directory, assumes every ebook " "file is a different book)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:152 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:150 #: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:275 msgid "Save to disk" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:153 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:151 msgid "Save to disk in a single directory" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:154 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:152 msgid "Save only %s format to disk" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:157 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:155 #: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:281 msgid "View" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:158 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:156 msgid "View specific format" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:174 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:172 msgid "Convert individually" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:175 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:173 msgid "Bulk convert" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:309 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:307 msgid " detected." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:309 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:307 msgid "Device: " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:334 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:332 msgid "Connected " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:346 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:344 msgid "Device database corrupted" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:347 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:345 msgid "" "\n" " <p>The database of books on the reader is corrupted. Try the " @@ -2183,190 +2187,190 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:399 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:473 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:397 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:471 msgid "" "<p>Books with the same title as the following already exist in the database. " "Add them anyway?<ul>" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:402 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:476 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:400 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:474 msgid "Duplicates found!" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:435 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:448 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:433 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:446 msgid "Uploading books to device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:507 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:505 msgid "No space on device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:508 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:506 msgid "" "<p>Cannot upload books to device there is no more free space available " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:546 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:544 msgid "Deleting books from device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:578 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:599 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:576 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:597 msgid "Cannot edit metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:578 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:599 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:694 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:764 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:834 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:576 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:597 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:692 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:762 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:832 msgid "No books selected" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:674 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:672 msgid "Sending books to device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:677 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:675 msgid "No suitable formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:678 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:676 msgid "" "Could not upload the following books to the device, as no suitable formats " "were found:<br><ul>%s</ul>" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:694 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:692 msgid "Cannot save to disk" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:705 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:703 msgid "" "<p>Could not save the following books to disk, because the %s format is not " "available for them:<ul>" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:709 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:707 msgid "Could not save some ebooks" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:742 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:740 msgid "Fetch news from " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:744 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:742 msgid "Fetching news from " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:754 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:752 msgid "News fetched. Uploading to device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:764 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:834 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:762 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:832 msgid "Cannot convert" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:773 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:771 msgid "Starting Bulk conversion of %d books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:905 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:923 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:903 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:921 msgid "No book selected" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:905 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:923 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:937 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:903 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:921 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:935 msgid "Cannot view" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:911 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:942 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:909 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:940 msgid "Choose the format to view" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:938 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:936 msgid "%s has no available formats." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:976 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:974 msgid "Cannot configure" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:976 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:974 msgid "Cannot configure while there are running jobs." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:999 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:997 msgid "Copying database to " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1014 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1012 msgid "Invalid database" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1015 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1013 msgid "" "<p>An invalid database already exists at %s, delete it before trying to move " "the existing database.<br>Error: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1023 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1021 msgid "Could not move database" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1044 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1042 msgid "No detailed info available" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1045 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1043 msgid "No detailed information is available for books on the device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1087 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1085 msgid "Error talking to device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1088 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1086 msgid "" "There was a temporary error talking to the device. Please unplug and " "reconnect the device and or reboot." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1139 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1137 msgid "Conversion Error" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1158 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1156 msgid "Database does not exist" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1158 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1156 msgid "" "The directory in which the database should be: %s no longer exists. Please " "choose a new database location." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1209 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1207 msgid "" "<span style=\"color:red; font-weight:bold\">Latest version: <a " "href=\"%s\">%s</a></span>" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1215 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1213 msgid "" "%s has been updated to version %s. See the <a " "href=\"http://calibre.kovidgoyal.net/wiki/Changelog\">new features</a>. " "Visit the download page?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1215 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1213 msgid "Update available" msgstr "" @@ -2741,7 +2745,7 @@ msgid "" "For help on an individual command: %%prog command --help\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/parallel.py:317 +#: /home/kovid/work/calibre/src/calibre/parallel.py:321 msgid "Could not launch worker process." msgstr "" @@ -2856,87 +2860,87 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/web/feeds/main.py:84 #: /home/kovid/work/calibre/src/calibre/web/feeds/main.py:88 -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:576 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:577 msgid "Fetching feeds..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:33 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:34 msgid "Unknown News Source" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:474 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:475 msgid "Download finished" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:476 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:477 msgid "Failed to download the following articles:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:478 -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:484 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:479 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:485 msgid " from " msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:482 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:483 msgid "Failed to download parts of the following articles:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:486 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:487 msgid "\tFailed links:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:558 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:559 msgid "Could not fetch article. Run with --debug to see the reason" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:580 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:581 msgid "Got feeds from index page" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:584 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:585 msgid "Trying to download cover..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:636 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:637 msgid "Starting download [%d thread(s)]..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:649 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:650 msgid "Feeds downloaded to %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:659 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:660 msgid "Could not download cover: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:664 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:665 msgid "Downloading cover from %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:698 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:699 msgid "Untitled Article" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:744 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:745 msgid "" "\n" "Downloaded article %s from %s\n" "%s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:750 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:751 msgid "Article downloaded: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:756 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:757 msgid "Failed to download article: %s from %s\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:761 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:762 msgid "Article download failed: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:776 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:777 msgid "Fetching feed" msgstr "" diff --git a/src/calibre/translations/ca.po b/src/calibre/translations/ca.po index f6ae6b9462..8fa4582225 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: 2008-06-30 23:41+0000\n" +"POT-Creation-Date: 2008-07-09 04:18+0000\n" "PO-Revision-Date: 2008-05-24 06:21+0000\n" "Last-Translator: Kovid Goyal <Unknown>\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: 2008-07-09 03:20+0000\n" +"X-Launchpad-Export-Date: 2008-07-19 02:36+0000\n" "X-Generator: Launchpad (build Unknown)\n" #~ msgid "" @@ -66,6 +66,9 @@ msgstr "" #~ msgid "&Access Key;" #~ msgstr "Clau d'&accés;" +#~ msgid "<b>Changes will only take affect after a restart." +#~ msgstr "<b>Els canvis s'ignoren fins que el re-inicieu." + #~ msgid "%s is not available in LRF format. Please convert it first." #~ msgstr "%s no està disponible en LRF. Ha de ser convertir primer." @@ -158,11 +161,11 @@ msgstr "" msgid "The reader has no storage card connected." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:73 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:71 msgid "Set the title. Default: filename." msgstr "Indique el títol. Per defecte: nom_del_fitxer." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:75 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:73 msgid "" "Set the author(s). Multiple authors should be set as a comma separated list. " "Default: %default" @@ -170,7 +173,7 @@ msgstr "" "Indiqueu l'autor(s). Si indique més d'un autor, separeu el llistat amb " "comes. Per defecte: %default" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:76 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:74 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:174 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf.py:314 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf.py:429 @@ -182,34 +185,34 @@ msgstr "" msgid "Unknown" msgstr "Desconegut" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:78 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:76 msgid "Set the comment." msgstr "Indiqueu els comentaris." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:80 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:78 msgid "Set the category" msgstr "Indiqueu la categoria." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:82 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:80 msgid "Sort key for the title" msgstr "Clau d'ordre per al tí­tol." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:84 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:82 msgid "Sort key for the author" msgstr "Clau d'ordre per a l'autor" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:86 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:84 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:39 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search.py:16 #: /home/kovid/work/calibre/src/calibre/gui2/library.py:409 msgid "Publisher" msgstr "Editorial" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:88 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:86 msgid "Path to file containing image to be used as cover" msgstr "Camí­ al fitxer d'imatge per a utilitzar com a coberta" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:90 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:88 msgid "" "If there is a cover graphic detected in the source file, use that instead of " "the specified cover." @@ -217,11 +220,11 @@ msgstr "" "Si es detecta un gràfic per a la coberta al fitxer d'entrada, utilitzar-la " "en lloc de la coberta especificada." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:93 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:91 msgid "Output file name. Default is derived from input filename" msgstr "Nom del fitxer de destí­. Per defecte, deriva del fitxer d'entrada" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:95 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:93 msgid "" "Render HTML tables as blocks of text instead of actual tables. This is " "neccessary if the HTML contains very large or complex tables." @@ -229,33 +232,33 @@ msgstr "" "Renderitza les taules HTML com a blocs de text en lloc de les taules " "actuals. És necessari si el fitxer HTML conté taules massa grans o complexes." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:98 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:96 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:100 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:98 msgid "Enable autorotation of images that are wider than the screen width." msgstr "" "Activa la rotació automàtica de les imatges més grans que l'amplada de la " "pantalla." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:103 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:101 msgid "Set the space between words in pts. Default is %default" msgstr "Fixa l'espai entre paraules en punts. Per defecte: %default" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:105 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:103 msgid "Separate paragraphs by blank lines." msgstr "Separa els paràgrafs amb lí­nies buides." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:107 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:105 msgid "Add a header to all the pages with title and author." msgstr "" "Afegeix la capçalera a totes les pàgines, ficant el tí­tol i l'autor." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:109 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:107 msgid "" "Set the format of the header. %a is replaced by the author and %t by the " "title. Default is %default" @@ -263,7 +266,7 @@ msgstr "" "Estableix el format de la capçalera: %a es reemplaça per l'autor i %t pel " "tí­tol. Per defecte: %default" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:111 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:109 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." @@ -271,7 +274,7 @@ msgstr "" "Substitueix la CSS. Pot indicar-se tant un camí­ a la fulla CSS alternativa, " "com una cadena. En aquest últim cas, la cadena s'interpreta com a CSS." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:113 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:111 msgid "" "Use the <spine> 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 " @@ -281,13 +284,13 @@ msgstr "" "s'afegeixen els fitxers HTML al LRF. Cal que el fitxer .opf sigui a la " "mateixa carpeta que el fitxer HTML base." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:115 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:113 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:117 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:115 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 " @@ -297,13 +300,13 @@ msgstr "" "lí­nia en FONT_DELTA punts. FONT_DELTA pot ser una fracció. Si és un valor " "negatiu, la grandària de la lletra disminueix." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:122 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:120 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:128 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:126 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 " @@ -313,35 +316,35 @@ msgstr "" "determina la resolució i la grandària de la pantalla del dispositiu, entre " "d'altres. Per defecte:%s Perfils suportats: " -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:134 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:132 msgid "Left margin of page. Default is %default px." msgstr "Marge esquerre de la pàgina. Per defecte: %default px." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:136 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:134 msgid "Right margin of page. Default is %default px." msgstr "Marge dret de la pàgina. Per defecte: %default px." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:138 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:136 msgid "Top margin of page. Default is %default px." msgstr "Marge superior de la pàgina. Per defecte: %default px." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:140 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:138 msgid "Bottom margin of page. Default is %default px." msgstr "Marge inferior de la pàgina. Per defecte: %default px." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:142 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:140 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:144 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:142 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:149 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:147 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 <a> tags are " @@ -351,21 +354,21 @@ msgstr "" "(cero) vol dir que no són seguits. Amb un valor negatiu, ignora les marques " "<a>." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:153 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:151 msgid "" "A regular expression. <a> tags whose href matches will be ignored. Defaults " "to %default" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:157 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:155 msgid "Don't add links to the table of contents." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:161 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:159 msgid "Prevent the automatic detection chapters." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:164 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:162 msgid "" "The regular expression used to detect chapter titles. It is searched for in " "heading tags (h1-h6). Defaults to %default" @@ -373,7 +376,7 @@ msgstr "" "Expressió regular utilitzada per a detectar els tí­tols dels capí­tols. " "Cerca a les marques de encapçalament (h1-h6). Per defecte: %default" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:167 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:165 msgid "" "Detect a chapter beginning at an element having the specified attribute. The " "format for this option is tagname regexp,attribute name,attribute value " @@ -381,7 +384,7 @@ msgid "" "class=\"chapter\" you would use \"h\\d,class,chapter\". Default is %default" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:169 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:167 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 " @@ -399,12 +402,12 @@ msgstr "" "llargues, que alentirien al canvi de fulla del fitxer LRF. Aquesta opció " "s'ignora si la pàgina actual en té pocs elements." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:179 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:177 msgid "" "Force a page break before tags whose names match this regular expression." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:181 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:179 msgid "" "Force a page break before an element having the specified attribute. The " "format for this option is tagname regexp,attribute name,attribute value " @@ -416,16 +419,16 @@ msgstr "" "exemple, amb \"h\\d,class,chapter\", serien coincidents totes les marques de " "encapçalament amb l'atribut class=\"chapter\". Per defecte: %default" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:184 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:182 msgid "Add detected chapters to the table of contents." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:187 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:185 msgid "Preprocess Baen HTML files to improve generated LRF." msgstr "" "Pre-processa els fitxers Baen HTML per a millorar el fitxer LRF generat." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:189 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:187 msgid "" "You must add this option if processing files generated by pdftohtml, " "otherwise conversion will fail." @@ -433,11 +436,11 @@ msgstr "" "Cal que afegiu aquesta opció per a fitxers generats amb pdftohtml, si no " "voleu que la conversió falli." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:191 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:189 msgid "Use this option on html0 files from Book Designer." msgstr "Utilitzeu aquesta opció per a fitxers html0 de Book Designer." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:194 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:192 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 " @@ -445,27 +448,27 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:202 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:200 msgid "The serif family of fonts to embed" msgstr "Famí­lia de lletres serif per a incrustar." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:205 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:203 msgid "The sans-serif family of fonts to embed" msgstr "Famí­lia de lletres sans-serif per a incrustar." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:208 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:206 msgid "The monospace family of fonts to embed" msgstr "Famí­lia de lletres monoespaiades per a incrustar." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:212 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:210 msgid "Be verbose while processing" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:214 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:212 msgid "Convert to LRS" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:216 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:214 msgid "" "Minimize memory usage at the cost of longer processing times. Use this " "option if you are on a memory constrained machine." @@ -473,7 +476,7 @@ msgstr "" "Minimitza l'ús de memòria, utilitzant més temps de processador. Empreu " "aquesta opció si el vostre equip no disposa de molta RAM." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:218 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:216 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 " @@ -481,7 +484,7 @@ msgid "" "default is to try and guess the encoding." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/any/convert_from.py:143 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/any/convert_from.py:144 msgid "" "any2lrf [options] myfile\n" "\n" @@ -492,7 +495,7 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/any/convert_from.py:158 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/any/convert_from.py:159 msgid "No file to convert specified." msgstr "" @@ -545,79 +548,79 @@ msgstr "" msgid "Written preprocessed HTML to " msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:372 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:373 msgid "Processing %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:386 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:387 msgid "\tConverting to BBeB..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:529 -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:542 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:530 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:543 msgid "Could not parse file: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:534 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:535 msgid "%s is an empty file" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:554 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:555 msgid "Failed to parse link %s %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:598 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:599 msgid "Cannot add link %s to TOC" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:943 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:944 msgid "Unable to process image %s. Error: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:981 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:982 msgid "Unable to process interlaced PNG %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:996 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:997 msgid "" "Could not process image: %s\n" "%s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1743 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1744 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:1745 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1746 msgid "" "Bad table:\n" "%s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1767 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1768 msgid "Table has cell that is too large" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1797 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1798 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:1839 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1841 msgid "Could not read cover image: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1842 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1844 msgid "Cannot read from: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1976 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1978 msgid "Failed to process opf file" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1982 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1984 msgid "" "Usage: %prog [options] mybook.html\n" "\n" @@ -888,19 +891,19 @@ msgstr "" msgid "No filename specified." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:341 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:344 msgid "%prog [options] myebook.mobi" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:343 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:346 msgid "Output directory. Defaults to current directory." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:362 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:365 msgid "Raw MOBI HTML saved in" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:364 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:367 msgid "OEB ebook created in" msgstr "" @@ -946,47 +949,47 @@ msgstr "" msgid "Advanced" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:102 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:104 msgid "<br>Must be a directory." msgstr "<br>Cal que siga un directori." -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:102 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:104 msgid "Invalid database location " msgstr "Ubicació de la base de dades no vàlida " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:102 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:105 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:104 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:107 msgid "Invalid database location" msgstr "Ubicació de la base de dades no vàlida" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:105 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:107 msgid "Invalid database location.<br>Cannot write to " msgstr "Ubicació de la base de dades no vàlida.<br>No es pot escriure " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:117 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:119 msgid "Compacting database. This may take a while." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:117 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:119 msgid "Compacting..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:202 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:206 #: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:265 msgid "Configuration" msgstr "Configuració" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:203 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:207 msgid "&Location of books database (library1.db)" msgstr "&Ubicació de la base de dades (library1.db)" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:204 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:208 msgid "Browse for the new database location" msgstr "Cerca la nova ubicació de la base de dades" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:205 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:221 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:223 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:209 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:226 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:228 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:513 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:278 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:287 @@ -1005,81 +1008,85 @@ msgstr "Cerca la nova ubicació de la base de dades" msgid "..." msgstr "..." -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:206 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:210 msgid "Use &Roman numerals for series number" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:207 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:211 +msgid "Show notification when &new version is available" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:212 msgid "Format for &single file save:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:208 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:213 msgid "&Priority for conversion jobs:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:209 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:214 msgid "Default network &timeout:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:210 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:215 msgid "" "Set the default timeout for network fetches (i.e. anytime we go out to the " "internet to get information)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:211 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:216 msgid " seconds" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:212 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:217 msgid "Toolbar" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:213 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:218 msgid "Large" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:214 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:219 msgid "Medium" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:215 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:220 msgid "Small" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:216 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:221 msgid "&Button size in toolbar" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:217 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:222 msgid "Show &text in toolbar buttons" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:218 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:223 msgid "Select visible &columns in library view" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:219 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:224 msgid "Frequently used directories" msgstr "Directoris emprats amb freqüència" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:220 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:225 msgid "Add a directory to the frequently used directories list" msgstr "Afegir el directori al llistat de directoris freqüents" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:222 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:227 msgid "Remove a directory from the frequently used directories list" msgstr "Elimiar el directori al llistat de directoris freqüents" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:224 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:229 msgid "Free unused diskspace from the database" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:225 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:230 msgid "&Compact database" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:226 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:231 msgid "&Metadata from file name" msgstr "" @@ -1213,7 +1220,7 @@ msgid "Convert %s to LRF" msgstr "Converteix %s a LRF" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:108 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:177 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:175 msgid "Set conversion defaults" msgstr "Fixa els valors de conversió er defecte" @@ -2179,21 +2186,21 @@ msgstr "Marca de temps" msgid "Search (For Advanced Search click the button to the left)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/config_ui.py:48 +#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/config_ui.py:47 msgid "Configure Viewer" msgstr "Configura el visor" -#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/config_ui.py:49 +#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/config_ui.py:48 msgid "Use white background" msgstr "Utilitza fons blanc" -#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/config_ui.py:50 +#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/config_ui.py:49 msgid "Hyphenate" msgstr "Partició de mots" -#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/config_ui.py:51 -msgid "<b>Changes will only take affect after a restart." -msgstr "<b>Els canvis s'ignoren fins que el re-inicieu." +#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/config_ui.py:50 +msgid "<b>Changes will only take effect after a restart.</b>" +msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main.py:63 msgid " - LRF Viewer" @@ -2247,110 +2254,110 @@ msgstr "Obre l'eBook" msgid "Configure" msgstr "Configura" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:82 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:80 msgid "Error communicating with device" msgstr "Error en la comunicació amb el dispositiu" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:95 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:93 msgid "" "<p>For help visit <a " "href=\"http://%s.kovidgoyal.net/user_manual\">%s.kovidgoyal.net</a><br>" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:96 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:94 msgid "<b>%s</b>: %s by <b>Kovid Goyal %%(version)s</b><br>%%(device)s</p>" msgstr "" +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:112 #: /home/kovid/work/calibre/src/calibre/gui2/main.py:114 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:116 msgid "Send to main memory" msgstr "Envia a la memòria interna" +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:113 #: /home/kovid/work/calibre/src/calibre/gui2/main.py:115 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:117 msgid "Send to storage card" msgstr "Envia a la targeta de memòria" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:116 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:117 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:114 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:115 msgid "and delete from library" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:119 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:117 msgid "Send to storage card by default" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:131 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:129 msgid "Edit metadata individually" msgstr "Edita metadades individualment" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:132 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:130 msgid "Edit metadata in bulk" msgstr "Edita metadades en massa" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:135 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:133 msgid "Add books from a single directory" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:136 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:134 msgid "" "Add books recursively (One book per directory, assumes every ebook file is " "the same book in a different format)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:137 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:135 msgid "" "Add books recursively (Multiple books per directory, assumes every ebook " "file is a different book)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:152 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:150 #: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:275 msgid "Save to disk" msgstr "Desa al disc" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:153 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:151 msgid "Save to disk in a single directory" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:154 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:152 msgid "Save only %s format to disk" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:157 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:155 #: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:281 msgid "View" msgstr "Mostra" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:158 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:156 msgid "View specific format" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:174 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:172 msgid "Convert individually" msgstr "Converteix individualment" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:175 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:173 msgid "Bulk convert" msgstr "Converteix tots" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:309 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:307 msgid " detected." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:309 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:307 msgid "Device: " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:334 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:332 msgid "Connected " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:346 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:344 msgid "Device database corrupted" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:347 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:345 msgid "" "\n" " <p>The database of books on the reader is corrupted. Try the " @@ -2366,157 +2373,157 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:399 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:473 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:397 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:471 msgid "" "<p>Books with the same title as the following already exist in the database. " "Add them anyway?<ul>" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:402 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:476 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:400 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:474 msgid "Duplicates found!" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:435 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:448 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:433 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:446 msgid "Uploading books to device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:507 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:505 msgid "No space on device" msgstr "Sense espai al dispositiu" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:508 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:506 msgid "" "<p>Cannot upload books to device there is no more free space available " msgstr "<p>No puc desar llibres al dispositiu perquè no hi ha espai restant " -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:546 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:544 msgid "Deleting books from device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:578 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:599 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:576 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:597 msgid "Cannot edit metadata" msgstr "No puc editar les meta-dades" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:578 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:599 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:694 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:764 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:834 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:576 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:597 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:692 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:762 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:832 msgid "No books selected" msgstr "Cap llibre seleccionat" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:674 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:672 msgid "Sending books to device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:677 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:675 msgid "No suitable formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:678 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:676 msgid "" "Could not upload the following books to the device, as no suitable formats " "were found:<br><ul>%s</ul>" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:694 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:692 msgid "Cannot save to disk" msgstr "No puc desar al disc" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:705 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:703 msgid "" "<p>Could not save the following books to disk, because the %s format is not " "available for them:<ul>" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:709 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:707 msgid "Could not save some ebooks" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:742 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:740 msgid "Fetch news from " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:744 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:742 msgid "Fetching news from " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:754 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:752 msgid "News fetched. Uploading to device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:764 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:834 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:762 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:832 msgid "Cannot convert" msgstr "No puc convertir-lo" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:773 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:771 msgid "Starting Bulk conversion of %d books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:905 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:923 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:903 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:921 msgid "No book selected" msgstr "Cap llibre seleccionat" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:905 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:923 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:937 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:903 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:921 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:935 msgid "Cannot view" msgstr "No puc mostrar-lo" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:911 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:942 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:909 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:940 msgid "Choose the format to view" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:938 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:936 msgid "%s has no available formats." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:976 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:974 msgid "Cannot configure" msgstr "No puc configurar-lo" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:976 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:974 msgid "Cannot configure while there are running jobs." msgstr "No puc configurar-lo amb treballs processant-se" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:999 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:997 msgid "Copying database to " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1014 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1012 msgid "Invalid database" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1015 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1013 msgid "" "<p>An invalid database already exists at %s, delete it before trying to move " "the existing database.<br>Error: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1023 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1021 msgid "Could not move database" msgstr "No puc moure la base de dades" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1044 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1042 msgid "No detailed info available" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1045 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1043 msgid "No detailed information is available for books on the device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1087 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1085 msgid "Error talking to device" msgstr "Error comunicant amb el dispositiu" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1088 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1086 msgid "" "There was a temporary error talking to the device. Please unplug and " "reconnect the device and or reboot." @@ -2524,34 +2531,34 @@ msgstr "" "Hi ha hagut un error de comunicació amb el dispositiu. Lleve, torne a " "connectar el dispositiu i torne a iniciar el programa" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1139 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1137 msgid "Conversion Error" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1158 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1156 msgid "Database does not exist" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1158 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1156 msgid "" "The directory in which the database should be: %s no longer exists. Please " "choose a new database location." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1209 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1207 msgid "" "<span style=\"color:red; font-weight:bold\">Latest version: <a " "href=\"%s\">%s</a></span>" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1215 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1213 msgid "" "%s has been updated to version %s. See the <a " "href=\"http://calibre.kovidgoyal.net/wiki/Changelog\">new features</a>. " "Visit the download page?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1215 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1213 msgid "Update available" msgstr "" @@ -2934,7 +2941,7 @@ msgid "" "For help on an individual command: %%prog command --help\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/parallel.py:317 +#: /home/kovid/work/calibre/src/calibre/parallel.py:321 msgid "Could not launch worker process." msgstr "" @@ -3049,87 +3056,87 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/web/feeds/main.py:84 #: /home/kovid/work/calibre/src/calibre/web/feeds/main.py:88 -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:576 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:577 msgid "Fetching feeds..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:33 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:34 msgid "Unknown News Source" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:474 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:475 msgid "Download finished" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:476 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:477 msgid "Failed to download the following articles:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:478 -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:484 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:479 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:485 msgid " from " msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:482 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:483 msgid "Failed to download parts of the following articles:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:486 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:487 msgid "\tFailed links:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:558 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:559 msgid "Could not fetch article. Run with --debug to see the reason" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:580 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:581 msgid "Got feeds from index page" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:584 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:585 msgid "Trying to download cover..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:636 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:637 msgid "Starting download [%d thread(s)]..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:649 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:650 msgid "Feeds downloaded to %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:659 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:660 msgid "Could not download cover: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:664 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:665 msgid "Downloading cover from %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:698 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:699 msgid "Untitled Article" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:744 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:745 msgid "" "\n" "Downloaded article %s from %s\n" "%s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:750 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:751 msgid "Article downloaded: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:756 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:757 msgid "Failed to download article: %s from %s\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:761 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:762 msgid "Article download failed: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:776 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:777 msgid "Fetching feed" msgstr "" diff --git a/src/calibre/translations/de.po b/src/calibre/translations/de.po index 835850fd6b..0cb62a9944 100644 --- a/src/calibre/translations/de.po +++ b/src/calibre/translations/de.po @@ -7,14 +7,14 @@ msgid "" msgstr "" "Project-Id-Version: de\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2008-06-30 23:41+0000\n" -"PO-Revision-Date: 2008-07-06 11:25+0000\n" +"POT-Creation-Date: 2008-07-09 04:18+0000\n" +"PO-Revision-Date: 2008-07-09 06:11+0000\n" "Last-Translator: S. Dorscht <Unknown>\n" "Language-Team: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2008-07-09 03:20+0000\n" +"X-Launchpad-Export-Date: 2008-07-19 02:36+0000\n" "X-Generator: Launchpad (build Unknown)\n" "Generated-By: pygettext.py 1.5\n" @@ -58,6 +58,9 @@ msgstr "" #~ msgid "Cannot kill waiting jobs." #~ msgstr "Kann Aufträge in Warteliste nicht abbrechen." +#~ msgid "<b>Changes will only take affect after a restart." +#~ msgstr "<b>Änderungen treten erst nach einem Neustart in Kraft." + #~ msgid "Job killed by user" #~ msgstr "Auftrag durch Benutzer abgebrochen" @@ -109,11 +112,11 @@ msgstr "Konnte das Laufwerk %s nicht finden. Versuchen Sie einen Neustart." msgid "The reader has no storage card connected." msgstr "Im Reader ist keine Speicherkarte eingesteckt." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:73 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:71 msgid "Set the title. Default: filename." msgstr "Geben Sie den Titel an. Voreinstellung: Dateiname." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:75 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:73 msgid "" "Set the author(s). Multiple authors should be set as a comma separated list. " "Default: %default" @@ -121,7 +124,7 @@ msgstr "" "Geben Sie den Autor an. Mehrere Autoren sollten durch Kommata getrennt " "angegeben werden. Voreinstellung: %default" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:76 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:74 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:174 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf.py:314 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf.py:429 @@ -133,34 +136,34 @@ msgstr "" msgid "Unknown" msgstr "Unbekannt" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:78 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:76 msgid "Set the comment." msgstr "Geben Sie eine Bemerkung an." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:80 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:78 msgid "Set the category" msgstr "Geben Sie eine Kategorie an." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:82 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:80 msgid "Sort key for the title" msgstr "Sortierung nach Titel" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:84 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:82 msgid "Sort key for the author" msgstr "Sortierung nach Autor" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:86 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:84 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:39 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search.py:16 #: /home/kovid/work/calibre/src/calibre/gui2/library.py:409 msgid "Publisher" msgstr "Herausgeber" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:88 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:86 msgid "Path to file containing image to be used as cover" msgstr "Pfad zur Datei des Umschlagbildes" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:90 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:88 msgid "" "If there is a cover graphic detected in the source file, use that instead of " "the specified cover." @@ -168,13 +171,13 @@ msgstr "" "Falls die Quelldatei ein Umschlagbild enthält, das Umschlagbild der " "Quelldatei benutzen, anstatt des angegebenen Umschlagbildes." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:93 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:91 msgid "Output file name. Default is derived from input filename" msgstr "" "Ausgabedateiname. Die Voreinstellung leitet sich vom ursprünglichen " "Dateinamen ab." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:95 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:93 msgid "" "Render HTML tables as blocks of text instead of actual tables. This is " "neccessary if the HTML contains very large or complex tables." @@ -182,7 +185,7 @@ msgstr "" "HTML Tabellen als Textblöcke rendern und nicht als Tabellen. Dies ist " "notwendig, wenn die HTML Datei sehr große oder komplexe Tabellen enthält." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:98 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:96 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 " @@ -193,27 +196,27 @@ msgstr "" "Option außer Gebrauch und wird bevorzugt behandelt. Um --font-delta zu " "benutzen, geben Sie 0 an. Voreinstellung: %defaultpt" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:100 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:98 msgid "Enable autorotation of images that are wider than the screen width." msgstr "" "Automatische Rotation von Bildern, die breiter als die Bildschirmbreite " "sind, einschalten." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:103 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:101 msgid "Set the space between words in pts. Default is %default" msgstr "" "Wählen Sie den Abstand in Punkt zwischen einzelnen Wörtern. Die " "Voreinstellung ist %default" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:105 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:103 msgid "Separate paragraphs by blank lines." msgstr "Paragraphen durch Leerzeilen trennen." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:107 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:105 msgid "Add a header to all the pages with title and author." msgstr "Kopfzeile mit Titel und Autor für alle Seiten einfügen." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:109 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:107 msgid "" "Set the format of the header. %a is replaced by the author and %t by the " "title. Default is %default" @@ -221,7 +224,7 @@ msgstr "" "Wählen Sie das Format der Kopfzeile. %a wird durch den Autor und %t durch " "den Titel ersetzt. Die Voreinstellung ist %default" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:111 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:109 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." @@ -229,7 +232,7 @@ msgstr "" "CSS überschreiben. Es kann ein Pfad zu einem CSS Stylesheet oder eine " "Zeichenfolge angegeben werden. Zeichenfolgen werden als CSS interpretiert." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:113 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:111 msgid "" "Use the <spine> 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 " @@ -239,7 +242,7 @@ msgstr "" "in der die HTML Dateien zur LRF Datei hinzugefügt werden. Die OPF Datei muss " "sich im gleichen Verzeichnis wie die ursprüngliche HTML Datei befinden." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:115 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:113 msgid "" "Minimum paragraph indent (the indent of the first line of a paragraph) in " "pts. Default: %default" @@ -247,7 +250,7 @@ msgstr "" "Mindest-Zeileneinzug von Paragraphen (Zeileneinzug der ersten Zeile eines " "Paragraphen) in Punkt. Voreinstellung: %default" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:117 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:115 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 " @@ -257,14 +260,14 @@ msgstr "" "vergrößern. FONT_DELTA kann ein Bruchteil sein. Falls FONT_DELTA negativ " "angegeben wird, wird die Schriftgröße verkleinert." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:122 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:120 msgid "" "Render all content as black on white instead of the colors specified by the " "HTML or CSS." msgstr "" "Inhalt schwarz-weiß rendern anstatt in den in HTML oder CSS angegeben Farben." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:128 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:126 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 " @@ -274,23 +277,23 @@ msgstr "" "unter anderem die Auflösung und die Bildschirmgröße des Zielgerätes fest. " "Voreinstellung: %s Unterstützte Profile: " -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:134 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:132 msgid "Left margin of page. Default is %default px." msgstr "Linker Rand der Seite. Die Voreinstellung ist %default Pixel." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:136 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:134 msgid "Right margin of page. Default is %default px." msgstr "Rechter Rand der Seite. Die Voreinstellung ist %default Pixel." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:138 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:136 msgid "Top margin of page. Default is %default px." msgstr "Oberer Rand der Seite. Die Voreinstellung ist %default Pixel." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:140 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:138 msgid "Bottom margin of page. Default is %default px." msgstr "Unterer Rand der Seite. Die Voreinstellung ist %default Pixel." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:142 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:140 msgid "" "Render tables in the HTML as images (useful if the document has large or " "complex tables)" @@ -298,7 +301,7 @@ msgstr "" "Tabellen in HTML als Bilder rendern (hilfreich, wenn das Dokument große oder " "komplexe Tabellen enthält)" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:144 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:142 msgid "" "Multiply the size of text in rendered tables by this factor. Default is " "%default" @@ -306,7 +309,7 @@ msgstr "" "Textgröße in gerenderten Tabellen um diesen Faktor erhöhen. Voreinstellung " "ist %default" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:149 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:147 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 <a> tags are " @@ -316,7 +319,7 @@ msgstr "" "dass Verknüpfungen ignoriert werden. Ein negativer Wert bedeutet, dass alle " "<a> Elemente ignoriert werden." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:153 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:151 msgid "" "A regular expression. <a> tags whose href matches will be ignored. Defaults " "to %default" @@ -324,15 +327,15 @@ msgstr "" "Ein regulärer Ausdruck. <a> Elemente, deren Verknüpfungen ignoriert werden. " "Voreinstellung %default" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:157 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:155 msgid "Don't add links to the table of contents." msgstr "Keine Links zum Inhaltsverzeichnis hinzufügen." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:161 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:159 msgid "Prevent the automatic detection chapters." msgstr "Automatische Erkennung von Kapiteln verhindern." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:164 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:162 msgid "" "The regular expression used to detect chapter titles. It is searched for in " "heading tags (h1-h6). Defaults to %default" @@ -340,7 +343,7 @@ msgstr "" "Der reguläre Ausdruck zur Ermittlung von Kapitelüberschriften. Es wird nach " "mit (h1) - (h6) angegebenen Überschriften gesucht. Voreinstellung %default" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:167 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:165 msgid "" "Detect a chapter beginning at an element having the specified attribute. The " "format for this option is tagname regexp,attribute name,attribute value " @@ -353,7 +356,7 @@ msgstr "" "Elemente mit dem Attribut class=\"chapter\" anzugleich, müsste man \"h\\" "d,class,chapter\" benutzen. Voreinstellung ist %default" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:169 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:167 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 " @@ -372,14 +375,14 @@ msgstr "" "Umblättern der in der LRF Datei verlangsamt. Diese Einstellung wird " "ignoriert, wenn die aktuelle Seite nur wenige Elemente enthält." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:179 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:177 msgid "" "Force a page break before tags whose names match this regular expression." msgstr "" "Seitenumbruch erzwingen vor Elementen, deren Namen diesem regulären Ausdruck " "entsprechen." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:181 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:179 msgid "" "Force a page break before an element having the specified attribute. The " "format for this option is tagname regexp,attribute name,attribute value " @@ -392,16 +395,16 @@ msgstr "" "class=\"chapter\" anzupassen, verwenden Sie \"h\\d,class,chapter\". " "Voreinstellung ist %default" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:184 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:182 msgid "Add detected chapters to the table of contents." msgstr "Die ermittelten Kapitel zum Inhaltsverzeichnis hinzufügen." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:187 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:185 msgid "Preprocess Baen HTML files to improve generated LRF." msgstr "" "Baen HTML Dateien vorbearbeiten, um die erstellte LRF Datei zu verbessern." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:189 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:187 msgid "" "You must add this option if processing files generated by pdftohtml, " "otherwise conversion will fail." @@ -409,11 +412,11 @@ msgstr "" "Sie müssen diese Auswahl treffen, wenn sie Dateien, die von pdftohtml " "erstellt wurden, verarbeiten wollen, sonst schlägt die Konvertierung fehl." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:191 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:189 msgid "Use this option on html0 files from Book Designer." msgstr "Benutzen Sie diese Einstellung bei HTML Dateien von Book Designer." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:194 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:192 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 " @@ -427,27 +430,27 @@ msgstr "" "angegeben: --serif-family \"Times New Roman\"\n" " " -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:202 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:200 msgid "The serif family of fonts to embed" msgstr "Serife Schriftartfamilie einbetten" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:205 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:203 msgid "The sans-serif family of fonts to embed" msgstr "Serifenlose Schriftartfamilie einbetten" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:208 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:206 msgid "The monospace family of fonts to embed" msgstr "Nichtproportionale Schriftartfamilie einbetten" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:212 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:210 msgid "Be verbose while processing" msgstr "Mehr Wörter bei der weiteren Verarbeitung angeben." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:214 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:212 msgid "Convert to LRS" msgstr "Zu LRS konvertieren" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:216 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:214 msgid "" "Minimize memory usage at the cost of longer processing times. Use this " "option if you are on a memory constrained machine." @@ -456,7 +459,7 @@ msgstr "" "Benutzen Sie diese Einstellung, wenn sie an einem Rechner mit geringem " "Hauptspeicher arbeiten." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:218 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:216 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 " @@ -469,7 +472,7 @@ msgstr "" "cp-1252. Eine andere gebräuchliche Alternative ist utf-8. In der " "Voreinstellung wird versucht, die Kodierung zu erraten." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/any/convert_from.py:143 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/any/convert_from.py:144 msgid "" "any2lrf [options] myfile\n" "\n" @@ -488,7 +491,7 @@ msgstr "" "ZIP Archive, indem es nach einem eBook im Archiv sucht.\n" " " -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/any/convert_from.py:158 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/any/convert_from.py:159 msgid "No file to convert specified." msgstr "Keine Datei zur Konvertierung angegeben." @@ -549,40 +552,40 @@ msgstr "\tBaen Datei erkannt. Analysiere erneut..." msgid "Written preprocessed HTML to " msgstr "Vorverarbeitetes HTML gespeichert unter " -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:372 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:373 msgid "Processing %s" msgstr "Verarbeite %s" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:386 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:387 msgid "\tConverting to BBeB..." msgstr "\tKonvertiere in BBeB..." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:529 -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:542 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:530 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:543 msgid "Could not parse file: %s" msgstr "Konnte Datei nicht analysieren: %s" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:534 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:535 msgid "%s is an empty file" msgstr "%s ist eine leere Datei" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:554 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:555 msgid "Failed to parse link %s %s" msgstr "Fehlschlag bei der Analysierung von %s %s" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:598 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:599 msgid "Cannot add link %s to TOC" msgstr "Konnte Link %s nicht zu TOC hinzufügen" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:943 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:944 msgid "Unable to process image %s. Error: %s" msgstr "Konnte Bild %s nicht verarbeiten. Fehler: %s" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:981 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:982 msgid "Unable to process interlaced PNG %s" msgstr "Konnte verschachteltes PNG %s nicht verarbeiten" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:996 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:997 msgid "" "Could not process image: %s\n" "%s" @@ -590,14 +593,14 @@ msgstr "" "Konnte Bild nicht verarbeiten: %s\n" "%s" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1743 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1744 msgid "" "An error occurred while processing a table: %s. Ignoring table markup." msgstr "" "Ein Fehler trat während der Bearbeitung einer Tabelle auf: %s. " "Tabellenformat wird ignoriert." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1745 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1746 msgid "" "Bad table:\n" "%s" @@ -605,11 +608,11 @@ msgstr "" "Schlechte Tabelle:\n" "%s" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1767 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1768 msgid "Table has cell that is too large" msgstr "Tabelle enthält Zelle, die zu groß ist" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1797 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1798 msgid "" "You have to save the website %s as an html file first and then run html2lrf " "on it." @@ -617,19 +620,19 @@ msgstr "" "Sichern Sie die Website %s zuerst als HTML Datei und benutzen Sie dann " "html2lrf mit der gespeicherten HTML Datei." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1839 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1841 msgid "Could not read cover image: %s" msgstr "Konnte Umschlagbild nicht lesen: %s" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1842 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1844 msgid "Cannot read from: %s" msgstr "Lesen nicht möglich von: %s" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1976 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1978 msgid "Failed to process opf file" msgstr "Verarbeitung der OPF Datei schlug fehl" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1982 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1984 msgid "" "Usage: %prog [options] mybook.html\n" "\n" @@ -966,19 +969,19 @@ msgstr "Benutzung: pdf-meta dateiname.pdf" msgid "No filename specified." msgstr "Kein Dateiname angegeben." -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:341 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:344 msgid "%prog [options] myebook.mobi" msgstr "%prog [options] dateiname.mobi" -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:343 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:346 msgid "Output directory. Defaults to current directory." msgstr "Ausgabeverzeichnis. Voreinstellung ist akutelles Verzeichnis." -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:362 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:365 msgid "Raw MOBI HTML saved in" msgstr "Original MOBI HTML gespeichert in" -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:364 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:367 msgid "OEB ebook created in" msgstr "OEB eBook erstellt in" @@ -1024,47 +1027,47 @@ msgstr "Einfach" msgid "Advanced" msgstr "Erweitert" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:102 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:104 msgid "<br>Must be a directory." msgstr "<br>Muss ein Verzeichnis sein." -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:102 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:104 msgid "Invalid database location " msgstr "Ortsangabe der Datenbank ungültig " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:102 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:105 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:104 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:107 msgid "Invalid database location" msgstr "Ortsangabe der Datenbank ungültig" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:105 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:107 msgid "Invalid database location.<br>Cannot write to " msgstr "Ortsangabe der Datenbank ungültig.<br>Speichern nicht möglich " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:117 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:119 msgid "Compacting database. This may take a while." msgstr "Komprimiere Datenbank. Das kann etwas dauern..." -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:117 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:119 msgid "Compacting..." msgstr "Komprimiere Datenbank..." -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:202 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:206 #: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:265 msgid "Configuration" msgstr "Konfiguration" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:203 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:207 msgid "&Location of books database (library1.db)" msgstr "Speicherort der Bücherdatenbank (&library1.db)" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:204 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:208 msgid "Browse for the new database location" msgstr "Zu einem neuen Ort der Datenbank wechseln" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:205 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:221 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:223 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:209 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:226 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:228 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:513 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:278 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:287 @@ -1083,23 +1086,27 @@ msgstr "Zu einem neuen Ort der Datenbank wechseln" msgid "..." msgstr "..." -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:206 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:210 msgid "Use &Roman numerals for series number" msgstr "&Römische Ziffern für Serien Nummerierung verwenden" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:207 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:211 +msgid "Show notification when &new version is available" +msgstr "Benachrichtigung anzeigen, wenn &neue Version verfügbar ist" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:212 msgid "Format for &single file save:" msgstr "Format zur &Speicherung einer Datei:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:208 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:213 msgid "&Priority for conversion jobs:" msgstr "&Priorität der Konvertierungsaufträge:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:209 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:214 msgid "Default network &timeout:" msgstr "Voreinstellung für Zei&tüberschreitung bei Netzwerkverbindungen:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:210 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:215 msgid "" "Set the default timeout for network fetches (i.e. anytime we go out to the " "internet to get information)" @@ -1107,61 +1114,61 @@ msgstr "" "Voreinstellung der Zeitüberschreitung für Netzwerkabrufe festsetzen (Gilt " "immer dann, wenn aus dem Internet Informationen abgerufen werden sollen)" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:211 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:216 msgid " seconds" msgstr " Sekunden" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:212 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:217 msgid "Toolbar" msgstr "Symbolleiste" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:213 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:218 msgid "Large" msgstr "Groß" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:214 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:219 msgid "Medium" msgstr "Mittel" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:215 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:220 msgid "Small" msgstr "Klein" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:216 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:221 msgid "&Button size in toolbar" msgstr "&Größe der Schaltflächen in der Symbolleiste" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:217 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:222 msgid "Show &text in toolbar buttons" msgstr "Zeige &Text in Schaltflächen der Symbolleiste" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:218 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:223 msgid "Select visible &columns in library view" msgstr "Si&chtbare Spalten in Bibliothek-Ansicht wählen" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:219 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:224 msgid "Frequently used directories" msgstr "Häufig benutzte Verzeichnisse" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:220 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:225 msgid "Add a directory to the frequently used directories list" msgstr "" "Ein Verzeichnis zur Liste der häufig genutzten Verzeichnisse hinzufügen" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:222 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:227 msgid "Remove a directory from the frequently used directories list" msgstr "" "Ein Verzeichnis von der Liste der häufig genutzten Verzeichnisse entfernen" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:224 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:229 msgid "Free unused diskspace from the database" msgstr "Freier unbenutzter Festplattenspeicher der Datenbank" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:225 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:230 msgid "&Compact database" msgstr "Datenbank &komprimieren" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:226 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:231 msgid "&Metadata from file name" msgstr "&Meta-Daten aus dem Dateinamen" @@ -1304,7 +1311,7 @@ msgid "Convert %s to LRF" msgstr "Konvertiere %s in LRF" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:108 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:177 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:175 msgid "Set conversion defaults" msgstr "Voreinstellungen zur Konvertierung wählen" @@ -2321,21 +2328,21 @@ msgstr "Zeitstempel" msgid "Search (For Advanced Search click the button to the left)" msgstr "Suche (Zur erweiterten Suche die Schaltfläche links klicken)" -#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/config_ui.py:48 +#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/config_ui.py:47 msgid "Configure Viewer" msgstr "Viewer konfigurieren" -#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/config_ui.py:49 +#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/config_ui.py:48 msgid "Use white background" msgstr "Weißen Hintergrund verwenden" -#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/config_ui.py:50 +#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/config_ui.py:49 msgid "Hyphenate" msgstr "Mit Trennstrich versehen" -#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/config_ui.py:51 -msgid "<b>Changes will only take affect after a restart." -msgstr "<b>Änderungen treten erst nach einem Neustart in Kraft." +#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/config_ui.py:50 +msgid "<b>Changes will only take effect after a restart.</b>" +msgstr "<b>Änderungen werden erst nach einem Neustart wirksam.</b>" #: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main.py:63 msgid " - LRF Viewer" @@ -2389,11 +2396,11 @@ msgstr "eBook öffnen" msgid "Configure" msgstr "Konfigurieren" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:82 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:80 msgid "Error communicating with device" msgstr "Fehler bei der Kommunikation mit dem Gerät" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:95 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:93 msgid "" "<p>For help visit <a " "href=\"http://%s.kovidgoyal.net/user_manual\">%s.kovidgoyal.net</a><br>" @@ -2401,42 +2408,42 @@ msgstr "" "<p>Hilfe gibt es online bei <a " "href=\"http://%s.kovidgoyal.net/user_manual\">%s.kovidgoyal.net</a><br>" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:96 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:94 msgid "<b>%s</b>: %s by <b>Kovid Goyal %%(version)s</b><br>%%(device)s</p>" msgstr "<b>%s</b>: %s von <b>Kovid Goyal %%(version)s</b><br>%%(device)s</p>" +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:112 #: /home/kovid/work/calibre/src/calibre/gui2/main.py:114 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:116 msgid "Send to main memory" msgstr "An Hauptspeicher senden" +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:113 #: /home/kovid/work/calibre/src/calibre/gui2/main.py:115 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:117 msgid "Send to storage card" msgstr "An Speicherkarte senden" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:116 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:117 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:114 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:115 msgid "and delete from library" msgstr "und aus der Datenbank löschen" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:119 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:117 msgid "Send to storage card by default" msgstr "Auf die Speicherkarte senden (Voreinstellung)" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:131 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:129 msgid "Edit metadata individually" msgstr "Meta-Daten einzeln bearbeiten" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:132 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:130 msgid "Edit metadata in bulk" msgstr "Meta-Daten auf einmal bearbeiten" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:135 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:133 msgid "Add books from a single directory" msgstr "Bücher aus einem einzelnen Verzeichnis hinzufügen" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:136 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:134 msgid "" "Add books recursively (One book per directory, assumes every ebook file is " "the same book in a different format)" @@ -2444,7 +2451,7 @@ msgstr "" "Bücher rekursiv hinzufügen (Ein Buch pro Verzeichnis, setzt voraus, dass " "jede eBook Datei das gleiche Buch in einem unterschiedlichen Format enthält)" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:137 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:135 msgid "" "Add books recursively (Multiple books per directory, assumes every ebook " "file is a different book)" @@ -2452,53 +2459,53 @@ msgstr "" "Bücher rekursiv hinzufügen (Mehrere Bücher pro Verzeichnis, setzt voraus, " "dass jede eBook Datei ein anderes Buch enthält)" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:152 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:150 #: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:275 msgid "Save to disk" msgstr "Auf Festplatte sichern" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:153 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:151 msgid "Save to disk in a single directory" msgstr "Auf Festplatte in ein einziges Verzeichnis speichern" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:154 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:152 msgid "Save only %s format to disk" msgstr "Speichere nur das %s Format auf die Festplatte" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:157 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:155 #: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:281 msgid "View" msgstr "Vorschau" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:158 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:156 msgid "View specific format" msgstr "Spezielles Format ansehen" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:174 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:172 msgid "Convert individually" msgstr "Einzeln konvertieren" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:175 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:173 msgid "Bulk convert" msgstr "Auf einmal konvertieren" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:309 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:307 msgid " detected." msgstr " gefunden." -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:309 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:307 msgid "Device: " msgstr "Gerät: " -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:334 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:332 msgid "Connected " msgstr "Angeschlossen: " -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:346 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:344 msgid "Device database corrupted" msgstr "Gerätedatenbank ist beschädigt" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:347 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:345 msgid "" "\n" " <p>The database of books on the reader is corrupted. Try the " @@ -2529,8 +2536,8 @@ msgstr "" " </ol>\n" " " -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:399 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:473 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:397 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:471 msgid "" "<p>Books with the same title as the following already exist in the database. " "Add them anyway?<ul>" @@ -2538,53 +2545,53 @@ msgstr "" "<p>Es existieren bereits Bücher mit dem selben Titel in der Datenbank. " "Sollen die folgenden Bücher trotzdem hinzugefügt werden?<ul>" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:402 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:476 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:400 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:474 msgid "Duplicates found!" msgstr "Duplikate gefunden!" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:435 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:448 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:433 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:446 msgid "Uploading books to device." msgstr "Lade Bücher auf das Gerät." -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:507 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:505 msgid "No space on device" msgstr "Gerätespeicher voll" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:508 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:506 msgid "" "<p>Cannot upload books to device there is no more free space available " msgstr "" "<p>Es können keine Bücher mehr auf das Gerät geladen werden, da der " "Gerätespeicher voll ist " -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:546 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:544 msgid "Deleting books from device." msgstr "Lösche Bücher vom Gerät." -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:578 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:599 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:576 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:597 msgid "Cannot edit metadata" msgstr "Kann Metadaten nicht bearbeiten" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:578 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:599 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:694 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:764 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:834 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:576 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:597 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:692 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:762 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:832 msgid "No books selected" msgstr "Keine Bücher ausgewählt" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:674 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:672 msgid "Sending books to device." msgstr "Sende Bücher an das Gerät." -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:677 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:675 msgid "No suitable formats" msgstr "Keine geeigneten Formate" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:678 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:676 msgid "" "Could not upload the following books to the device, as no suitable formats " "were found:<br><ul>%s</ul>" @@ -2592,11 +2599,11 @@ msgstr "" "Die folgenden Bücher konnten nicht auf das Gerät geladen werden, da keine " "geeigneten Formate vorhanden sind:<br><ul>%s</ul>" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:694 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:692 msgid "Cannot save to disk" msgstr "Speichern auf Festplatte nicht möglich" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:705 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:703 msgid "" "<p>Could not save the following books to disk, because the %s format is not " "available for them:<ul>" @@ -2604,68 +2611,68 @@ msgstr "" "<p>Die folgenden Bücher konnten nicht auf die Festplatte gespeichert werden, " "da das %s Format für sie nicht verfügbar ist:<ul>" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:709 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:707 msgid "Could not save some ebooks" msgstr "Konnte einige eBooks nicht speichern" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:742 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:740 msgid "Fetch news from " msgstr "Nachrichten abrufen von " -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:744 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:742 msgid "Fetching news from " msgstr "Rufe Nachrichten ab von " -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:754 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:752 msgid "News fetched. Uploading to device." msgstr "Nachrichten abgerufen. Übertragung ans Gerät läuft." -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:764 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:834 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:762 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:832 msgid "Cannot convert" msgstr "Konvertierung nicht möglich" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:773 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:771 msgid "Starting Bulk conversion of %d books" msgstr "Starte Massenkonvertierung von %d Büchern" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:905 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:923 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:903 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:921 msgid "No book selected" msgstr "Kein Buch ausgewählt" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:905 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:923 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:937 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:903 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:921 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:935 msgid "Cannot view" msgstr "Ansehen nicht möglich" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:911 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:942 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:909 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:940 msgid "Choose the format to view" msgstr "Format zur Vorschau wählen" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:938 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:936 msgid "%s has no available formats." msgstr "%s hat keine verfügbaren Formate." -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:976 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:974 msgid "Cannot configure" msgstr "Konfiguration nicht möglich" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:976 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:974 msgid "Cannot configure while there are running jobs." msgstr "Konfiguration nicht möglich während Aufträge abgearbeitet werden." -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:999 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:997 msgid "Copying database to " msgstr "Kopiere Datenbank nach " -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1014 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1012 msgid "Invalid database" msgstr "Ungültige Datenbank" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1015 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1013 msgid "" "<p>An invalid database already exists at %s, delete it before trying to move " "the existing database.<br>Error: %s" @@ -2673,23 +2680,23 @@ msgstr "" "<p>Es existiert bereits eine ungültige Datenbank in %s, bitte löschen Sie " "diese, bevor sie die bestehende Datenbank verschieben.<br>Fehler: %s" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1023 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1021 msgid "Could not move database" msgstr "Konnte Datenbank nicht verschieben" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1044 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1042 msgid "No detailed info available" msgstr "Es ist keine weitere Information verfügbar" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1045 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1043 msgid "No detailed information is available for books on the device." msgstr "Es ist keine weitere Information über Bücher auf dem Gerät verfügbar" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1087 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1085 msgid "Error talking to device" msgstr "Fehler in der Kommunikation zum Gerät" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1088 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1086 msgid "" "There was a temporary error talking to the device. Please unplug and " "reconnect the device and or reboot." @@ -2697,15 +2704,15 @@ msgstr "" "Es trat ein Fehler in der Kommunikation mit dem Gerät auf. Bitte entfernen " "und schließen Sie das Gerät wieder an und - oder starten Sie neu." -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1139 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1137 msgid "Conversion Error" msgstr "Konvertierungsfehler" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1158 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1156 msgid "Database does not exist" msgstr "Datenbank existiert nicht" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1158 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1156 msgid "" "The directory in which the database should be: %s no longer exists. Please " "choose a new database location." @@ -2713,7 +2720,7 @@ msgstr "" "Das Verzeichnis, in dem die Datenbank sein sollte: %s existiert nicht mehr. " "Bitte wählen Sie einen neuen Ort für die Datenbank aus." -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1209 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1207 msgid "" "<span style=\"color:red; font-weight:bold\">Latest version: <a " "href=\"%s\">%s</a></span>" @@ -2721,7 +2728,7 @@ msgstr "" "<span style=\"color:red; font-weight:bold\">Letzte Version: <a " "href=\"%s\">%s</a></span>" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1215 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1213 msgid "" "%s has been updated to version %s. See the <a " "href=\"http://calibre.kovidgoyal.net/wiki/Changelog\">new features</a>. " @@ -2731,7 +2738,7 @@ msgstr "" "href=\"http://calibre.kovidgoyal.net/wiki/Changelog\">neuen Features</a> an. " "Möchten Sie die Download Seite besuchen?" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1215 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1213 msgid "Update available" msgstr "Neue Version verfügbar" @@ -3206,7 +3213,7 @@ msgstr "" " \n" "Für Hilfe zu einem bestimmten Befehl (command): %%prog command --help\n" -#: /home/kovid/work/calibre/src/calibre/parallel.py:317 +#: /home/kovid/work/calibre/src/calibre/parallel.py:321 msgid "Could not launch worker process." msgstr "Konnte Arbeitsprozess nicht starten." @@ -3356,70 +3363,70 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/web/feeds/main.py:84 #: /home/kovid/work/calibre/src/calibre/web/feeds/main.py:88 -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:576 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:577 msgid "Fetching feeds..." msgstr "Rufe Feeds ab..." -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:33 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:34 msgid "Unknown News Source" msgstr "Nachrichtenquelle unbekannt" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:474 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:475 msgid "Download finished" msgstr "Download beendet" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:476 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:477 msgid "Failed to download the following articles:" msgstr "Der Download der folgenden Artikel schlug fehl:" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:478 -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:484 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:479 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:485 msgid " from " msgstr " von " -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:482 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:483 msgid "Failed to download parts of the following articles:" msgstr "Der Download von Teilen der folgenden Artikel schlug fehl:" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:486 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:487 msgid "\tFailed links:" msgstr "\tFehlgeschlagene Verknüpfungen:" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:558 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:559 msgid "Could not fetch article. Run with --debug to see the reason" msgstr "" "Konnte Artikel nicht abrufen. Der erneute Start mit --debug zeigt mögliche " "Gründe an" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:580 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:581 msgid "Got feeds from index page" msgstr "Feeds der Index Seite erhalten" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:584 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:585 msgid "Trying to download cover..." msgstr "Versuche Umschlagbild zu laden..." -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:636 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:637 msgid "Starting download [%d thread(s)]..." msgstr "Starte Download von [%d Thread(s)]..." -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:649 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:650 msgid "Feeds downloaded to %s" msgstr "Feeds wurden nach %s heruntergeladen" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:659 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:660 msgid "Could not download cover: %s" msgstr "Konnte Umschlagbild nicht laden: %s" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:664 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:665 msgid "Downloading cover from %s" msgstr "Lade Umschlagbild von %s" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:698 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:699 msgid "Untitled Article" msgstr "Artikel ohne Titel" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:744 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:745 msgid "" "\n" "Downloaded article %s from %s\n" @@ -3429,19 +3436,19 @@ msgstr "" "Artikel %s von %s geladen\n" "%s" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:750 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:751 msgid "Article downloaded: %s" msgstr "Artikel geladen: %s" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:756 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:757 msgid "Failed to download article: %s from %s\n" msgstr "Laden der Artikel fehlgeschlagen: %s von %s\n" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:761 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:762 msgid "Article download failed: %s" msgstr "Laden der Artikel schlug fehl: %s" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:776 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:777 msgid "Fetching feed" msgstr "Rufe Feed ab" diff --git a/src/calibre/translations/el.po b/src/calibre/translations/el.po index 3e7450bee1..78d25c33fc 100644 --- a/src/calibre/translations/el.po +++ b/src/calibre/translations/el.po @@ -7,14 +7,14 @@ msgid "" msgstr "" "Project-Id-Version: calibre\n" "Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" -"POT-Creation-Date: 2008-06-30 23:41+0000\n" +"POT-Creation-Date: 2008-07-09 04:18+0000\n" "PO-Revision-Date: 2008-06-24 07:23+0000\n" "Last-Translator: Thanos Petkakis <thanospet@gmail.com>\n" "Language-Team: Greek <el@li.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2008-07-09 03:20+0000\n" +"X-Launchpad-Export-Date: 2008-07-19 02:36+0000\n" "X-Generator: Launchpad (build Unknown)\n" #: /home/kovid/work/calibre/src/calibre/__init__.py:133 @@ -35,17 +35,17 @@ msgstr "" msgid "The reader has no storage card connected." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:73 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:71 msgid "Set the title. Default: filename." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:75 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:73 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:76 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:74 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:174 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf.py:314 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf.py:429 @@ -57,173 +57,173 @@ msgstr "" msgid "Unknown" msgstr "Άγνωστο" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:78 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:76 msgid "Set the comment." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:80 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:78 msgid "Set the category" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:82 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:80 msgid "Sort key for the title" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:84 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:82 msgid "Sort key for the author" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:86 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:84 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:39 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search.py:16 #: /home/kovid/work/calibre/src/calibre/gui2/library.py:409 msgid "Publisher" msgstr "Εκδότης" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:88 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:86 msgid "Path to file containing image to be used as cover" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:90 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:88 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:93 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:91 msgid "Output file name. Default is derived from input filename" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:95 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:93 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:98 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:96 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:100 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:98 msgid "Enable autorotation of images that are wider than the screen width." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:103 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:101 msgid "Set the space between words in pts. Default is %default" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:105 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:103 msgid "Separate paragraphs by blank lines." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:107 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:105 msgid "Add a header to all the pages with title and author." msgstr "Προσθήκη επικεφαλίδας σε όλες τις σελίδες με τίτλο και συγγραφέα" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:109 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:107 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:111 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:109 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:113 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:111 msgid "" "Use the <spine> 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:115 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:113 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:117 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:115 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:122 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:120 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:128 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:126 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:134 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:132 msgid "Left margin of page. Default is %default px." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:136 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:134 msgid "Right margin of page. Default is %default px." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:138 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:136 msgid "Top margin of page. Default is %default px." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:140 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:138 msgid "Bottom margin of page. Default is %default px." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:142 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:140 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:144 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:142 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:149 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:147 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 <a> tags are " "ignored." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:153 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:151 msgid "" "A regular expression. <a> tags whose href matches will be ignored. Defaults " "to %default" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:157 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:155 msgid "Don't add links to the table of contents." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:161 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:159 msgid "Prevent the automatic detection chapters." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:164 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:162 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:167 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:165 msgid "" "Detect a chapter beginning at an element having the specified attribute. The " "format for this option is tagname regexp,attribute name,attribute value " @@ -231,7 +231,7 @@ msgid "" "class=\"chapter\" you would use \"h\\d,class,chapter\". Default is %default" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:169 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:167 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 " @@ -242,12 +242,12 @@ msgid "" "has only a few elements." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:179 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:177 msgid "" "Force a page break before tags whose names match this regular expression." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:181 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:179 msgid "" "Force a page break before an element having the specified attribute. The " "format for this option is tagname regexp,attribute name,attribute value " @@ -255,25 +255,25 @@ msgid "" "class=\"chapter\" you would use \"h\\d,class,chapter\". Default is %default" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:184 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:182 msgid "Add detected chapters to the table of contents." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:187 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:185 msgid "Preprocess Baen HTML files to improve generated LRF." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:189 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:187 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:191 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:189 msgid "Use this option on html0 files from Book Designer." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:194 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:192 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 " @@ -281,33 +281,33 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:202 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:200 msgid "The serif family of fonts to embed" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:205 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:203 msgid "The sans-serif family of fonts to embed" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:208 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:206 msgid "The monospace family of fonts to embed" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:212 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:210 msgid "Be verbose while processing" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:214 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:212 msgid "Convert to LRS" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:216 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:214 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:218 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:216 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 " @@ -315,7 +315,7 @@ msgid "" "default is to try and guess the encoding." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/any/convert_from.py:143 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/any/convert_from.py:144 msgid "" "any2lrf [options] myfile\n" "\n" @@ -326,7 +326,7 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/any/convert_from.py:158 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/any/convert_from.py:159 msgid "No file to convert specified." msgstr "" @@ -379,79 +379,79 @@ msgstr "" msgid "Written preprocessed HTML to " msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:372 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:373 msgid "Processing %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:386 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:387 msgid "\tConverting to BBeB..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:529 -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:542 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:530 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:543 msgid "Could not parse file: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:534 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:535 msgid "%s is an empty file" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:554 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:555 msgid "Failed to parse link %s %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:598 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:599 msgid "Cannot add link %s to TOC" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:943 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:944 msgid "Unable to process image %s. Error: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:981 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:982 msgid "Unable to process interlaced PNG %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:996 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:997 msgid "" "Could not process image: %s\n" "%s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1743 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1744 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:1745 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1746 msgid "" "Bad table:\n" "%s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1767 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1768 msgid "Table has cell that is too large" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1797 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1798 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:1839 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1841 msgid "Could not read cover image: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1842 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1844 msgid "Cannot read from: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1976 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1978 msgid "Failed to process opf file" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1982 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1984 msgid "" "Usage: %prog [options] mybook.html\n" "\n" @@ -722,19 +722,19 @@ msgstr "" msgid "No filename specified." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:341 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:344 msgid "%prog [options] myebook.mobi" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:343 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:346 msgid "Output directory. Defaults to current directory." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:362 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:365 msgid "Raw MOBI HTML saved in" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:364 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:367 msgid "OEB ebook created in" msgstr "" @@ -780,47 +780,47 @@ msgstr "" msgid "Advanced" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:102 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:104 msgid "<br>Must be a directory." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:102 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:104 msgid "Invalid database location " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:102 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:105 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:104 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:107 msgid "Invalid database location" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:105 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:107 msgid "Invalid database location.<br>Cannot write to " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:117 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:119 msgid "Compacting database. This may take a while." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:117 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:119 msgid "Compacting..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:202 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:206 #: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:265 msgid "Configuration" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:203 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:207 msgid "&Location of books database (library1.db)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:204 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:208 msgid "Browse for the new database location" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:205 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:221 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:223 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:209 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:226 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:228 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:513 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:278 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:287 @@ -839,81 +839,85 @@ msgstr "" msgid "..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:206 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:210 msgid "Use &Roman numerals for series number" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:207 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:211 +msgid "Show notification when &new version is available" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:212 msgid "Format for &single file save:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:208 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:213 msgid "&Priority for conversion jobs:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:209 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:214 msgid "Default network &timeout:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:210 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:215 msgid "" "Set the default timeout for network fetches (i.e. anytime we go out to the " "internet to get information)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:211 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:216 msgid " seconds" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:212 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:217 msgid "Toolbar" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:213 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:218 msgid "Large" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:214 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:219 msgid "Medium" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:215 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:220 msgid "Small" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:216 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:221 msgid "&Button size in toolbar" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:217 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:222 msgid "Show &text in toolbar buttons" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:218 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:223 msgid "Select visible &columns in library view" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:219 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:224 msgid "Frequently used directories" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:220 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:225 msgid "Add a directory to the frequently used directories list" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:222 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:227 msgid "Remove a directory from the frequently used directories list" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:224 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:229 msgid "Free unused diskspace from the database" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:225 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:230 msgid "&Compact database" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:226 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:231 msgid "&Metadata from file name" msgstr "" @@ -1045,7 +1049,7 @@ msgid "Convert %s to LRF" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:108 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:177 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:175 msgid "Set conversion defaults" msgstr "" @@ -1996,20 +2000,20 @@ msgstr "" msgid "Search (For Advanced Search click the button to the left)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/config_ui.py:48 +#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/config_ui.py:47 msgid "Configure Viewer" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/config_ui.py:49 +#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/config_ui.py:48 msgid "Use white background" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/config_ui.py:50 +#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/config_ui.py:49 msgid "Hyphenate" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/config_ui.py:51 -msgid "<b>Changes will only take affect after a restart." +#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/config_ui.py:50 +msgid "<b>Changes will only take effect after a restart.</b>" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main.py:63 @@ -2064,110 +2068,110 @@ msgstr "" msgid "Configure" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:82 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:80 msgid "Error communicating with device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:95 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:93 msgid "" "<p>For help visit <a " "href=\"http://%s.kovidgoyal.net/user_manual\">%s.kovidgoyal.net</a><br>" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:96 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:94 msgid "<b>%s</b>: %s by <b>Kovid Goyal %%(version)s</b><br>%%(device)s</p>" msgstr "" +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:112 #: /home/kovid/work/calibre/src/calibre/gui2/main.py:114 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:116 msgid "Send to main memory" msgstr "" +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:113 #: /home/kovid/work/calibre/src/calibre/gui2/main.py:115 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:117 msgid "Send to storage card" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:116 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:117 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:114 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:115 msgid "and delete from library" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:119 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:117 msgid "Send to storage card by default" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:131 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:129 msgid "Edit metadata individually" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:132 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:130 msgid "Edit metadata in bulk" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:135 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:133 msgid "Add books from a single directory" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:136 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:134 msgid "" "Add books recursively (One book per directory, assumes every ebook file is " "the same book in a different format)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:137 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:135 msgid "" "Add books recursively (Multiple books per directory, assumes every ebook " "file is a different book)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:152 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:150 #: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:275 msgid "Save to disk" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:153 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:151 msgid "Save to disk in a single directory" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:154 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:152 msgid "Save only %s format to disk" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:157 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:155 #: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:281 msgid "View" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:158 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:156 msgid "View specific format" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:174 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:172 msgid "Convert individually" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:175 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:173 msgid "Bulk convert" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:309 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:307 msgid " detected." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:309 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:307 msgid "Device: " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:334 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:332 msgid "Connected " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:346 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:344 msgid "Device database corrupted" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:347 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:345 msgid "" "\n" " <p>The database of books on the reader is corrupted. Try the " @@ -2183,190 +2187,190 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:399 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:473 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:397 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:471 msgid "" "<p>Books with the same title as the following already exist in the database. " "Add them anyway?<ul>" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:402 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:476 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:400 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:474 msgid "Duplicates found!" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:435 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:448 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:433 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:446 msgid "Uploading books to device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:507 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:505 msgid "No space on device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:508 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:506 msgid "" "<p>Cannot upload books to device there is no more free space available " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:546 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:544 msgid "Deleting books from device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:578 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:599 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:576 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:597 msgid "Cannot edit metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:578 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:599 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:694 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:764 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:834 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:576 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:597 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:692 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:762 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:832 msgid "No books selected" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:674 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:672 msgid "Sending books to device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:677 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:675 msgid "No suitable formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:678 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:676 msgid "" "Could not upload the following books to the device, as no suitable formats " "were found:<br><ul>%s</ul>" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:694 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:692 msgid "Cannot save to disk" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:705 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:703 msgid "" "<p>Could not save the following books to disk, because the %s format is not " "available for them:<ul>" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:709 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:707 msgid "Could not save some ebooks" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:742 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:740 msgid "Fetch news from " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:744 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:742 msgid "Fetching news from " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:754 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:752 msgid "News fetched. Uploading to device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:764 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:834 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:762 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:832 msgid "Cannot convert" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:773 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:771 msgid "Starting Bulk conversion of %d books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:905 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:923 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:903 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:921 msgid "No book selected" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:905 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:923 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:937 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:903 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:921 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:935 msgid "Cannot view" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:911 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:942 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:909 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:940 msgid "Choose the format to view" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:938 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:936 msgid "%s has no available formats." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:976 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:974 msgid "Cannot configure" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:976 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:974 msgid "Cannot configure while there are running jobs." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:999 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:997 msgid "Copying database to " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1014 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1012 msgid "Invalid database" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1015 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1013 msgid "" "<p>An invalid database already exists at %s, delete it before trying to move " "the existing database.<br>Error: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1023 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1021 msgid "Could not move database" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1044 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1042 msgid "No detailed info available" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1045 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1043 msgid "No detailed information is available for books on the device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1087 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1085 msgid "Error talking to device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1088 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1086 msgid "" "There was a temporary error talking to the device. Please unplug and " "reconnect the device and or reboot." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1139 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1137 msgid "Conversion Error" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1158 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1156 msgid "Database does not exist" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1158 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1156 msgid "" "The directory in which the database should be: %s no longer exists. Please " "choose a new database location." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1209 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1207 msgid "" "<span style=\"color:red; font-weight:bold\">Latest version: <a " "href=\"%s\">%s</a></span>" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1215 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1213 msgid "" "%s has been updated to version %s. See the <a " "href=\"http://calibre.kovidgoyal.net/wiki/Changelog\">new features</a>. " "Visit the download page?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1215 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1213 msgid "Update available" msgstr "" @@ -2741,7 +2745,7 @@ msgid "" "For help on an individual command: %%prog command --help\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/parallel.py:317 +#: /home/kovid/work/calibre/src/calibre/parallel.py:321 msgid "Could not launch worker process." msgstr "" @@ -2856,87 +2860,87 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/web/feeds/main.py:84 #: /home/kovid/work/calibre/src/calibre/web/feeds/main.py:88 -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:576 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:577 msgid "Fetching feeds..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:33 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:34 msgid "Unknown News Source" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:474 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:475 msgid "Download finished" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:476 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:477 msgid "Failed to download the following articles:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:478 -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:484 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:479 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:485 msgid " from " msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:482 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:483 msgid "Failed to download parts of the following articles:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:486 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:487 msgid "\tFailed links:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:558 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:559 msgid "Could not fetch article. Run with --debug to see the reason" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:580 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:581 msgid "Got feeds from index page" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:584 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:585 msgid "Trying to download cover..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:636 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:637 msgid "Starting download [%d thread(s)]..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:649 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:650 msgid "Feeds downloaded to %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:659 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:660 msgid "Could not download cover: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:664 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:665 msgid "Downloading cover from %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:698 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:699 msgid "Untitled Article" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:744 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:745 msgid "" "\n" "Downloaded article %s from %s\n" "%s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:750 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:751 msgid "Article downloaded: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:756 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:757 msgid "Failed to download article: %s from %s\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:761 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:762 msgid "Article download failed: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:776 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:777 msgid "Fetching feed" msgstr "" diff --git a/src/calibre/translations/es.po b/src/calibre/translations/es.po index 509f3fa281..d5fd04e82f 100644 --- a/src/calibre/translations/es.po +++ b/src/calibre/translations/es.po @@ -10,14 +10,14 @@ msgid "" msgstr "" "Project-Id-Version: es\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2008-06-30 23:41+0000\n" -"PO-Revision-Date: 2008-06-29 16:58+0000\n" -"Last-Translator: Kovid Goyal <Unknown>\n" +"POT-Creation-Date: 2008-07-09 04:18+0000\n" +"PO-Revision-Date: 2008-07-12 01:40+0000\n" +"Last-Translator: betatron <frangb@gmail.com>\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: 2008-07-09 03:20+0000\n" +"X-Launchpad-Export-Date: 2008-07-19 02:36+0000\n" "X-Generator: Launchpad (build Unknown)\n" #~ msgid "" @@ -69,6 +69,9 @@ msgstr "" #~ msgid "Cannot kill waiting jobs." #~ msgstr "No se pueden detener trabajos en espera" +#~ msgid "<b>Changes will only take affect after a restart." +#~ msgstr "<b>Los cambios no se aplicaran hasta reiniciar." + #~ msgid "Job killed by user" #~ msgstr "Trabajo detenido por el usuario" @@ -193,21 +196,21 @@ msgstr "No se ha podido detectar la unidad de disco %s. Trate de reiniciar." #: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:355 msgid "The reader has no storage card connected." -msgstr "" +msgstr "El lector no tiene ninguna tarjeta de almacenamiento conectada" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:71 +msgid "Set the title. Default: filename." +msgstr "Establecer título. Por defecto: nombre_del_archivo" #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:73 -msgid "Set the title. Default: filename." -msgstr "Insertar título. Por defecto: nombre_del_archivo." - -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:75 msgid "" "Set the author(s). Multiple authors should be set as a comma separated list. " "Default: %default" msgstr "" -"Insertar autor(es). Si indica más de un autor, sepárelos mediante comas. Por " -"defecto: %default" +"Establecer autor(es). Si indica más de un autor, sepárelos mediante comas. " +"Por defecto: %default" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:76 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:74 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:174 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf.py:314 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf.py:429 @@ -219,34 +222,34 @@ msgstr "" msgid "Unknown" msgstr "Desconocido" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:78 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:76 msgid "Set the comment." msgstr "Insertar comentarios." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:80 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:78 msgid "Set the category" msgstr "Seleccione categorí­a." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:82 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:80 msgid "Sort key for the title" msgstr "Clave de orden por tí­tulo." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:84 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:82 msgid "Sort key for the author" msgstr "Clave de orden para el autor" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:86 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:84 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:39 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search.py:16 #: /home/kovid/work/calibre/src/calibre/gui2/library.py:409 msgid "Publisher" msgstr "Editorial" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:88 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:86 msgid "Path to file containing image to be used as cover" msgstr "Ruta al archivo de imagen a utilizar como portada" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:90 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:88 msgid "" "If there is a cover graphic detected in the source file, use that instead of " "the specified cover." @@ -254,12 +257,12 @@ msgstr "" "Si se detecta un gráfico para la portada en el archivo de origen, utilizarla " "en lugar de la portada especificada." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:93 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:91 msgid "Output file name. Default is derived from input filename" msgstr "" "Nombre del archivo de destino­. Por defecto, deriva del archivo de entrada" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:95 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:93 msgid "" "Render HTML tables as blocks of text instead of actual tables. This is " "neccessary if the HTML contains very large or complex tables." @@ -267,7 +270,7 @@ msgstr "" "Renderizar las tablas HTML como bloques de texto en lugar de las tablas " "actuales. Activar si el archivo HTML contiene tablas muy grandes o complejas." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:98 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:96 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 " @@ -278,25 +281,25 @@ msgstr "" "y prioriza sobre ella en el caso de que esté asignada. Para usar --font-" "delta, iguale ésta variable a 0. Configuración por defecto: %defaultpt" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:100 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:98 msgid "Enable autorotation of images that are wider than the screen width." msgstr "" "Activa la rotación automática de imágenes más grandes que el ancho de la " "pantalla." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:103 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:101 msgid "Set the space between words in pts. Default is %default" msgstr "Fija el espacio entre palabras en puntos. Por defecto: %default" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:105 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:103 msgid "Separate paragraphs by blank lines." msgstr "Separa los párrafos mediante líneas en blanco." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:107 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:105 msgid "Add a header to all the pages with title and author." msgstr "Añadir el encabezado en todas las páginas, poniendo tí­tulo y autor." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:109 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:107 msgid "" "Set the format of the header. %a is replaced by the author and %t by the " "title. Default is %default" @@ -304,7 +307,7 @@ msgstr "" "Establece el formato del encabezado. %a se reemplaza por el autor y %t por " "el tí­tulo. Por defecto: %default" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:111 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:109 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." @@ -312,7 +315,7 @@ msgstr "" "Substituye la hoja CSS. Se admite tanto una ruta al archivo CSS alternativo, " "como una cadena. En el último caso, la cadena se interpreta como CSS." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:113 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:111 msgid "" "Use the <spine> 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 " @@ -322,7 +325,7 @@ msgstr "" "que se añaden los archivos HTML al LRF. El archivo .opf debe estar en la " "misma carpeta que el archivo HTML base." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:115 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:113 msgid "" "Minimum paragraph indent (the indent of the first line of a paragraph) in " "pts. Default: %default" @@ -330,7 +333,7 @@ msgstr "" "Sangrado mínimo para párrafos (el sangrado de la primera línea de cada " "párrafo) en ptos. Por defecto: %default" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:117 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:115 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 " @@ -340,7 +343,7 @@ msgstr "" "lí­nea en FONT_DELTA puntos. FONT_DELTA puede ser una fracción. Si es un " "valor negativo, el tamaño de la fuente disminuye." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:122 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:120 msgid "" "Render all content as black on white instead of the colors specified by the " "HTML or CSS." @@ -348,7 +351,7 @@ msgstr "" "Generar todo el contenido en negro sobre blanco en lugar de los colores " "indicados por el HTML o CSS." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:128 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:126 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 " @@ -358,23 +361,23 @@ msgstr "" "determina, entre otras cosas, la resolución y el tamaño de la pantalla del " "dispositivo. Por defecto: %s Perfiles soportados: " -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:134 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:132 msgid "Left margin of page. Default is %default px." msgstr "Margen izquierdo de la página. Por defecto: %default px." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:136 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:134 msgid "Right margin of page. Default is %default px." msgstr "Margen derecho de la página. Por defecto: %default px." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:138 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:136 msgid "Top margin of page. Default is %default px." msgstr "Margen superior de la página. Por defecto: %default px." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:140 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:138 msgid "Bottom margin of page. Default is %default px." msgstr "Margen inferior de la página. Por defecto: %default px." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:142 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:140 msgid "" "Render tables in the HTML as images (useful if the document has large or " "complex tables)" @@ -382,7 +385,7 @@ msgstr "" "Renderizar las tablas en documentos html como imágenes (Muy útil si el " "documento consta de tablas grandes o complejas." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:144 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:142 msgid "" "Multiply the size of text in rendered tables by this factor. Default is " "%default" @@ -390,7 +393,7 @@ msgstr "" "Multiplicar el tamaño del texto en las tablas renderizadas por éste factor. " "Por defecto es: %default" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:149 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:147 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 <a> tags are " @@ -399,7 +402,7 @@ msgstr "" "Número máximo de niveles para procesar enlaces recursivamente. El valor 0 " "(cero) indica que no se seguirán. Un valor negativo, ignora las marcas <a>." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:153 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:151 msgid "" "A regular expression. <a> tags whose href matches will be ignored. Defaults " "to %default" @@ -407,15 +410,15 @@ msgstr "" "Una expresión regular. Las etiquetas <a> cuyos atributos href coincidan " "serán ignoradas. Por defecto es %default" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:157 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:155 msgid "Don't add links to the table of contents." msgstr "No incluir enlaces en el índice de contenidos" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:161 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:159 msgid "Prevent the automatic detection chapters." msgstr "Impedir la detección automática de capítulos." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:164 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:162 msgid "" "The regular expression used to detect chapter titles. It is searched for in " "heading tags (h1-h6). Defaults to %default" @@ -423,7 +426,7 @@ msgstr "" "Expressión regular utilizada para detectar los títulos de los capítulos. " "Busca las marcas de encabezado (h1-h6). Por defecto: %default" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:167 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:165 msgid "" "Detect a chapter beginning at an element having the specified attribute. The " "format for this option is tagname regexp,attribute name,attribute value " @@ -436,7 +439,7 @@ msgstr "" "etiquetas de cabecera que tienen como attribute class=\"capítulo\" podría " "usar: \"h/d,class,capítulo\". El valor por defecto es: %default" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:169 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:167 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 " @@ -454,14 +457,14 @@ msgstr "" "cambio de página en el archivo LRF. Esta opción se ignora si la página " "actual tiene pocos elementos." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:179 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:177 msgid "" "Force a page break before tags whose names match this regular expression." msgstr "" "Forzar un salto de página previo a las etiquetas cuyos nombres coincidan con " "esta expresión regular." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:181 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:179 msgid "" "Force a page break before an element having the specified attribute. The " "format for this option is tagname regexp,attribute name,attribute value " @@ -473,16 +476,16 @@ msgstr "" "ejemplo, \"h\\d,class,chapter\", coincide con todas las marcas de encabezado " "que tienen el atributo class=\"chapter\". Por defecto: %default" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:184 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:182 msgid "Add detected chapters to the table of contents." msgstr "Incluir capítulos detectados en el índice de contenidos." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:187 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:185 msgid "Preprocess Baen HTML files to improve generated LRF." msgstr "" "Preprocesa los archivos Baen HTML para mejorar el archivo LRF generado." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:189 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:187 msgid "" "You must add this option if processing files generated by pdftohtml, " "otherwise conversion will fail." @@ -490,11 +493,11 @@ msgstr "" "Es necesario activar esta opción para archivos generados con pdftohtml, para " "evitar que la conversión falle." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:191 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:189 msgid "Use this option on html0 files from Book Designer." msgstr "Utilice esta opción para archivos html0 de Book Designer." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:194 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:192 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 " @@ -507,27 +510,27 @@ msgstr "" "-serif-family \"Times New Roman\"\n" " " -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:202 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:200 msgid "The serif family of fonts to embed" msgstr "Familia de fuentes serif per a incrustar." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:205 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:203 msgid "The sans-serif family of fonts to embed" msgstr "Familia de fuentes sans-serif a incrustar." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:208 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:206 msgid "The monospace family of fonts to embed" msgstr "Familia de fuentes monoespaiadas a incrustar." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:212 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:210 msgid "Be verbose while processing" msgstr "Ser prolijo al procesar" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:214 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:212 msgid "Convert to LRS" msgstr "Convertir a LRS" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:216 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:214 msgid "" "Minimize memory usage at the cost of longer processing times. Use this " "option if you are on a memory constrained machine." @@ -535,7 +538,7 @@ msgstr "" "Minimizar el uso de memoria, a cambio de mayor tiempo de procesador. Usar " "esta opción si el equipo no dispone de mucha RAM." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:218 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:216 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 " @@ -548,7 +551,7 @@ msgstr "" "es cp-1252. Otra opción habitual es utf-8. La opción por defecto es intentar " "adivinar la codificación." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/any/convert_from.py:143 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/any/convert_from.py:144 msgid "" "any2lrf [options] myfile\n" "\n" @@ -561,7 +564,7 @@ msgstr "" "any2lrf [optiones] miarchivo\n" " " -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/any/convert_from.py:158 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/any/convert_from.py:159 msgid "No file to convert specified." msgstr "No se ha especificado ningun fichero para convertir" @@ -622,40 +625,40 @@ msgstr "\tBaen archivo detectado. Volver a analizar..." msgid "Written preprocessed HTML to " msgstr "HTML preprocesado escrito en " -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:372 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:373 msgid "Processing %s" msgstr "Procesando %s" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:386 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:387 msgid "\tConverting to BBeB..." msgstr "\tConversión a BBeB..." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:529 -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:542 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:530 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:543 msgid "Could not parse file: %s" msgstr "No se pudo analizar el archivo: %s" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:534 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:535 msgid "%s is an empty file" msgstr "%s es un archivo vacío" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:554 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:555 msgid "Failed to parse link %s %s" msgstr "No se pudo analizar el enlace %s %s" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:598 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:599 msgid "Cannot add link %s to TOC" msgstr "No se puedo añadir el enlac %s al TOC" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:943 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:944 msgid "Unable to process image %s. Error: %s" msgstr "Incapaz de procesar imagen %s. Error: %s" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:981 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:982 msgid "Unable to process interlaced PNG %s" msgstr "Incapaz de procesar PNG entrelazado %s" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:996 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:997 msgid "" "Could not process image: %s\n" "%s" @@ -663,14 +666,14 @@ msgstr "" "No se puedo procesar imagen: %s\n" "%s" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1743 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1744 msgid "" "An error occurred while processing a table: %s. Ignoring table markup." msgstr "" "Ocurrió un error al procesar la tabla: %s. Se ignora la identificación de la " "tabla." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1745 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1746 msgid "" "Bad table:\n" "%s" @@ -678,11 +681,11 @@ msgstr "" "Tabla errónea:\n" "%s" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1767 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1768 msgid "Table has cell that is too large" msgstr "La tabla contiene una celda demasiado larga" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1797 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1798 msgid "" "You have to save the website %s as an html file first and then run html2lrf " "on it." @@ -690,19 +693,19 @@ msgstr "" "Primero debe guardar la página web %s como un archivo html y después " "ejecutar html2rtf sobre él." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1839 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1841 msgid "Could not read cover image: %s" msgstr "No se puedo leer la imagen de portada: %s" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1842 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1844 msgid "Cannot read from: %s" msgstr "No se puedo leer de: %s" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1976 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1978 msgid "Failed to process opf file" msgstr "Incapaz de procesar el archivo opf" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1982 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1984 msgid "" "Usage: %prog [options] mybook.html\n" "\n" @@ -1030,19 +1033,19 @@ msgstr "Uso: pdf-meta archivo.pdf" msgid "No filename specified." msgstr "Nombre de archivo sin especificar." -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:341 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:344 msgid "%prog [options] myebook.mobi" msgstr "%prog [opciones] miebook.mobi" -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:343 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:346 msgid "Output directory. Defaults to current directory." msgstr "Directorio de salida. Por defecto es el directorio actual" -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:362 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:365 msgid "Raw MOBI HTML saved in" msgstr "HTML MOBI en bruto guardado en" -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:364 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:367 msgid "OEB ebook created in" msgstr "Ebook OEB creado en" @@ -1088,47 +1091,47 @@ msgstr "Básico" msgid "Advanced" msgstr "Avanzada" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:102 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:104 msgid "<br>Must be a directory." msgstr "<br>Debe ser un directorio." -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:102 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:104 msgid "Invalid database location " msgstr "Ubicación no válida " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:102 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:105 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:104 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:107 msgid "Invalid database location" msgstr "Ubicación no válida" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:105 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:107 msgid "Invalid database location.<br>Cannot write to " msgstr "Ubicación no válida.<br>Imposible escribir en " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:117 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:119 msgid "Compacting database. This may take a while." msgstr "Compactando base de datos. Esto podría durar un rato" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:117 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:119 msgid "Compacting..." msgstr "Compactando..." -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:202 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:206 #: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:265 msgid "Configuration" msgstr "Configuración" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:203 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:207 msgid "&Location of books database (library1.db)" msgstr "&Ubicación de la base de datos (library1.db)" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:204 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:208 msgid "Browse for the new database location" msgstr "Navegar a la nueva ubicación de la base de datos" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:205 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:221 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:223 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:209 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:226 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:228 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:513 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:278 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:287 @@ -1147,23 +1150,27 @@ msgstr "Navegar a la nueva ubicación de la base de datos" msgid "..." msgstr "..." -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:206 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:210 msgid "Use &Roman numerals for series number" msgstr "Uso de numerales &romanos para números de serie" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:207 -msgid "Format for &single file save:" -msgstr "" +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:211 +msgid "Show notification when &new version is available" +msgstr "Mostrar aviso cuando una &nueva versión esté disponible" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:208 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:212 +msgid "Format for &single file save:" +msgstr "Formato al guardar un &único archivo:" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:213 msgid "&Priority for conversion jobs:" msgstr "&Prioridad para los trabajos de conversión:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:209 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:214 msgid "Default network &timeout:" msgstr "&timeout por defecto de la red:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:210 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:215 msgid "" "Set the default timeout for network fetches (i.e. anytime we go out to the " "internet to get information)" @@ -1171,59 +1178,59 @@ msgstr "" "Establecer el tiempo de espera maximo para peticiones de red (cuando " "conectamos a internet para adquirir alguna información)" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:211 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:216 msgid " seconds" msgstr " segundos" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:212 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:217 msgid "Toolbar" msgstr "Barra de herramientas" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:213 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:218 msgid "Large" msgstr "Grande" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:214 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:219 msgid "Medium" msgstr "Medio" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:215 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:220 msgid "Small" msgstr "Pequeño" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:216 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:221 msgid "&Button size in toolbar" msgstr "Tamaño de &botón en la barra de herramientas" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:217 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:222 msgid "Show &text in toolbar buttons" msgstr "Mostrar &texto en los botones de la barra de herramientas" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:218 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:223 msgid "Select visible &columns in library view" msgstr "Seleccione las &columnas visibles en la vista de biblioteca" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:219 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:224 msgid "Frequently used directories" msgstr "Directorios usados con frecuencia" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:220 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:225 msgid "Add a directory to the frequently used directories list" msgstr "Añadir directorio a la lista de directorios frecuentes" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:222 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:227 msgid "Remove a directory from the frequently used directories list" msgstr "Eliminar directorio a la lista de directorios frecuentes" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:224 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:229 msgid "Free unused diskspace from the database" msgstr "Espacio de disco disponible de la base de datos" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:225 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:230 msgid "&Compact database" msgstr "&Compactar base de datos" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:226 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:231 msgid "&Metadata from file name" msgstr "&Metadatos a partir del nombre de archivo" @@ -1359,7 +1366,7 @@ msgid "Convert %s to LRF" msgstr "Convertir %s a LRF" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:108 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:177 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:175 msgid "Set conversion defaults" msgstr "Fijar valores de conversión por defecto" @@ -2372,21 +2379,21 @@ msgid "Search (For Advanced Search click the button to the left)" msgstr "" "Búsqueda (Para Busqueda Avanzada, haga click en el boton de la izquierda)" -#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/config_ui.py:48 +#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/config_ui.py:47 msgid "Configure Viewer" msgstr "Configurar el visor" -#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/config_ui.py:49 +#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/config_ui.py:48 msgid "Use white background" msgstr "Utilizar fondo blanco" -#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/config_ui.py:50 +#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/config_ui.py:49 msgid "Hyphenate" msgstr "Partición de palabras" -#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/config_ui.py:51 -msgid "<b>Changes will only take affect after a restart." -msgstr "<b>Los cambios no se aplicaran hasta reiniciar." +#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/config_ui.py:50 +msgid "<b>Changes will only take effect after a restart.</b>" +msgstr "<b>Los cambios tendrán efecto una vez reinicie el sistema.</b>" #: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main.py:63 msgid " - LRF Viewer" @@ -2440,11 +2447,11 @@ msgstr "Abrir eBook" msgid "Configure" msgstr "Configurar" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:82 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:80 msgid "Error communicating with device" msgstr "Error en la comunicación con el dispositivo" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:95 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:93 msgid "" "<p>For help visit <a " "href=\"http://%s.kovidgoyal.net/user_manual\">%s.kovidgoyal.net</a><br>" @@ -2452,42 +2459,42 @@ msgstr "" "<p>Para mas ayuda, visite <a " "href=\"http://%s.kovidgoyal.net/user_manual\">%s.kovidgoyal.net</a><br>" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:96 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:94 msgid "<b>%s</b>: %s by <b>Kovid Goyal %%(version)s</b><br>%%(device)s</p>" msgstr "<b>%s</b>: %s by <b>Kovid Goyal %%(version)s</b><br>%%(device)s</p>" +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:112 #: /home/kovid/work/calibre/src/calibre/gui2/main.py:114 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:116 msgid "Send to main memory" msgstr "Enviar a la memoria interna" +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:113 #: /home/kovid/work/calibre/src/calibre/gui2/main.py:115 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:117 msgid "Send to storage card" -msgstr "Envia a la targeta de memoria" +msgstr "Enviar a la tarjeta de memoria" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:116 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:117 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:114 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:115 msgid "and delete from library" -msgstr "" +msgstr "y borrar de la biblioteca" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:119 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:117 msgid "Send to storage card by default" -msgstr "" +msgstr "enviar a la tarjeta de almacenamiento por defecto" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:131 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:129 msgid "Edit metadata individually" msgstr "Editar metadatos individualmente" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:132 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:130 msgid "Edit metadata in bulk" msgstr "Edita metadatos en bloque" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:135 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:133 msgid "Add books from a single directory" msgstr "añadir libros desde un único directorio" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:136 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:134 msgid "" "Add books recursively (One book per directory, assumes every ebook file is " "the same book in a different format)" @@ -2495,7 +2502,7 @@ msgstr "" "Añadir libros de manera recursiva (un libro por directorio, asumiendo que " "cada archivo del directorio es el mismo libro en diferente formato)" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:137 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:135 msgid "" "Add books recursively (Multiple books per directory, assumes every ebook " "file is a different book)" @@ -2503,53 +2510,53 @@ msgstr "" "Añadir libros de manera recursiva (Multiples libros por directorio, " "asumiendo que cada archivo es un libro diferente)" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:152 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:150 #: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:275 msgid "Save to disk" msgstr "Guardar en el disco" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:153 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:151 msgid "Save to disk in a single directory" msgstr "Guardar en el disco, en un único directorio" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:154 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:152 msgid "Save only %s format to disk" -msgstr "" +msgstr "Guardar solamente el formato %s en disco" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:157 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:155 #: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:281 msgid "View" msgstr "Mostrar" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:158 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:156 msgid "View specific format" msgstr "Ver formato específico" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:174 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:172 msgid "Convert individually" msgstr "Convertir individualmente" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:175 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:173 msgid "Bulk convert" msgstr "Convertir en bloque" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:309 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:307 msgid " detected." msgstr " detectado." -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:309 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:307 msgid "Device: " msgstr "Dispositivo: " -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:334 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:332 msgid "Connected " msgstr "Conectado " -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:346 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:344 msgid "Device database corrupted" msgstr "Base de datos del dispositivo corrupta" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:347 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:345 msgid "" "\n" " <p>The database of books on the reader is corrupted. Try the " @@ -2579,8 +2586,8 @@ msgstr "" " </ol>\n" " " -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:399 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:473 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:397 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:471 msgid "" "<p>Books with the same title as the following already exist in the database. " "Add them anyway?<ul>" @@ -2588,52 +2595,52 @@ msgstr "" "<p>Ya existen libros con el mismo título en la base de datos. ¿Añadirlo de " "todas formas?<ul>" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:402 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:476 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:400 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:474 msgid "Duplicates found!" msgstr "¡Duplicados encontrados!" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:435 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:448 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:433 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:446 msgid "Uploading books to device." msgstr "Enviando libros al dispositivo" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:507 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:505 msgid "No space on device" msgstr "No hay espacio en el dispositivo" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:508 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:506 msgid "" "<p>Cannot upload books to device there is no more free space available " msgstr "" "<p>No se pueden guardar los libros porque no hay espacio en el dispositivo " -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:546 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:544 msgid "Deleting books from device." msgstr "Eliminando libros del dispositivo" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:578 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:599 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:576 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:597 msgid "Cannot edit metadata" msgstr "No se pueden editar los metadatos" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:578 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:599 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:694 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:764 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:834 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:576 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:597 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:692 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:762 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:832 msgid "No books selected" msgstr "No hay libros seleccionados" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:674 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:672 msgid "Sending books to device." msgstr "Enviando libros al dispositivo" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:677 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:675 msgid "No suitable formats" msgstr "No hay formatos adecuados" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:678 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:676 msgid "" "Could not upload the following books to the device, as no suitable formats " "were found:<br><ul>%s</ul>" @@ -2641,78 +2648,80 @@ msgstr "" "No se pudieron enviar los siguientes libros al dispositivo, ya que no se " "hallaron formatos adecuados: <br><ul>%s</ul>" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:694 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:692 msgid "Cannot save to disk" msgstr "No se puede guardar en disco" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:705 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:703 msgid "" "<p>Could not save the following books to disk, because the %s format is not " "available for them:<ul>" msgstr "" +"<p>No se pudieron guardar los siguientes libros en disco, porque el formato " +"%s no está disponible para ellos:<ul>" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:709 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:707 msgid "Could not save some ebooks" -msgstr "" +msgstr "No se pudieron guardar algunos ebooks" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:742 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:740 msgid "Fetch news from " msgstr "Busca noticias de " -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:744 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:742 msgid "Fetching news from " msgstr "Buscando noticias de " -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:754 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:752 msgid "News fetched. Uploading to device." msgstr "Noticias adquiridas. Enviando al dispositivo." -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:764 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:834 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:762 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:832 msgid "Cannot convert" msgstr "No se puede convertir" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:773 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:771 msgid "Starting Bulk conversion of %d books" msgstr "Comenzando conversión en lote de %d libros" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:905 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:923 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:903 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:921 msgid "No book selected" msgstr "Seleccione un libro" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:905 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:923 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:937 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:903 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:921 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:935 msgid "Cannot view" msgstr "No se puede visualizar" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:911 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:942 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:909 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:940 msgid "Choose the format to view" msgstr "Elija el formato para visualizar" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:938 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:936 msgid "%s has no available formats." msgstr "%s no tiene formatos disponibles" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:976 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:974 msgid "Cannot configure" msgstr "No se puede configurar" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:976 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:974 msgid "Cannot configure while there are running jobs." msgstr "No se puede configurar con trabajos en proceso." -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:999 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:997 msgid "Copying database to " msgstr "Copiando base de datos a " -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1014 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1012 msgid "Invalid database" msgstr "Base de datos no valida" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1015 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1013 msgid "" "<p>An invalid database already exists at %s, delete it before trying to move " "the existing database.<br>Error: %s" @@ -2720,24 +2729,24 @@ msgstr "" "<p>Ya existe una base de datos no valida en %s, bórrela antes de intentar " "mover la base de datos existente. <br>Error: %s" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1023 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1021 msgid "Could not move database" msgstr "No se puede mover la base de datos" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1044 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1042 msgid "No detailed info available" msgstr "No hay información detallada disponible" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1045 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1043 msgid "No detailed information is available for books on the device." msgstr "" "No hay información detallada disponible para los libros en el dispositivo" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1087 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1085 msgid "Error talking to device" msgstr "Error de comunicación con el dispositivo" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1088 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1086 msgid "" "There was a temporary error talking to the device. Please unplug and " "reconnect the device and or reboot." @@ -2745,15 +2754,15 @@ msgstr "" "Hubo un error de comunicación con el dispositivo. Desconecte, vuelva a " "conectar el dispositivo y reinicie la aplicación." -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1139 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1137 msgid "Conversion Error" msgstr "Error de conversión" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1158 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1156 msgid "Database does not exist" msgstr "No existe la base de datos" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1158 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1156 msgid "" "The directory in which the database should be: %s no longer exists. Please " "choose a new database location." @@ -2761,7 +2770,7 @@ msgstr "" "El directorio en el que se debería encontrar la base de datos, %s ya no " "existe. Por favor seleccióne una nueva ruta para la base de datos." -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1209 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1207 msgid "" "<span style=\"color:red; font-weight:bold\">Latest version: <a " "href=\"%s\">%s</a></span>" @@ -2769,7 +2778,7 @@ msgstr "" "<span style=\"color:red; font-weight:bold\">Última versión: <a " "href=\"%s\">%s</a></span>" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1215 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1213 msgid "" "%s has been updated to version %s. See the <a " "href=\"http://calibre.kovidgoyal.net/wiki/Changelog\">new features</a>. " @@ -2779,7 +2788,7 @@ msgstr "" "href=\"http://calibre.kovidgoyal.net/wiki/Changelog\">nuevas " "características</a>. Visita la página de descarga?" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1215 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1213 msgid "Update available" msgstr "Actualización disponible" @@ -3104,6 +3113,11 @@ msgid "" "identified by id. You can get id by using the list command. If the format " "already exists, it is replaced.\n" msgstr "" +"%prog add_format [opciones] id ebook_file\n" +"\n" +"Añade el ebook ebook_file a los formatos disponibles por el libro lógico " +"identificado por iid. Puede obtener el id usando el comando list. Si el " +"formato ya existe, será reemplazado por el nuevo.\n" #: /home/kovid/work/calibre/src/calibre/library/cli.py:276 msgid "You must specify an id and an ebook file" @@ -3169,6 +3183,16 @@ msgid "" "can get a quick feel for the OPF format by using the --as-opf switch to the\n" "show_metadata command.\n" msgstr "" +"\n" +"%prog set_metadata [opciones] id /ruta/de/metadata.opf\n" +"\n" +"Establece los metadatos almacenados en la base de datos de calibre para el " +"libro\n" +"identificado por el número id, a partir de archivo OPF de metadatos " +"\"metadata.opf\".\n" +"Puede obtener información del formato OPF usando el modificador --as-opf en " +"el \n" +"comando show_metadata.\n" #: /home/kovid/work/calibre/src/calibre/library/cli.py:360 msgid "You must specify an id and a metadata file" @@ -3184,6 +3208,14 @@ msgid "" "(in \n" "an opf file). You can get id numbers from the list command. \n" msgstr "" +"%prog export [opciones] ids \n" +"\n" +"Exporta los libros indicado por ids (una lista separada por comas) al " +"sistema de archivos. \n" +"Esta operación de exportación guardará todos los formatos del libro, la " +"portada y los metadatos \n" +"(en un archivo opf). Puede obtener los numeros id a partir del comando list. " +"\n" #: /home/kovid/work/calibre/src/calibre/library/cli.py:380 msgid "Export all books in database, ignoring the list of ids." @@ -3220,8 +3252,15 @@ msgid "" " \n" "For help on an individual command: %%prog command --help\n" msgstr "" +"%%prog command [opciones] [argumentos]\n" +"\n" +"%%prog es la interfaz en linea de comandos a la base de datos de libros de " +"calibre\n" +"\n" +"command es uno de:\n" +"%s\n" -#: /home/kovid/work/calibre/src/calibre/parallel.py:317 +#: /home/kovid/work/calibre/src/calibre/parallel.py:321 msgid "Could not launch worker process." msgstr "No se ha podido abrir el proceso trabajador." @@ -3235,7 +3274,7 @@ msgstr "La URL debe tener el régimen de sftp" #: /home/kovid/work/calibre/src/calibre/utils/sftp.py:57 msgid "host must be of the form user@hostname" -msgstr "" +msgstr "el host debe ser de la forma usuario@nombre_host" #: /home/kovid/work/calibre/src/calibre/utils/sftp.py:68 msgid "Failed to negotiate SSH session: " @@ -3374,70 +3413,70 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/web/feeds/main.py:84 #: /home/kovid/work/calibre/src/calibre/web/feeds/main.py:88 -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:576 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:577 msgid "Fetching feeds..." msgstr "Buscando newsfeeds..." -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:33 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:34 msgid "Unknown News Source" msgstr "Fuente de noticias desconocida" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:474 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:475 msgid "Download finished" msgstr "Descarga finalizada" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:476 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:477 msgid "Failed to download the following articles:" msgstr "Error al descargar los siguientes artículos:" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:478 -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:484 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:479 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:485 msgid " from " msgstr " de " -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:482 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:483 msgid "Failed to download parts of the following articles:" msgstr "Error al descargar partes de los siguientes artículos" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:486 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:487 msgid "\tFailed links:" msgstr "\tEnlaces erroneos:" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:558 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:559 msgid "Could not fetch article. Run with --debug to see the reason" msgstr "" "No se pudo obtener el artículo. Ejecute con la opción --debug para encontrar " "la causa del fallo" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:580 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:581 msgid "Got feeds from index page" msgstr "Feeds obtenidos de página índice" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:584 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:585 msgid "Trying to download cover..." msgstr "Intentando descargar la portada" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:636 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:637 msgid "Starting download [%d thread(s)]..." msgstr "Iniciando la descarga [%d hilo(s)]" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:649 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:650 msgid "Feeds downloaded to %s" msgstr "Feeds descargados a %s" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:659 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:660 msgid "Could not download cover: %s" msgstr "No fué posible descargar la portada: %s" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:664 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:665 msgid "Downloading cover from %s" msgstr "Descargando portada desde %s" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:698 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:699 msgid "Untitled Article" msgstr "Artículo sin título" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:744 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:745 msgid "" "\n" "Downloaded article %s from %s\n" @@ -3447,19 +3486,19 @@ msgstr "" "Artículo %s descargado desde %s\n" "%s" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:750 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:751 msgid "Article downloaded: %s" msgstr "Artículo descargado: %s" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:756 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:757 msgid "Failed to download article: %s from %s\n" msgstr "No se ha podido descargar el artículo: %s de %s\n" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:761 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:762 msgid "Article download failed: %s" msgstr "Error en la descarga del artículo: %s" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:776 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:777 msgid "Fetching feed" msgstr "Buscando newsfeed" diff --git a/src/calibre/translations/fr.po b/src/calibre/translations/fr.po index fcb6abf377..10ad2888e1 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: 2008-06-30 23:41+0000\n" -"PO-Revision-Date: 2008-06-27 10:35+0000\n" -"Last-Translator: Pierre Slamich <pierre.slamich@gmail.com>\n" +"POT-Creation-Date: 2008-07-09 04:18+0000\n" +"PO-Revision-Date: 2008-07-18 17:42+0000\n" +"Last-Translator: Tetsuo <romain.piel@yahoo.fr>\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: 2008-07-09 03:20+0000\n" +"X-Launchpad-Export-Date: 2008-07-19 02:36+0000\n" "X-Generator: Launchpad (build Unknown)\n" "Generated-By: pygettext.py 1.5\n" @@ -65,6 +65,11 @@ msgstr "" #~ msgid "&Access Key;" #~ msgstr "&Access Key;" +#~ msgid "<b>Changes will only take affect after a restart." +#~ msgstr "" +#~ "<b>Les modifications ne seront prises en compte qu'après avoir relancé le " +#~ "programme." + #~ msgid "%s is not available in LRF format. Please convert it first." #~ msgstr "%s n'est pas disponible au format LRF. Veuillez le convertir avant." @@ -175,7 +180,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/__init__.py:133 msgid "%sUsage%s: %s\n" -msgstr "" +msgstr "%sUsage%s: %s\n" #: /home/kovid/work/calibre/src/calibre/__init__.py:170 msgid "Created by " @@ -184,18 +189,20 @@ msgstr "Créé par " #: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:112 #: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:146 #: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:174 +#, fuzzy msgid "Unable to detect the %s disk drive. Try rebooting." -msgstr "" +msgstr "Impossible de détecter le lecteur %s. Réessayer après redémarrage." #: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:355 msgid "The reader has no storage card connected." -msgstr "" +msgstr "Le lecteur n'a pas de carte de stockage connectée." + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:71 +#, fuzzy +msgid "Set the title. Default: filename." +msgstr "Indiquer le titre. Par défaut: filename." #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:73 -msgid "Set the title. Default: filename." -msgstr "Indiquer le titre. Par défaut : nom du fichier." - -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:75 msgid "" "Set the author(s). Multiple authors should be set as a comma separated list. " "Default: %default" @@ -203,7 +210,7 @@ msgstr "" "Définir le(s) auteur(s). Si plusieurs auteurs, les séparer d'une virgule. " "Par défaut : %default" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:76 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:74 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:174 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf.py:314 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf.py:429 @@ -215,34 +222,34 @@ msgstr "" msgid "Unknown" msgstr "Inconnu" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:78 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:76 msgid "Set the comment." msgstr "Définir le commentaire" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:80 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:78 msgid "Set the category" msgstr "Définir la catégorie" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:82 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:80 msgid "Sort key for the title" msgstr "Clé de tri pour le titre" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:84 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:82 msgid "Sort key for the author" msgstr "Clé de tri pour l'auteur" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:86 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:84 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:39 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search.py:16 #: /home/kovid/work/calibre/src/calibre/gui2/library.py:409 msgid "Publisher" -msgstr "Editeur" +msgstr "Éditeur" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:88 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:86 msgid "Path to file containing image to be used as cover" msgstr "Chemin du fichier contenant l'image à utiliser comme couverture" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:90 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:88 msgid "" "If there is a cover graphic detected in the source file, use that instead of " "the specified cover." @@ -250,11 +257,12 @@ msgstr "" "Si une couverture est déctectée dans le fichier source, utilise cette image " "plutôt que l'image spécifiée." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:93 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:91 +#, fuzzy msgid "Output file name. Default is derived from input filename" -msgstr "Nom du fichier résultat. Basé par défaut sur le fichier d'entrée" +msgstr "Nom du fichier sortie. Basé par défaut sur le fichier d'entrée" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:95 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:93 msgid "" "Render HTML tables as blocks of text instead of actual tables. This is " "neccessary if the HTML contains very large or complex tables." @@ -263,32 +271,36 @@ msgstr "" "véritables tables. Cela peut être nécessaire si le HTML contient des tables " "trop grosses ou complexes ." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:98 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:96 +#, fuzzy 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 "" +"Spécifier la taille de la police originelle en pts. Toutes les polices sont " +"redimensionnées en conséquence. Cette option enlève l'option --font-delta et " +"lui est prioritaire. Pour utiliser --font-delta, régler-le à 0. Par défault: " +"%defaultpt" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:100 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:98 msgid "Enable autorotation of images that are wider than the screen width." msgstr "" -"Permet l'autorotation des images qui sont plus larges que la largeur de " -"l'écran." +"Activer l'autorotation des images plus larges que la largeur de l'écran." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:103 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:101 msgid "Set the space between words in pts. Default is %default" msgstr "Définit les epsaces entre les mots en pts. Par défaut : %default" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:105 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:103 msgid "Separate paragraphs by blank lines." -msgstr "Sépare les paragraphe avec des lignes blanches." +msgstr "Séparer les paragraphes par des lignes vides." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:107 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:105 msgid "Add a header to all the pages with title and author." msgstr "Rajoute une en-tête à toutes les pages, avec le titre et l'auteur." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:109 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:107 msgid "" "Set the format of the header. %a is replaced by the author and %t by the " "title. Default is %default" @@ -296,47 +308,52 @@ msgstr "" "Définit le format de l'en-tête de page. %a est remplacé par l'auteur et %t " "par le titre. Par défaut : %default" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:111 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:109 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 "" -"Surcharge le CSS. Peut être soit un chemin vers une feuille de styles CC ou " -"une chaîne. Si c'est une chaîne, elle est interprétée comme du CSS." +"Ne pas tenir compte du CSS. Peut être soit un chemin vers une feuille de " +"style CSS ou une chaîne de caractères. Si c'est une chaîne, elle est " +"interprétée comme du CSS." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:113 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:111 msgid "" "Use the <spine> 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 "" "Utilise l'élément <spine> du fichier OPF pour déterminer l'odre dans lequel " -"les fichiers HTML sont ajoutés au LRF. Le fichier .opt doit être dans le " -"même répertoire que les fichiers HTML de base." +"les fichiers HTML sont ajoutés au LRF. Le fichier .opf doit être dans le " +"même répertoire que le fichier HTML de base." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:115 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:113 msgid "" "Minimum paragraph indent (the indent of the first line of a paragraph) in " "pts. Default: %default" msgstr "" +"Indentation minimum du paragraphe (l'indentation de la première ligne d'un " +"paragraphe) en pts. Par défault: %default" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:117 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:115 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 "" -"Augmente la taille de la police de 2 * FONT_DELTA points et l'espacement " -"entre lignes de FONT_DELTA points. FONT_DELTA peut-être un réel. Si " -"FONT_DELTA est négatif, la taille de la police est réduite." +"Augmente la taille de la police de 2 * FONT_DELTA pts et l'interligne de " +"FONT_DELTA points. FONT_DELTA peut-être un nombre décimal. Si FONT_DELTA est " +"négatif, la taille de la police est réduite." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:122 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:120 msgid "" "Render all content as black on white instead of the colors specified by the " "HTML or CSS." msgstr "" +"Rendre noir et blanc tous les contenus au lieu des couleurs spécifiées par " +"le HTML ou CSS." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:128 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:126 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 " @@ -346,35 +363,39 @@ msgstr "" "paramètres comme la résolution et la taille de l'écran du lecteur. Par " "défaut : %s Profils supportés : " -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:134 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:132 msgid "Left margin of page. Default is %default px." -msgstr "La marge de gauche. Par défaut : %default points." +msgstr "La marge de gauche. Par défaut : %default px" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:134 +msgid "Right margin of page. Default is %default px." +msgstr "La marge de droite. Par défaut : %default px." #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:136 -msgid "Right margin of page. Default is %default px." -msgstr "La marge de droite. Par défaut : %default points." - -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:138 msgid "Top margin of page. Default is %default px." msgstr "La marge de haut de page. Par défaut : %default points." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:140 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:138 msgid "Bottom margin of page. Default is %default px." msgstr "La marge de bas de page. Par défaut : %default points." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:142 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:140 msgid "" "Render tables in the HTML as images (useful if the document has large or " "complex tables)" msgstr "" +"Convertir les tables dans le HTML en images (utile si le document a des " +"tables grandes ou complexes)" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:144 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:142 msgid "" "Multiply the size of text in rendered tables by this factor. Default is " "%default" msgstr "" +"Multiplier la taille du texte des tables selectionnées par ce facteur. " +"Facteur par défault: %default" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:149 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:147 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 <a> tags are " @@ -384,21 +405,23 @@ msgstr "" "indique qu'aucun lien ne sera traité. Une valeur négative indique que les " "tags <a> sont ignorés." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:153 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:151 msgid "" "A regular expression. <a> tags whose href matches will be ignored. Defaults " "to %default" msgstr "" +"Une expression habituelle. Les étiquettes <a> ayant leur href qui correspond " +"seront ignorées. Par défault: %default" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:157 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:155 msgid "Don't add links to the table of contents." msgstr "Ne pas ajouter de liens à la table des matières." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:161 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:159 msgid "Prevent the automatic detection chapters." -msgstr "" +msgstr "Empêcher la détection automatique des chapitres." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:164 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:162 msgid "" "The regular expression used to detect chapter titles. It is searched for in " "heading tags (h1-h6). Defaults to %default" @@ -407,7 +430,7 @@ msgstr "" "expression rest recherchée dans les tags d'en-têtes (h1-h6). Par défaut : " "%default" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:167 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:165 msgid "" "Detect a chapter beginning at an element having the specified attribute. The " "format for this option is tagname regexp,attribute name,attribute value " @@ -415,7 +438,7 @@ msgid "" "class=\"chapter\" you would use \"h\\d,class,chapter\". Default is %default" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:169 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:167 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 " @@ -434,12 +457,12 @@ msgstr "" "page. De ce fait, cette option est ignorée si la page courante a peu " "d'éléments." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:179 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:177 msgid "" "Force a page break before tags whose names match this regular expression." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:181 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:179 msgid "" "Force a page break before an element having the specified attribute. The " "format for this option is tagname regexp,attribute name,attribute value " @@ -452,16 +475,16 @@ msgstr "" "de classe \"chapter\" il faudrait saisir : \"h\\d,class,chapter\". Par " "défaut : %default" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:184 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:182 msgid "Add detected chapters to the table of contents." msgstr "Ajouter les chapitres détectés à la table des matières." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:187 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:185 msgid "Preprocess Baen HTML files to improve generated LRF." msgstr "" "Préprocesse les fichiers HTML Bean pour améliorer le fichier LRF généré." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:189 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:187 msgid "" "You must add this option if processing files generated by pdftohtml, " "otherwise conversion will fail." @@ -469,12 +492,12 @@ msgstr "" "Vous devez utiliser cette option pour traiter des fichiers générés par " "pdftohtml, sinon la conversion échouera." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:191 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:189 msgid "Use this option on html0 files from Book Designer." msgstr "" "Utilisez cette option sur des fichiers html0 venant de Book Designer." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:194 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:192 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 " @@ -482,27 +505,27 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:202 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:200 msgid "The serif family of fonts to embed" msgstr "La famille de police serif à inclure" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:205 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:203 msgid "The sans-serif family of fonts to embed" msgstr "La famille de police sans-serif à inclure" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:208 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:206 msgid "The monospace family of fonts to embed" msgstr "La famille de police monospace à inclure" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:212 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:210 msgid "Be verbose while processing" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:214 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:212 msgid "Convert to LRS" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:216 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:214 msgid "" "Minimize memory usage at the cost of longer processing times. Use this " "option if you are on a memory constrained machine." @@ -511,7 +534,7 @@ msgstr "" "long. N'utilisez cette option que si vous avez des problèmes de mémoire " "disponible." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:218 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:216 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 " @@ -519,7 +542,7 @@ msgid "" "default is to try and guess the encoding." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/any/convert_from.py:143 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/any/convert_from.py:144 msgid "" "any2lrf [options] myfile\n" "\n" @@ -530,7 +553,7 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/any/convert_from.py:158 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/any/convert_from.py:159 msgid "No file to convert specified." msgstr "" @@ -553,7 +576,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/fb2/convert_from.py:24 #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/txt/convert_from.py:22 msgid "Print generated HTML to stdout and quit." -msgstr "" +msgstr "Imprimer l'HTML généré en stdout et quitter" #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/feeds/convert_from.py:22 msgid "Options to control the behavior of feeds2disk" @@ -564,98 +587,111 @@ msgid "Options to control the behavior of html2lrf" msgstr "Options pour contrôler le comportement de html2lrf" #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/feeds/convert_from.py:46 +#, fuzzy msgid "Fetching of recipe failed: " -msgstr "" +msgstr "Recherche des recettes échouées: " #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:315 +#, fuzzy msgid "\tBook Designer file detected." -msgstr "" +msgstr "\tFichier Créateur de Livre détecté" #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:317 msgid "\tParsing HTML..." -msgstr "" +msgstr "\tAnalyse de l'HTML..." #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:339 +#, fuzzy msgid "\tBaen file detected. Re-parsing..." -msgstr "" +msgstr "\tFichier Baen détecté. Ré-analyse..." #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:355 msgid "Written preprocessed HTML to " msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:372 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:373 msgid "Processing %s" -msgstr "" +msgstr "Traitement de %s" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:386 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:387 msgid "\tConverting to BBeB..." -msgstr "" +msgstr "\tConversion en BBeB..." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:529 -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:542 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:530 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:543 msgid "Could not parse file: %s" -msgstr "" +msgstr "Ne peut analyser le fichier: %s" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:534 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:535 msgid "%s is an empty file" msgstr "%s est un fichier vide" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:554 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:555 msgid "Failed to parse link %s %s" -msgstr "" +msgstr "Érreur d'analyse du lien %s %s" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:598 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:599 msgid "Cannot add link %s to TOC" -msgstr "" +msgstr "Ne peut ajouter le lien %s au TOC" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:943 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:944 msgid "Unable to process image %s. Error: %s" -msgstr "" +msgstr "Incapable de traiter l'image %s. Erreur: %s" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:981 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:982 +#, fuzzy msgid "Unable to process interlaced PNG %s" -msgstr "" +msgstr "Incapable de traiter les PNG entrelacés %s" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:996 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:997 msgid "" "Could not process image: %s\n" "%s" msgstr "" +"Ne peut traiter l'image: %s\n" +"%s" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1743 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1744 +#, fuzzy msgid "" "An error occurred while processing a table: %s. Ignoring table markup." msgstr "" +"Une erreur a surgit lors d'un traitement de table: %s. Ignore la table " +"majorée" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1745 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1746 msgid "" "Bad table:\n" "%s" msgstr "" +"Mauvaise table:\n" +"%s" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1767 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1768 msgid "Table has cell that is too large" -msgstr "" +msgstr "La table a une cellule trop grande" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1797 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1798 msgid "" "You have to save the website %s as an html file first and then run html2lrf " "on it." msgstr "" +"Vous devez tout d'abord sauvegarder le site web %s en fichier html, puis le " +"lancer avec html2lrf." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1839 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1841 msgid "Could not read cover image: %s" -msgstr "" +msgstr "Ne peut lire l'image de couverture: %s" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1842 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1844 msgid "Cannot read from: %s" -msgstr "" +msgstr "Ne peut lire depuis: %s" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1976 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1978 msgid "Failed to process opf file" -msgstr "" +msgstr "Tentative de traitement du fichier opf échouée" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1982 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1984 msgid "" "Usage: %prog [options] mybook.html\n" "\n" @@ -665,6 +701,13 @@ msgid "" "to local files recursively. Thus, you can use it to \n" "convert a whole tree of HTML files." msgstr "" +"Usage: %prog [options] mybook.html\n" +"\n" +"\n" +"%prog convertit mybook.html en mybook.lrf. \n" +"%prog suit tous les liens de mybook.html en pointant récursivement sur tous " +"les fichiers locaux. Ainsi, vous pouvez l'utiliser pour \n" +"convertir toute une arborescence de fichiers HTML." #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/lit/convert_from.py:21 msgid "" @@ -673,28 +716,34 @@ msgid "" "\n" "%prog converts mybook.lit to mybook.lrf" msgstr "" +"Usage: %prog [options] mybook.lit\n" +"\n" +"\n" +"%prog convertit mybook.lit ten mybook.lrf" #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/lrfparser.py:132 msgid "" "%prog book.lrf\n" "Convert an LRF file into an LRS (XML UTF-8 encoded) file" msgstr "" +"%prog book.lrf\n" +"Convertit un fichier LRF en un fichier LRS (encodage XML UTF-8)" #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/lrfparser.py:133 msgid "Output LRS file" -msgstr "" +msgstr "Fichier sortie LRS" #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/lrfparser.py:151 msgid "Parsing LRF..." -msgstr "" +msgstr "Analyse du LRF..." #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/lrfparser.py:154 msgid "Creating XML..." -msgstr "" +msgstr "Création du XML..." #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/lrfparser.py:156 msgid "LRS written to " -msgstr "" +msgstr "LRS écrit à " #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/lrs/convert_from.py:243 msgid "Could not read from thumbnail file:" @@ -705,25 +754,30 @@ msgid "" "%prog [options] file.lrs\n" "Compile an LRS file into an LRF file." msgstr "" +"%prog [options] file.lrs\n" +"Compile un fichier LRS en un fichier LRF." #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/lrs/convert_from.py:264 msgid "Path to output file" -msgstr "" +msgstr "Chemin vers le fichier sortie" #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/lrs/convert_from.py:266 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/isbndb.py:113 +#, fuzzy msgid "Verbose processing" -msgstr "" +msgstr "Traitement en cours" #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/lrs/convert_from.py:268 msgid "Convert LRS to LRS, useful for debugging." -msgstr "" +msgstr "Convertir LRS en LRS, utile pour déboguer." #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:455 +#, fuzzy msgid "Invalid LRF file. Could not set metadata." -msgstr "" +msgstr "Fichier LRF invalide. Ne peut régler la métadonnée." #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:580 +#, fuzzy msgid "" "%prog [options] mybook.lrf\n" "\n" @@ -731,6 +785,11 @@ msgid "" "Show/edit the metadata in an LRF file.\n" "\n" msgstr "" +"%prog [options] mybook.lrf\n" +"\n" +"\n" +"Montrer/Éditer la métadonnée en un fichier LRF.\n" +"\n" #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:587 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:21 @@ -775,6 +834,9 @@ 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 "" +"Extraire une couverture depuis un fichier LRF. Noter que le fichier LRF n'a " +"pas de couverture définie, donc nous utilisons quelques heuristiques pour " +"deviner la couverture." #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:609 msgid "Set book ID" @@ -791,6 +853,10 @@ msgid "" "\n" "%prog converts mybook.mobi to mybook.lrf" msgstr "" +"Usage: %prog [options] mybook.mobi|prc\n" +"\n" +"\n" +"%prog convertit mybook.mobi en mybook.lrf" #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/pdf/convert_from.py:42 msgid "Could not find pdftohtml, check it is in your PATH" @@ -931,19 +997,19 @@ msgstr "" msgid "No filename specified." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:341 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:344 msgid "%prog [options] myebook.mobi" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:343 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:346 msgid "Output directory. Defaults to current directory." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:362 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:365 msgid "Raw MOBI HTML saved in" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:364 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:367 msgid "OEB ebook created in" msgstr "" @@ -989,47 +1055,47 @@ msgstr "" msgid "Advanced" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:102 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:104 msgid "<br>Must be a directory." msgstr "<br>Doit être un répertoire." -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:102 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:104 msgid "Invalid database location " msgstr "Chemin de la database invalide " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:102 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:105 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:104 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:107 msgid "Invalid database location" msgstr "Chemin de la database invalide" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:105 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:107 msgid "Invalid database location.<br>Cannot write to " msgstr "Chemin de la database invalide.<br>Erreur en écriture " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:117 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:119 msgid "Compacting database. This may take a while." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:117 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:119 msgid "Compacting..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:202 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:206 #: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:265 msgid "Configuration" msgstr "Configuration" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:203 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:207 msgid "&Location of books database (library1.db)" msgstr "&Emplacement de la base de données (library1.db)" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:204 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:208 msgid "Browse for the new database location" msgstr "Choisir un nouvel emplacement pour la base de données" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:205 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:221 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:223 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:209 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:226 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:228 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:513 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:278 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:287 @@ -1048,82 +1114,86 @@ msgstr "Choisir un nouvel emplacement pour la base de données" msgid "..." msgstr "..." -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:206 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:210 msgid "Use &Roman numerals for series number" msgstr "Utilisation de chiffres romains pour les numéro de séries" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:207 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:211 +msgid "Show notification when &new version is available" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:212 msgid "Format for &single file save:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:208 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:213 msgid "&Priority for conversion jobs:" msgstr "&Priorité pour les travaux de conversion :" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:209 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:214 msgid "Default network &timeout:" msgstr "&Timeout par défaut pour les connexions réseau :" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:210 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:215 msgid "" "Set the default timeout for network fetches (i.e. anytime we go out to the " "internet to get information)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:211 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:216 msgid " seconds" msgstr " secondes" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:212 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:217 msgid "Toolbar" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:213 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:218 msgid "Large" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:214 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:219 msgid "Medium" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:215 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:220 msgid "Small" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:216 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:221 msgid "&Button size in toolbar" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:217 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:222 msgid "Show &text in toolbar buttons" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:218 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:223 msgid "Select visible &columns in library view" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:219 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:224 msgid "Frequently used directories" msgstr "Répertoires utilisés fréquemment" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:220 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:225 msgid "Add a directory to the frequently used directories list" msgstr "Ajouter un répetoire à la liste des répertoires utilisés fréquemment" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:222 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:227 msgid "Remove a directory from the frequently used directories list" msgstr "" "Supprime un répetoire de la liste des répertoires utilisés fréquemment" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:224 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:229 msgid "Free unused diskspace from the database" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:225 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:230 msgid "&Compact database" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:226 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:231 msgid "&Metadata from file name" msgstr "" @@ -1262,7 +1332,7 @@ msgid "Convert %s to LRF" msgstr "Conversion de %s en LRF" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:108 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:177 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:175 msgid "Set conversion defaults" msgstr "Définir les paramètres par défaut de conversion" @@ -2237,23 +2307,21 @@ msgstr "Horodatage" msgid "Search (For Advanced Search click the button to the left)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/config_ui.py:48 +#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/config_ui.py:47 msgid "Configure Viewer" msgstr "Configuration du visualisateur" -#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/config_ui.py:49 +#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/config_ui.py:48 msgid "Use white background" msgstr "Utilise un arrière-plan blanc" -#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/config_ui.py:50 +#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/config_ui.py:49 msgid "Hyphenate" msgstr "Hyphenation" -#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/config_ui.py:51 -msgid "<b>Changes will only take affect after a restart." +#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/config_ui.py:50 +msgid "<b>Changes will only take effect after a restart.</b>" msgstr "" -"<b>Les modifications ne seront prises en compte qu'après avoir relancé le " -"programme." #: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main.py:63 msgid " - LRF Viewer" @@ -2307,110 +2375,110 @@ msgstr "Ouvrir le livre" msgid "Configure" msgstr "Configuration" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:82 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:80 msgid "Error communicating with device" msgstr "Erreur pendant la communication avec le lecteur électronique" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:95 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:93 msgid "" "<p>For help visit <a " "href=\"http://%s.kovidgoyal.net/user_manual\">%s.kovidgoyal.net</a><br>" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:96 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:94 msgid "<b>%s</b>: %s by <b>Kovid Goyal %%(version)s</b><br>%%(device)s</p>" msgstr "" +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:112 #: /home/kovid/work/calibre/src/calibre/gui2/main.py:114 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:116 msgid "Send to main memory" msgstr "Envoi vers la mémoire du lecteur" +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:113 #: /home/kovid/work/calibre/src/calibre/gui2/main.py:115 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:117 msgid "Send to storage card" msgstr "Envoi vers la carte mémoire" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:116 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:117 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:114 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:115 msgid "and delete from library" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:119 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:117 msgid "Send to storage card by default" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:131 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:129 msgid "Edit metadata individually" msgstr "Edition des metadata individuellement" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:132 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:130 msgid "Edit metadata in bulk" msgstr "Edition des metadata par lot" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:135 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:133 msgid "Add books from a single directory" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:136 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:134 msgid "" "Add books recursively (One book per directory, assumes every ebook file is " "the same book in a different format)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:137 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:135 msgid "" "Add books recursively (Multiple books per directory, assumes every ebook " "file is a different book)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:152 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:150 #: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:275 msgid "Save to disk" msgstr "Enregistrer sur le disque" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:153 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:151 msgid "Save to disk in a single directory" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:154 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:152 msgid "Save only %s format to disk" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:157 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:155 #: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:281 msgid "View" msgstr "Visualiser" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:158 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:156 msgid "View specific format" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:174 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:172 msgid "Convert individually" msgstr "Convertion individuelle" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:175 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:173 msgid "Bulk convert" msgstr "Convertion par lot" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:309 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:307 msgid " detected." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:309 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:307 msgid "Device: " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:334 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:332 msgid "Connected " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:346 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:344 msgid "Device database corrupted" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:347 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:345 msgid "" "\n" " <p>The database of books on the reader is corrupted. Try the " @@ -2426,8 +2494,8 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:399 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:473 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:397 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:471 msgid "" "<p>Books with the same title as the following already exist in the database. " "Add them anyway?<ul>" @@ -2435,130 +2503,130 @@ msgstr "" "<p>Des livres ayant le même titre existent déjà dans la base de données. Les " "ajouter quand même ?<ul>" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:402 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:476 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:400 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:474 msgid "Duplicates found!" msgstr "Des doublons ont été détectés !" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:435 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:448 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:433 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:446 msgid "Uploading books to device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:507 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:505 msgid "No space on device" msgstr "Le lecteur électronique n'a plus d'espace mémoire disponible" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:508 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:506 msgid "" "<p>Cannot upload books to device there is no more free space available " msgstr "" "<p>Impossible d'envoyer les livres sur le lecteur : il n'y a plus assez " "d'espace mémoire disponible " -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:546 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:544 msgid "Deleting books from device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:578 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:599 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:576 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:597 msgid "Cannot edit metadata" msgstr "Erreur à l'édition des metadat" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:578 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:599 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:694 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:764 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:834 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:576 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:597 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:692 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:762 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:832 msgid "No books selected" msgstr "Aucun livre sélectionné" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:674 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:672 msgid "Sending books to device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:677 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:675 msgid "No suitable formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:678 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:676 msgid "" "Could not upload the following books to the device, as no suitable formats " "were found:<br><ul>%s</ul>" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:694 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:692 msgid "Cannot save to disk" msgstr "Ne peut pas enregistrer sur le disque" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:705 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:703 msgid "" "<p>Could not save the following books to disk, because the %s format is not " "available for them:<ul>" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:709 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:707 msgid "Could not save some ebooks" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:742 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:740 msgid "Fetch news from " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:744 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:742 msgid "Fetching news from " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:754 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:752 msgid "News fetched. Uploading to device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:764 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:834 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:762 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:832 msgid "Cannot convert" msgstr "Conversion impossible" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:773 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:771 msgid "Starting Bulk conversion of %d books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:905 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:923 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:903 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:921 msgid "No book selected" msgstr "Aucun livre sélectionné" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:905 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:923 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:937 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:903 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:921 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:935 msgid "Cannot view" msgstr "Impossible de visualiser" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:911 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:942 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:909 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:940 msgid "Choose the format to view" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:938 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:936 msgid "%s has no available formats." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:976 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:974 msgid "Cannot configure" msgstr "Configuration impossible" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:976 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:974 msgid "Cannot configure while there are running jobs." msgstr "Impossible de configurer pendant que des travaux sont en cours." -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:999 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:997 msgid "Copying database to " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1014 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1012 msgid "Invalid database" msgstr "Base de données invalide" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1015 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1013 msgid "" "<p>An invalid database already exists at %s, delete it before trying to move " "the existing database.<br>Error: %s" @@ -2566,23 +2634,23 @@ msgstr "" "<p>Une base de données invalide existe déjà ici : %s, spprimez la avant " "d'essayer de déplacer la base de données existante.<br>Erreur : %s" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1023 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1021 msgid "Could not move database" msgstr "Déplacement de la base de données impossible" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1044 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1042 msgid "No detailed info available" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1045 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1043 msgid "No detailed information is available for books on the device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1087 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1085 msgid "Error talking to device" msgstr "Erreur pendant la communication avec le lecteur électronique" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1088 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1086 msgid "" "There was a temporary error talking to the device. Please unplug and " "reconnect the device and or reboot." @@ -2591,34 +2659,34 @@ msgstr "" "lecteur électronique. Veuillez déconnecter et reconnecter le lecteur " "électronique et redémarrer." -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1139 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1137 msgid "Conversion Error" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1158 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1156 msgid "Database does not exist" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1158 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1156 msgid "" "The directory in which the database should be: %s no longer exists. Please " "choose a new database location." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1209 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1207 msgid "" "<span style=\"color:red; font-weight:bold\">Latest version: <a " "href=\"%s\">%s</a></span>" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1215 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1213 msgid "" "%s has been updated to version %s. See the <a " "href=\"http://calibre.kovidgoyal.net/wiki/Changelog\">new features</a>. " "Visit the download page?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1215 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1213 msgid "Update available" msgstr "" @@ -3001,7 +3069,7 @@ msgid "" "For help on an individual command: %%prog command --help\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/parallel.py:317 +#: /home/kovid/work/calibre/src/calibre/parallel.py:321 msgid "Could not launch worker process." msgstr "" @@ -3116,87 +3184,87 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/web/feeds/main.py:84 #: /home/kovid/work/calibre/src/calibre/web/feeds/main.py:88 -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:576 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:577 msgid "Fetching feeds..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:33 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:34 msgid "Unknown News Source" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:474 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:475 msgid "Download finished" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:476 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:477 msgid "Failed to download the following articles:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:478 -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:484 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:479 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:485 msgid " from " msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:482 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:483 msgid "Failed to download parts of the following articles:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:486 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:487 msgid "\tFailed links:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:558 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:559 msgid "Could not fetch article. Run with --debug to see the reason" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:580 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:581 msgid "Got feeds from index page" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:584 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:585 msgid "Trying to download cover..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:636 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:637 msgid "Starting download [%d thread(s)]..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:649 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:650 msgid "Feeds downloaded to %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:659 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:660 msgid "Could not download cover: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:664 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:665 msgid "Downloading cover from %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:698 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:699 msgid "Untitled Article" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:744 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:745 msgid "" "\n" "Downloaded article %s from %s\n" "%s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:750 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:751 msgid "Article downloaded: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:756 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:757 msgid "Failed to download article: %s from %s\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:761 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:762 msgid "Article download failed: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:776 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:777 msgid "Fetching feed" msgstr "" diff --git a/src/calibre/translations/it.po b/src/calibre/translations/it.po index e388ae03ab..d29925e5a2 100644 --- a/src/calibre/translations/it.po +++ b/src/calibre/translations/it.po @@ -8,14 +8,14 @@ msgid "" msgstr "" "Project-Id-Version: it\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2008-06-30 23:41+0000\n" -"PO-Revision-Date: 2008-07-02 16:21+0000\n" +"POT-Creation-Date: 2008-07-09 04:18+0000\n" +"PO-Revision-Date: 2008-07-09 07:42+0000\n" "Last-Translator: Iacopo Benesperi <Unknown>\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: 2008-07-09 03:20+0000\n" +"X-Launchpad-Export-Date: 2008-07-19 02:36+0000\n" "X-Generator: Launchpad (build Unknown)\n" "Generated-By: pygettext.py 1.5\n" @@ -72,6 +72,9 @@ msgstr "" #~ msgid "Cannot kill waiting jobs." #~ msgstr "Impossibile terminare i lavori in attesa" +#~ msgid "<b>Changes will only take affect after a restart." +#~ msgstr "<b>Le modifiche avranno effetto dopo il riavvio" + #~ msgid "Job killed by user" #~ msgstr "Lavoro terminato dall'utente" @@ -123,11 +126,11 @@ msgstr "Impossibile individuare il disco %s. Provare a riavviare." msgid "The reader has no storage card connected." msgstr "Il lettore non ha una scheda di memoria connessa." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:73 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:71 msgid "Set the title. Default: filename." msgstr "Imposta il titolo. Predefinito: nome del file" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:75 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:73 msgid "" "Set the author(s). Multiple authors should be set as a comma separated list. " "Default: %default" @@ -135,7 +138,7 @@ msgstr "" "Imposta l'autore. Autori multipli devono essere separati da una virgola. " "Predefinito: %default" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:76 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:74 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:174 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf.py:314 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf.py:429 @@ -147,34 +150,34 @@ msgstr "" msgid "Unknown" msgstr "Sconosciuto" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:78 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:76 msgid "Set the comment." msgstr "Imposta il commento" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:80 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:78 msgid "Set the category" msgstr "Imposta la categoria" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:82 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:80 msgid "Sort key for the title" msgstr "Chiave per la classificazione del titolo" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:84 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:82 msgid "Sort key for the author" msgstr "Chiave per la classificazione dell'autore" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:86 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:84 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:39 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search.py:16 #: /home/kovid/work/calibre/src/calibre/gui2/library.py:409 msgid "Publisher" msgstr "Editore" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:88 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:86 msgid "Path to file containing image to be used as cover" msgstr "Percorso al file contenente l'immagine da usare come copertina" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:90 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:88 msgid "" "If there is a cover graphic detected in the source file, use that instead of " "the specified cover." @@ -182,12 +185,12 @@ msgstr "" "Se esiste una copertina grafica individuata nel file di origine, usa quella " "invece della copertina specificata" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:93 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:91 msgid "Output file name. Default is derived from input filename" msgstr "" "Nome del file in uscita. Il nome predefinito è preso dal file in ingresso" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:95 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:93 msgid "" "Render HTML tables as blocks of text instead of actual tables. This is " "neccessary if the HTML contains very large or complex tables." @@ -196,7 +199,7 @@ msgstr "" "Questa opzione è necessaria se il file HTML contiene tabelle molto grandi o " "complesse" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:98 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:96 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 " @@ -206,27 +209,27 @@ msgstr "" "scalati in accordo. Questa opzione rende obsoleta l'opzione --font-delta e " "ha precedenza su quest'ultima. Per usare --font-delta, impostare questa a 0" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:100 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:98 msgid "Enable autorotation of images that are wider than the screen width." msgstr "" "Abilita la rotazione automatica delle immagini che sono più larghe dello " "schermo" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:103 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:101 msgid "Set the space between words in pts. Default is %default" msgstr "" "Imposta lo spazio tra le parole in punti. Il valore predefinito è %default" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:105 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:103 msgid "Separate paragraphs by blank lines." msgstr "Separa i paragrafi con linee bianche" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:107 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:105 msgid "Add a header to all the pages with title and author." msgstr "" "Aggiunge a tutte le pagine un'intestazione contenente il titolo e l'autore" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:109 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:107 msgid "" "Set the format of the header. %a is replaced by the author and %t by the " "title. Default is %default" @@ -234,7 +237,7 @@ msgstr "" "Imposta il formato dell'intestazione. %a verrà rimpiazzato dall'autore e %t " "dal titolo. L'impostazione predefinita è %default" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:111 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:109 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." @@ -242,7 +245,7 @@ msgstr "" "Sovrascrive il CSS. Può essere un percorso ad un foglio di stile CSS o una " "stringa. Se è una stringa, sarà interpretata come CSS" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:113 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:111 msgid "" "Use the <spine> 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 " @@ -252,7 +255,7 @@ msgstr "" "HTML devono essere aggiunti al file LRF. Il file OPF deve essere nella " "stessa cartella del file HTML principale" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:115 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:113 msgid "" "Minimum paragraph indent (the indent of the first line of a paragraph) in " "pts. Default: %default" @@ -260,7 +263,7 @@ msgstr "" "Indentazione minima paragrafo (l'indentazione della prima riga di un " "paragrafo) in pt. Predefinita: %default" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:117 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:115 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 " @@ -270,7 +273,7 @@ msgstr "" "tra le linee di FONT_DELTA punti. FONT_DELTA può essere una frazione. Se " "FONT_DELTA è negativo, la grandezza dei caratteri verrà diminuita" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:122 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:120 msgid "" "Render all content as black on white instead of the colors specified by the " "HTML or CSS." @@ -278,7 +281,7 @@ msgstr "" "Trasforma tutto il contenuto in bianco e nero al posto dei colori " "specificati dall'HTML o dal CSS." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:128 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:126 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 " @@ -288,23 +291,23 @@ msgstr "" "determina parametri come la risoluzione e la dimensione dello schermo del " "dispositivo. Predefinito: %s. Profili supportati: " -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:134 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:132 msgid "Left margin of page. Default is %default px." msgstr "Margine sinistro della pagina. Predefinito: %default px" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:136 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:134 msgid "Right margin of page. Default is %default px." msgstr "Margine destro della pagina. Predefinito: %default px" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:138 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:136 msgid "Top margin of page. Default is %default px." msgstr "Margine superiore della pagina. Predefinito: %default px" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:140 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:138 msgid "Bottom margin of page. Default is %default px." msgstr "Margine inferiore della pagina. Predefinito: %default px" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:142 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:140 msgid "" "Render tables in the HTML as images (useful if the document has large or " "complex tables)" @@ -312,7 +315,7 @@ msgstr "" "Trasforma in immagini le tabelle di HTML (utile se il documento ha tabelle " "grandi o complesse)" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:144 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:142 msgid "" "Multiply the size of text in rendered tables by this factor. Default is " "%default" @@ -320,7 +323,7 @@ msgstr "" "Moltiplica la dimensione del testo nelle tabelle trasformate di questo " "fattore. Predefinito: %default" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:149 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:147 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 <a> tags are " @@ -330,7 +333,7 @@ msgstr "" "0 significa che i link non vengono seguiti. Un valore negativo significa che " "i tag <a> vengono ignorati" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:153 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:151 msgid "" "A regular expression. <a> tags whose href matches will be ignored. Defaults " "to %default" @@ -338,15 +341,15 @@ msgstr "" "Un'espressione regolare. I tag <a> i cui href corrispondono verranno " "ignorati. Predefinita: %default" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:157 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:155 msgid "Don't add links to the table of contents." msgstr "Non aggiungere link al sommario." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:161 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:159 msgid "Prevent the automatic detection chapters." msgstr "Previene l'individuazione automatica dei capitoli." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:164 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:162 msgid "" "The regular expression used to detect chapter titles. It is searched for in " "heading tags (h1-h6). Defaults to %default" @@ -354,7 +357,7 @@ msgstr "" "L'espressione regolare utilizzata per individuare i titoli dei capitoli. I " "titoli vengono cercati nei tag d'intestazione (H1-H6). Predefinita: %default" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:167 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:165 msgid "" "Detect a chapter beginning at an element having the specified attribute. The " "format for this option is tagname regexp,attribute name,attribute value " @@ -367,7 +370,7 @@ msgstr "" "hanno l'attributo class=\"capitolo\", bisogna usare \"h\\d,class,capitolo\". " "Predefinito: %default" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:169 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:167 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 " @@ -386,14 +389,14 @@ msgstr "" "degradano le prestazioni dell'LRF nel girare la pagina. Questa opzione viene " "perciò ignorata se la pagina corrente ha solo pochi elementi" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:179 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:177 msgid "" "Force a page break before tags whose names match this regular expression." msgstr "" "Forza un'interruzione di pagina prima dei tag i cui nomi corrispondono a " "questa espressione regolare" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:181 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:179 msgid "" "Force a page break before an element having the specified attribute. The " "format for this option is tagname regexp,attribute name,attribute value " @@ -406,15 +409,15 @@ msgstr "" "tutti i tag intestazione che hanno l'attributo class=\"chapter\" bisogna " "usare \"h\\d,class,chapter\". Predefinita: %default" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:184 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:182 msgid "Add detected chapters to the table of contents." msgstr "Aggiungi i capitoli individuati al sommario." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:187 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:185 msgid "Preprocess Baen HTML files to improve generated LRF." msgstr "Preprocessa i file HTML di Baen per migliorare i file LRF generati" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:189 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:187 msgid "" "You must add this option if processing files generated by pdftohtml, " "otherwise conversion will fail." @@ -422,11 +425,11 @@ msgstr "" "È necessario aggiungere questa opzione se si stanno processando file " "generati da pdftohtml, altrimenti la conversione non riuscirà" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:191 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:189 msgid "Use this option on html0 files from Book Designer." msgstr "Usare questa opzione sui file html0 di Book Designer" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:194 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:192 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 " @@ -439,27 +442,27 @@ msgstr "" "nel girare le pagine. Ad esempio: --serif-family \"Times New Roman\"\n" " " -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:202 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:200 msgid "The serif family of fonts to embed" msgstr "La famiglia di caratteri con grazie da includere" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:205 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:203 msgid "The sans-serif family of fonts to embed" msgstr "La famiglia di caratteri senza grazie da includere" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:208 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:206 msgid "The monospace family of fonts to embed" msgstr "La famiglia di caratteri a spaziatura fissa da includere" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:212 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:210 msgid "Be verbose while processing" msgstr "Prolisso durante il processamento" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:214 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:212 msgid "Convert to LRS" msgstr "Converte in LRS" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:216 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:214 msgid "" "Minimize memory usage at the cost of longer processing times. Use this " "option if you are on a memory constrained machine." @@ -467,7 +470,7 @@ msgstr "" "Minimizza l'uso di memoria al costo di un maggior tempo di processamento. " "Usare questa opzione se si è su una macchina a corto di memoria" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:218 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:216 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 " @@ -479,7 +482,7 @@ msgstr "" "comune per i computer Windows è cp-1252. Un'altra scelta comune è utf-8. " "L'opzione predefinita è quella di provare ad indovinare la codifica" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/any/convert_from.py:143 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/any/convert_from.py:144 msgid "" "any2lrf [options] myfile\n" "\n" @@ -496,7 +499,7 @@ msgstr "" "archivio RAR o ZIP, cercando i libri dentro l'archivio.\n" " " -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/any/convert_from.py:158 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/any/convert_from.py:159 msgid "No file to convert specified." msgstr "Nessun file da convertire specificato" @@ -557,40 +560,40 @@ msgstr "\tFile di Baen individuato. Rianalizzo..." msgid "Written preprocessed HTML to " msgstr "HTML preprocessato scritto in " -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:372 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:373 msgid "Processing %s" msgstr "Sto processando %s" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:386 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:387 msgid "\tConverting to BBeB..." msgstr "\tConversione in BBeB..." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:529 -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:542 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:530 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:543 msgid "Could not parse file: %s" msgstr "Impossibile analizzare il file: %s" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:534 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:535 msgid "%s is an empty file" msgstr "%S è un file vuoto" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:554 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:555 msgid "Failed to parse link %s %s" msgstr "Analisi fallita del link %s %s" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:598 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:599 msgid "Cannot add link %s to TOC" msgstr "Impossibile aggiungere il link %s alla TOC" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:943 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:944 msgid "Unable to process image %s. Error: %s" msgstr "Impossibile processare l'immagine %s. Errore: %s" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:981 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:982 msgid "Unable to process interlaced PNG %s" msgstr "Impossibile processare la PNG interlacciata %s" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:996 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:997 msgid "" "Could not process image: %s\n" "%s" @@ -598,14 +601,14 @@ msgstr "" "Impossibile processare l'immagine: %s\n" "%s" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1743 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1744 msgid "" "An error occurred while processing a table: %s. Ignoring table markup." msgstr "" "Si è verificato un errore nel processamento della tabella: %s. Ignoro il " "codice della tabella" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1745 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1746 msgid "" "Bad table:\n" "%s" @@ -613,11 +616,11 @@ msgstr "" "Tabella malformata:\n" "%s" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1767 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1768 msgid "Table has cell that is too large" msgstr "La tabella ha celle troppo larghe" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1797 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1798 msgid "" "You have to save the website %s as an html file first and then run html2lrf " "on it." @@ -625,19 +628,19 @@ msgstr "" "È necessario prima salvare il sito web %s come un file HTML e poi eseguire " "html2lrf su di esso" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1839 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1841 msgid "Could not read cover image: %s" msgstr "Impossibile leggere l'immagine di copertina: %s" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1842 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1844 msgid "Cannot read from: %s" msgstr "Impossibile leggere da: %s" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1976 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1978 msgid "Failed to process opf file" msgstr "Processamento del file OPF fallito" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1982 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1984 msgid "" "Usage: %prog [options] mybook.html\n" "\n" @@ -971,19 +974,19 @@ msgstr "Uso: pdf-meta-file.pdf" msgid "No filename specified." msgstr "Nessun nome file specificato" -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:341 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:344 msgid "%prog [options] myebook.mobi" msgstr "%prog [opzioni] miolibro.mobi" -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:343 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:346 msgid "Output directory. Defaults to current directory." msgstr "Cartella in uscita. Predefinita: cartella corrente" -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:362 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:365 msgid "Raw MOBI HTML saved in" msgstr "MOBI HTML raw salvato in" -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:364 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:367 msgid "OEB ebook created in" msgstr "Libro OEB creato in" @@ -1029,47 +1032,47 @@ msgstr "Base" msgid "Advanced" msgstr "Avanzata" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:102 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:104 msgid "<br>Must be a directory." msgstr "<br>Deve essere una cartella" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:102 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:104 msgid "Invalid database location " msgstr "Percorso database non valido " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:102 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:105 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:104 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:107 msgid "Invalid database location" msgstr "Percorso database non valido" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:105 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:107 msgid "Invalid database location.<br>Cannot write to " msgstr "Percorso database non valido.<br>Impossibile scrivere su " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:117 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:119 msgid "Compacting database. This may take a while." msgstr "Compattamento database. Poterbbe richiedere un po' di tempo" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:117 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:119 msgid "Compacting..." msgstr "Compattamento..." -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:202 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:206 #: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:265 msgid "Configuration" msgstr "Configurazione" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:203 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:207 msgid "&Location of books database (library1.db)" msgstr "&Posizione del database dei libri (library1.db)" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:204 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:208 msgid "Browse for the new database location" msgstr "Sfoglia per specificare una nuova posizione del database" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:205 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:221 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:223 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:209 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:226 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:228 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:513 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:278 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:287 @@ -1088,23 +1091,27 @@ msgstr "Sfoglia per specificare una nuova posizione del database" msgid "..." msgstr "..." -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:206 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:210 msgid "Use &Roman numerals for series number" msgstr "&Usa numeri romani per i numeri delle serie" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:207 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:211 +msgid "Show notification when &new version is available" +msgstr "&Visualizza un avvertimento quando è disponibile una nuova versione" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:212 msgid "Format for &single file save:" msgstr "&Formato per salvataggio singolo file:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:208 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:213 msgid "&Priority for conversion jobs:" msgstr "Pri&orità per i lavori di conversione:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:209 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:214 msgid "Default network &timeout:" msgstr "&Timeout predefinito della rete:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:210 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:215 msgid "" "Set the default timeout for network fetches (i.e. anytime we go out to the " "internet to get information)" @@ -1112,59 +1119,59 @@ msgstr "" "Imposta il timeout predefinito per gli scaricamenti dalla rete (cioè ogni " "volta che si usa Internet per prelevare informazioni)" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:211 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:216 msgid " seconds" msgstr " secondi" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:212 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:217 msgid "Toolbar" msgstr "Barra degli strumenti" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:213 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:218 msgid "Large" msgstr "Grande" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:214 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:219 msgid "Medium" msgstr "Media" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:215 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:220 msgid "Small" msgstr "Piccola" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:216 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:221 msgid "&Button size in toolbar" msgstr "&Dimensione bottoni nella barra degli strumenti" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:217 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:222 msgid "Show &text in toolbar buttons" msgstr "&Mostra testo nei bottoni della barra degli strumenti" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:218 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:223 msgid "Select visible &columns in library view" msgstr "&Selezionare le colonne visibili nella vista biblioteca" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:219 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:224 msgid "Frequently used directories" msgstr "Cartelle usate frequentemente" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:220 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:225 msgid "Add a directory to the frequently used directories list" msgstr "Aggiunge una cartella alla lista delle cartelle usate frequentemente" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:222 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:227 msgid "Remove a directory from the frequently used directories list" msgstr "Rimuove una cartella dalla lista delle cartelle usate frequentemente" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:224 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:229 msgid "Free unused diskspace from the database" msgstr "Libera lo spazio non utilizzato dal database" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:225 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:230 msgid "&Compact database" msgstr "&Compatta database" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:226 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:231 msgid "&Metadata from file name" msgstr "&Metadati dal nome del file" @@ -1305,7 +1312,7 @@ msgid "Convert %s to LRF" msgstr "Converte %s in LRF" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:108 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:177 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:175 msgid "Set conversion defaults" msgstr "Impostazioni di conversione predefinite" @@ -2317,21 +2324,21 @@ msgstr "Timestamp" msgid "Search (For Advanced Search click the button to the left)" msgstr "Cerca (Per la ricerca avanzata fare clic sul bottone a sinistra)" -#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/config_ui.py:48 +#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/config_ui.py:47 msgid "Configure Viewer" msgstr "Configura visualizzatore" -#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/config_ui.py:49 +#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/config_ui.py:48 msgid "Use white background" msgstr "Usa uno sfondo bianco" -#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/config_ui.py:50 +#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/config_ui.py:49 msgid "Hyphenate" msgstr "Unisci" -#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/config_ui.py:51 -msgid "<b>Changes will only take affect after a restart." -msgstr "<b>Le modifiche avranno effetto dopo il riavvio" +#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/config_ui.py:50 +msgid "<b>Changes will only take effect after a restart.</b>" +msgstr "<b>Le modifiche avranno effetto dopo il riavvio.</b>" #: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main.py:63 msgid " - LRF Viewer" @@ -2385,11 +2392,11 @@ msgstr "Apri libro" msgid "Configure" msgstr "Configurazione" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:82 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:80 msgid "Error communicating with device" msgstr "Errore di comunicazione col dispositivo" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:95 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:93 msgid "" "<p>For help visit <a " "href=\"http://%s.kovidgoyal.net/user_manual\">%s.kovidgoyal.net</a><br>" @@ -2397,42 +2404,42 @@ msgstr "" "<p>Per aiuto visitare <a " "href=\"http://%s.kovidgoyal.net/user_manual\">%s.kovidgoyal.net</a><br>" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:96 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:94 msgid "<b>%s</b>: %s by <b>Kovid Goyal %%(version)s</b><br>%%(device)s</p>" msgstr "<b>%s</b>: %s di <b>Kovid Goyal %%(version)s</b><br>%%(device)s</p>" +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:112 #: /home/kovid/work/calibre/src/calibre/gui2/main.py:114 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:116 msgid "Send to main memory" msgstr "Invia alla memoria principale" +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:113 #: /home/kovid/work/calibre/src/calibre/gui2/main.py:115 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:117 msgid "Send to storage card" msgstr "Invia alla scheda di memoria" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:116 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:117 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:114 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:115 msgid "and delete from library" msgstr "e elimina dalla libreria" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:119 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:117 msgid "Send to storage card by default" msgstr "Invia alla scheda di memoria come imposazione predefinita" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:131 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:129 msgid "Edit metadata individually" msgstr "Modifica metadati individualmente" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:132 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:130 msgid "Edit metadata in bulk" msgstr "Modifica metadati in gruppo" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:135 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:133 msgid "Add books from a single directory" msgstr "Aggiungi libri da una singola cartella" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:136 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:134 msgid "" "Add books recursively (One book per directory, assumes every ebook file is " "the same book in a different format)" @@ -2440,7 +2447,7 @@ msgstr "" "Aggiungi libri ricorsivamente (un libro per cartella, assume che ogni file " "sia lo stesso libro in un diverso formato)" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:137 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:135 msgid "" "Add books recursively (Multiple books per directory, assumes every ebook " "file is a different book)" @@ -2448,53 +2455,53 @@ msgstr "" "Aggiungi libri ricorsivamente (più libri per cartella, assume che ogni file " "sia un libro diverso)" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:152 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:150 #: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:275 msgid "Save to disk" msgstr "Salva su disco" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:153 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:151 msgid "Save to disk in a single directory" msgstr "Salva su disco in una singola cartella" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:154 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:152 msgid "Save only %s format to disk" msgstr "Salva sul disco solo il formato %s" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:157 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:155 #: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:281 msgid "View" msgstr "Leggi" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:158 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:156 msgid "View specific format" msgstr "Leggi uno specifico formato" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:174 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:172 msgid "Convert individually" msgstr "Converti individualmente" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:175 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:173 msgid "Bulk convert" msgstr "Converti in gruppo" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:309 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:307 msgid " detected." msgstr " individuato." -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:309 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:307 msgid "Device: " msgstr "Dispositivo: " -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:334 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:332 msgid "Connected " msgstr "Connesso " -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:346 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:344 msgid "Device database corrupted" msgstr "Database del dispositivo corrotto" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:347 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:345 msgid "" "\n" " <p>The database of books on the reader is corrupted. Try the " @@ -2523,8 +2530,8 @@ msgstr "" " </ol>\n" " " -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:399 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:473 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:397 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:471 msgid "" "<p>Books with the same title as the following already exist in the database. " "Add them anyway?<ul>" @@ -2532,53 +2539,53 @@ msgstr "" "<p>Nel database sono già presenti libri con i seguenti titoli. Aggiungerli " "ugualmente?<ul>" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:402 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:476 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:400 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:474 msgid "Duplicates found!" msgstr "Scoperti duplicati!" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:435 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:448 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:433 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:446 msgid "Uploading books to device." msgstr "Caricamento libri nel dispositivo." -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:507 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:505 msgid "No space on device" msgstr "Spazio insufficiente sul dispositivo" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:508 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:506 msgid "" "<p>Cannot upload books to device there is no more free space available " msgstr "" "<p>Impossibile salvare libri sul dispositivo perché non c'è più spazio " "disponibile " -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:546 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:544 msgid "Deleting books from device." msgstr "Cancellamento libri dal dispositivo." -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:578 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:599 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:576 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:597 msgid "Cannot edit metadata" msgstr "Impossibile modificare i metadati" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:578 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:599 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:694 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:764 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:834 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:576 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:597 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:692 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:762 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:832 msgid "No books selected" msgstr "Nessun libro selezionato" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:674 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:672 msgid "Sending books to device." msgstr "Invio libri al dispositivo." -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:677 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:675 msgid "No suitable formats" msgstr "Nessun formato adatto" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:678 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:676 msgid "" "Could not upload the following books to the device, as no suitable formats " "were found:<br><ul>%s</ul>" @@ -2586,11 +2593,11 @@ msgstr "" "Impossibile caricare i seguenti libri nel dispositivo, perché non è stato " "trovato nessun formato adatto:<br><ul>%s</ul>" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:694 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:692 msgid "Cannot save to disk" msgstr "Impossibile salvare sul disco" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:705 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:703 msgid "" "<p>Could not save the following books to disk, because the %s format is not " "available for them:<ul>" @@ -2598,68 +2605,68 @@ msgstr "" "<p>Impossibile salvare i libri seguenti su disco, perché il formato %s non è " "disponibile per loro:<ul>" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:709 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:707 msgid "Could not save some ebooks" msgstr "Impossibile salvare alcuni libri" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:742 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:740 msgid "Fetch news from " msgstr "Scarica notizie da " -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:744 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:742 msgid "Fetching news from " msgstr "Scaricamento notizie da " -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:754 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:752 msgid "News fetched. Uploading to device." msgstr "Notizie scaricate. Salvataggio sul dispositivo" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:764 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:834 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:762 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:832 msgid "Cannot convert" msgstr "Impossibile convertire" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:773 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:771 msgid "Starting Bulk conversion of %d books" msgstr "Avviamento conversione in gruppo di %d libri" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:905 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:923 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:903 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:921 msgid "No book selected" msgstr "Nessun libro selezionato" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:905 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:923 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:937 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:903 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:921 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:935 msgid "Cannot view" msgstr "Impossibile leggere" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:911 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:942 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:909 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:940 msgid "Choose the format to view" msgstr "Scegliere il formato da leggere" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:938 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:936 msgid "%s has no available formats." msgstr "%s non ha formati disponibili" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:976 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:974 msgid "Cannot configure" msgstr "Impossibile configurare" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:976 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:974 msgid "Cannot configure while there are running jobs." msgstr "Impossibile configurare mentre ci sono lavori in esecuzione" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:999 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:997 msgid "Copying database to " msgstr "Copiatura database in " -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1014 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1012 msgid "Invalid database" msgstr "Database non valido" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1015 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1013 msgid "" "<p>An invalid database already exists at %s, delete it before trying to move " "the existing database.<br>Error: %s" @@ -2667,25 +2674,25 @@ msgstr "" "<p>Esiste già un database non valido in %s, eliminarlo prima di provare a " "spostare il database esistente.<br>Errore: %s" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1023 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1021 msgid "Could not move database" msgstr "Impossibile spostare il database" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1044 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1042 msgid "No detailed info available" msgstr "Nessuna informazione dettagliata disponibile" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1045 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1043 msgid "No detailed information is available for books on the device." msgstr "" "Non è disponibile alcuna informazione dettagliata per i libri nel " "dispositivo." -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1087 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1085 msgid "Error talking to device" msgstr "Errore di comunicazione col dispositivo" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1088 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1086 msgid "" "There was a temporary error talking to the device. Please unplug and " "reconnect the device and or reboot." @@ -2693,15 +2700,15 @@ msgstr "" "Si è verificato un errore di comunicazione temporaneo col dispositivo. " "Disconnettere e riconnettere il dispositivo e/o riavviare" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1139 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1137 msgid "Conversion Error" msgstr "Errore di conversione" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1158 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1156 msgid "Database does not exist" msgstr "Il database non esiste" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1158 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1156 msgid "" "The directory in which the database should be: %s no longer exists. Please " "choose a new database location." @@ -2709,7 +2716,7 @@ msgstr "" "La cartella in cui il database dovrebbe essere: %s non esiste più. Scegliere " "una nuova posizione per il database." -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1209 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1207 msgid "" "<span style=\"color:red; font-weight:bold\">Latest version: <a " "href=\"%s\">%s</a></span>" @@ -2717,7 +2724,7 @@ msgstr "" "<span style=\"color:red; font-weight:bold\">Ultima versione: <a " "href=\"%s\">%s</a></span>" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1215 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1213 msgid "" "%s has been updated to version %s. See the <a " "href=\"http://calibre.kovidgoyal.net/wiki/Changelog\">new features</a>. " @@ -2727,7 +2734,7 @@ msgstr "" "href=\"http://calibre.kovidgoyal.net/wiki/Changelog\">nuove " "funzionalità</a>. Una visita alla pagina del download?" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1215 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1213 msgid "Update available" msgstr "Aggiornamento disponibile" @@ -3192,7 +3199,7 @@ msgstr "" " \n" "Per aiuto su un singolo comando: %%prog comando --help\n" -#: /home/kovid/work/calibre/src/calibre/parallel.py:317 +#: /home/kovid/work/calibre/src/calibre/parallel.py:321 msgid "Could not launch worker process." msgstr "Impossibile avviare il gestore dei lavori." @@ -3343,69 +3350,69 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/web/feeds/main.py:84 #: /home/kovid/work/calibre/src/calibre/web/feeds/main.py:88 -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:576 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:577 msgid "Fetching feeds..." msgstr "Scaricamento feed..." -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:33 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:34 msgid "Unknown News Source" msgstr "Sorgente di notizie sconosciuta" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:474 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:475 msgid "Download finished" msgstr "Scaricamento completato" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:476 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:477 msgid "Failed to download the following articles:" msgstr "Scaricamento dei seguenti articoli fallito:" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:478 -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:484 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:479 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:485 msgid " from " msgstr " da " -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:482 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:483 msgid "Failed to download parts of the following articles:" msgstr "Scaricamento dei seguenti articoli fallito parzialmente:" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:486 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:487 msgid "\tFailed links:" msgstr "\tLink falliti:" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:558 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:559 msgid "Could not fetch article. Run with --debug to see the reason" msgstr "" "Impossibile scaricare l'articolo. Eseguire con --debug per vedere la ragione" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:580 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:581 msgid "Got feeds from index page" msgstr "Ricevuti feed dalla pagina principale" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:584 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:585 msgid "Trying to download cover..." msgstr "Tentativo di scaricamento della copertina..." -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:636 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:637 msgid "Starting download [%d thread(s)]..." msgstr "Inizio scaricamento [%d articolo(i)]..." -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:649 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:650 msgid "Feeds downloaded to %s" msgstr "Feed scaricati in %s" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:659 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:660 msgid "Could not download cover: %s" msgstr "Impossibile scaricare la copertina: %s" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:664 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:665 msgid "Downloading cover from %s" msgstr "Scaricamento copertina da %s" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:698 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:699 msgid "Untitled Article" msgstr "Articolo senza titolo" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:744 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:745 msgid "" "\n" "Downloaded article %s from %s\n" @@ -3415,19 +3422,19 @@ msgstr "" "Scaricato articolo %s da %s\n" "%s" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:750 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:751 msgid "Article downloaded: %s" msgstr "Articolo scaricato: %s" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:756 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:757 msgid "Failed to download article: %s from %s\n" msgstr "Scaricamento fallito dell'articolo: %s da %s\n" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:761 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:762 msgid "Article download failed: %s" msgstr "Scaricamento fallito dell'articolo: %s" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:776 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:777 msgid "Fetching feed" msgstr "Scaricamento feed" diff --git a/src/calibre/translations/nds.po b/src/calibre/translations/nds.po index b0b03bff1a..996225c8c1 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: 2008-06-30 23:41+0000\n" -"PO-Revision-Date: 2008-07-06 11:26+0000\n" +"POT-Creation-Date: 2008-07-09 04:18+0000\n" +"PO-Revision-Date: 2008-07-09 06:12+0000\n" "Last-Translator: S. Dorscht <Unknown>\n" "Language-Team: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2008-07-09 03:20+0000\n" +"X-Launchpad-Export-Date: 2008-07-19 02:36+0000\n" "X-Generator: Launchpad (build Unknown)\n" "Generated-By: pygettext.py 1.5\n" @@ -58,6 +58,9 @@ msgstr "" #~ msgid "Cannot kill waiting jobs." #~ msgstr "Kann Aufträge in Warteliste nicht abbrechen." +#~ msgid "<b>Changes will only take affect after a restart." +#~ msgstr "<b>Änderungen treten erst nach einem Neustart in Kraft." + #~ msgid "Job killed by user" #~ msgstr "Auftrag durch Benutzer abgebrochen" @@ -109,11 +112,11 @@ msgstr "Konnte das Laufwerk %s nicht finden. Versuchen Sie einen Neustart." msgid "The reader has no storage card connected." msgstr "Im Reader ist keine Speicherkarte eingesteckt." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:73 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:71 msgid "Set the title. Default: filename." msgstr "Geben Sie den Titel an. Voreinstellung: Dateiname." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:75 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:73 msgid "" "Set the author(s). Multiple authors should be set as a comma separated list. " "Default: %default" @@ -121,7 +124,7 @@ msgstr "" "Geben Sie den Autor an. Mehrere Autoren sollten durch Kommata getrennt " "angegeben werden. Voreinstellung: %default" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:76 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:74 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:174 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf.py:314 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf.py:429 @@ -133,34 +136,34 @@ msgstr "" msgid "Unknown" msgstr "Unbekannt" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:78 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:76 msgid "Set the comment." msgstr "Geben Sie eine Bemerkung an." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:80 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:78 msgid "Set the category" msgstr "Geben Sie eine Kategorie an." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:82 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:80 msgid "Sort key for the title" msgstr "Sortierung nach Titel" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:84 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:82 msgid "Sort key for the author" msgstr "Sortierung nach Autor" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:86 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:84 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:39 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search.py:16 #: /home/kovid/work/calibre/src/calibre/gui2/library.py:409 msgid "Publisher" msgstr "Herausgeber" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:88 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:86 msgid "Path to file containing image to be used as cover" msgstr "Pfad zur Datei des Umschlagbildes" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:90 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:88 msgid "" "If there is a cover graphic detected in the source file, use that instead of " "the specified cover." @@ -168,13 +171,13 @@ msgstr "" "Falls die Quelldatei ein Umschlagbild enthält, das Umschlagbild der " "Quelldatei benutzen, anstatt des angegebenen Umschlagbildes." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:93 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:91 msgid "Output file name. Default is derived from input filename" msgstr "" "Ausgabedateiname. Die Voreinstellung leitet sich vom ursprünglichen " "Dateinamen ab." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:95 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:93 msgid "" "Render HTML tables as blocks of text instead of actual tables. This is " "neccessary if the HTML contains very large or complex tables." @@ -182,7 +185,7 @@ msgstr "" "HTML Tabellen als Textblöcke rendern und nicht als Tabellen. Dies ist " "notwendig, wenn die HTML Datei sehr große oder komplexe Tabellen enthält." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:98 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:96 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 " @@ -193,27 +196,27 @@ msgstr "" "Option außer Gebrauch und wird bevorzugt behandelt. Um --font-delta zu " "benutzen, geben Sie 0 an. Voreinstellung: %defaultpt" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:100 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:98 msgid "Enable autorotation of images that are wider than the screen width." msgstr "" "Automatische Rotation von Bildern, die breiter als die Bildschirmbreite " "sind, einschalten." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:103 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:101 msgid "Set the space between words in pts. Default is %default" msgstr "" "Wählen Sie den Abstand in Punkt zwischen einzelnen Wörtern. Die " "Voreinstellung ist %default" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:105 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:103 msgid "Separate paragraphs by blank lines." msgstr "Paragraphen durch Leerzeilen trennen." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:107 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:105 msgid "Add a header to all the pages with title and author." msgstr "Kopfzeile mit Titel und Autor für alle Seiten einfügen." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:109 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:107 msgid "" "Set the format of the header. %a is replaced by the author and %t by the " "title. Default is %default" @@ -221,7 +224,7 @@ msgstr "" "Wählen Sie das Format der Kopfzeile. %a wird durch den Autor und %t durch " "den Titel ersetzt. Die Voreinstellung ist %default" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:111 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:109 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." @@ -229,7 +232,7 @@ msgstr "" "CSS überschreiben. Es kann ein Pfad zu einem CSS Stylesheet oder eine " "Zeichenfolge angegeben werden. Zeichenfolgen werden als CSS interpretiert." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:113 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:111 msgid "" "Use the <spine> 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 " @@ -239,7 +242,7 @@ msgstr "" "in der die HTML Dateien zur LRF Datei hinzugefügt werden. Die OPF Datei muss " "sich im gleichen Verzeichnis wie die ursprüngliche HTML Datei befinden." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:115 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:113 msgid "" "Minimum paragraph indent (the indent of the first line of a paragraph) in " "pts. Default: %default" @@ -247,7 +250,7 @@ msgstr "" "Mindest-Zeileneinzug von Paragraphen (Zeileneinzug der ersten Zeile eines " "Paragraphen) in Punkt. Voreinstellung: %default" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:117 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:115 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 " @@ -257,14 +260,14 @@ msgstr "" "vergrößern. FONT_DELTA kann ein Bruchteil sein. Falls FONT_DELTA negativ " "angegeben wird, wird die Schriftgröße verkleinert." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:122 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:120 msgid "" "Render all content as black on white instead of the colors specified by the " "HTML or CSS." msgstr "" "Inhalt schwarz-weiß rendern anstatt in den in HTML oder CSS angegeben Farben." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:128 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:126 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 " @@ -274,23 +277,23 @@ msgstr "" "unter anderem die Auflösung und die Bildschirmgröße des Zielgerätes fest. " "Voreinstellung: %s Unterstützte Profile: " -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:134 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:132 msgid "Left margin of page. Default is %default px." msgstr "Linker Rand der Seite. Die Voreinstellung ist %default Pixel." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:136 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:134 msgid "Right margin of page. Default is %default px." msgstr "Rechter Rand der Seite. Die Voreinstellung ist %default Pixel." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:138 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:136 msgid "Top margin of page. Default is %default px." msgstr "Oberer Rand der Seite. Die Voreinstellung ist %default Pixel." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:140 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:138 msgid "Bottom margin of page. Default is %default px." msgstr "Unterer Rand der Seite. Die Voreinstellung ist %default Pixel." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:142 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:140 msgid "" "Render tables in the HTML as images (useful if the document has large or " "complex tables)" @@ -298,7 +301,7 @@ msgstr "" "Tabellen in HTML als Bilder rendern (hilfreich, wenn das Dokument große oder " "komplexe Tabellen enthält)" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:144 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:142 msgid "" "Multiply the size of text in rendered tables by this factor. Default is " "%default" @@ -306,7 +309,7 @@ msgstr "" "Textgröße in gerenderten Tabellen um diesen Faktor erhöhen. Voreinstellung " "ist %default" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:149 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:147 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 <a> tags are " @@ -316,7 +319,7 @@ msgstr "" "dass Verknüpfungen ignoriert werden. Ein negativer Wert bedeutet, dass alle " "<a> Elemente ignoriert werden." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:153 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:151 msgid "" "A regular expression. <a> tags whose href matches will be ignored. Defaults " "to %default" @@ -324,15 +327,15 @@ msgstr "" "Ein regulärer Ausdruck. <a> Elemente, deren Verknüpfungen ignoriert werden. " "Voreinstellung %default" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:157 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:155 msgid "Don't add links to the table of contents." msgstr "Keine Links zum Inhaltsverzeichnis hinzufügen." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:161 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:159 msgid "Prevent the automatic detection chapters." msgstr "Automatische Erkennung von Kapiteln verhindern." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:164 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:162 msgid "" "The regular expression used to detect chapter titles. It is searched for in " "heading tags (h1-h6). Defaults to %default" @@ -340,7 +343,7 @@ msgstr "" "Der reguläre Ausdruck zur Ermittlung von Kapitelüberschriften. Es wird nach " "mit (h1) - (h6) angegebenen Überschriften gesucht. Voreinstellung %default" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:167 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:165 msgid "" "Detect a chapter beginning at an element having the specified attribute. The " "format for this option is tagname regexp,attribute name,attribute value " @@ -353,7 +356,7 @@ msgstr "" "Elemente mit dem Attribut class=\"chapter\" anzugleich, müsste man \"h\\" "d,class,chapter\" benutzen. Voreinstellung ist %default" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:169 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:167 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 " @@ -372,14 +375,14 @@ msgstr "" "Umblättern der in der LRF Datei verlangsamt. Diese Einstellung wird " "ignoriert, wenn die aktuelle Seite nur wenige Elemente enthält." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:179 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:177 msgid "" "Force a page break before tags whose names match this regular expression." msgstr "" "Seitenumbruch erzwingen vor Elementen, deren Namen diesem regulären Ausdruck " "entsprechen." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:181 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:179 msgid "" "Force a page break before an element having the specified attribute. The " "format for this option is tagname regexp,attribute name,attribute value " @@ -392,16 +395,16 @@ msgstr "" "class=\"chapter\" anzupassen, verwenden Sie \"h\\d,class,chapter\". " "Voreinstellung ist %default" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:184 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:182 msgid "Add detected chapters to the table of contents." msgstr "Die ermittelten Kapitel zum Inhaltsverzeichnis hinzufügen." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:187 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:185 msgid "Preprocess Baen HTML files to improve generated LRF." msgstr "" "Baen HTML Dateien vorbearbeiten, um die erstellte LRF Datei zu verbessern." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:189 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:187 msgid "" "You must add this option if processing files generated by pdftohtml, " "otherwise conversion will fail." @@ -409,11 +412,11 @@ msgstr "" "Sie müssen diese Auswahl treffen, wenn sie Dateien, die von pdftohtml " "erstellt wurden, verarbeiten wollen, sonst schlägt die Konvertierung fehl." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:191 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:189 msgid "Use this option on html0 files from Book Designer." msgstr "Benutzen Sie diese Einstellung bei HTML Dateien von Book Designer." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:194 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:192 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 " @@ -427,27 +430,27 @@ msgstr "" "angegeben: --serif-family \"Times New Roman\"\n" " " -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:202 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:200 msgid "The serif family of fonts to embed" msgstr "Serife Schriftartfamilie einbetten" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:205 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:203 msgid "The sans-serif family of fonts to embed" msgstr "Serifenlose Schriftartfamilie einbetten" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:208 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:206 msgid "The monospace family of fonts to embed" msgstr "Nichtproportionale Schriftartfamilie einbetten" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:212 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:210 msgid "Be verbose while processing" msgstr "Mehr Wörter bei der weiteren Verarbeitung angeben." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:214 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:212 msgid "Convert to LRS" msgstr "Zu LRS konvertieren" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:216 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:214 msgid "" "Minimize memory usage at the cost of longer processing times. Use this " "option if you are on a memory constrained machine." @@ -456,7 +459,7 @@ msgstr "" "Benutzen Sie diese Einstellung, wenn sie an einem Rechner mit geringem " "Hauptspeicher arbeiten." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:218 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:216 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 " @@ -469,7 +472,7 @@ msgstr "" "cp-1252. Eine andere gebräuchliche Alternative ist utf-8. In der " "Voreinstellung wird versucht, die Kodierung zu erraten." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/any/convert_from.py:143 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/any/convert_from.py:144 msgid "" "any2lrf [options] myfile\n" "\n" @@ -488,7 +491,7 @@ msgstr "" "ZIP Archive, indem es nach einem eBook im Archiv sucht.\n" " " -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/any/convert_from.py:158 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/any/convert_from.py:159 msgid "No file to convert specified." msgstr "Keine Datei zur Konvertierung angegeben." @@ -549,40 +552,40 @@ msgstr "\tBaen Datei erkannt. Analysiere erneut..." msgid "Written preprocessed HTML to " msgstr "Vorverarbeitetes HTML gespeichert unter " -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:372 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:373 msgid "Processing %s" msgstr "Verarbeite %s" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:386 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:387 msgid "\tConverting to BBeB..." msgstr "\tKonvertiere in BBeB..." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:529 -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:542 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:530 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:543 msgid "Could not parse file: %s" msgstr "Konnte Datei nicht analysieren: %s" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:534 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:535 msgid "%s is an empty file" msgstr "%s ist eine leere Datei" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:554 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:555 msgid "Failed to parse link %s %s" msgstr "Fehlschlag bei der Analysierung von %s %s" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:598 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:599 msgid "Cannot add link %s to TOC" msgstr "Konnte Link %s nicht zu TOC hinzufügen" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:943 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:944 msgid "Unable to process image %s. Error: %s" msgstr "Konnte Bild %s nicht verarbeiten. Fehler: %s" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:981 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:982 msgid "Unable to process interlaced PNG %s" msgstr "Konnte verschachteltes PNG %s nicht verarbeiten" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:996 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:997 msgid "" "Could not process image: %s\n" "%s" @@ -590,14 +593,14 @@ msgstr "" "Konnte Bild nicht verarbeiten: %s\n" "%s" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1743 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1744 msgid "" "An error occurred while processing a table: %s. Ignoring table markup." msgstr "" "Ein Fehler trat während der Bearbeitung einer Tabelle auf: %s. " "Tabellenformat wird ignoriert." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1745 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1746 msgid "" "Bad table:\n" "%s" @@ -605,11 +608,11 @@ msgstr "" "Schlechte Tabelle:\n" "%s" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1767 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1768 msgid "Table has cell that is too large" msgstr "Tabelle enthält Zelle, die zu groß ist" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1797 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1798 msgid "" "You have to save the website %s as an html file first and then run html2lrf " "on it." @@ -617,19 +620,19 @@ msgstr "" "Sichern Sie die Website %s zuerst als HTML Datei und benutzen Sie dann " "html2lrf mit der gespeicherten HTML Datei." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1839 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1841 msgid "Could not read cover image: %s" msgstr "Konnte Umschlagbild nicht lesen: %s" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1842 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1844 msgid "Cannot read from: %s" msgstr "Lesen nicht möglich von: %s" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1976 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1978 msgid "Failed to process opf file" msgstr "Verarbeitung der OPF Datei schlug fehl" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1982 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1984 msgid "" "Usage: %prog [options] mybook.html\n" "\n" @@ -966,19 +969,19 @@ msgstr "Benutzung: pdf-meta dateiname.pdf" msgid "No filename specified." msgstr "Kein Dateiname angegeben." -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:341 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:344 msgid "%prog [options] myebook.mobi" msgstr "%prog [options] dateiname.mobi" -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:343 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:346 msgid "Output directory. Defaults to current directory." msgstr "Ausgabeverzeichnis. Voreinstellung ist akutelles Verzeichnis." -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:362 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:365 msgid "Raw MOBI HTML saved in" msgstr "Original MOBI HTML gespeichert in" -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:364 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:367 msgid "OEB ebook created in" msgstr "OEB eBook erstellt in" @@ -1024,47 +1027,47 @@ msgstr "Einfach" msgid "Advanced" msgstr "Erweitert" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:102 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:104 msgid "<br>Must be a directory." msgstr "<br>Muss ein Verzeichnis sein." -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:102 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:104 msgid "Invalid database location " msgstr "Ortsangabe der Datenbank ungültig " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:102 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:105 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:104 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:107 msgid "Invalid database location" msgstr "Ortsangabe der Datenbank ungültig" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:105 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:107 msgid "Invalid database location.<br>Cannot write to " msgstr "Ortsangabe der Datenbank ungültig.<br>Speichern nicht möglich " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:117 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:119 msgid "Compacting database. This may take a while." msgstr "Komprimiere Datenbank. Das kann etwas dauern..." -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:117 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:119 msgid "Compacting..." msgstr "Komprimiere Datenbank..." -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:202 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:206 #: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:265 msgid "Configuration" msgstr "Konfiguration" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:203 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:207 msgid "&Location of books database (library1.db)" msgstr "Speicherort der Bücherdatenbank (&library1.db)" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:204 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:208 msgid "Browse for the new database location" msgstr "Zu einem neuen Ort der Datenbank wechseln" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:205 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:221 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:223 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:209 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:226 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:228 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:513 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:278 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:287 @@ -1083,23 +1086,27 @@ msgstr "Zu einem neuen Ort der Datenbank wechseln" msgid "..." msgstr "..." -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:206 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:210 msgid "Use &Roman numerals for series number" msgstr "&Römische Ziffern für Serien Nummerierung verwenden" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:207 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:211 +msgid "Show notification when &new version is available" +msgstr "Benachrichtigung anzeigen, wenn &neue Version verfügbar ist" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:212 msgid "Format for &single file save:" msgstr "Format zur &Speicherung einer Datei:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:208 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:213 msgid "&Priority for conversion jobs:" msgstr "&Priorität der Konvertierungsaufträge:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:209 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:214 msgid "Default network &timeout:" msgstr "Voreinstellung für Zei&tüberschreitung bei Netzwerkverbindungen:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:210 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:215 msgid "" "Set the default timeout for network fetches (i.e. anytime we go out to the " "internet to get information)" @@ -1107,61 +1114,61 @@ msgstr "" "Voreinstellung der Zeitüberschreitung für Netzwerkabrufe festsetzen (Gilt " "immer dann, wenn aus dem Internet Informationen abgerufen werden sollen)" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:211 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:216 msgid " seconds" msgstr " Sekunden" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:212 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:217 msgid "Toolbar" msgstr "Symbolleiste" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:213 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:218 msgid "Large" msgstr "Groß" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:214 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:219 msgid "Medium" msgstr "Mittel" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:215 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:220 msgid "Small" msgstr "Klein" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:216 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:221 msgid "&Button size in toolbar" msgstr "&Größe der Schaltflächen in der Symbolleiste" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:217 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:222 msgid "Show &text in toolbar buttons" msgstr "Zeige &Text in Schaltflächen der Symbolleiste" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:218 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:223 msgid "Select visible &columns in library view" msgstr "Si&chtbare Spalten in Bibliothek-Ansicht wählen" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:219 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:224 msgid "Frequently used directories" msgstr "Häufig benutzte Verzeichnisse" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:220 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:225 msgid "Add a directory to the frequently used directories list" msgstr "" "Ein Verzeichnis zur Liste der häufig genutzten Verzeichnisse hinzufügen" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:222 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:227 msgid "Remove a directory from the frequently used directories list" msgstr "" "Ein Verzeichnis von der Liste der häufig genutzten Verzeichnisse entfernen" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:224 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:229 msgid "Free unused diskspace from the database" msgstr "Freier unbenutzter Festplattenspeicher der Datenbank" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:225 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:230 msgid "&Compact database" msgstr "Datenbank &komprimieren" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:226 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:231 msgid "&Metadata from file name" msgstr "&Meta-Daten aus dem Dateinamen" @@ -1304,7 +1311,7 @@ msgid "Convert %s to LRF" msgstr "Konvertiere %s in LRF" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:108 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:177 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:175 msgid "Set conversion defaults" msgstr "Voreinstellungen zur Konvertierung wählen" @@ -2321,21 +2328,21 @@ msgstr "Zeitstempel" msgid "Search (For Advanced Search click the button to the left)" msgstr "Suche (Zur erweiterten Suche die Schaltfläche links klicken)" -#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/config_ui.py:48 +#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/config_ui.py:47 msgid "Configure Viewer" msgstr "Viewer konfigurieren" -#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/config_ui.py:49 +#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/config_ui.py:48 msgid "Use white background" msgstr "Weißen Hintergrund verwenden" -#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/config_ui.py:50 +#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/config_ui.py:49 msgid "Hyphenate" msgstr "Mit Trennstrich versehen" -#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/config_ui.py:51 -msgid "<b>Changes will only take affect after a restart." -msgstr "<b>Änderungen treten erst nach einem Neustart in Kraft." +#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/config_ui.py:50 +msgid "<b>Changes will only take effect after a restart.</b>" +msgstr "<b>Änderungen werden erst nach einem Neustart wirksam.</b>" #: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main.py:63 msgid " - LRF Viewer" @@ -2389,11 +2396,11 @@ msgstr "eBook öffnen" msgid "Configure" msgstr "Konfigurieren" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:82 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:80 msgid "Error communicating with device" msgstr "Fehler bei der Kommunikation mit dem Gerät" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:95 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:93 msgid "" "<p>For help visit <a " "href=\"http://%s.kovidgoyal.net/user_manual\">%s.kovidgoyal.net</a><br>" @@ -2401,42 +2408,42 @@ msgstr "" "<p>Hilfe gibt es online bei <a " "href=\"http://%s.kovidgoyal.net/user_manual\">%s.kovidgoyal.net</a><br>" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:96 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:94 msgid "<b>%s</b>: %s by <b>Kovid Goyal %%(version)s</b><br>%%(device)s</p>" msgstr "<b>%s</b>: %s von <b>Kovid Goyal %%(version)s</b><br>%%(device)s</p>" +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:112 #: /home/kovid/work/calibre/src/calibre/gui2/main.py:114 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:116 msgid "Send to main memory" msgstr "An Hauptspeicher senden" +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:113 #: /home/kovid/work/calibre/src/calibre/gui2/main.py:115 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:117 msgid "Send to storage card" msgstr "An Speicherkarte senden" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:116 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:117 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:114 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:115 msgid "and delete from library" msgstr "und aus der Datenbank löschen" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:119 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:117 msgid "Send to storage card by default" msgstr "Auf die Speicherkarte senden (Voreinstellung)" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:131 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:129 msgid "Edit metadata individually" msgstr "Meta-Daten einzeln bearbeiten" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:132 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:130 msgid "Edit metadata in bulk" msgstr "Meta-Daten auf einmal bearbeiten" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:135 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:133 msgid "Add books from a single directory" msgstr "Bücher aus einem einzelnen Verzeichnis hinzufügen" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:136 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:134 msgid "" "Add books recursively (One book per directory, assumes every ebook file is " "the same book in a different format)" @@ -2444,7 +2451,7 @@ msgstr "" "Bücher rekursiv hinzufügen (Ein Buch pro Verzeichnis, setzt voraus, dass " "jede eBook Datei das gleiche Buch in einem unterschiedlichen Format enthält)" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:137 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:135 msgid "" "Add books recursively (Multiple books per directory, assumes every ebook " "file is a different book)" @@ -2452,53 +2459,53 @@ msgstr "" "Bücher rekursiv hinzufügen (Mehrere Bücher pro Verzeichnis, setzt voraus, " "dass jede eBook Datei ein anderes Buch enthält)" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:152 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:150 #: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:275 msgid "Save to disk" msgstr "Auf Festplatte sichern" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:153 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:151 msgid "Save to disk in a single directory" msgstr "Auf Festplatte in ein einziges Verzeichnis speichern" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:154 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:152 msgid "Save only %s format to disk" msgstr "Speichere nur das %s Format auf die Festplatte" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:157 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:155 #: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:281 msgid "View" msgstr "Vorschau" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:158 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:156 msgid "View specific format" msgstr "Spezielles Format ansehen" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:174 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:172 msgid "Convert individually" msgstr "Einzeln konvertieren" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:175 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:173 msgid "Bulk convert" msgstr "Auf einmal konvertieren" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:309 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:307 msgid " detected." msgstr " gefunden." -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:309 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:307 msgid "Device: " msgstr "Gerät: " -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:334 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:332 msgid "Connected " msgstr "Angeschlossen: " -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:346 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:344 msgid "Device database corrupted" msgstr "Gerätedatenbank ist beschädigt" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:347 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:345 msgid "" "\n" " <p>The database of books on the reader is corrupted. Try the " @@ -2529,8 +2536,8 @@ msgstr "" " </ol>\n" " " -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:399 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:473 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:397 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:471 msgid "" "<p>Books with the same title as the following already exist in the database. " "Add them anyway?<ul>" @@ -2538,53 +2545,53 @@ msgstr "" "<p>Es existieren bereits Bücher mit dem selben Titel in der Datenbank. " "Sollen die folgenden Bücher trotzdem hinzugefügt werden?<ul>" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:402 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:476 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:400 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:474 msgid "Duplicates found!" msgstr "Duplikate gefunden!" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:435 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:448 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:433 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:446 msgid "Uploading books to device." msgstr "Lade Bücher auf das Gerät." -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:507 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:505 msgid "No space on device" msgstr "Gerätespeicher voll" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:508 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:506 msgid "" "<p>Cannot upload books to device there is no more free space available " msgstr "" "<p>Es können keine Bücher mehr auf das Gerät geladen werden, da der " "Gerätespeicher voll ist " -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:546 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:544 msgid "Deleting books from device." msgstr "Lösche Bücher vom Gerät." -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:578 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:599 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:576 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:597 msgid "Cannot edit metadata" msgstr "Kann Metadaten nicht bearbeiten" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:578 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:599 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:694 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:764 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:834 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:576 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:597 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:692 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:762 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:832 msgid "No books selected" msgstr "Keine Bücher ausgewählt" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:674 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:672 msgid "Sending books to device." msgstr "Sende Bücher an das Gerät." -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:677 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:675 msgid "No suitable formats" msgstr "Keine geeigneten Formate" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:678 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:676 msgid "" "Could not upload the following books to the device, as no suitable formats " "were found:<br><ul>%s</ul>" @@ -2592,11 +2599,11 @@ msgstr "" "Die folgenden Bücher konnten nicht auf das Gerät geladen werden, da keine " "geeigneten Formate vorhanden sind:<br><ul>%s</ul>" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:694 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:692 msgid "Cannot save to disk" msgstr "Speichern auf Festplatte nicht möglich" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:705 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:703 msgid "" "<p>Could not save the following books to disk, because the %s format is not " "available for them:<ul>" @@ -2604,68 +2611,68 @@ msgstr "" "<p>Die folgenden Bücher konnten nicht auf die Festplatte gespeichert werden, " "da das %s Format für sie nicht verfügbar ist:<ul>" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:709 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:707 msgid "Could not save some ebooks" msgstr "Konnte einige eBooks nicht speichern" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:742 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:740 msgid "Fetch news from " msgstr "Nachrichten abrufen von " -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:744 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:742 msgid "Fetching news from " msgstr "Rufe Nachrichten ab von " -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:754 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:752 msgid "News fetched. Uploading to device." msgstr "Nachrichten abgerufen. Übertragung ans Gerät läuft." -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:764 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:834 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:762 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:832 msgid "Cannot convert" msgstr "Konvertierung nicht möglich" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:773 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:771 msgid "Starting Bulk conversion of %d books" msgstr "Starte Massenkonvertierung von %d Büchern" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:905 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:923 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:903 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:921 msgid "No book selected" msgstr "Kein Buch ausgewählt" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:905 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:923 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:937 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:903 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:921 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:935 msgid "Cannot view" msgstr "Ansehen nicht möglich" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:911 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:942 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:909 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:940 msgid "Choose the format to view" msgstr "Format zur Vorschau wählen" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:938 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:936 msgid "%s has no available formats." msgstr "%s hat keine verfügbaren Formate." -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:976 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:974 msgid "Cannot configure" msgstr "Konfiguration nicht möglich" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:976 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:974 msgid "Cannot configure while there are running jobs." msgstr "Konfiguration nicht möglich während Aufträge abgearbeitet werden." -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:999 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:997 msgid "Copying database to " msgstr "Kopiere Datenbank nach " -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1014 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1012 msgid "Invalid database" msgstr "Ungültige Datenbank" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1015 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1013 msgid "" "<p>An invalid database already exists at %s, delete it before trying to move " "the existing database.<br>Error: %s" @@ -2673,23 +2680,23 @@ msgstr "" "<p>Es existiert bereits eine ungültige Datenbank in %s, bitte löschen Sie " "diese, bevor sie die bestehende Datenbank verschieben.<br>Fehler: %s" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1023 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1021 msgid "Could not move database" msgstr "Konnte Datenbank nicht verschieben" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1044 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1042 msgid "No detailed info available" msgstr "Es ist keine weitere Information verfügbar" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1045 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1043 msgid "No detailed information is available for books on the device." msgstr "Es ist keine weitere Information über Bücher auf dem Gerät verfügbar" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1087 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1085 msgid "Error talking to device" msgstr "Fehler in der Kommunikation zum Gerät" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1088 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1086 msgid "" "There was a temporary error talking to the device. Please unplug and " "reconnect the device and or reboot." @@ -2697,15 +2704,15 @@ msgstr "" "Es trat ein Fehler in der Kommunikation mit dem Gerät auf. Bitte entfernen " "und schließen Sie das Gerät wieder an und - oder starten Sie neu." -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1139 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1137 msgid "Conversion Error" msgstr "Konvertierungsfehler" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1158 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1156 msgid "Database does not exist" msgstr "Datenbank existiert nicht" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1158 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1156 msgid "" "The directory in which the database should be: %s no longer exists. Please " "choose a new database location." @@ -2713,7 +2720,7 @@ msgstr "" "Das Verzeichnis, in dem die Datenbank sein sollte: %s existiert nicht mehr. " "Bitte wählen Sie einen neuen Ort für die Datenbank aus." -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1209 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1207 msgid "" "<span style=\"color:red; font-weight:bold\">Latest version: <a " "href=\"%s\">%s</a></span>" @@ -2721,7 +2728,7 @@ msgstr "" "<span style=\"color:red; font-weight:bold\">Letzte Version: <a " "href=\"%s\">%s</a></span>" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1215 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1213 msgid "" "%s has been updated to version %s. See the <a " "href=\"http://calibre.kovidgoyal.net/wiki/Changelog\">new features</a>. " @@ -2731,7 +2738,7 @@ msgstr "" "href=\"http://calibre.kovidgoyal.net/wiki/Changelog\">neuen Features</a> an. " "Möchten Sie die Download Seite besuchen?" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1215 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1213 msgid "Update available" msgstr "Neue Version verfügbar" @@ -3206,7 +3213,7 @@ msgstr "" " \n" "Für Hilfe zu einem bestimmten Befehl (command): %%prog command --help\n" -#: /home/kovid/work/calibre/src/calibre/parallel.py:317 +#: /home/kovid/work/calibre/src/calibre/parallel.py:321 msgid "Could not launch worker process." msgstr "Konnte Arbeitsprozess nicht starten." @@ -3356,70 +3363,70 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/web/feeds/main.py:84 #: /home/kovid/work/calibre/src/calibre/web/feeds/main.py:88 -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:576 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:577 msgid "Fetching feeds..." msgstr "Rufe Feeds ab..." -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:33 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:34 msgid "Unknown News Source" msgstr "Nachrichtenquelle unbekannt" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:474 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:475 msgid "Download finished" msgstr "Download beendet" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:476 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:477 msgid "Failed to download the following articles:" msgstr "Der Download der folgenden Artikel schlug fehl:" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:478 -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:484 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:479 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:485 msgid " from " msgstr " von " -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:482 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:483 msgid "Failed to download parts of the following articles:" msgstr "Der Download von Teilen der folgenden Artikel schlug fehl:" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:486 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:487 msgid "\tFailed links:" msgstr "\tFehlgeschlagene Verknüpfungen:" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:558 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:559 msgid "Could not fetch article. Run with --debug to see the reason" msgstr "" "Konnte Artikel nicht abrufen. Der erneute Start mit --debug zeigt mögliche " "Gründe an" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:580 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:581 msgid "Got feeds from index page" msgstr "Feeds der Index Seite erhalten" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:584 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:585 msgid "Trying to download cover..." msgstr "Versuche Umschlagbild zu laden..." -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:636 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:637 msgid "Starting download [%d thread(s)]..." msgstr "Starte Download von [%d Thread(s)]..." -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:649 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:650 msgid "Feeds downloaded to %s" msgstr "Feeds wurden nach %s heruntergeladen" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:659 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:660 msgid "Could not download cover: %s" msgstr "Konnte Umschlagbild nicht laden: %s" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:664 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:665 msgid "Downloading cover from %s" msgstr "Lade Umschlagbild von %s" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:698 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:699 msgid "Untitled Article" msgstr "Artikel ohne Titel" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:744 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:745 msgid "" "\n" "Downloaded article %s from %s\n" @@ -3429,19 +3436,19 @@ msgstr "" "Artikel %s von %s geladen\n" "%s" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:750 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:751 msgid "Article downloaded: %s" msgstr "Artikel geladen: %s" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:756 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:757 msgid "Failed to download article: %s from %s\n" msgstr "Laden der Artikel fehlgeschlagen: %s von %s\n" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:761 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:762 msgid "Article download failed: %s" msgstr "Laden der Artikel schlug fehl: %s" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:776 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:777 msgid "Fetching feed" msgstr "Rufe Feed ab" diff --git a/src/calibre/translations/nl.po b/src/calibre/translations/nl.po index 9e8bbc0b30..fa389f761c 100644 --- a/src/calibre/translations/nl.po +++ b/src/calibre/translations/nl.po @@ -7,14 +7,14 @@ msgid "" msgstr "" "Project-Id-Version: calibre\n" "Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" -"POT-Creation-Date: 2008-06-30 23:41+0000\n" -"PO-Revision-Date: 2008-07-05 23:19+0000\n" +"POT-Creation-Date: 2008-07-09 04:18+0000\n" +"PO-Revision-Date: 2008-07-13 07:18+0000\n" "Last-Translator: Marc van den Dikkenberg <Unknown>\n" "Language-Team: Dutch <nl@li.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2008-07-09 03:20+0000\n" +"X-Launchpad-Export-Date: 2008-07-19 02:36+0000\n" "X-Generator: Launchpad (build Unknown)\n" #~ msgid "" @@ -53,6 +53,9 @@ msgstr "" #~ msgid "Cannot kill waiting jobs." #~ msgstr "Wachtende opdrachten kunnen niet worden afgebroken." +#~ msgid "<b>Changes will only take affect after a restart." +#~ msgstr "<b>Veranderingen zijn pas zichtbaar na een herstart." + #~ msgid "Job killed by user" #~ msgstr "Opdracht beëindigd door gebruiker" @@ -104,11 +107,11 @@ msgstr "Schijf %s is niet gevonden. Probeer te herstarten." msgid "The reader has no storage card connected." msgstr "Er is geen geheugen kaart verbonden met de reader." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:73 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:71 msgid "Set the title. Default: filename." msgstr "De titel. Standaard: bestandsnaam" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:75 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:73 msgid "" "Set the author(s). Multiple authors should be set as a comma separated list. " "Default: %default" @@ -116,7 +119,7 @@ msgstr "" "De auteur(s). Meerdere auteurs moeten met een komma van elkaar gescheiden " "worden. Standaard: %default" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:76 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:74 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:174 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf.py:314 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf.py:429 @@ -128,34 +131,34 @@ msgstr "" msgid "Unknown" msgstr "Onbekend" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:78 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:76 msgid "Set the comment." msgstr "Opmerking." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:80 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:78 msgid "Set the category" msgstr "Geef de categorie" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:82 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:80 msgid "Sort key for the title" msgstr "Zoeksleutel voor de titel" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:84 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:82 msgid "Sort key for the author" msgstr "Zoeksleutel voor de auteur" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:86 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:84 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:39 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search.py:16 #: /home/kovid/work/calibre/src/calibre/gui2/library.py:409 msgid "Publisher" msgstr "Uitgeverij" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:88 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:86 msgid "Path to file containing image to be used as cover" msgstr "Pad naar het bestand met afbeelding om als omslag te gebruiken" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:90 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:88 msgid "" "If there is a cover graphic detected in the source file, use that instead of " "the specified cover." @@ -163,11 +166,11 @@ msgstr "" "Als er een afbeeling is gevonden in het bron bestand, gebruik dat in plaats " "van de opgegeven omslag." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:93 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:91 msgid "Output file name. Default is derived from input filename" msgstr "Doel bestands naam. Standaard is gebaseerd op de bron bestandsnaam" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:95 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:93 msgid "" "Render HTML tables as blocks of text instead of actual tables. This is " "neccessary if the HTML contains very large or complex tables." @@ -175,7 +178,7 @@ msgstr "" "Maak HTML tabellen als blokken tekst in plaats van echte tabellen. Dit is " "noodzakelijk als de HTML zeer grote of complexe tabellen bevat." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:98 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:96 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 " @@ -185,23 +188,23 @@ msgstr "" "vergroot. Deze optie vervangt de --font-delta optie. Om --fonot-delta te " "gebruiken, zet het op 0. STandaard: %defaultpt" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:100 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:98 msgid "Enable autorotation of images that are wider than the screen width." msgstr "Roteer plaatjes die breder zijn dan het scherm automatisch." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:103 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:101 msgid "Set the space between words in pts. Default is %default" msgstr "Zet de spatie ruimte tussen woorden in pts. Standaard is %default" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:105 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:103 msgid "Separate paragraphs by blank lines." msgstr "Scheid paragrafen met lege regels." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:107 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:105 msgid "Add a header to all the pages with title and author." msgstr "Voeg een kopregel toe aan alle pagina's met de titel en de auteur." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:109 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:107 msgid "" "Set the format of the header. %a is replaced by the author and %t by the " "title. Default is %default" @@ -209,7 +212,7 @@ msgstr "" "Zet het formaat van de kopregel. %a wordt vervangen door de auteur en %t met " "de titel. Standaard is %default" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:111 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:109 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." @@ -217,7 +220,7 @@ msgstr "" "Negeer de CSS. Zit kan of een pad naar een CCS stylesheet zijn, of een " "string. Als het in string is, dan zal deze worden geïnterpreteerd als CSS." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:113 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:111 msgid "" "Use the <spine> 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 " @@ -227,7 +230,7 @@ msgstr "" "waarin de HTML bestanden aan de LRF worden toegevoegd. Het .OPF bestand moet " "zich in dezelfde folder bevinden als het basis HTML bestand." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:115 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:113 msgid "" "Minimum paragraph indent (the indent of the first line of a paragraph) in " "pts. Default: %default" @@ -235,7 +238,7 @@ msgstr "" "Minimum paragraaf indentatie (De indentatie van de eerste regel in een " "paragraaf) in pts. Standaard: %default" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:117 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:115 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 " @@ -245,7 +248,7 @@ msgstr "" "FONT_DELTA pts. FONT_DELTA van een fractie zijn. Als FONT_DELTA negaties is, " "dan zal het lettertype kleiner worden." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:122 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:120 msgid "" "Render all content as black on white instead of the colors specified by the " "HTML or CSS." @@ -253,7 +256,7 @@ msgstr "" "Geef alle inhoud weer als zwart op wit in plaats van in de kleuren die zijn " "gedefinieerd in de HTML of CSS code." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:128 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:126 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 " @@ -263,23 +266,23 @@ msgstr "" "profiel bepaalt zaken zoals de resolutie en scherm grootte van het doel " "apparaat. Standaard: %s Ondersteunde profielen: " -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:134 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:132 msgid "Left margin of page. Default is %default px." msgstr "Linker kantlijn van pagina. Standaard is %default pixels." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:136 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:134 msgid "Right margin of page. Default is %default px." msgstr "Rechter kantlijn van pagina. Standaard is %default pixels." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:138 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:136 msgid "Top margin of page. Default is %default px." msgstr "Boven marge van pagina. Standaard is %default pixels." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:140 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:138 msgid "Bottom margin of page. Default is %default px." msgstr "Onder marge van pagina. Standaard is %default pixels." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:142 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:140 msgid "" "Render tables in the HTML as images (useful if the document has large or " "complex tables)" @@ -287,7 +290,7 @@ msgstr "" "Genereer HTML tabellen als afbeeldingen. (Handig als het document grote of " "gecompliceerde tabellen bevat)" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:144 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:142 msgid "" "Multiply the size of text in rendered tables by this factor. Default is " "%default" @@ -295,7 +298,7 @@ msgstr "" "Vermenigvuldig de tekst grootte in gegenereerde tabellen bij deze waarde. " "Standaard is %default" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:149 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:147 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 <a> tags are " @@ -305,7 +308,7 @@ msgstr "" "0 betekent dat de links niet zullen worden gevolgd. Een negatieve waarde " "betekent dat <a> tags worden genegeerd." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:153 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:151 msgid "" "A regular expression. <a> tags whose href matches will be ignored. Defaults " "to %default" @@ -313,15 +316,15 @@ msgstr "" "Een reguliere expressie. <a> tags waar de href mee overeen komt worden " "genegeerd. Standaard: %default" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:157 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:155 msgid "Don't add links to the table of contents." msgstr "Voeg geen links toe aan de inhoudsopgave." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:161 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:159 msgid "Prevent the automatic detection chapters." msgstr "Vind niet automatisch nieuwe hoofdstukken." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:164 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:162 msgid "" "The regular expression used to detect chapter titles. It is searched for in " "heading tags (h1-h6). Defaults to %default" @@ -329,7 +332,7 @@ msgstr "" "De reguliere expressie die wordt gebruikt om hoofdstukken te herkennen. Deze " "wordt gezocht in 'heading tags' (h1-h6). Standaard: %default" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:167 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:165 msgid "" "Detect a chapter beginning at an element having the specified attribute. The " "format for this option is tagname regexp,attribute name,attribute value " @@ -342,7 +345,7 @@ msgstr "" "attribuut klasse \"hoofstuk\", gebruik \"h\\d\\klasse,hoofdstuk\". Standaard " "is %default" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:169 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:167 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 " @@ -361,14 +364,14 @@ msgstr "" "tijd nodig hebben om om te slaan in LRF formaat. Deze optie zal worden " "genegeerd als de huidige pagina weinig elementen bevat." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:179 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:177 msgid "" "Force a page break before tags whose names match this regular expression." msgstr "" "Forceer een pagina scheiding voor tags wiens naam overeenkomen met deze " "reguliere expressie." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:181 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:179 msgid "" "Force a page break before an element having the specified attribute. The " "format for this option is tagname regexp,attribute name,attribute value " @@ -381,15 +384,15 @@ msgstr "" "class=\"chapter\" te vinden, gebruik: \"h\\d,class,chapter\". Standaard is " "%default" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:184 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:182 msgid "Add detected chapters to the table of contents." msgstr "Voeg gevonden hoofdstukken toe aan de inhoudsopgave." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:187 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:185 msgid "Preprocess Baen HTML files to improve generated LRF." msgstr "Verwerk Baen HTML bestanden om de gegenereerde RTF te verbeteren." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:189 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:187 msgid "" "You must add this option if processing files generated by pdftohtml, " "otherwise conversion will fail." @@ -397,11 +400,11 @@ msgstr "" "Deze optie moet worden toegevoegd indien er bestanden worden verwerkt die " "zijn gegenereerd door pdftohtml, anders zal de conversie falen." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:191 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:189 msgid "Use this option on html0 files from Book Designer." msgstr "Gebruik deze optie met Book Designer html0 bestanden." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:194 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:192 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 " @@ -414,27 +417,27 @@ msgstr "" "wisselingen. Bijvoorbeeld: --serif-famiy \"Times New Roman\"\n" " " -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:202 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:200 msgid "The serif family of fonts to embed" msgstr "De serif lettertype familie om toe te voegen" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:205 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:203 msgid "The sans-serif family of fonts to embed" msgstr "De sand-serif familie om toe te voegen" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:208 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:206 msgid "The monospace family of fonts to embed" msgstr "De monospace familie om toe te voegen" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:212 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:210 msgid "Be verbose while processing" msgstr "Geef een uitgebreide omschrijving tijdens het verwerken" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:214 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:212 msgid "Convert to LRS" msgstr "Converteer naar LRS" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:216 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:214 msgid "" "Minimize memory usage at the cost of longer processing times. Use this " "option if you are on a memory constrained machine." @@ -443,7 +446,7 @@ msgstr "" "verwerkingstijd. Gebruik deze optie als je een machine met weinig geheugen " "gebruikt." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:218 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:216 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 " @@ -456,7 +459,7 @@ msgstr "" "gebruikte keuze is utf-8. Standaard zal er worden geprobeerd om de encoding " "automatisch te herkennen." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/any/convert_from.py:143 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/any/convert_from.py:144 msgid "" "any2lrf [options] myfile\n" "\n" @@ -473,7 +476,7 @@ msgstr "" "bestanden, en zoekt ebook bestanden in deze archiven.\n" " " -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/any/convert_from.py:158 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/any/convert_from.py:159 msgid "No file to convert specified." msgstr "Geen bestand opgegeven om te converteren." @@ -534,40 +537,40 @@ msgstr "\tBaen bestand herkend. Her-lezen..." msgid "Written preprocessed HTML to " msgstr "Schrijf pre-info HTML naar " -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:372 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:373 msgid "Processing %s" msgstr "Verwerking %s" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:386 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:387 msgid "\tConverting to BBeB..." msgstr "\tConveteer naar BBEB..." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:529 -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:542 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:530 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:543 msgid "Could not parse file: %s" msgstr "Kan bestand niet parseren: %s" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:534 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:535 msgid "%s is an empty file" msgstr "%s is een leeg bestand" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:554 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:555 msgid "Failed to parse link %s %s" msgstr "Link %s %s kan niet worden geparseerd" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:598 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:599 msgid "Cannot add link %s to TOC" msgstr "Link %s kan niet worden toegevoegd aan de inhoudsopgave" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:943 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:944 msgid "Unable to process image %s. Error: %s" msgstr "Niet mogelijk om afbeelding %s te verwerken. Foutmelding: %s" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:981 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:982 msgid "Unable to process interlaced PNG %s" msgstr "Niet mogelijk om interlaced PNG bestand %s te verwerken." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:996 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:997 msgid "" "Could not process image: %s\n" "%s" @@ -575,14 +578,14 @@ msgstr "" "Niet mogelijk om afbeelding %s te verwerken\n" "%s" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1743 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1744 msgid "" "An error occurred while processing a table: %s. Ignoring table markup." msgstr "" "Een fout is opgetreden tijdens het verwerken van een tabel: %s. Tabel opmaak " "zal worden genegeerd." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1745 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1746 msgid "" "Bad table:\n" "%s" @@ -590,11 +593,11 @@ msgstr "" "Foutieve tabel:\n" "%s" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1767 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1768 msgid "Table has cell that is too large" msgstr "Tabel heeft een cel die te groot is." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1797 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1798 msgid "" "You have to save the website %s as an html file first and then run html2lrf " "on it." @@ -602,19 +605,19 @@ msgstr "" "De website %s moet eerst als een HTML bestand worden weggeschreven, waarna " "je deze met html2rlf kunt converteren." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1839 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1841 msgid "Could not read cover image: %s" msgstr "Omslag afbeelding kan niet worden ingelezen: %s" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1842 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1844 msgid "Cannot read from: %s" msgstr "Kan niet lezen van: %s" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1976 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1978 msgid "Failed to process opf file" msgstr "Verwerking van OPF bestand is niet gelukt." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1982 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1984 msgid "" "Usage: %prog [options] mybook.html\n" "\n" @@ -949,19 +952,19 @@ msgstr "Gebruik: pdf-meta bestand.pdf" msgid "No filename specified." msgstr "Geen bestandsnaam opgegeven" -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:341 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:344 msgid "%prog [options] myebook.mobi" msgstr "%prog [opties] mijnboek.mobi" -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:343 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:346 msgid "Output directory. Defaults to current directory." msgstr "Output folder. Standaard is dit de huidige folder." -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:362 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:365 msgid "Raw MOBI HTML saved in" msgstr "RAW MOBI HTML bewaard in" -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:364 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:367 msgid "OEB ebook created in" msgstr "OEB boek bemaakt in" @@ -1007,47 +1010,47 @@ msgstr "Eenvoudig" msgid "Advanced" msgstr "Geavanceerd" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:102 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:104 msgid "<br>Must be a directory." msgstr "<br>Moet een folder zijn." -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:102 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:104 msgid "Invalid database location " msgstr "Foutieve database locatie " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:102 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:105 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:104 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:107 msgid "Invalid database location" msgstr "Foutieve database locatie" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:105 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:107 msgid "Invalid database location.<br>Cannot write to " msgstr "Foutieve database locatie.<br>Kan niet schrijven naar " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:117 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:119 msgid "Compacting database. This may take a while." msgstr "Database aan het comprimeren. Dit kan even duren." -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:117 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:119 msgid "Compacting..." msgstr "Comprimeren..." -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:202 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:206 #: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:265 msgid "Configuration" msgstr "Configuratie" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:203 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:207 msgid "&Location of books database (library1.db)" msgstr "&Locatie van boek database )library1.db)" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:204 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:208 msgid "Browse for the new database location" msgstr "Blader naar de nieuwe database locatie" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:205 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:221 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:223 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:209 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:226 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:228 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:513 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:278 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:287 @@ -1066,23 +1069,27 @@ msgstr "Blader naar de nieuwe database locatie" msgid "..." msgstr "..." -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:206 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:210 msgid "Use &Roman numerals for series number" msgstr "Gebruik &Romeinse nummers voor de series" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:207 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:211 +msgid "Show notification when &new version is available" +msgstr "Notificeer als een &nieuwe versie beschikbaar is" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:212 msgid "Format for &single file save:" msgstr "Opglagformaat voor &enkel bestand:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:208 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:213 msgid "&Priority for conversion jobs:" msgstr "&Prioriteit van conversie batch" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:209 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:214 msgid "Default network &timeout:" msgstr "Standaard netwerk &timeout:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:210 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:215 msgid "" "Set the default timeout for network fetches (i.e. anytime we go out to the " "internet to get information)" @@ -1090,59 +1097,59 @@ msgstr "" "Geef de standaard timeout voor netwerk downloads. (bv. wanneer we informatie " "van het Internet moeten halen)" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:211 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:216 msgid " seconds" msgstr " seconden" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:212 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:217 msgid "Toolbar" msgstr "Werkbalk" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:213 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:218 msgid "Large" msgstr "Groot" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:214 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:219 msgid "Medium" msgstr "Middel" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:215 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:220 msgid "Small" msgstr "Klein" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:216 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:221 msgid "&Button size in toolbar" msgstr "&Knop grootte in werkbalk" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:217 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:222 msgid "Show &text in toolbar buttons" msgstr "Laat &tekst zien in werkbalk knoppen" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:218 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:223 msgid "Select visible &columns in library view" msgstr "Selecteer zichtbare &kolommen in bibliotheek weergave" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:219 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:224 msgid "Frequently used directories" msgstr "Vaak gebruikte folders" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:220 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:225 msgid "Add a directory to the frequently used directories list" msgstr "Voeg een folder toe aan de lijst met vaak gebruikte folders" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:222 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:227 msgid "Remove a directory from the frequently used directories list" msgstr "Verwijder een folder van de lijst met vaak gebruikte folders" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:224 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:229 msgid "Free unused diskspace from the database" msgstr "Geef ongebruikte diskruimte uit de database terug" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:225 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:230 msgid "&Compact database" msgstr "&Comprimeer database" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:226 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:231 msgid "&Metadata from file name" msgstr "&Metadata van bestands naam" @@ -1281,7 +1288,7 @@ msgid "Convert %s to LRF" msgstr "Converteer %s naar LRF" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:108 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:177 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:175 msgid "Set conversion defaults" msgstr "Zet conversie standaarden" @@ -2299,21 +2306,22 @@ msgstr "Tijdsaanduiding" msgid "Search (For Advanced Search click the button to the left)" msgstr "Zoeken (Voor geavanceerd zoeken klik op de knop links)" -#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/config_ui.py:48 +#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/config_ui.py:47 msgid "Configure Viewer" msgstr "Configureer Viewer" -#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/config_ui.py:49 +#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/config_ui.py:48 msgid "Use white background" msgstr "Gebruik witte achtergrond" -#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/config_ui.py:50 +#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/config_ui.py:49 msgid "Hyphenate" msgstr "Afbreken" -#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/config_ui.py:51 -msgid "<b>Changes will only take affect after a restart." -msgstr "<b>Veranderingen zijn pas zichtbaar na een herstart." +#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/config_ui.py:50 +msgid "<b>Changes will only take effect after a restart.</b>" +msgstr "" +"<b>Veranderingen zullen alleen van kracht worden na een herstart.</b>" #: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main.py:63 msgid " - LRF Viewer" @@ -2367,11 +2375,11 @@ msgstr "Open eboek" msgid "Configure" msgstr "Configureer" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:82 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:80 msgid "Error communicating with device" msgstr "Fout bij communicatie met lezer" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:95 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:93 msgid "" "<p>For help visit <a " "href=\"http://%s.kovidgoyal.net/user_manual\">%s.kovidgoyal.net</a><br>" @@ -2379,43 +2387,43 @@ msgstr "" "<p>Voor assistentie, bezoek <a " "href=\"http://%s.kovidgoyal.net/user_manual\">%s.kovidgoyal.net</a><br>" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:96 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:94 msgid "<b>%s</b>: %s by <b>Kovid Goyal %%(version)s</b><br>%%(device)s</p>" msgstr "" "<b>%s</b>: %s door <b>Kovid Goyal %%(version)s</b><br>%%(device)s</p>" +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:112 #: /home/kovid/work/calibre/src/calibre/gui2/main.py:114 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:116 msgid "Send to main memory" msgstr "Stuur naar hoofdgeheugen" +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:113 #: /home/kovid/work/calibre/src/calibre/gui2/main.py:115 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:117 msgid "Send to storage card" msgstr "Stuur naar opslag kaart" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:116 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:117 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:114 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:115 msgid "and delete from library" msgstr "en verwijder uit bibliotheek" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:119 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:117 msgid "Send to storage card by default" msgstr "Bewaar standaard op geheugen kaart" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:131 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:129 msgid "Edit metadata individually" msgstr "Bewerk metadata individueel" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:132 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:130 msgid "Edit metadata in bulk" msgstr "Bewerk metadata in groep" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:135 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:133 msgid "Add books from a single directory" msgstr "Voeg boeken toe uit een enkele folder" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:136 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:134 msgid "" "Add books recursively (One book per directory, assumes every ebook file is " "the same book in a different format)" @@ -2423,7 +2431,7 @@ msgstr "" "Voeg recursief boeken toe (Een boek per folder, neemt aan dat ieder eboek " "bestand hetzelfde boek is in een ander formaat)" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:137 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:135 msgid "" "Add books recursively (Multiple books per directory, assumes every ebook " "file is a different book)" @@ -2431,53 +2439,53 @@ msgstr "" "voeg recursief boeken toe (Meerdere boeken per folder, neemt aan dat ieder " "eboek bestand een ander boek is)" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:152 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:150 #: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:275 msgid "Save to disk" msgstr "Opslaan op schijf" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:153 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:151 msgid "Save to disk in a single directory" msgstr "Opslaan op schijf in een enkele folder" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:154 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:152 msgid "Save only %s format to disk" msgstr "Bewaar alleen %formaat op schijf" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:157 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:155 #: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:281 msgid "View" msgstr "Bekijk" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:158 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:156 msgid "View specific format" msgstr "Bekijk specifiek formaat" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:174 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:172 msgid "Convert individually" msgstr "Converteer Individueel" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:175 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:173 msgid "Bulk convert" msgstr "Converteer Groep" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:309 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:307 msgid " detected." msgstr " gedetecteerd" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:309 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:307 msgid "Device: " msgstr "Apparaat: " -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:334 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:332 msgid "Connected " msgstr "Verbonden " -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:346 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:344 msgid "Device database corrupted" msgstr "Apparaat Database Beschadigd" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:347 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:345 msgid "" "\n" " <p>The database of books on the reader is corrupted. Try the " @@ -2506,8 +2514,8 @@ msgstr "" " </ol>\n" " " -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:399 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:473 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:397 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:471 msgid "" "<p>Books with the same title as the following already exist in the database. " "Add them anyway?<ul>" @@ -2515,53 +2523,53 @@ msgstr "" "<p>Boeken met de volgende titels bestaan al in de database. Wil je ze echt " "toevoegen?<ul>" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:402 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:476 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:400 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:474 msgid "Duplicates found!" msgstr "Duplicaten gevonden!" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:435 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:448 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:433 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:446 msgid "Uploading books to device." msgstr "Boeken worden geupload naar de lezer." -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:507 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:505 msgid "No space on device" msgstr "Geen schijfruimte op de lezer." -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:508 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:506 msgid "" "<p>Cannot upload books to device there is no more free space available " msgstr "" "<p>De boeken kunnen niet worden geupload naar de lezer, omdat er onvoldoende " "schijfruimte beschikbaar is " -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:546 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:544 msgid "Deleting books from device." msgstr "Boeken worden verwijderd van de lezer." -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:578 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:599 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:576 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:597 msgid "Cannot edit metadata" msgstr "Metedata kan niet worden gewijzigd" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:578 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:599 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:694 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:764 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:834 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:576 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:597 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:692 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:762 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:832 msgid "No books selected" msgstr "Geen boeken geselecteerd" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:674 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:672 msgid "Sending books to device." msgstr "Boeken worden naar de lezer verzonden." -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:677 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:675 msgid "No suitable formats" msgstr "Geen geschikte formaten" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:678 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:676 msgid "" "Could not upload the following books to the device, as no suitable formats " "were found:<br><ul>%s</ul>" @@ -2569,11 +2577,11 @@ msgstr "" "De volgende boeken konden niet naar de lezer worden deupload, omdat geen " "geschikt formaat werd gevonden:<br><ul>%s</ul>" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:694 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:692 msgid "Cannot save to disk" msgstr "Kan niet naar schijf worden opgeslagen" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:705 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:703 msgid "" "<p>Could not save the following books to disk, because the %s format is not " "available for them:<ul>" @@ -2581,68 +2589,68 @@ msgstr "" "<p>De volgende boeken konden niet worden bewaard op schijf, omdat het %s " "formaat niet beschikbaar is:<ul>" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:709 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:707 msgid "Could not save some ebooks" msgstr "Sommige boeken konden niet worden opgeslagen" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:742 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:740 msgid "Fetch news from " msgstr "Download nieuws van " -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:744 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:742 msgid "Fetching news from " msgstr "Downloading nieuws van " -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:754 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:752 msgid "News fetched. Uploading to device." msgstr "Nieuws gedownload, uploading naar lezer." -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:764 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:834 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:762 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:832 msgid "Cannot convert" msgstr "Kan niet converteren" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:773 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:771 msgid "Starting Bulk conversion of %d books" msgstr "Begin groep convertering van %d boeken" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:905 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:923 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:903 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:921 msgid "No book selected" msgstr "Geen boek geselecteerd" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:905 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:923 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:937 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:903 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:921 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:935 msgid "Cannot view" msgstr "Kan niet bekijken" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:911 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:942 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:909 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:940 msgid "Choose the format to view" msgstr "Kies het te bekijken formaat" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:938 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:936 msgid "%s has no available formats." msgstr "%s heeft geen beschikbare formaten" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:976 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:974 msgid "Cannot configure" msgstr "Kan niet configureren" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:976 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:974 msgid "Cannot configure while there are running jobs." msgstr "Can niet configueren terwijl bestaande opdrachten bezig zijn" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:999 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:997 msgid "Copying database to " msgstr "copieer database naar " -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1014 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1012 msgid "Invalid database" msgstr "ongeldige database" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1015 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1013 msgid "" "<p>An invalid database already exists at %s, delete it before trying to move " "the existing database.<br>Error: %s" @@ -2650,23 +2658,23 @@ msgstr "" "<p>Een ongeldige database bestaat op %s, verwijder deze voordat je probeert " "de bestaande database te verplaatsen.<br>Foutmelding: %s" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1023 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1021 msgid "Could not move database" msgstr "Database kon niet worden verplaatst" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1044 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1042 msgid "No detailed info available" msgstr "Geen details beschikbaar" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1045 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1043 msgid "No detailed information is available for books on the device." msgstr "Geen details zijn beschikbaar voor de boeken op de lezer." -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1087 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1085 msgid "Error talking to device" msgstr "Fout bij communicatie met lezer" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1088 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1086 msgid "" "There was a temporary error talking to the device. Please unplug and " "reconnect the device and or reboot." @@ -2674,15 +2682,15 @@ msgstr "" "Er is een tijdelijke fout opgetreden tijdens de communicatie met de lezer. " "verwijzer de lezer en plug hem opnieuw in, of herstart." -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1139 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1137 msgid "Conversion Error" msgstr "Converteer Fout" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1158 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1156 msgid "Database does not exist" msgstr "database bestaat niet" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1158 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1156 msgid "" "The directory in which the database should be: %s no longer exists. Please " "choose a new database location." @@ -2690,7 +2698,7 @@ msgstr "" "De folder waarin de database zou moetten zijn: %s bestaat niet meer. Kies " "een nieuwe database locatie." -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1209 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1207 msgid "" "<span style=\"color:red; font-weight:bold\">Latest version: <a " "href=\"%s\">%s</a></span>" @@ -2698,7 +2706,7 @@ msgstr "" "<span style=\"color:red; font-weight:bold\">Laatste versie: <a " "href=\"%s\">%s</a></span>" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1215 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1213 msgid "" "%s has been updated to version %s. See the <a " "href=\"http://calibre.kovidgoyal.net/wiki/Changelog\">new features</a>. " @@ -2708,7 +2716,7 @@ msgstr "" "href=\"http://calibre.kovidgoyal.net/wiki/Changelog\">nieuwe functies</a> " "Bezoek download pagina?" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1215 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1213 msgid "Update available" msgstr "Update beschikbaar" @@ -3170,7 +3178,7 @@ msgstr "" "commando is een van de volgende:\n" " %s\n" -#: /home/kovid/work/calibre/src/calibre/parallel.py:317 +#: /home/kovid/work/calibre/src/calibre/parallel.py:321 msgid "Could not launch worker process." msgstr "Werker sessie kan niet worden gestart." @@ -3318,69 +3326,69 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/web/feeds/main.py:84 #: /home/kovid/work/calibre/src/calibre/web/feeds/main.py:88 -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:576 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:577 msgid "Fetching feeds..." msgstr "Downloading feeds..." -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:33 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:34 msgid "Unknown News Source" msgstr "Onbekende Nieuwe Bron" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:474 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:475 msgid "Download finished" msgstr "Download voltooid" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:476 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:477 msgid "Failed to download the following articles:" msgstr "De volgende artikelen konden niet worden gedownload:" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:478 -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:484 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:479 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:485 msgid " from " msgstr " van " -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:482 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:483 msgid "Failed to download parts of the following articles:" msgstr "Delen van de volgende artikelen konden niet worden gedownload:" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:486 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:487 msgid "\tFailed links:" msgstr "\tMislukte links:" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:558 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:559 msgid "Could not fetch article. Run with --debug to see the reason" msgstr "" "Artikel kon niet worden gedownload. Draai met --debug om de reden te zien" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:580 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:581 msgid "Got feeds from index page" msgstr "feeds van index pagina" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:584 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:585 msgid "Trying to download cover..." msgstr "Probeer omslag te downloaden" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:636 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:637 msgid "Starting download [%d thread(s)]..." msgstr "Begin download [%d thread(s)]..." -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:649 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:650 msgid "Feeds downloaded to %s" msgstr "Feeds gedownload tot %s" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:659 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:660 msgid "Could not download cover: %s" msgstr "Kon omslag niet downloaden: %s" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:664 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:665 msgid "Downloading cover from %s" msgstr "Download omslag van %s" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:698 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:699 msgid "Untitled Article" msgstr "Artikel zonder Naam" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:744 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:745 msgid "" "\n" "Downloaded article %s from %s\n" @@ -3390,19 +3398,19 @@ msgstr "" "Artikel %s van %s gedownload\n" "%s" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:750 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:751 msgid "Article downloaded: %s" msgstr "Artikel gedownload: %s" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:756 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:757 msgid "Failed to download article: %s from %s\n" msgstr "Artikel %s van %s kon niet worden gedownload\n" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:761 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:762 msgid "Article download failed: %s" msgstr "Artikel download mislukt: %s" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:776 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:777 msgid "Fetching feed" msgstr "Downloading feed" diff --git a/src/calibre/translations/pt.po b/src/calibre/translations/pt.po index fab9546d23..3412cd0a34 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 <EMAIL@ADDRESS>\n" -"POT-Creation-Date: 2008-06-30 23:41+0000\n" +"POT-Creation-Date: 2008-07-09 04:18+0000\n" "PO-Revision-Date: 2008-07-05 03:33+0000\n" "Last-Translator: Tiago Silva <Unknown>\n" "Language-Team: Portuguese <pt@li.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2008-07-09 03:20+0000\n" +"X-Launchpad-Export-Date: 2008-07-19 02:36+0000\n" "X-Generator: Launchpad (build Unknown)\n" #: /home/kovid/work/calibre/src/calibre/__init__.py:133 @@ -35,17 +35,17 @@ msgstr "" msgid "The reader has no storage card connected." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:73 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:71 msgid "Set the title. Default: filename." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:75 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:73 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:76 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:74 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:174 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf.py:314 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf.py:429 @@ -57,173 +57,173 @@ msgstr "" msgid "Unknown" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:78 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:76 msgid "Set the comment." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:80 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:78 msgid "Set the category" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:82 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:80 msgid "Sort key for the title" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:84 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:82 msgid "Sort key for the author" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:86 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:84 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:39 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search.py:16 #: /home/kovid/work/calibre/src/calibre/gui2/library.py:409 msgid "Publisher" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:88 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:86 msgid "Path to file containing image to be used as cover" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:90 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:88 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:93 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:91 msgid "Output file name. Default is derived from input filename" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:95 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:93 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:98 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:96 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:100 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:98 msgid "Enable autorotation of images that are wider than the screen width." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:103 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:101 msgid "Set the space between words in pts. Default is %default" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:105 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:103 msgid "Separate paragraphs by blank lines." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:107 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:105 msgid "Add a header to all the pages with title and author." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:109 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:107 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:111 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:109 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:113 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:111 msgid "" "Use the <spine> 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:115 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:113 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:117 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:115 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:122 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:120 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:128 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:126 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:134 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:132 msgid "Left margin of page. Default is %default px." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:136 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:134 msgid "Right margin of page. Default is %default px." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:138 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:136 msgid "Top margin of page. Default is %default px." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:140 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:138 msgid "Bottom margin of page. Default is %default px." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:142 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:140 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:144 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:142 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:149 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:147 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 <a> tags are " "ignored." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:153 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:151 msgid "" "A regular expression. <a> tags whose href matches will be ignored. Defaults " "to %default" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:157 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:155 msgid "Don't add links to the table of contents." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:161 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:159 msgid "Prevent the automatic detection chapters." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:164 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:162 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:167 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:165 msgid "" "Detect a chapter beginning at an element having the specified attribute. The " "format for this option is tagname regexp,attribute name,attribute value " @@ -231,7 +231,7 @@ msgid "" "class=\"chapter\" you would use \"h\\d,class,chapter\". Default is %default" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:169 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:167 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 " @@ -242,12 +242,12 @@ msgid "" "has only a few elements." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:179 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:177 msgid "" "Force a page break before tags whose names match this regular expression." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:181 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:179 msgid "" "Force a page break before an element having the specified attribute. The " "format for this option is tagname regexp,attribute name,attribute value " @@ -255,25 +255,25 @@ msgid "" "class=\"chapter\" you would use \"h\\d,class,chapter\". Default is %default" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:184 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:182 msgid "Add detected chapters to the table of contents." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:187 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:185 msgid "Preprocess Baen HTML files to improve generated LRF." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:189 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:187 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:191 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:189 msgid "Use this option on html0 files from Book Designer." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:194 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:192 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 " @@ -281,33 +281,33 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:202 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:200 msgid "The serif family of fonts to embed" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:205 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:203 msgid "The sans-serif family of fonts to embed" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:208 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:206 msgid "The monospace family of fonts to embed" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:212 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:210 msgid "Be verbose while processing" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:214 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:212 msgid "Convert to LRS" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:216 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:214 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:218 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:216 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 " @@ -315,7 +315,7 @@ msgid "" "default is to try and guess the encoding." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/any/convert_from.py:143 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/any/convert_from.py:144 msgid "" "any2lrf [options] myfile\n" "\n" @@ -326,7 +326,7 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/any/convert_from.py:158 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/any/convert_from.py:159 msgid "No file to convert specified." msgstr "" @@ -379,79 +379,79 @@ msgstr "" msgid "Written preprocessed HTML to " msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:372 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:373 msgid "Processing %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:386 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:387 msgid "\tConverting to BBeB..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:529 -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:542 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:530 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:543 msgid "Could not parse file: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:534 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:535 msgid "%s is an empty file" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:554 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:555 msgid "Failed to parse link %s %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:598 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:599 msgid "Cannot add link %s to TOC" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:943 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:944 msgid "Unable to process image %s. Error: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:981 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:982 msgid "Unable to process interlaced PNG %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:996 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:997 msgid "" "Could not process image: %s\n" "%s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1743 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1744 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:1745 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1746 msgid "" "Bad table:\n" "%s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1767 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1768 msgid "Table has cell that is too large" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1797 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1798 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:1839 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1841 msgid "Could not read cover image: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1842 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1844 msgid "Cannot read from: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1976 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1978 msgid "Failed to process opf file" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1982 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1984 msgid "" "Usage: %prog [options] mybook.html\n" "\n" @@ -722,19 +722,19 @@ msgstr "" msgid "No filename specified." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:341 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:344 msgid "%prog [options] myebook.mobi" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:343 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:346 msgid "Output directory. Defaults to current directory." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:362 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:365 msgid "Raw MOBI HTML saved in" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:364 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:367 msgid "OEB ebook created in" msgstr "" @@ -780,47 +780,47 @@ msgstr "" msgid "Advanced" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:102 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:104 msgid "<br>Must be a directory." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:102 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:104 msgid "Invalid database location " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:102 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:105 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:104 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:107 msgid "Invalid database location" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:105 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:107 msgid "Invalid database location.<br>Cannot write to " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:117 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:119 msgid "Compacting database. This may take a while." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:117 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:119 msgid "Compacting..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:202 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:206 #: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:265 msgid "Configuration" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:203 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:207 msgid "&Location of books database (library1.db)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:204 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:208 msgid "Browse for the new database location" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:205 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:221 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:223 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:209 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:226 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:228 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:513 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:278 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:287 @@ -839,81 +839,85 @@ msgstr "" msgid "..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:206 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:210 msgid "Use &Roman numerals for series number" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:207 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:211 +msgid "Show notification when &new version is available" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:212 msgid "Format for &single file save:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:208 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:213 msgid "&Priority for conversion jobs:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:209 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:214 msgid "Default network &timeout:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:210 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:215 msgid "" "Set the default timeout for network fetches (i.e. anytime we go out to the " "internet to get information)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:211 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:216 msgid " seconds" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:212 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:217 msgid "Toolbar" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:213 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:218 msgid "Large" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:214 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:219 msgid "Medium" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:215 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:220 msgid "Small" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:216 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:221 msgid "&Button size in toolbar" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:217 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:222 msgid "Show &text in toolbar buttons" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:218 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:223 msgid "Select visible &columns in library view" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:219 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:224 msgid "Frequently used directories" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:220 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:225 msgid "Add a directory to the frequently used directories list" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:222 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:227 msgid "Remove a directory from the frequently used directories list" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:224 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:229 msgid "Free unused diskspace from the database" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:225 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:230 msgid "&Compact database" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:226 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:231 msgid "&Metadata from file name" msgstr "" @@ -1045,7 +1049,7 @@ msgid "Convert %s to LRF" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:108 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:177 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:175 msgid "Set conversion defaults" msgstr "" @@ -1996,20 +2000,20 @@ msgstr "" msgid "Search (For Advanced Search click the button to the left)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/config_ui.py:48 +#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/config_ui.py:47 msgid "Configure Viewer" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/config_ui.py:49 +#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/config_ui.py:48 msgid "Use white background" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/config_ui.py:50 +#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/config_ui.py:49 msgid "Hyphenate" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/config_ui.py:51 -msgid "<b>Changes will only take affect after a restart." +#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/config_ui.py:50 +msgid "<b>Changes will only take effect after a restart.</b>" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main.py:63 @@ -2064,110 +2068,110 @@ msgstr "" msgid "Configure" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:82 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:80 msgid "Error communicating with device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:95 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:93 msgid "" "<p>For help visit <a " "href=\"http://%s.kovidgoyal.net/user_manual\">%s.kovidgoyal.net</a><br>" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:96 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:94 msgid "<b>%s</b>: %s by <b>Kovid Goyal %%(version)s</b><br>%%(device)s</p>" msgstr "" +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:112 #: /home/kovid/work/calibre/src/calibre/gui2/main.py:114 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:116 msgid "Send to main memory" msgstr "" +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:113 #: /home/kovid/work/calibre/src/calibre/gui2/main.py:115 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:117 msgid "Send to storage card" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:116 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:117 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:114 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:115 msgid "and delete from library" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:119 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:117 msgid "Send to storage card by default" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:131 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:129 msgid "Edit metadata individually" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:132 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:130 msgid "Edit metadata in bulk" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:135 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:133 msgid "Add books from a single directory" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:136 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:134 msgid "" "Add books recursively (One book per directory, assumes every ebook file is " "the same book in a different format)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:137 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:135 msgid "" "Add books recursively (Multiple books per directory, assumes every ebook " "file is a different book)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:152 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:150 #: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:275 msgid "Save to disk" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:153 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:151 msgid "Save to disk in a single directory" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:154 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:152 msgid "Save only %s format to disk" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:157 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:155 #: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:281 msgid "View" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:158 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:156 msgid "View specific format" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:174 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:172 msgid "Convert individually" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:175 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:173 msgid "Bulk convert" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:309 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:307 msgid " detected." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:309 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:307 msgid "Device: " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:334 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:332 msgid "Connected " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:346 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:344 msgid "Device database corrupted" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:347 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:345 msgid "" "\n" " <p>The database of books on the reader is corrupted. Try the " @@ -2183,190 +2187,190 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:399 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:473 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:397 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:471 msgid "" "<p>Books with the same title as the following already exist in the database. " "Add them anyway?<ul>" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:402 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:476 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:400 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:474 msgid "Duplicates found!" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:435 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:448 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:433 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:446 msgid "Uploading books to device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:507 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:505 msgid "No space on device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:508 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:506 msgid "" "<p>Cannot upload books to device there is no more free space available " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:546 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:544 msgid "Deleting books from device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:578 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:599 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:576 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:597 msgid "Cannot edit metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:578 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:599 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:694 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:764 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:834 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:576 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:597 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:692 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:762 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:832 msgid "No books selected" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:674 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:672 msgid "Sending books to device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:677 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:675 msgid "No suitable formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:678 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:676 msgid "" "Could not upload the following books to the device, as no suitable formats " "were found:<br><ul>%s</ul>" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:694 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:692 msgid "Cannot save to disk" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:705 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:703 msgid "" "<p>Could not save the following books to disk, because the %s format is not " "available for them:<ul>" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:709 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:707 msgid "Could not save some ebooks" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:742 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:740 msgid "Fetch news from " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:744 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:742 msgid "Fetching news from " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:754 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:752 msgid "News fetched. Uploading to device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:764 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:834 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:762 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:832 msgid "Cannot convert" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:773 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:771 msgid "Starting Bulk conversion of %d books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:905 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:923 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:903 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:921 msgid "No book selected" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:905 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:923 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:937 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:903 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:921 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:935 msgid "Cannot view" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:911 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:942 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:909 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:940 msgid "Choose the format to view" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:938 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:936 msgid "%s has no available formats." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:976 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:974 msgid "Cannot configure" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:976 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:974 msgid "Cannot configure while there are running jobs." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:999 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:997 msgid "Copying database to " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1014 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1012 msgid "Invalid database" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1015 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1013 msgid "" "<p>An invalid database already exists at %s, delete it before trying to move " "the existing database.<br>Error: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1023 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1021 msgid "Could not move database" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1044 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1042 msgid "No detailed info available" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1045 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1043 msgid "No detailed information is available for books on the device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1087 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1085 msgid "Error talking to device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1088 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1086 msgid "" "There was a temporary error talking to the device. Please unplug and " "reconnect the device and or reboot." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1139 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1137 msgid "Conversion Error" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1158 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1156 msgid "Database does not exist" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1158 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1156 msgid "" "The directory in which the database should be: %s no longer exists. Please " "choose a new database location." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1209 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1207 msgid "" "<span style=\"color:red; font-weight:bold\">Latest version: <a " "href=\"%s\">%s</a></span>" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1215 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1213 msgid "" "%s has been updated to version %s. See the <a " "href=\"http://calibre.kovidgoyal.net/wiki/Changelog\">new features</a>. " "Visit the download page?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1215 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1213 msgid "Update available" msgstr "" @@ -2741,7 +2745,7 @@ msgid "" "For help on an individual command: %%prog command --help\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/parallel.py:317 +#: /home/kovid/work/calibre/src/calibre/parallel.py:321 msgid "Could not launch worker process." msgstr "" @@ -2856,87 +2860,87 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/web/feeds/main.py:84 #: /home/kovid/work/calibre/src/calibre/web/feeds/main.py:88 -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:576 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:577 msgid "Fetching feeds..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:33 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:34 msgid "Unknown News Source" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:474 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:475 msgid "Download finished" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:476 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:477 msgid "Failed to download the following articles:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:478 -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:484 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:479 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:485 msgid " from " msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:482 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:483 msgid "Failed to download parts of the following articles:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:486 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:487 msgid "\tFailed links:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:558 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:559 msgid "Could not fetch article. Run with --debug to see the reason" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:580 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:581 msgid "Got feeds from index page" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:584 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:585 msgid "Trying to download cover..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:636 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:637 msgid "Starting download [%d thread(s)]..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:649 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:650 msgid "Feeds downloaded to %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:659 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:660 msgid "Could not download cover: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:664 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:665 msgid "Downloading cover from %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:698 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:699 msgid "Untitled Article" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:744 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:745 msgid "" "\n" "Downloaded article %s from %s\n" "%s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:750 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:751 msgid "Article downloaded: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:756 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:757 msgid "Failed to download article: %s from %s\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:761 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:762 msgid "Article download failed: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:776 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:777 msgid "Fetching feed" msgstr "" diff --git a/src/calibre/translations/ru.po b/src/calibre/translations/ru.po index 85ceee6bcc..d078b1d7d5 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: 2008-06-30 23:41+0000\n" +"POT-Creation-Date: 2008-07-09 04:18+0000\n" "PO-Revision-Date: 2008-07-02 21:26+0000\n" "Last-Translator: Danil Semelenov <Unknown>\n" "Language-Team: ru\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2008-07-09 03:20+0000\n" +"X-Launchpad-Export-Date: 2008-07-19 02:36+0000\n" "X-Generator: Launchpad (build Unknown)\n" "Generated-By: pygettext.py 1.5\n" @@ -36,11 +36,11 @@ msgstr "Не удалось определить диск %s. Попробуйт msgid "The reader has no storage card connected." msgstr "К ридеру не подключена карта памяти." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:73 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:71 msgid "Set the title. Default: filename." msgstr "Укажите заголовок. По умолчанию: имя файла." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:75 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:73 #, fuzzy msgid "" "Set the author(s). Multiple authors should be set as a comma separated list. " @@ -49,7 +49,7 @@ msgstr "" "Укажите автора(ов). Несколько авторов должны быть отделены запятыми. По " "умолчанию: %default" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:76 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:74 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:174 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf.py:314 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf.py:429 @@ -61,35 +61,35 @@ msgstr "" msgid "Unknown" msgstr "Неизвестно" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:78 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:76 msgid "Set the comment." msgstr "Укажите комментарий." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:80 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:78 #, fuzzy msgid "Set the category" msgstr "Укажите жанр" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:82 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:80 msgid "Sort key for the title" msgstr "Значение для сортировки по заголовку" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:84 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:82 msgid "Sort key for the author" msgstr "Значение для сортировки по автору" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:86 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:84 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:39 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search.py:16 #: /home/kovid/work/calibre/src/calibre/gui2/library.py:409 msgid "Publisher" msgstr "Издатель" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:88 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:86 msgid "Path to file containing image to be used as cover" msgstr "Путь к файлу изображения, которое будет использоваться как обложка" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:90 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:88 msgid "" "If there is a cover graphic detected in the source file, use that instead of " "the specified cover." @@ -97,12 +97,12 @@ msgstr "" "Использовать изображение обложки, найденное в исходном файле, вместо " "указанного." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:93 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:91 msgid "Output file name. Default is derived from input filename" msgstr "" "Выходное имя файла. По умолчанию будет образовано из имени входного файла" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:95 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:93 msgid "" "Render HTML tables as blocks of text instead of actual tables. This is " "neccessary if the HTML contains very large or complex tables." @@ -110,7 +110,7 @@ msgstr "" "Отображать HTML-таблицы как блоки текста, а не как таблицы. Можно это " "использовать, если HTML содержит слишком большие таблицы." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:98 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:96 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 " @@ -121,25 +121,25 @@ msgstr "" "над ней. Установите ее в 0, чтобы использовать --font-delta. По умолчанию: " "%default пунктов" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:100 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:98 msgid "Enable autorotation of images that are wider than the screen width." msgstr "" "Разрешить автоматический разворот изображений, которые не умещаются на " "экране по ширине." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:103 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:101 msgid "Set the space between words in pts. Default is %default" msgstr "Укажите отступ между словами в пунктах. По умолчанию: %default" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:105 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:103 msgid "Separate paragraphs by blank lines." msgstr "Делать пространства между абзацами." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:107 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:105 msgid "Add a header to all the pages with title and author." msgstr "Добавить верхний колонтитул ко всем страницам с заголовком и автором" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:109 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:107 msgid "" "Set the format of the header. %a is replaced by the author and %t by the " "title. Default is %default" @@ -147,7 +147,7 @@ msgstr "" "Указать формат верхнего колонтитула. %a будет заменено на автора и %t на " "заголовок. По умолчанию: %default" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:111 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:109 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." @@ -155,7 +155,7 @@ msgstr "" "Переопределить CSS. Можно указать путь к файлу стилей CSS или строку. Строка " "будет интерпретирована как CSS-стиль." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:113 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:111 msgid "" "Use the <spine> 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 " @@ -165,7 +165,7 @@ msgstr "" "котором HTML-файлы будут следовать в LRF. Файл .opf должен быть в той же " "директории, что и основной HTML-файл." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:115 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:113 msgid "" "Minimum paragraph indent (the indent of the first line of a paragraph) in " "pts. Default: %default" @@ -173,7 +173,7 @@ msgstr "" "Минимальный отступ абзаца (отступ первой строки абзаца) в пунктах. По " "умолчанию: %default" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:117 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:115 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 " @@ -183,7 +183,7 @@ msgstr "" "FONT_DELTA пунктов. Значение FONT_DELTA может быть дробным. Если FONT_DELTA " "указано отрицательным, то размер шрифта будет уменьшен." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:122 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:120 msgid "" "Render all content as black on white instead of the colors specified by the " "HTML or CSS." @@ -191,7 +191,7 @@ msgstr "" "Отображать текст черным цветом на белом фоне, игнорируя цвета, указанные в " "HTML или CSS." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:128 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:126 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 " @@ -201,23 +201,23 @@ msgstr "" "определяет такие вещи, как разрешение и размер экрана на целевом устройстве. " "По умолчанию: %s Поддерживаемые профили: " -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:134 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:132 msgid "Left margin of page. Default is %default px." msgstr "Отступ слева на странице. По умолчанию: %default пикселей." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:136 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:134 msgid "Right margin of page. Default is %default px." msgstr "Отступ справа на странице. По умолчанию: %default пикселей." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:138 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:136 msgid "Top margin of page. Default is %default px." msgstr "Отступ сверху на странице. По умолчанию: %default пикселей." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:140 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:138 msgid "Bottom margin of page. Default is %default px." msgstr "Отступ снизу на странице. По умолчанию: %default пикселей." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:142 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:140 msgid "" "Render tables in the HTML as images (useful if the document has large or " "complex tables)" @@ -225,7 +225,7 @@ msgstr "" "Представлять таблицы в HTML как изображения (может быть полезным, если в " "документе содержатся большие или сложные таблицы)" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:144 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:142 msgid "" "Multiply the size of text in rendered tables by this factor. Default is " "%default" @@ -233,7 +233,7 @@ msgstr "" "Умножить значение размера текста в отображаемых таблицах на это значение. По " "умолчанию: %default" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:149 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:147 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 <a> tags are " @@ -243,7 +243,7 @@ msgstr "" "означает, что ссылки не поддерживаются. Отрицательное значение означает, что " "теги <a> будут проигнорированы." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:153 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:151 msgid "" "A regular expression. <a> tags whose href matches will be ignored. Defaults " "to %default" @@ -251,15 +251,15 @@ msgstr "" "Регулярное выражение. Теги <a>, чьи значения href совпадут с ним, будут " "проигнорированы. По умолчанию: %default" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:157 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:155 msgid "Don't add links to the table of contents." msgstr "Не добавлять ссылок в содержание." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:161 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:159 msgid "Prevent the automatic detection chapters." msgstr "Отключить автоматическое определение глав." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:164 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:162 msgid "" "The regular expression used to detect chapter titles. It is searched for in " "heading tags (h1-h6). Defaults to %default" @@ -268,7 +268,7 @@ msgstr "" "глав. Иначе будут использованы теги заголовков (h1-h6). По умолчанию: " "%default" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:167 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:165 msgid "" "Detect a chapter beginning at an element having the specified attribute. The " "format for this option is tagname regexp,attribute name,attribute value " @@ -281,7 +281,7 @@ msgstr "" "тегами заголовков с атрибутом class=\"chapter\" необходим использовать \"h\\" "d,class,chapter\". По умолчанию: %default" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:169 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:167 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 " @@ -300,14 +300,14 @@ msgstr "" "образом эта опция игнорируется, если определенная страница состоит лишь из " "нескольких элементов." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:179 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:177 msgid "" "Force a page break before tags whose names match this regular expression." msgstr "" "Устанавливать разрывы страниц после тегов, имена которых соответствуют этому " "регулярному выражению." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:181 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:179 msgid "" "Force a page break before an element having the specified attribute. The " "format for this option is tagname regexp,attribute name,attribute value " @@ -316,15 +316,15 @@ msgid "" msgstr "" "Устанавливать разрывы страниц до элементов, имеющих определенный атрибут." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:184 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:182 msgid "Add detected chapters to the table of contents." msgstr "Добавлять найденные главы в содержание." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:187 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:185 msgid "Preprocess Baen HTML files to improve generated LRF." msgstr "Обработка файлов Baen HTML для улучшения генерируемого LRF." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:189 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:187 msgid "" "You must add this option if processing files generated by pdftohtml, " "otherwise conversion will fail." @@ -332,11 +332,11 @@ msgstr "" "Вы должны добавить эту опцию, если обрабатываемые файлы были сгенерированы " "утилитой pdftohtml, иначе преобразования не получится." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:191 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:189 msgid "Use this option on html0 files from Book Designer." msgstr "Используйте эту опцию для файлов html0 после Book Designer." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:194 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:192 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 " @@ -349,29 +349,29 @@ msgstr "" "страниц. Пример: --serif-family \"Times New Roman\"\n" " " -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:202 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:200 #, fuzzy msgid "The serif family of fonts to embed" msgstr "Набор шрифтов серии \"serif\" для использования" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:205 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:203 #, fuzzy msgid "The sans-serif family of fonts to embed" msgstr "Набор шрифтов серии \"sans-serif\" для использования" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:208 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:206 msgid "The monospace family of fonts to embed" msgstr "Набор шрифтов серии \"monospace\" для использования" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:212 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:210 msgid "Be verbose while processing" msgstr "Отображать избыточную информацию при обработке" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:214 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:212 msgid "Convert to LRS" msgstr "Преобразовать в LRF" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:216 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:214 msgid "" "Minimize memory usage at the cost of longer processing times. Use this " "option if you are on a memory constrained machine." @@ -379,7 +379,7 @@ msgstr "" "Уменьшить использование памяти ценой большего времени обработки. Используйте " "эту опцию, если на компьютере ограничена память." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:218 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:216 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 " @@ -392,7 +392,7 @@ msgstr "" "распространенный вариант — utf-8. По умолчанию будет сделана попытка угадать " "кодировку." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/any/convert_from.py:143 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/any/convert_from.py:144 msgid "" "any2lrf [options] myfile\n" "\n" @@ -411,7 +411,7 @@ msgstr "" "ZIP, пытаясь обнаружить электронную книгу в архиве.\n" " " -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/any/convert_from.py:158 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/any/convert_from.py:159 msgid "No file to convert specified." msgstr "Не указан файл для преобразования." @@ -473,79 +473,79 @@ msgstr "\tОпределен файл в формате Baen. Повторный msgid "Written preprocessed HTML to " msgstr "Предварительно обработанный HTML сохранен в " -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:372 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:373 msgid "Processing %s" msgstr "Обработка %s" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:386 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:387 msgid "\tConverting to BBeB..." msgstr "\tПреобразование в BBeB..." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:529 -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:542 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:530 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:543 msgid "Could not parse file: %s" msgstr "Не удалось разобрать файл: %s" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:534 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:535 msgid "%s is an empty file" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:554 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:555 msgid "Failed to parse link %s %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:598 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:599 msgid "Cannot add link %s to TOC" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:943 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:944 msgid "Unable to process image %s. Error: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:981 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:982 msgid "Unable to process interlaced PNG %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:996 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:997 msgid "" "Could not process image: %s\n" "%s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1743 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1744 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:1745 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1746 msgid "" "Bad table:\n" "%s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1767 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1768 msgid "Table has cell that is too large" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1797 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1798 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:1839 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1841 msgid "Could not read cover image: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1842 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1844 msgid "Cannot read from: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1976 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1978 msgid "Failed to process opf file" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1982 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1984 msgid "" "Usage: %prog [options] mybook.html\n" "\n" @@ -816,19 +816,19 @@ msgstr "" msgid "No filename specified." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:341 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:344 msgid "%prog [options] myebook.mobi" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:343 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:346 msgid "Output directory. Defaults to current directory." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:362 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:365 msgid "Raw MOBI HTML saved in" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:364 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:367 msgid "OEB ebook created in" msgstr "" @@ -874,47 +874,47 @@ msgstr "" msgid "Advanced" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:102 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:104 msgid "<br>Must be a directory." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:102 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:104 msgid "Invalid database location " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:102 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:105 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:104 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:107 msgid "Invalid database location" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:105 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:107 msgid "Invalid database location.<br>Cannot write to " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:117 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:119 msgid "Compacting database. This may take a while." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:117 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:119 msgid "Compacting..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:202 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:206 #: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:265 msgid "Configuration" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:203 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:207 msgid "&Location of books database (library1.db)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:204 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:208 msgid "Browse for the new database location" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:205 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:221 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:223 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:209 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:226 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:228 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:513 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:278 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:287 @@ -933,81 +933,85 @@ msgstr "" msgid "..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:206 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:210 msgid "Use &Roman numerals for series number" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:207 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:211 +msgid "Show notification when &new version is available" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:212 msgid "Format for &single file save:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:208 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:213 msgid "&Priority for conversion jobs:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:209 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:214 msgid "Default network &timeout:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:210 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:215 msgid "" "Set the default timeout for network fetches (i.e. anytime we go out to the " "internet to get information)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:211 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:216 msgid " seconds" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:212 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:217 msgid "Toolbar" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:213 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:218 msgid "Large" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:214 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:219 msgid "Medium" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:215 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:220 msgid "Small" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:216 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:221 msgid "&Button size in toolbar" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:217 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:222 msgid "Show &text in toolbar buttons" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:218 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:223 msgid "Select visible &columns in library view" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:219 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:224 msgid "Frequently used directories" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:220 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:225 msgid "Add a directory to the frequently used directories list" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:222 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:227 msgid "Remove a directory from the frequently used directories list" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:224 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:229 msgid "Free unused diskspace from the database" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:225 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:230 msgid "&Compact database" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:226 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:231 msgid "&Metadata from file name" msgstr "" @@ -1139,7 +1143,7 @@ msgid "Convert %s to LRF" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:108 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:177 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:175 msgid "Set conversion defaults" msgstr "" @@ -2090,20 +2094,20 @@ msgstr "" msgid "Search (For Advanced Search click the button to the left)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/config_ui.py:48 +#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/config_ui.py:47 msgid "Configure Viewer" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/config_ui.py:49 +#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/config_ui.py:48 msgid "Use white background" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/config_ui.py:50 +#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/config_ui.py:49 msgid "Hyphenate" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/config_ui.py:51 -msgid "<b>Changes will only take affect after a restart." +#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/config_ui.py:50 +msgid "<b>Changes will only take effect after a restart.</b>" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main.py:63 @@ -2158,110 +2162,110 @@ msgstr "" msgid "Configure" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:82 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:80 msgid "Error communicating with device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:95 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:93 msgid "" "<p>For help visit <a " "href=\"http://%s.kovidgoyal.net/user_manual\">%s.kovidgoyal.net</a><br>" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:96 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:94 msgid "<b>%s</b>: %s by <b>Kovid Goyal %%(version)s</b><br>%%(device)s</p>" msgstr "" +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:112 #: /home/kovid/work/calibre/src/calibre/gui2/main.py:114 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:116 msgid "Send to main memory" msgstr "" +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:113 #: /home/kovid/work/calibre/src/calibre/gui2/main.py:115 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:117 msgid "Send to storage card" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:116 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:117 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:114 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:115 msgid "and delete from library" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:119 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:117 msgid "Send to storage card by default" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:131 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:129 msgid "Edit metadata individually" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:132 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:130 msgid "Edit metadata in bulk" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:135 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:133 msgid "Add books from a single directory" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:136 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:134 msgid "" "Add books recursively (One book per directory, assumes every ebook file is " "the same book in a different format)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:137 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:135 msgid "" "Add books recursively (Multiple books per directory, assumes every ebook " "file is a different book)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:152 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:150 #: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:275 msgid "Save to disk" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:153 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:151 msgid "Save to disk in a single directory" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:154 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:152 msgid "Save only %s format to disk" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:157 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:155 #: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:281 msgid "View" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:158 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:156 msgid "View specific format" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:174 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:172 msgid "Convert individually" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:175 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:173 msgid "Bulk convert" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:309 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:307 msgid " detected." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:309 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:307 msgid "Device: " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:334 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:332 msgid "Connected " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:346 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:344 msgid "Device database corrupted" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:347 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:345 msgid "" "\n" " <p>The database of books on the reader is corrupted. Try the " @@ -2277,190 +2281,190 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:399 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:473 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:397 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:471 msgid "" "<p>Books with the same title as the following already exist in the database. " "Add them anyway?<ul>" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:402 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:476 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:400 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:474 msgid "Duplicates found!" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:435 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:448 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:433 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:446 msgid "Uploading books to device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:507 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:505 msgid "No space on device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:508 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:506 msgid "" "<p>Cannot upload books to device there is no more free space available " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:546 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:544 msgid "Deleting books from device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:578 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:599 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:576 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:597 msgid "Cannot edit metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:578 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:599 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:694 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:764 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:834 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:576 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:597 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:692 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:762 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:832 msgid "No books selected" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:674 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:672 msgid "Sending books to device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:677 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:675 msgid "No suitable formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:678 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:676 msgid "" "Could not upload the following books to the device, as no suitable formats " "were found:<br><ul>%s</ul>" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:694 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:692 msgid "Cannot save to disk" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:705 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:703 msgid "" "<p>Could not save the following books to disk, because the %s format is not " "available for them:<ul>" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:709 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:707 msgid "Could not save some ebooks" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:742 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:740 msgid "Fetch news from " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:744 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:742 msgid "Fetching news from " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:754 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:752 msgid "News fetched. Uploading to device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:764 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:834 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:762 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:832 msgid "Cannot convert" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:773 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:771 msgid "Starting Bulk conversion of %d books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:905 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:923 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:903 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:921 msgid "No book selected" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:905 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:923 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:937 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:903 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:921 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:935 msgid "Cannot view" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:911 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:942 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:909 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:940 msgid "Choose the format to view" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:938 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:936 msgid "%s has no available formats." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:976 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:974 msgid "Cannot configure" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:976 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:974 msgid "Cannot configure while there are running jobs." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:999 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:997 msgid "Copying database to " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1014 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1012 msgid "Invalid database" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1015 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1013 msgid "" "<p>An invalid database already exists at %s, delete it before trying to move " "the existing database.<br>Error: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1023 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1021 msgid "Could not move database" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1044 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1042 msgid "No detailed info available" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1045 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1043 msgid "No detailed information is available for books on the device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1087 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1085 msgid "Error talking to device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1088 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1086 msgid "" "There was a temporary error talking to the device. Please unplug and " "reconnect the device and or reboot." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1139 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1137 msgid "Conversion Error" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1158 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1156 msgid "Database does not exist" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1158 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1156 msgid "" "The directory in which the database should be: %s no longer exists. Please " "choose a new database location." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1209 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1207 msgid "" "<span style=\"color:red; font-weight:bold\">Latest version: <a " "href=\"%s\">%s</a></span>" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1215 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1213 msgid "" "%s has been updated to version %s. See the <a " "href=\"http://calibre.kovidgoyal.net/wiki/Changelog\">new features</a>. " "Visit the download page?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1215 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1213 msgid "Update available" msgstr "" @@ -2835,7 +2839,7 @@ msgid "" "For help on an individual command: %%prog command --help\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/parallel.py:317 +#: /home/kovid/work/calibre/src/calibre/parallel.py:321 msgid "Could not launch worker process." msgstr "" @@ -2950,87 +2954,87 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/web/feeds/main.py:84 #: /home/kovid/work/calibre/src/calibre/web/feeds/main.py:88 -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:576 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:577 msgid "Fetching feeds..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:33 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:34 msgid "Unknown News Source" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:474 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:475 msgid "Download finished" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:476 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:477 msgid "Failed to download the following articles:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:478 -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:484 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:479 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:485 msgid " from " msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:482 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:483 msgid "Failed to download parts of the following articles:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:486 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:487 msgid "\tFailed links:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:558 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:559 msgid "Could not fetch article. Run with --debug to see the reason" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:580 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:581 msgid "Got feeds from index page" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:584 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:585 msgid "Trying to download cover..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:636 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:637 msgid "Starting download [%d thread(s)]..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:649 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:650 msgid "Feeds downloaded to %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:659 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:660 msgid "Could not download cover: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:664 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:665 msgid "Downloading cover from %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:698 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:699 msgid "Untitled Article" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:744 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:745 msgid "" "\n" "Downloaded article %s from %s\n" "%s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:750 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:751 msgid "Article downloaded: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:756 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:757 msgid "Failed to download article: %s from %s\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:761 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:762 msgid "Article download failed: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:776 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:777 msgid "Fetching feed" msgstr "" diff --git a/src/calibre/translations/sl.po b/src/calibre/translations/sl.po index 966dd43216..354abec96c 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: 2008-06-30 23:41+0000\n" +"POT-Creation-Date: 2008-07-09 04:18+0000\n" "PO-Revision-Date: 2008-05-24 06:19+0000\n" "Last-Translator: Kovid Goyal <Unknown>\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: 2008-07-09 03:20+0000\n" +"X-Launchpad-Export-Date: 2008-07-19 02:36+0000\n" "X-Generator: Launchpad (build Unknown)\n" "Generated-By: pygettext.py 1.5\n" @@ -35,17 +35,17 @@ msgstr "" msgid "The reader has no storage card connected." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:73 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:71 msgid "Set the title. Default: filename." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:75 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:73 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:76 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:74 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:174 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf.py:314 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf.py:429 @@ -57,173 +57,173 @@ msgstr "" msgid "Unknown" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:78 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:76 msgid "Set the comment." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:80 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:78 msgid "Set the category" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:82 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:80 msgid "Sort key for the title" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:84 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:82 msgid "Sort key for the author" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:86 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:84 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:39 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search.py:16 #: /home/kovid/work/calibre/src/calibre/gui2/library.py:409 msgid "Publisher" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:88 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:86 msgid "Path to file containing image to be used as cover" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:90 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:88 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:93 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:91 msgid "Output file name. Default is derived from input filename" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:95 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:93 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:98 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:96 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:100 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:98 msgid "Enable autorotation of images that are wider than the screen width." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:103 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:101 msgid "Set the space between words in pts. Default is %default" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:105 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:103 msgid "Separate paragraphs by blank lines." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:107 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:105 msgid "Add a header to all the pages with title and author." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:109 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:107 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:111 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:109 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:113 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:111 msgid "" "Use the <spine> 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:115 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:113 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:117 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:115 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:122 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:120 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:128 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:126 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:134 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:132 msgid "Left margin of page. Default is %default px." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:136 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:134 msgid "Right margin of page. Default is %default px." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:138 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:136 msgid "Top margin of page. Default is %default px." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:140 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:138 msgid "Bottom margin of page. Default is %default px." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:142 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:140 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:144 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:142 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:149 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:147 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 <a> tags are " "ignored." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:153 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:151 msgid "" "A regular expression. <a> tags whose href matches will be ignored. Defaults " "to %default" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:157 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:155 msgid "Don't add links to the table of contents." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:161 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:159 msgid "Prevent the automatic detection chapters." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:164 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:162 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:167 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:165 msgid "" "Detect a chapter beginning at an element having the specified attribute. The " "format for this option is tagname regexp,attribute name,attribute value " @@ -231,7 +231,7 @@ msgid "" "class=\"chapter\" you would use \"h\\d,class,chapter\". Default is %default" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:169 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:167 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 " @@ -242,12 +242,12 @@ msgid "" "has only a few elements." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:179 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:177 msgid "" "Force a page break before tags whose names match this regular expression." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:181 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:179 msgid "" "Force a page break before an element having the specified attribute. The " "format for this option is tagname regexp,attribute name,attribute value " @@ -255,25 +255,25 @@ msgid "" "class=\"chapter\" you would use \"h\\d,class,chapter\". Default is %default" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:184 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:182 msgid "Add detected chapters to the table of contents." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:187 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:185 msgid "Preprocess Baen HTML files to improve generated LRF." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:189 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:187 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:191 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:189 msgid "Use this option on html0 files from Book Designer." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:194 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:192 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 " @@ -281,33 +281,33 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:202 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:200 msgid "The serif family of fonts to embed" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:205 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:203 msgid "The sans-serif family of fonts to embed" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:208 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:206 msgid "The monospace family of fonts to embed" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:212 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:210 msgid "Be verbose while processing" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:214 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:212 msgid "Convert to LRS" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:216 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:214 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:218 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:216 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 " @@ -315,7 +315,7 @@ msgid "" "default is to try and guess the encoding." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/any/convert_from.py:143 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/any/convert_from.py:144 msgid "" "any2lrf [options] myfile\n" "\n" @@ -326,7 +326,7 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/any/convert_from.py:158 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/any/convert_from.py:159 msgid "No file to convert specified." msgstr "" @@ -379,79 +379,79 @@ msgstr "" msgid "Written preprocessed HTML to " msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:372 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:373 msgid "Processing %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:386 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:387 msgid "\tConverting to BBeB..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:529 -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:542 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:530 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:543 msgid "Could not parse file: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:534 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:535 msgid "%s is an empty file" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:554 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:555 msgid "Failed to parse link %s %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:598 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:599 msgid "Cannot add link %s to TOC" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:943 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:944 msgid "Unable to process image %s. Error: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:981 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:982 msgid "Unable to process interlaced PNG %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:996 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:997 msgid "" "Could not process image: %s\n" "%s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1743 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1744 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:1745 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1746 msgid "" "Bad table:\n" "%s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1767 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1768 msgid "Table has cell that is too large" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1797 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1798 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:1839 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1841 msgid "Could not read cover image: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1842 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1844 msgid "Cannot read from: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1976 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1978 msgid "Failed to process opf file" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1982 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1984 msgid "" "Usage: %prog [options] mybook.html\n" "\n" @@ -722,19 +722,19 @@ msgstr "" msgid "No filename specified." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:341 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:344 msgid "%prog [options] myebook.mobi" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:343 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:346 msgid "Output directory. Defaults to current directory." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:362 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:365 msgid "Raw MOBI HTML saved in" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:364 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:367 msgid "OEB ebook created in" msgstr "" @@ -780,47 +780,47 @@ msgstr "" msgid "Advanced" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:102 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:104 msgid "<br>Must be a directory." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:102 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:104 msgid "Invalid database location " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:102 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:105 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:104 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:107 msgid "Invalid database location" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:105 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:107 msgid "Invalid database location.<br>Cannot write to " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:117 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:119 msgid "Compacting database. This may take a while." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:117 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:119 msgid "Compacting..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:202 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:206 #: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:265 msgid "Configuration" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:203 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:207 msgid "&Location of books database (library1.db)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:204 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:208 msgid "Browse for the new database location" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:205 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:221 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:223 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:209 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:226 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:228 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:513 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:278 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:287 @@ -839,81 +839,85 @@ msgstr "" msgid "..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:206 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:210 msgid "Use &Roman numerals for series number" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:207 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:211 +msgid "Show notification when &new version is available" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:212 msgid "Format for &single file save:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:208 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:213 msgid "&Priority for conversion jobs:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:209 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:214 msgid "Default network &timeout:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:210 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:215 msgid "" "Set the default timeout for network fetches (i.e. anytime we go out to the " "internet to get information)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:211 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:216 msgid " seconds" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:212 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:217 msgid "Toolbar" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:213 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:218 msgid "Large" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:214 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:219 msgid "Medium" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:215 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:220 msgid "Small" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:216 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:221 msgid "&Button size in toolbar" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:217 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:222 msgid "Show &text in toolbar buttons" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:218 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:223 msgid "Select visible &columns in library view" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:219 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:224 msgid "Frequently used directories" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:220 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:225 msgid "Add a directory to the frequently used directories list" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:222 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:227 msgid "Remove a directory from the frequently used directories list" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:224 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:229 msgid "Free unused diskspace from the database" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:225 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:230 msgid "&Compact database" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:226 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:231 msgid "&Metadata from file name" msgstr "" @@ -1045,7 +1049,7 @@ msgid "Convert %s to LRF" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:108 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:177 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:175 msgid "Set conversion defaults" msgstr "" @@ -1996,20 +2000,20 @@ msgstr "" msgid "Search (For Advanced Search click the button to the left)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/config_ui.py:48 +#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/config_ui.py:47 msgid "Configure Viewer" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/config_ui.py:49 +#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/config_ui.py:48 msgid "Use white background" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/config_ui.py:50 +#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/config_ui.py:49 msgid "Hyphenate" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/config_ui.py:51 -msgid "<b>Changes will only take affect after a restart." +#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/config_ui.py:50 +msgid "<b>Changes will only take effect after a restart.</b>" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main.py:63 @@ -2064,110 +2068,110 @@ msgstr "" msgid "Configure" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:82 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:80 msgid "Error communicating with device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:95 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:93 msgid "" "<p>For help visit <a " "href=\"http://%s.kovidgoyal.net/user_manual\">%s.kovidgoyal.net</a><br>" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:96 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:94 msgid "<b>%s</b>: %s by <b>Kovid Goyal %%(version)s</b><br>%%(device)s</p>" msgstr "" +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:112 #: /home/kovid/work/calibre/src/calibre/gui2/main.py:114 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:116 msgid "Send to main memory" msgstr "" +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:113 #: /home/kovid/work/calibre/src/calibre/gui2/main.py:115 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:117 msgid "Send to storage card" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:116 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:117 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:114 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:115 msgid "and delete from library" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:119 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:117 msgid "Send to storage card by default" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:131 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:129 msgid "Edit metadata individually" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:132 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:130 msgid "Edit metadata in bulk" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:135 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:133 msgid "Add books from a single directory" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:136 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:134 msgid "" "Add books recursively (One book per directory, assumes every ebook file is " "the same book in a different format)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:137 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:135 msgid "" "Add books recursively (Multiple books per directory, assumes every ebook " "file is a different book)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:152 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:150 #: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:275 msgid "Save to disk" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:153 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:151 msgid "Save to disk in a single directory" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:154 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:152 msgid "Save only %s format to disk" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:157 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:155 #: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:281 msgid "View" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:158 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:156 msgid "View specific format" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:174 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:172 msgid "Convert individually" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:175 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:173 msgid "Bulk convert" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:309 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:307 msgid " detected." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:309 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:307 msgid "Device: " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:334 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:332 msgid "Connected " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:346 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:344 msgid "Device database corrupted" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:347 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:345 msgid "" "\n" " <p>The database of books on the reader is corrupted. Try the " @@ -2183,190 +2187,190 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:399 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:473 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:397 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:471 msgid "" "<p>Books with the same title as the following already exist in the database. " "Add them anyway?<ul>" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:402 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:476 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:400 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:474 msgid "Duplicates found!" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:435 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:448 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:433 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:446 msgid "Uploading books to device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:507 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:505 msgid "No space on device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:508 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:506 msgid "" "<p>Cannot upload books to device there is no more free space available " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:546 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:544 msgid "Deleting books from device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:578 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:599 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:576 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:597 msgid "Cannot edit metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:578 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:599 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:694 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:764 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:834 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:576 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:597 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:692 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:762 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:832 msgid "No books selected" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:674 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:672 msgid "Sending books to device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:677 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:675 msgid "No suitable formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:678 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:676 msgid "" "Could not upload the following books to the device, as no suitable formats " "were found:<br><ul>%s</ul>" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:694 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:692 msgid "Cannot save to disk" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:705 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:703 msgid "" "<p>Could not save the following books to disk, because the %s format is not " "available for them:<ul>" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:709 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:707 msgid "Could not save some ebooks" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:742 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:740 msgid "Fetch news from " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:744 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:742 msgid "Fetching news from " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:754 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:752 msgid "News fetched. Uploading to device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:764 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:834 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:762 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:832 msgid "Cannot convert" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:773 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:771 msgid "Starting Bulk conversion of %d books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:905 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:923 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:903 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:921 msgid "No book selected" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:905 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:923 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:937 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:903 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:921 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:935 msgid "Cannot view" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:911 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:942 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:909 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:940 msgid "Choose the format to view" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:938 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:936 msgid "%s has no available formats." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:976 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:974 msgid "Cannot configure" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:976 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:974 msgid "Cannot configure while there are running jobs." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:999 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:997 msgid "Copying database to " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1014 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1012 msgid "Invalid database" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1015 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1013 msgid "" "<p>An invalid database already exists at %s, delete it before trying to move " "the existing database.<br>Error: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1023 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1021 msgid "Could not move database" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1044 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1042 msgid "No detailed info available" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1045 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1043 msgid "No detailed information is available for books on the device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1087 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1085 msgid "Error talking to device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1088 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1086 msgid "" "There was a temporary error talking to the device. Please unplug and " "reconnect the device and or reboot." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1139 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1137 msgid "Conversion Error" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1158 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1156 msgid "Database does not exist" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1158 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1156 msgid "" "The directory in which the database should be: %s no longer exists. Please " "choose a new database location." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1209 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1207 msgid "" "<span style=\"color:red; font-weight:bold\">Latest version: <a " "href=\"%s\">%s</a></span>" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1215 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1213 msgid "" "%s has been updated to version %s. See the <a " "href=\"http://calibre.kovidgoyal.net/wiki/Changelog\">new features</a>. " "Visit the download page?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1215 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1213 msgid "Update available" msgstr "" @@ -2741,7 +2745,7 @@ msgid "" "For help on an individual command: %%prog command --help\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/parallel.py:317 +#: /home/kovid/work/calibre/src/calibre/parallel.py:321 msgid "Could not launch worker process." msgstr "" @@ -2856,87 +2860,87 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/web/feeds/main.py:84 #: /home/kovid/work/calibre/src/calibre/web/feeds/main.py:88 -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:576 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:577 msgid "Fetching feeds..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:33 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:34 msgid "Unknown News Source" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:474 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:475 msgid "Download finished" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:476 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:477 msgid "Failed to download the following articles:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:478 -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:484 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:479 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:485 msgid " from " msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:482 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:483 msgid "Failed to download parts of the following articles:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:486 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:487 msgid "\tFailed links:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:558 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:559 msgid "Could not fetch article. Run with --debug to see the reason" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:580 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:581 msgid "Got feeds from index page" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:584 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:585 msgid "Trying to download cover..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:636 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:637 msgid "Starting download [%d thread(s)]..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:649 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:650 msgid "Feeds downloaded to %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:659 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:660 msgid "Could not download cover: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:664 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:665 msgid "Downloading cover from %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:698 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:699 msgid "Untitled Article" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:744 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:745 msgid "" "\n" "Downloaded article %s from %s\n" "%s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:750 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:751 msgid "Article downloaded: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:756 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:757 msgid "Failed to download article: %s from %s\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:761 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:762 msgid "Article download failed: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:776 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:777 msgid "Fetching feed" msgstr "" diff --git a/src/calibre/translations/te.po b/src/calibre/translations/te.po index ff5a09866f..6ff7d916ec 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 <EMAIL@ADDRESS>\n" -"POT-Creation-Date: 2008-06-30 23:41+0000\n" +"POT-Creation-Date: 2008-07-09 04:18+0000\n" "PO-Revision-Date: 2008-06-24 13:22+0000\n" "Last-Translator: వీవెన్ (Veeven) <Unknown>\n" "Language-Team: Telugu <te@li.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2008-07-09 03:20+0000\n" +"X-Launchpad-Export-Date: 2008-07-19 02:36+0000\n" "X-Generator: Launchpad (build Unknown)\n" #: /home/kovid/work/calibre/src/calibre/__init__.py:133 @@ -35,17 +35,17 @@ msgstr "" msgid "The reader has no storage card connected." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:73 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:71 msgid "Set the title. Default: filename." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:75 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:73 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:76 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:74 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:174 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf.py:314 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf.py:429 @@ -57,173 +57,173 @@ msgstr "" msgid "Unknown" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:78 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:76 msgid "Set the comment." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:80 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:78 msgid "Set the category" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:82 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:80 msgid "Sort key for the title" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:84 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:82 msgid "Sort key for the author" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:86 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:84 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:39 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search.py:16 #: /home/kovid/work/calibre/src/calibre/gui2/library.py:409 msgid "Publisher" msgstr "ప్రచురణకర్త" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:88 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:86 msgid "Path to file containing image to be used as cover" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:90 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:88 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:93 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:91 msgid "Output file name. Default is derived from input filename" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:95 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:93 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:98 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:96 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:100 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:98 msgid "Enable autorotation of images that are wider than the screen width." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:103 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:101 msgid "Set the space between words in pts. Default is %default" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:105 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:103 msgid "Separate paragraphs by blank lines." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:107 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:105 msgid "Add a header to all the pages with title and author." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:109 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:107 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:111 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:109 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:113 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:111 msgid "" "Use the <spine> 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:115 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:113 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:117 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:115 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:122 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:120 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:128 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:126 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:134 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:132 msgid "Left margin of page. Default is %default px." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:136 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:134 msgid "Right margin of page. Default is %default px." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:138 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:136 msgid "Top margin of page. Default is %default px." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:140 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:138 msgid "Bottom margin of page. Default is %default px." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:142 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:140 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:144 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:142 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:149 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:147 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 <a> tags are " "ignored." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:153 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:151 msgid "" "A regular expression. <a> tags whose href matches will be ignored. Defaults " "to %default" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:157 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:155 msgid "Don't add links to the table of contents." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:161 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:159 msgid "Prevent the automatic detection chapters." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:164 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:162 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:167 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:165 msgid "" "Detect a chapter beginning at an element having the specified attribute. The " "format for this option is tagname regexp,attribute name,attribute value " @@ -231,7 +231,7 @@ msgid "" "class=\"chapter\" you would use \"h\\d,class,chapter\". Default is %default" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:169 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:167 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 " @@ -242,12 +242,12 @@ msgid "" "has only a few elements." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:179 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:177 msgid "" "Force a page break before tags whose names match this regular expression." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:181 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:179 msgid "" "Force a page break before an element having the specified attribute. The " "format for this option is tagname regexp,attribute name,attribute value " @@ -255,25 +255,25 @@ msgid "" "class=\"chapter\" you would use \"h\\d,class,chapter\". Default is %default" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:184 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:182 msgid "Add detected chapters to the table of contents." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:187 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:185 msgid "Preprocess Baen HTML files to improve generated LRF." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:189 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:187 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:191 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:189 msgid "Use this option on html0 files from Book Designer." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:194 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:192 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 " @@ -281,33 +281,33 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:202 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:200 msgid "The serif family of fonts to embed" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:205 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:203 msgid "The sans-serif family of fonts to embed" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:208 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:206 msgid "The monospace family of fonts to embed" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:212 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:210 msgid "Be verbose while processing" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:214 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:212 msgid "Convert to LRS" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:216 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:214 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:218 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:216 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 " @@ -315,7 +315,7 @@ msgid "" "default is to try and guess the encoding." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/any/convert_from.py:143 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/any/convert_from.py:144 msgid "" "any2lrf [options] myfile\n" "\n" @@ -326,7 +326,7 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/any/convert_from.py:158 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/any/convert_from.py:159 msgid "No file to convert specified." msgstr "" @@ -379,79 +379,79 @@ msgstr "" msgid "Written preprocessed HTML to " msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:372 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:373 msgid "Processing %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:386 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:387 msgid "\tConverting to BBeB..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:529 -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:542 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:530 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:543 msgid "Could not parse file: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:534 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:535 msgid "%s is an empty file" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:554 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:555 msgid "Failed to parse link %s %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:598 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:599 msgid "Cannot add link %s to TOC" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:943 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:944 msgid "Unable to process image %s. Error: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:981 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:982 msgid "Unable to process interlaced PNG %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:996 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:997 msgid "" "Could not process image: %s\n" "%s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1743 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1744 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:1745 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1746 msgid "" "Bad table:\n" "%s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1767 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1768 msgid "Table has cell that is too large" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1797 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1798 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:1839 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1841 msgid "Could not read cover image: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1842 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1844 msgid "Cannot read from: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1976 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1978 msgid "Failed to process opf file" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1982 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1984 msgid "" "Usage: %prog [options] mybook.html\n" "\n" @@ -722,19 +722,19 @@ msgstr "" msgid "No filename specified." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:341 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:344 msgid "%prog [options] myebook.mobi" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:343 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:346 msgid "Output directory. Defaults to current directory." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:362 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:365 msgid "Raw MOBI HTML saved in" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:364 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:367 msgid "OEB ebook created in" msgstr "" @@ -780,47 +780,47 @@ msgstr "ప్రాధమిక" msgid "Advanced" msgstr "ఉన్నత" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:102 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:104 msgid "<br>Must be a directory." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:102 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:104 msgid "Invalid database location " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:102 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:105 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:104 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:107 msgid "Invalid database location" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:105 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:107 msgid "Invalid database location.<br>Cannot write to " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:117 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:119 msgid "Compacting database. This may take a while." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:117 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:119 msgid "Compacting..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:202 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:206 #: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:265 msgid "Configuration" msgstr "స్వరూపణం" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:203 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:207 msgid "&Location of books database (library1.db)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:204 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:208 msgid "Browse for the new database location" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:205 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:221 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:223 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:209 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:226 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:228 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:513 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:278 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:287 @@ -839,81 +839,85 @@ msgstr "" msgid "..." msgstr "..." -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:206 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:210 msgid "Use &Roman numerals for series number" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:207 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:211 +msgid "Show notification when &new version is available" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:212 msgid "Format for &single file save:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:208 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:213 msgid "&Priority for conversion jobs:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:209 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:214 msgid "Default network &timeout:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:210 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:215 msgid "" "Set the default timeout for network fetches (i.e. anytime we go out to the " "internet to get information)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:211 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:216 msgid " seconds" msgstr " క్షణాలు" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:212 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:217 msgid "Toolbar" msgstr "పనిముట్ల పట్టీ" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:213 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:218 msgid "Large" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:214 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:219 msgid "Medium" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:215 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:220 msgid "Small" msgstr "చిన్న" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:216 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:221 msgid "&Button size in toolbar" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:217 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:222 msgid "Show &text in toolbar buttons" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:218 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:223 msgid "Select visible &columns in library view" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:219 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:224 msgid "Frequently used directories" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:220 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:225 msgid "Add a directory to the frequently used directories list" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:222 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:227 msgid "Remove a directory from the frequently used directories list" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:224 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:229 msgid "Free unused diskspace from the database" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:225 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:230 msgid "&Compact database" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:226 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:231 msgid "&Metadata from file name" msgstr "" @@ -1045,7 +1049,7 @@ msgid "Convert %s to LRF" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:108 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:177 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:175 msgid "Set conversion defaults" msgstr "" @@ -1996,20 +2000,20 @@ msgstr "" msgid "Search (For Advanced Search click the button to the left)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/config_ui.py:48 +#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/config_ui.py:47 msgid "Configure Viewer" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/config_ui.py:49 +#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/config_ui.py:48 msgid "Use white background" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/config_ui.py:50 +#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/config_ui.py:49 msgid "Hyphenate" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/config_ui.py:51 -msgid "<b>Changes will only take affect after a restart." +#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/config_ui.py:50 +msgid "<b>Changes will only take effect after a restart.</b>" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main.py:63 @@ -2064,110 +2068,110 @@ msgstr "" msgid "Configure" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:82 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:80 msgid "Error communicating with device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:95 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:93 msgid "" "<p>For help visit <a " "href=\"http://%s.kovidgoyal.net/user_manual\">%s.kovidgoyal.net</a><br>" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:96 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:94 msgid "<b>%s</b>: %s by <b>Kovid Goyal %%(version)s</b><br>%%(device)s</p>" msgstr "" +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:112 #: /home/kovid/work/calibre/src/calibre/gui2/main.py:114 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:116 msgid "Send to main memory" msgstr "" +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:113 #: /home/kovid/work/calibre/src/calibre/gui2/main.py:115 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:117 msgid "Send to storage card" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:116 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:117 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:114 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:115 msgid "and delete from library" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:119 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:117 msgid "Send to storage card by default" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:131 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:129 msgid "Edit metadata individually" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:132 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:130 msgid "Edit metadata in bulk" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:135 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:133 msgid "Add books from a single directory" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:136 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:134 msgid "" "Add books recursively (One book per directory, assumes every ebook file is " "the same book in a different format)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:137 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:135 msgid "" "Add books recursively (Multiple books per directory, assumes every ebook " "file is a different book)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:152 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:150 #: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:275 msgid "Save to disk" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:153 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:151 msgid "Save to disk in a single directory" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:154 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:152 msgid "Save only %s format to disk" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:157 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:155 #: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:281 msgid "View" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:158 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:156 msgid "View specific format" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:174 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:172 msgid "Convert individually" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:175 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:173 msgid "Bulk convert" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:309 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:307 msgid " detected." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:309 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:307 msgid "Device: " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:334 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:332 msgid "Connected " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:346 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:344 msgid "Device database corrupted" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:347 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:345 msgid "" "\n" " <p>The database of books on the reader is corrupted. Try the " @@ -2183,190 +2187,190 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:399 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:473 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:397 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:471 msgid "" "<p>Books with the same title as the following already exist in the database. " "Add them anyway?<ul>" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:402 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:476 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:400 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:474 msgid "Duplicates found!" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:435 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:448 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:433 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:446 msgid "Uploading books to device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:507 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:505 msgid "No space on device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:508 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:506 msgid "" "<p>Cannot upload books to device there is no more free space available " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:546 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:544 msgid "Deleting books from device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:578 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:599 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:576 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:597 msgid "Cannot edit metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:578 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:599 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:694 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:764 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:834 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:576 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:597 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:692 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:762 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:832 msgid "No books selected" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:674 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:672 msgid "Sending books to device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:677 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:675 msgid "No suitable formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:678 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:676 msgid "" "Could not upload the following books to the device, as no suitable formats " "were found:<br><ul>%s</ul>" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:694 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:692 msgid "Cannot save to disk" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:705 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:703 msgid "" "<p>Could not save the following books to disk, because the %s format is not " "available for them:<ul>" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:709 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:707 msgid "Could not save some ebooks" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:742 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:740 msgid "Fetch news from " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:744 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:742 msgid "Fetching news from " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:754 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:752 msgid "News fetched. Uploading to device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:764 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:834 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:762 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:832 msgid "Cannot convert" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:773 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:771 msgid "Starting Bulk conversion of %d books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:905 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:923 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:903 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:921 msgid "No book selected" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:905 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:923 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:937 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:903 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:921 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:935 msgid "Cannot view" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:911 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:942 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:909 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:940 msgid "Choose the format to view" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:938 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:936 msgid "%s has no available formats." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:976 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:974 msgid "Cannot configure" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:976 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:974 msgid "Cannot configure while there are running jobs." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:999 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:997 msgid "Copying database to " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1014 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1012 msgid "Invalid database" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1015 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1013 msgid "" "<p>An invalid database already exists at %s, delete it before trying to move " "the existing database.<br>Error: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1023 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1021 msgid "Could not move database" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1044 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1042 msgid "No detailed info available" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1045 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1043 msgid "No detailed information is available for books on the device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1087 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1085 msgid "Error talking to device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1088 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1086 msgid "" "There was a temporary error talking to the device. Please unplug and " "reconnect the device and or reboot." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1139 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1137 msgid "Conversion Error" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1158 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1156 msgid "Database does not exist" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1158 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1156 msgid "" "The directory in which the database should be: %s no longer exists. Please " "choose a new database location." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1209 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1207 msgid "" "<span style=\"color:red; font-weight:bold\">Latest version: <a " "href=\"%s\">%s</a></span>" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1215 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1213 msgid "" "%s has been updated to version %s. See the <a " "href=\"http://calibre.kovidgoyal.net/wiki/Changelog\">new features</a>. " "Visit the download page?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1215 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1213 msgid "Update available" msgstr "" @@ -2741,7 +2745,7 @@ msgid "" "For help on an individual command: %%prog command --help\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/parallel.py:317 +#: /home/kovid/work/calibre/src/calibre/parallel.py:321 msgid "Could not launch worker process." msgstr "" @@ -2856,87 +2860,87 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/web/feeds/main.py:84 #: /home/kovid/work/calibre/src/calibre/web/feeds/main.py:88 -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:576 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:577 msgid "Fetching feeds..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:33 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:34 msgid "Unknown News Source" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:474 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:475 msgid "Download finished" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:476 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:477 msgid "Failed to download the following articles:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:478 -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:484 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:479 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:485 msgid " from " msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:482 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:483 msgid "Failed to download parts of the following articles:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:486 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:487 msgid "\tFailed links:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:558 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:559 msgid "Could not fetch article. Run with --debug to see the reason" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:580 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:581 msgid "Got feeds from index page" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:584 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:585 msgid "Trying to download cover..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:636 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:637 msgid "Starting download [%d thread(s)]..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:649 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:650 msgid "Feeds downloaded to %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:659 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:660 msgid "Could not download cover: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:664 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:665 msgid "Downloading cover from %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:698 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:699 msgid "Untitled Article" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:744 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:745 msgid "" "\n" "Downloaded article %s from %s\n" "%s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:750 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:751 msgid "Article downloaded: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:756 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:757 msgid "Failed to download article: %s from %s\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:761 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:762 msgid "Article download failed: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:776 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:777 msgid "Fetching feed" msgstr "" From 2ddf013f1d5b4ae30167ad16b87fe36d0659b1ee Mon Sep 17 00:00:00 2001 From: Kovid Goyal <kovid@kovidgoyal.net> Date: Fri, 18 Jul 2008 20:54:07 -0700 Subject: [PATCH 34/34] Add button to swap title and author to metadata dialog. Also update a few icons. --- src/calibre/gui2/dialogs/metadata_single.py | 8 +- src/calibre/gui2/dialogs/metadata_single.ui | 62 +- src/calibre/gui2/images/add_book.svg | 2404 +++++++++++++++++++ src/calibre/gui2/images/swap.svg | 722 ++++++ src/calibre/gui2/main.ui | 2 +- 5 files changed, 3176 insertions(+), 22 deletions(-) create mode 100644 src/calibre/gui2/images/add_book.svg create mode 100644 src/calibre/gui2/images/swap.svg diff --git a/src/calibre/gui2/dialogs/metadata_single.py b/src/calibre/gui2/dialogs/metadata_single.py index d4b9819af2..14baa0de91 100644 --- a/src/calibre/gui2/dialogs/metadata_single.py +++ b/src/calibre/gui2/dialogs/metadata_single.py @@ -144,6 +144,7 @@ class MetadataSingleDialog(QDialog, Ui_MetadataSingleDialog): self.edit_tags) QObject.connect(self.remove_series_button, SIGNAL('clicked()'), self.remove_unused_series) + self.connect(self.swap_button, SIGNAL('clicked()'), self.swap_title_author) self.timeout = float(Settings().get('network timeout', 5)) self.title.setText(db.title(row)) isbn = db.isbn(self.id, index_is_id=True) @@ -192,7 +193,12 @@ class MetadataSingleDialog(QDialog, Ui_MetadataSingleDialog): pm.loadFromData(cover) if not pm.isNull(): self.cover.setPixmap(pm) - + + def swap_title_author(self): + title = self.title.text() + self.title.setText(self.authors.text()) + self.authors.setText(title) + self.author_sort.setText('') def cover_dropped(self): self.cover_changed = True diff --git a/src/calibre/gui2/dialogs/metadata_single.ui b/src/calibre/gui2/dialogs/metadata_single.ui index 9ffc494a62..82dbfebb71 100644 --- a/src/calibre/gui2/dialogs/metadata_single.ui +++ b/src/calibre/gui2/dialogs/metadata_single.ui @@ -5,8 +5,8 @@ <rect> <x>0</x> <y>0</y> - <width>668</width> - <height>663</height> + <width>796</width> + <height>715</height> </rect> </property> <property name="sizePolicy" > @@ -41,7 +41,7 @@ <property name="title" > <string>Meta information</string> </property> - <layout class="QGridLayout" > + <layout class="QGridLayout" name="gridLayout_3" > <item row="0" column="0" > <widget class="QLabel" name="label" > <property name="text" > @@ -62,6 +62,26 @@ </property> </widget> </item> + <item rowspan="2" row="0" column="2" > + <widget class="QToolButton" name="swap_button" > + <property name="toolTip" > + <string>Swap the author and title</string> + </property> + <property name="text" > + <string>...</string> + </property> + <property name="icon" > + <iconset resource="../images.qrc" > + <normaloff>:/images/swap.svg</normaloff>:/images/swap.svg</iconset> + </property> + <property name="iconSize" > + <size> + <width>16</width> + <height>16</height> + </size> + </property> + </widget> + </item> <item row="1" column="0" > <widget class="QLabel" name="label_2" > <property name="text" > @@ -95,7 +115,7 @@ </property> </widget> </item> - <item row="2" column="1" > + <item row="2" column="1" colspan="2" > <widget class="QLineEdit" name="author_sort" > <property name="toolTip" > <string>Specify how the author(s) of this book should be sorted. For example Charles Dickens should be sorted as Dickens, Charles.</string> @@ -115,7 +135,7 @@ </property> </widget> </item> - <item row="3" column="1" > + <item row="3" column="1" colspan="2" > <widget class="QSpinBox" name="rating" > <property name="toolTip" > <string>Rating of this book. 0-5 stars</string> @@ -147,7 +167,7 @@ </property> </widget> </item> - <item row="4" column="1" > + <item row="4" column="1" colspan="2" > <widget class="QLineEdit" name="publisher" > <property name="toolTip" > <string>Change the publisher of this book</string> @@ -167,7 +187,7 @@ </property> </widget> </item> - <item row="5" column="1" > + <item row="5" column="1" colspan="2" > <layout class="QHBoxLayout" > <item> <widget class="QLineEdit" name="tags" > @@ -208,7 +228,7 @@ </property> </widget> </item> - <item row="6" column="1" > + <item row="6" column="1" colspan="2" > <layout class="QHBoxLayout" > <property name="spacing" > <number>5</number> @@ -254,7 +274,7 @@ </item> </layout> </item> - <item row="7" column="1" > + <item row="7" column="1" colspan="2" > <widget class="QSpinBox" name="series_index" > <property name="enabled" > <bool>false</bool> @@ -289,7 +309,7 @@ </property> </widget> </item> - <item row="8" column="1" > + <item row="8" column="1" colspan="2" > <widget class="QLineEdit" name="isbn" /> </item> </layout> @@ -300,11 +320,16 @@ <property name="title" > <string>Comments</string> </property> - <layout class="QGridLayout" > - <item row="0" column="0" > - <widget class="QTextEdit" name="comments" /> - </item> - </layout> + <widget class="QTextEdit" name="comments" > + <property name="geometry" > + <rect> + <x>9</x> + <y>39</y> + <width>354</width> + <height>557</height> + </rect> + </property> + </widget> </widget> </item> <item> @@ -316,7 +341,7 @@ </item> </layout> </widget> - <widget class="QWidget" name="" > + <widget class="QWidget" name="layoutWidget" > <layout class="QVBoxLayout" name="verticalLayout_2" > <item> <widget class="QGroupBox" name="af_group_box" > @@ -364,7 +389,7 @@ </property> <property name="icon" > <iconset resource="../images.qrc" > - <normaloff>:/images/plus.svg</normaloff>:/images/plus.svg</iconset> + <normaloff>:/images/add_book.svg</normaloff>:/images/add_book.svg</iconset> </property> <property name="iconSize" > <size> @@ -398,9 +423,6 @@ </item> </layout> <zorder></zorder> - <zorder></zorder> - <zorder></zorder> - <zorder>groupBox_4</zorder> </widget> </item> <item> diff --git a/src/calibre/gui2/images/add_book.svg b/src/calibre/gui2/images/add_book.svg new file mode 100644 index 0000000000..a2b1a1901d --- /dev/null +++ b/src/calibre/gui2/images/add_book.svg @@ -0,0 +1,2404 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="128" + height="128" + id="svg1877" + sodipodi:version="0.32" + inkscape:version="0.46" + version="1.0" + sodipodi:docbase="/media/seagext/trunk/KDE/kdebase/runtime/pics/oxygen/scalable/mimetypes" + sodipodi:docname="x-office-address-book-new.svgz" + inkscape:export-filename="/home/david/Progetti/sandbox/contents.png" + inkscape:export-xdpi="16.879999" + inkscape:export-ydpi="16.879999" + inkscape:output_extension="org.inkscape.output.svgz.inkscape"> + <defs + id="defs1879"> + <inkscape:perspective + sodipodi:type="inkscape:persp3d" + inkscape:vp_x="0 : 64 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_z="128 : 64 : 1" + inkscape:persp3d-origin="64 : 42.666667 : 1" + id="perspective272" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient3291" + id="radialGradient3336" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1,0,0,0.197802,0,92.82166)" + cx="63.912209" + cy="115.70919" + fx="63.912209" + fy="115.7093" + r="63.912209" /> + <linearGradient + inkscape:collect="always" + id="linearGradient2087"> + <stop + style="stop-color:#4686d8;stop-opacity:1;" + offset="0" + id="stop2089" /> + <stop + style="stop-color:#4686d8;stop-opacity:0;" + offset="1" + id="stop2091" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + id="linearGradient2975"> + <stop + style="stop-color:black;stop-opacity:1;" + offset="0" + id="stop2977" /> + <stop + style="stop-color:black;stop-opacity:0;" + offset="1" + id="stop2979" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + id="linearGradient2913"> + <stop + style="stop-color:#a4c0e4;stop-opacity:1;" + offset="0" + id="stop2915" /> + <stop + style="stop-color:#a4c0e4;stop-opacity:0;" + offset="1" + id="stop2917" /> + </linearGradient> + <linearGradient + id="linearGradient5477"> + <stop + style="stop-color:black;stop-opacity:1;" + offset="0" + id="stop5479" /> + <stop + style="stop-color:white;stop-opacity:1;" + offset="1" + id="stop5481" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + id="linearGradient3853"> + <stop + style="stop-color:black;stop-opacity:1;" + offset="0" + id="stop3855" /> + <stop + style="stop-color:black;stop-opacity:0;" + offset="1" + id="stop3857" /> + </linearGradient> + <linearGradient + id="linearGradient3837"> + <stop + style="stop-color:black;stop-opacity:1;" + offset="0" + id="stop3839" /> + <stop + id="stop3849" + offset="0.25" + style="stop-color:black;stop-opacity:0.59927797;" /> + <stop + id="stop3847" + offset="0.5" + style="stop-color:black;stop-opacity:0.27797833;" /> + <stop + style="stop-color:black;stop-opacity:0;" + offset="1" + id="stop3841" /> + </linearGradient> + <linearGradient + id="linearGradient3814"> + <stop + style="stop-color:white;stop-opacity:0;" + offset="0" + id="stop3816" /> + <stop + id="stop3824" + offset="0.18531764" + style="stop-color:white;stop-opacity:0;" /> + <stop + id="stop3822" + offset="0.28106508" + style="stop-color:white;stop-opacity:0.33574006;" /> + <stop + style="stop-color:white;stop-opacity:0.1696751;" + offset="0.45126861" + id="stop3829" /> + <stop + id="stop3831" + offset="0.47940481" + style="stop-color:white;stop-opacity:0;" /> + <stop + style="stop-color:white;stop-opacity:0.3068592;" + offset="0.65610015" + id="stop3833" /> + <stop + style="stop-color:white;stop-opacity:0;" + offset="1" + id="stop3818" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + id="linearGradient3804"> + <stop + style="stop-color:white;stop-opacity:1;" + offset="0" + id="stop3806" /> + <stop + style="stop-color:white;stop-opacity:0;" + offset="1" + id="stop3808" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + id="linearGradient3783"> + <stop + style="stop-color:white;stop-opacity:1;" + offset="0" + id="stop3785" /> + <stop + style="stop-color:white;stop-opacity:0;" + offset="1" + id="stop3787" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + id="linearGradient3771"> + <stop + style="stop-color:#f7fafe;stop-opacity:1;" + offset="0" + id="stop3773" /> + <stop + style="stop-color:#f7fafe;stop-opacity:0;" + offset="1" + id="stop3775" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + id="linearGradient3756"> + <stop + style="stop-color:black;stop-opacity:1;" + offset="0" + id="stop3758" /> + <stop + style="stop-color:black;stop-opacity:0;" + offset="1" + id="stop3760" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + id="linearGradient3742"> + <stop + style="stop-color:white;stop-opacity:1;" + offset="0" + id="stop3744" /> + <stop + style="stop-color:white;stop-opacity:0;" + offset="1" + id="stop3746" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + id="linearGradient3710"> + <stop + style="stop-color:white;stop-opacity:1;" + offset="0" + id="stop3712" /> + <stop + style="stop-color:white;stop-opacity:0;" + offset="1" + id="stop3714" /> + </linearGradient> + <linearGradient + id="linearGradient3695"> + <stop + style="stop-color:#626262;stop-opacity:1;" + offset="0" + id="stop3697" /> + <stop + style="stop-color:#efefef;stop-opacity:1;" + offset="1" + id="stop3699" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3771" + id="linearGradient4014" + gradientUnits="userSpaceOnUse" + x1="28.138407" + y1="5.6195269" + x2="29.138409" + y2="16.588285" + gradientTransform="matrix(2.668506,0.525365,-0.525365,2.668506,21.67033,-46.78911)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3771" + id="linearGradient4017" + gradientUnits="userSpaceOnUse" + x1="28.138407" + y1="5.6195269" + x2="29.138409" + y2="16.588285" + gradientTransform="matrix(2.668506,0.525365,-0.525365,2.668506,21.67033,-46.38911)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3771" + id="linearGradient4020" + gradientUnits="userSpaceOnUse" + x1="28.138407" + y1="5.6195269" + x2="29.138409" + y2="16.588285" + gradientTransform="matrix(2.668506,0.525365,-0.525365,2.668506,21.67033,-46.38911)" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient3853" + id="radialGradient4027" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.946894,-1.786603e-2,1.432351,109.7761,-34.33835,-8150.494)" + cx="-36.857941" + cy="75.225319" + fx="-36.857941" + fy="75.225319" + r="0.9722718" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3710" + id="linearGradient4031" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(2.810263,0.553275,-0.553275,2.810263,20.50572,-27.13753)" + x1="4.9107008" + y1="44.649334" + x2="58.884792" + y2="36.866131" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3710" + id="linearGradient4034" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(2.810263,0.553275,-0.553275,2.810263,20.50572,-27.13753)" + x1="4.9107008" + y1="44.649334" + x2="58.884792" + y2="36.866131" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3710" + id="linearGradient4037" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(2.810263,0.553275,-0.553275,2.810263,20.50572,-27.13753)" + x1="4.9107008" + y1="44.649334" + x2="58.884792" + y2="36.866131" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3837" + id="linearGradient4042" + gradientUnits="userSpaceOnUse" + x1="20.606983" + y1="54.213417" + x2="14.043751" + y2="16.4375" + gradientTransform="matrix(2.668506,0.525365,-0.525365,2.668506,21.67033,-45.78911)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3804" + id="linearGradient4045" + gradientUnits="userSpaceOnUse" + x1="6.28125" + y1="35.763672" + x2="14.3125" + y2="35.763672" + gradientTransform="matrix(2.668506,0.525365,-0.525365,2.668506,21.67033,-45.78911)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3783" + id="linearGradient4048" + gradientUnits="userSpaceOnUse" + x1="5.323966" + y1="55.630238" + x2="16.25" + y2="54.984375" + gradientTransform="matrix(2.668506,0.525365,-0.525365,2.668506,21.67033,-45.78911)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3783" + id="linearGradient4051" + gradientUnits="userSpaceOnUse" + x1="15.6875" + y1="48.890625" + x2="16.753466" + y2="55.4375" + gradientTransform="matrix(2.668506,0.525365,-0.525365,2.668506,21.67033,-45.78911)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3783" + id="linearGradient4054" + gradientUnits="userSpaceOnUse" + x1="15.6875" + y1="48.890625" + x2="16.25" + y2="54.984375" + gradientTransform="matrix(2.668506,0.525365,-0.525365,2.668506,21.67033,-45.78911)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3756" + id="linearGradient4057" + gradientUnits="userSpaceOnUse" + x1="11.967802" + y1="50.304192" + x2="15.346087" + y2="57.638905" + gradientTransform="matrix(2.668506,0.525365,-0.525365,2.668506,21.67033,-45.78911)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3710" + id="linearGradient4061" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(2.810263,0.553275,-0.553275,2.810263,18.9177,-18.7604)" + x1="4.9107008" + y1="44.649334" + x2="58.884792" + y2="36.866131" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3710" + id="linearGradient4064" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(2.810263,0.553275,-0.553275,2.810263,18.9177,-18.7604)" + x1="4.9107008" + y1="44.649334" + x2="58.884792" + y2="36.866131" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3695" + id="linearGradient4068" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(2.810263,0.553275,-0.553275,2.810263,20.50572,-27.13753)" + x1="32.438522" + y1="40" + x2="33.050251" + y2="42.76342" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3814" + id="linearGradient4071" + gradientUnits="userSpaceOnUse" + x1="4.5181999" + y1="41.236893" + x2="18.826626" + y2="38.015541" + gradientTransform="matrix(2.668506,0.525365,-0.525365,2.668506,21.67033,-45.78911)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3742" + id="linearGradient4075" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(2.810263,0.553275,-0.553275,2.810263,20.50572,-27.13753)" + x1="36.10664" + y1="42.068642" + x2="38.780388" + y2="40.875401" /> + <linearGradient + inkscape:collect="always" + xlink:href="#XMLID_5_" + id="linearGradient5127" + x1="92.956825" + y1="-8.9549065" + x2="59.82354" + y2="206.72591" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.964365,0.111876,-0.111876,0.964365,4.898481,-9.15308)" /> + <radialGradient + id="XMLID_5_" + cx="51.9995" + cy="-9" + r="111.0006" + gradientUnits="userSpaceOnUse"> + <stop + offset="0.15" + style="stop-color:#80B3FF" + id="stop4094" /> + <stop + offset="0.316" + style="stop-color:#69A1F0" + id="stop4096" /> + <stop + offset="0.6029" + style="stop-color:#4888DA" + id="stop4098" /> + <stop + offset="0.8412" + style="stop-color:#3378CC" + id="stop4100" /> + <stop + offset="1" + style="stop-color:#2C72C7" + id="stop4102" /> + </radialGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient5477" + id="linearGradient5483" + x1="74.0625" + y1="85.125" + x2="108.0625" + y2="126.0625" + gradientUnits="userSpaceOnUse" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient5477" + id="linearGradient5487" + gradientUnits="userSpaceOnUse" + x1="39.8125" + y1="79.125" + x2="45.3125" + y2="138.875" + gradientTransform="translate(0,-1)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient5477" + id="linearGradient5491" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(0,-2)" + x1="34.5625" + y1="99.375" + x2="44.0625" + y2="125.125" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient5477" + id="linearGradient5495" + gradientUnits="userSpaceOnUse" + x1="82.3125" + y1="61.875" + x2="36.3125" + y2="128.3125" + gradientTransform="translate(0,0.7)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient5477" + id="linearGradient5499" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(0,-3.3)" + x1="82.3125" + y1="61.875" + x2="72.327019" + y2="133.3125" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient5477" + id="linearGradient5503" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(0,1.7)" + x1="82.3125" + y1="61.875" + x2="72.327019" + y2="133.3125" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient2913" + id="linearGradient2919" + x1="52.984856" + y1="68.390213" + x2="113.21912" + y2="49.390213" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.999191,0.115917,-0.115917,0.999191,2.715901,-10.89609)" /> + <radialGradient + r="3.406888" + fy="120.64188" + fx="42.617531" + cy="120.64188" + cx="42.617531" + gradientTransform="matrix(1.520175,8.839467e-2,-0.843351,13.788,55.27677,-1567.892)" + gradientUnits="userSpaceOnUse" + id="radialGradient1580" + xlink:href="#linearGradient2257" + inkscape:collect="always" /> + <radialGradient + r="47.746403" + fy="59.591507" + fx="95.505852" + cy="59.591507" + cx="95.505852" + gradientTransform="matrix(6.228741e-2,-3.825032e-4,4.90218e-3,0.798611,15.0605,-17.07621)" + gradientUnits="userSpaceOnUse" + id="radialGradient1576" + xlink:href="#linearGradient3311" + inkscape:collect="always" /> + <radialGradient + r="3.9750404" + fy="6.7701697" + fx="47.370888" + cy="8.4953117" + cx="49.009884" + gradientTransform="matrix(1.297068,-1.880044e-3,7.085819e-4,0.48867,-47.03734,18.97582)" + gradientUnits="userSpaceOnUse" + id="radialGradient1569" + xlink:href="#linearGradient3225" + inkscape:collect="always" /> + <linearGradient + y2="2.5548496" + x2="48.913002" + y1="2.9719031" + x1="48.914677" + gradientTransform="matrix(1.29707,0,0,1.29707,-47.06473,12.03998)" + gradientUnits="userSpaceOnUse" + id="linearGradient1565" + xlink:href="#linearGradient3217" + inkscape:collect="always" /> + <radialGradient + r="1.7246193" + fy="2.6743078" + fx="49.011971" + cy="2.6743078" + cx="49.011971" + gradientTransform="matrix(1.29707,0,0,0.1578,-47.06473,15.05256)" + gradientUnits="userSpaceOnUse" + id="radialGradient1562" + xlink:href="#linearGradient3207" + inkscape:collect="always" /> + <linearGradient + y2="2.3657269" + x2="48.732723" + y1="0.81150496" + x1="48.498562" + gradientTransform="matrix(1.297068,-1.880044e-3,1.880044e-3,1.297068,-47.04731,12.10823)" + gradientUnits="userSpaceOnUse" + id="linearGradient1559" + xlink:href="#linearGradient3235" + inkscape:collect="always" /> + <linearGradient + y2="2.395859" + x2="46.051746" + y1="3.0999987" + x1="46.051746" + gradientTransform="matrix(1.28993,0,0,1.29707,-46.7271,12.03998)" + gradientUnits="userSpaceOnUse" + id="linearGradient1556" + xlink:href="#linearGradient3251" + inkscape:collect="always" /> + <radialGradient + r="1.7246193" + fy="2.6743078" + fx="49.011971" + cy="2.6743078" + cx="49.011971" + gradientTransform="matrix(0.860164,0,0,0.1578,-29.37149,15.05256)" + gradientUnits="userSpaceOnUse" + id="radialGradient1553" + xlink:href="#linearGradient3273" + inkscape:collect="always" /> + <linearGradient + gradientTransform="translate(53.87194,19.35268)" + y2="2.395859" + x2="46.051746" + y1="3.0999987" + x1="46.051746" + gradientUnits="userSpaceOnUse" + id="linearGradient1550" + xlink:href="#linearGradient3251" + inkscape:collect="always" /> + <radialGradient + r="1.7246193" + fy="2.6743078" + fx="49.011971" + cy="2.6743078" + cx="49.011971" + gradientTransform="matrix(0.853446,0,0,0.1578,-62.04115,15.05256)" + gradientUnits="userSpaceOnUse" + id="radialGradient1547" + xlink:href="#linearGradient3259" + inkscape:collect="always" /> + <radialGradient + r="47.595196" + fy="7.4622769" + fx="34.677639" + cy="7.4622769" + cx="34.677639" + gradientTransform="matrix(-1.5103,2.641273e-3,-1.167078e-4,-9.110224e-3,87.0522,7.438666)" + gradientUnits="userSpaceOnUse" + id="radialGradient1541" + xlink:href="#linearGradient3325" + inkscape:collect="always" /> + <radialGradient + r="47.595196" + fy="7.4622769" + fx="34.677639" + cy="7.4622769" + cx="34.677639" + gradientTransform="matrix(1,0,0,2.608014e-2,0,7.26766)" + gradientUnits="userSpaceOnUse" + id="radialGradient1539" + xlink:href="#linearGradient3303" + inkscape:collect="always" /> + <linearGradient + id="linearGradient2257"> + <stop + id="stop2259" + offset="0" + style="stop-color:#b4942a;stop-opacity:1;" /> + <stop + id="stop2261" + offset="1" + style="stop-color:#e4dcc9;stop-opacity:1" /> + </linearGradient> + <linearGradient + id="linearGradient3207"> + <stop + id="stop3209" + offset="0" + style="stop-color:#ffffff;stop-opacity:1;" /> + <stop + id="stop3211" + offset="1" + style="stop-color:#252525;stop-opacity:0;" /> + </linearGradient> + <linearGradient + id="linearGradient3217" + inkscape:collect="always"> + <stop + id="stop3219" + offset="0" + style="stop-color:#252525;stop-opacity:1;" /> + <stop + id="stop3221" + offset="1" + style="stop-color:#252525;stop-opacity:0;" /> + </linearGradient> + <linearGradient + id="linearGradient3225"> + <stop + id="stop3227" + offset="0" + style="stop-color:#ffffff;stop-opacity:1;" /> + <stop + id="stop3229" + offset="1" + style="stop-color:#aeaeae;stop-opacity:1;" /> + </linearGradient> + <linearGradient + id="linearGradient3235" + inkscape:collect="always"> + <stop + id="stop3237" + offset="0" + style="stop-color:#ffffff;stop-opacity:1;" /> + <stop + id="stop3239" + offset="1" + style="stop-color:#ffffff;stop-opacity:0;" /> + </linearGradient> + <linearGradient + id="linearGradient3251"> + <stop + id="stop3253" + offset="0" + style="stop-color:#000000;stop-opacity:1;" /> + <stop + id="stop3255" + offset="1" + style="stop-color:#131313;stop-opacity:0;" /> + </linearGradient> + <linearGradient + id="linearGradient3259"> + <stop + style="stop-color:#ffffff;stop-opacity:0.55035973;" + offset="0" + id="stop3261" /> + <stop + style="stop-color:#000000;stop-opacity:0;" + offset="1" + id="stop3263" /> + </linearGradient> + <linearGradient + id="linearGradient3273"> + <stop + id="stop3275" + offset="0" + style="stop-color:#ffffff;stop-opacity:0.55035973;" /> + <stop + id="stop3277" + offset="1" + style="stop-color:#ffffff;stop-opacity:0;" /> + </linearGradient> + <linearGradient + id="linearGradient3291"> + <stop + id="stop3293" + offset="0" + style="stop-color:#000000;stop-opacity:1;" /> + <stop + style="stop-color:black;stop-opacity:0.62454873;" + offset="0.67582417" + id="stop3100" /> + <stop + id="stop3295" + offset="1" + style="stop-color:#000000;stop-opacity:0;" /> + </linearGradient> + <linearGradient + id="linearGradient3303"> + <stop + id="stop3305" + offset="0" + style="stop-color:#ffffff;stop-opacity:0.68345326;" /> + <stop + id="stop3307" + offset="1" + style="stop-color:#ffffff;stop-opacity:0;" /> + </linearGradient> + <linearGradient + id="linearGradient3311"> + <stop + id="stop3313" + offset="0" + style="stop-color:#2d2d2d;stop-opacity:1;" /> + <stop + style="stop-color:#000000;stop-opacity:1;" + offset="0.5" + id="stop3319" /> + <stop + id="stop3315" + offset="1" + style="stop-color:#000000;stop-opacity:1;" /> + </linearGradient> + <linearGradient + id="linearGradient3325"> + <stop + style="stop-color:#ffffff;stop-opacity:1;" + offset="0" + id="stop3327" /> + <stop + style="stop-color:#ffffff;stop-opacity:0;" + offset="1" + id="stop3329" /> + </linearGradient> + <linearGradient + id="linearGradient2598"> + <stop + id="stop2600" + offset="0" + style="stop-color:#252525;stop-opacity:1;" /> + <stop + style="stop-color:#252525;stop-opacity:1;" + offset="0.5" + id="stop2606" /> + <stop + id="stop2608" + offset="0.75" + style="stop-color:#252525;stop-opacity:1;" /> + <stop + id="stop2602" + offset="1" + style="stop-color:#000000;stop-opacity:1;" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3742" + id="linearGradient2094" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(2.810263,0.553275,-0.553275,2.810263,20.50572,-27.13753)" + x1="36.10664" + y1="42.068642" + x2="38.780388" + y2="40.875401" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3814" + id="linearGradient2096" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(2.668506,0.525365,-0.525365,2.668506,21.67033,-45.78911)" + x1="4.5181999" + y1="41.236893" + x2="18.826626" + y2="38.015541" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3695" + id="linearGradient2098" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(2.810263,0.553275,-0.553275,2.810263,20.50572,-27.13753)" + x1="32.438522" + y1="40" + x2="33.050251" + y2="42.76342" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3710" + id="linearGradient2100" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(2.810263,0.553275,-0.553275,2.810263,18.9177,-18.7604)" + x1="4.9107008" + y1="44.649334" + x2="58.884792" + y2="36.866131" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3710" + id="linearGradient2102" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(2.810263,0.553275,-0.553275,2.810263,18.9177,-18.7604)" + x1="4.9107008" + y1="44.649334" + x2="58.884792" + y2="36.866131" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient5477" + id="linearGradient2104" + gradientUnits="userSpaceOnUse" + x1="74.0625" + y1="85.125" + x2="108.0625" + y2="126.0625" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient5477" + id="linearGradient2106" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(0,-1)" + x1="39.8125" + y1="79.125" + x2="45.3125" + y2="138.875" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient5477" + id="linearGradient2108" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(0,-2)" + x1="34.5625" + y1="99.375" + x2="44.0625" + y2="125.125" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient5477" + id="linearGradient2110" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(0,0.7)" + x1="82.3125" + y1="61.875" + x2="36.3125" + y2="128.3125" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient5477" + id="linearGradient2112" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(0,-3.3)" + x1="82.3125" + y1="61.875" + x2="72.327019" + y2="133.3125" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient5477" + id="linearGradient2114" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(0,1.7)" + x1="82.3125" + y1="61.875" + x2="72.327019" + y2="133.3125" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3756" + id="linearGradient2116" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(2.668506,0.525365,-0.525365,2.668506,21.67033,-45.78911)" + x1="11.967802" + y1="50.304192" + x2="15.346087" + y2="57.638905" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3783" + id="linearGradient2118" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(2.668506,0.525365,-0.525365,2.668506,21.67033,-45.78911)" + x1="15.6875" + y1="48.890625" + x2="16.25" + y2="54.984375" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3783" + id="linearGradient2120" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(2.668506,0.525365,-0.525365,2.668506,21.67033,-45.78911)" + x1="15.6875" + y1="48.890625" + x2="16.753466" + y2="55.4375" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3783" + id="linearGradient2122" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(2.668506,0.525365,-0.525365,2.668506,21.67033,-45.78911)" + x1="5.323966" + y1="55.630238" + x2="16.25" + y2="54.984375" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3804" + id="linearGradient2124" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(2.668506,0.525365,-0.525365,2.668506,21.67033,-45.78911)" + x1="6.28125" + y1="35.763672" + x2="14.3125" + y2="35.763672" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3837" + id="linearGradient2126" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(2.668506,0.525365,-0.525365,2.668506,21.67033,-45.78911)" + x1="20.606983" + y1="54.213417" + x2="14.043751" + y2="16.4375" /> + <linearGradient + inkscape:collect="always" + xlink:href="#XMLID_5_" + id="linearGradient2128" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.964365,0.111876,-0.111876,0.964365,4.898481,-9.15308)" + x1="92.956825" + y1="-8.9549065" + x2="59.82354" + y2="206.72591" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3710" + id="linearGradient2130" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(2.810263,0.553275,-0.553275,2.810263,20.50572,-27.13753)" + x1="4.9107008" + y1="44.649334" + x2="58.884792" + y2="36.866131" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient3853" + id="radialGradient2132" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.946894,-1.786603e-2,1.432351,109.7761,-34.33835,-8150.494)" + cx="-36.857941" + cy="75.225319" + fx="-36.857941" + fy="75.225319" + r="0.9722718" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3710" + id="linearGradient2134" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(2.810263,0.553275,-0.553275,2.810263,20.50572,-27.13753)" + x1="4.9107008" + y1="44.649334" + x2="58.884792" + y2="36.866131" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3710" + id="linearGradient2136" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(2.810263,0.553275,-0.553275,2.810263,20.50572,-27.13753)" + x1="4.9107008" + y1="44.649334" + x2="58.884792" + y2="36.866131" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3771" + id="linearGradient2138" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(2.668506,0.525365,-0.525365,2.668506,21.67033,-46.38911)" + x1="28.138407" + y1="5.6195269" + x2="29.138409" + y2="16.588285" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3771" + id="linearGradient2140" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(2.668506,0.525365,-0.525365,2.668506,21.67033,-46.38911)" + x1="28.138407" + y1="5.6195269" + x2="29.138409" + y2="16.588285" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3771" + id="linearGradient2142" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(2.668506,0.525365,-0.525365,2.668506,21.67033,-46.78911)" + x1="28.138407" + y1="5.6195269" + x2="29.138409" + y2="16.588285" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient2913" + id="linearGradient2144" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.999191,0.115917,-0.115917,0.999191,2.715901,-10.89609)" + x1="52.984856" + y1="68.390213" + x2="113.21912" + y2="49.390213" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient2913" + id="linearGradient2067" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.999191,0.115917,-0.115917,0.999191,8.719964,2.533569)" + x1="52.984856" + y1="68.390213" + x2="113.21912" + y2="49.390213" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3710" + id="linearGradient2083" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(2.810263,-0.553275,-0.553275,-2.810263,20.75975,149.9699)" + x1="4.9107008" + y1="44.649334" + x2="58.884792" + y2="36.866131" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3710" + id="linearGradient2086" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(2.810263,-0.553275,-0.553275,-2.810263,20.75975,149.9699)" + x1="4.9107008" + y1="44.649334" + x2="58.884792" + y2="36.866131" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient3853" + id="radialGradient2089" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.946894,1.786603e-2,1.432351,-109.7761,-34.08432,8273.326)" + cx="-36.857941" + cy="75.225319" + fx="-36.857941" + fy="75.225319" + r="0.9722718" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3710" + id="linearGradient2092" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(2.810263,-0.553275,-0.553275,-2.810263,20.75975,149.9699)" + x1="4.9107008" + y1="44.649334" + x2="58.884792" + y2="36.866131" /> + <linearGradient + inkscape:collect="always" + xlink:href="#XMLID_5_" + id="linearGradient2097" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.964365,-0.111876,-0.111876,-0.964365,5.152508,131.9855)" + x1="92.145996" + y1="-60.187336" + x2="59.408611" + y2="214.47302" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3837" + id="linearGradient2101" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(2.668506,-0.525365,-0.525365,-2.668506,21.92436,168.6215)" + x1="20.606983" + y1="54.213417" + x2="14.043751" + y2="16.4375" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3804" + id="linearGradient2105" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(2.668506,-0.525365,-0.525365,-2.668506,21.92436,168.6215)" + x1="6.28125" + y1="35.763672" + x2="14.3125" + y2="35.763672" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3783" + id="linearGradient2109" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(2.668506,-0.525365,-0.525365,-2.668506,21.92436,168.6215)" + x1="5.323966" + y1="55.630238" + x2="16.25" + y2="54.984375" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3783" + id="linearGradient2113" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(2.668506,-0.525365,-0.525365,-2.668506,21.92436,168.6215)" + x1="15.6875" + y1="48.890625" + x2="16.753466" + y2="55.4375" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3783" + id="linearGradient2117" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(2.668506,-0.525365,-0.525365,-2.668506,21.92436,168.6215)" + x1="15.6875" + y1="48.890625" + x2="16.25" + y2="54.984375" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3756" + id="linearGradient2121" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(2.668506,-0.525365,-0.525365,-2.668506,21.92436,168.6215)" + x1="15.213793" + y1="58.939987" + x2="14.701935" + y2="56.032543" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3710" + id="linearGradient2132" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(2.810263,-0.553275,-0.553275,-2.810263,19.17173,140.9928)" + x1="4.9107008" + y1="44.649334" + x2="58.884792" + y2="36.866131" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3710" + id="linearGradient2135" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(2.810263,-0.553275,-0.553275,-2.810263,19.17173,141.0928)" + x1="4.9107008" + y1="44.649334" + x2="58.884792" + y2="36.866131" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3695" + id="linearGradient2139" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(2.810263,-0.553275,-0.553275,-2.810263,20.75975,149.9699)" + x1="32.438522" + y1="40" + x2="33.050251" + y2="42.76342" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3814" + id="linearGradient2143" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(2.668506,-0.525365,-0.525365,-2.668506,21.92436,168.6215)" + x1="4.5181999" + y1="41.236893" + x2="18.826626" + y2="38.015541" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3837" + id="linearGradient2147" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(2.810263,-0.553275,-0.553275,-2.810263,20.75975,149.9699)" + x1="36.992214" + y1="42.161171" + x2="38.913979" + y2="39.759342" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient2975" + id="linearGradient2981" + x1="28.947184" + y1="125.89598" + x2="28.947184" + y2="104.95533" + gradientUnits="userSpaceOnUse" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient2087" + id="linearGradient2093" + x1="68.235809" + y1="120.29424" + x2="70.710678" + y2="86.634247" + gradientUnits="userSpaceOnUse" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3837" + id="linearGradient2127" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(2.810263,-0.553275,-0.553275,-2.810263,20.75975,149.9699)" + x1="36.992214" + y1="42.161171" + x2="38.913979" + y2="39.759342" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3814" + id="linearGradient2129" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(2.668506,-0.525365,-0.525365,-2.668506,21.92436,168.6215)" + x1="4.5181999" + y1="41.236893" + x2="18.826626" + y2="38.015541" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3695" + id="linearGradient2131" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(2.810263,-0.553275,-0.553275,-2.810263,20.75975,149.9699)" + x1="32.438522" + y1="40" + x2="33.050251" + y2="42.76342" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3710" + id="linearGradient2133" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(2.810263,-0.553275,-0.553275,-2.810263,19.17173,141.0928)" + x1="4.9107008" + y1="44.649334" + x2="58.884792" + y2="36.866131" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3710" + id="linearGradient2137" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(2.810263,-0.553275,-0.553275,-2.810263,19.17173,140.9928)" + x1="4.9107008" + y1="44.649334" + x2="58.884792" + y2="36.866131" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3756" + id="linearGradient2156" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(2.668506,-0.525365,-0.525365,-2.668506,21.92436,168.6215)" + x1="15.213793" + y1="58.939987" + x2="14.701935" + y2="56.032543" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3783" + id="linearGradient2158" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(2.668506,-0.525365,-0.525365,-2.668506,21.92436,168.6215)" + x1="15.6875" + y1="48.890625" + x2="16.25" + y2="54.984375" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3783" + id="linearGradient2160" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(2.668506,-0.525365,-0.525365,-2.668506,21.92436,168.6215)" + x1="15.6875" + y1="48.890625" + x2="16.753466" + y2="55.4375" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3783" + id="linearGradient2162" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(2.668506,-0.525365,-0.525365,-2.668506,21.92436,168.6215)" + x1="5.323966" + y1="55.630238" + x2="16.25" + y2="54.984375" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3804" + id="linearGradient2164" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(2.668506,-0.525365,-0.525365,-2.668506,21.92436,168.6215)" + x1="6.28125" + y1="35.763672" + x2="14.3125" + y2="35.763672" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3837" + id="linearGradient2166" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(2.668506,-0.525365,-0.525365,-2.668506,21.92436,168.6215)" + x1="20.606983" + y1="54.213417" + x2="14.043751" + y2="16.4375" /> + <linearGradient + inkscape:collect="always" + xlink:href="#XMLID_5_" + id="linearGradient2168" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.964365,-0.111876,-0.111876,-0.964365,5.152508,131.9855)" + x1="92.145996" + y1="-60.187336" + x2="59.408611" + y2="214.47302" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3710" + id="linearGradient2170" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(2.810263,-0.553275,-0.553275,-2.810263,20.75975,149.9699)" + x1="4.9107008" + y1="44.649334" + x2="58.884792" + y2="36.866131" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient3853" + id="radialGradient2172" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.946894,1.786603e-2,1.432351,-109.7761,-34.08432,8273.326)" + cx="-36.857941" + cy="75.225319" + fx="-36.857941" + fy="75.225319" + r="0.9722718" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3710" + id="linearGradient2174" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(2.810263,-0.553275,-0.553275,-2.810263,20.75975,149.9699)" + x1="4.9107008" + y1="44.649334" + x2="58.884792" + y2="36.866131" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient2087" + id="linearGradient2176" + gradientUnits="userSpaceOnUse" + x1="68.235809" + y1="120.29424" + x2="70.710678" + y2="86.634247" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3710" + id="linearGradient2178" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(2.810263,-0.553275,-0.553275,-2.810263,20.75975,149.9699)" + x1="4.9107008" + y1="44.649334" + x2="58.884792" + y2="36.866131" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient2913" + id="linearGradient2180" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.999191,0.115917,-0.115917,0.999191,8.719964,2.533569)" + x1="52.984856" + y1="68.390213" + x2="113.21912" + y2="49.390213" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient2975" + id="linearGradient2182" + gradientUnits="userSpaceOnUse" + x1="28.947184" + y1="125.89598" + x2="28.947184" + y2="104.95533" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3837" + id="linearGradient2533" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(2.934016,-0.577836,-0.577639,-2.935016,20.8843,149.7862)" + x1="36.992214" + y1="42.161171" + x2="38.913979" + y2="39.759342" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3814" + id="linearGradient2535" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(2.786016,-0.548687,-0.5485,-2.786966,22.1002,169.2658)" + x1="4.5181999" + y1="41.236893" + x2="18.826626" + y2="38.015541" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3695" + id="linearGradient2537" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(2.934016,-0.577836,-0.577639,-2.935016,20.8843,149.7862)" + x1="32.438522" + y1="40" + x2="33.050251" + y2="42.76342" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3710" + id="linearGradient2539" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(2.934016,-0.577836,-0.577639,-2.935016,19.22635,140.5151)" + x1="4.9107008" + y1="44.649334" + x2="58.884792" + y2="36.866131" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3710" + id="linearGradient2541" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(2.934016,-0.577836,-0.577639,-2.935016,19.22635,140.4106)" + x1="4.9107008" + y1="44.649334" + x2="58.884792" + y2="36.866131" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient5477" + id="linearGradient2543" + gradientUnits="userSpaceOnUse" + x1="74.0625" + y1="85.125" + x2="108.0625" + y2="126.0625" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient5477" + id="linearGradient2545" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(0,-1)" + x1="39.8125" + y1="79.125" + x2="45.3125" + y2="138.875" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient5477" + id="linearGradient2547" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(0,-2)" + x1="34.5625" + y1="99.375" + x2="44.0625" + y2="125.125" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient5477" + id="linearGradient2549" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(0,0.7)" + x1="82.3125" + y1="61.875" + x2="36.3125" + y2="128.3125" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient5477" + id="linearGradient2551" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(0,-3.3)" + x1="82.3125" + y1="61.875" + x2="72.327019" + y2="133.3125" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient5477" + id="linearGradient2553" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(0,1.7)" + x1="82.3125" + y1="61.875" + x2="72.327019" + y2="133.3125" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3756" + id="linearGradient2555" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(2.786016,-0.548687,-0.5485,-2.786966,22.1002,169.2658)" + x1="15.213793" + y1="58.939987" + x2="14.701935" + y2="56.032543" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3783" + id="linearGradient2557" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(2.786016,-0.548687,-0.5485,-2.786966,22.1002,169.2658)" + x1="15.6875" + y1="48.890625" + x2="16.25" + y2="54.984375" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3783" + id="linearGradient2559" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(2.786016,-0.548687,-0.5485,-2.786966,22.1002,169.2658)" + x1="15.6875" + y1="48.890625" + x2="16.753466" + y2="55.4375" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3783" + id="linearGradient2561" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(2.786016,-0.548687,-0.5485,-2.786966,22.1002,169.2658)" + x1="5.323966" + y1="55.630238" + x2="16.25" + y2="54.984375" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3804" + id="linearGradient2563" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(2.786016,-0.548687,-0.5485,-2.786966,22.1002,169.2658)" + x1="6.28125" + y1="35.763672" + x2="14.3125" + y2="35.763672" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3837" + id="linearGradient2565" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(2.786016,-0.548687,-0.5485,-2.786966,22.1002,169.2658)" + x1="20.606983" + y1="54.213417" + x2="14.043751" + y2="16.4375" /> + <linearGradient + inkscape:collect="always" + xlink:href="#XMLID_5_" + id="linearGradient2567" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1.006832,-0.116842,-0.116803,-1.007175,4.589781,131.0035)" + x1="92.145996" + y1="-60.187336" + x2="59.408611" + y2="214.47302" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3710" + id="linearGradient2569" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(2.934016,-0.577836,-0.577639,-2.935016,20.8843,149.7862)" + x1="4.9107008" + y1="44.649334" + x2="58.884792" + y2="36.866131" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient3853" + id="radialGradient2571" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.988591,1.835001e-2,1.495426,-112.7499,-36.37488,8490.872)" + cx="-36.857941" + cy="75.225319" + fx="-36.857941" + fy="75.225319" + r="0.9722718" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3710" + id="linearGradient2573" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(2.934016,-0.577836,-0.577639,-2.935016,20.8843,149.7862)" + x1="4.9107008" + y1="44.649334" + x2="58.884792" + y2="36.866131" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient2087" + id="linearGradient2575" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1.044036,0,0,1.044392,-0.789623,-6.841119)" + x1="68.235809" + y1="120.29424" + x2="70.710678" + y2="86.634247" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3710" + id="linearGradient2577" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(2.934016,-0.577836,-0.577639,-2.935016,20.8843,149.7862)" + x1="4.9107008" + y1="44.649334" + x2="58.884792" + y2="36.866131" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient2913" + id="linearGradient2579" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1.043191,-0.121063,-0.121022,-1.043547,-1.85471,132.9629)" + x1="52.984856" + y1="68.390213" + x2="113.21912" + y2="49.390213" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient2975" + id="linearGradient2581" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(1.044036,0,0,1.044392,-0.789623,-6.841119)" + x1="28.947184" + y1="125.89598" + x2="28.947184" + y2="104.95533" /> + <linearGradient + y2="65.932846" + x2="102" + y1="118" + x1="102" + gradientTransform="translate(20.000035,-56.000003)" + gradientUnits="userSpaceOnUse" + id="linearGradient3096" + xlink:href="#linearGradient6740" + inkscape:collect="always" /> + <linearGradient + y2="-131.93112" + x2="-45.096584" + y1="-131.93112" + x1="-80.00296" + gradientTransform="matrix(0,0.7388168,-0.7388168,0,-1.5226652,63.255682)" + gradientUnits="userSpaceOnUse" + id="linearGradient3094" + xlink:href="#linearGradient3711" + inkscape:collect="always" /> + <linearGradient + y2="87.759453" + x2="336.98077" + y1="120.81158" + x1="328.12448" + gradientUnits="userSpaceOnUse" + id="linearGradient3092" + xlink:href="#linearGradient4296" + inkscape:collect="always" /> + <radialGradient + r="36" + fy="92" + fx="343.99899" + cy="92" + cx="343.99899" + gradientUnits="userSpaceOnUse" + id="radialGradient3090" + xlink:href="#linearGradient4770" + inkscape:collect="always" /> + <linearGradient + y2="-373.1243" + x2="-56.357521" + y1="-381.09921" + x1="-86.120354" + gradientTransform="matrix(0,1,-1,0,-39.9985,140.0029)" + gradientUnits="userSpaceOnUse" + id="linearGradient3088" + xlink:href="#linearGradient5958" + inkscape:collect="always" /> + <filter + id="filter2787" + height="2.5382431" + y="-0.76912157" + width="1.1025495" + x="-0.051274771" + inkscape:collect="always"> + <feGaussianBlur + id="feGaussianBlur2789" + stdDeviation="2.5637386" + inkscape:collect="always" /> + </filter> + <linearGradient + gradientTransform="translate(242.00093,340.5)" + gradientUnits="userSpaceOnUse" + xlink:href="#linearGradient2927" + id="linearGradient2925" + y2="-304.61469" + x2="-178" + y1="-228.5" + x1="-178" /> + <linearGradient + gradientTransform="translate(242.00093,340.5)" + gradientUnits="userSpaceOnUse" + xlink:href="#linearGradient2822" + id="linearGradient2923" + y2="-296.48441" + x2="-168.99216" + y1="-300.5" + x1="-168.99216" /> + <linearGradient + gradientTransform="matrix(1.0033808,0,0,1,-8.2378,16)" + gradientUnits="userSpaceOnUse" + xlink:href="#linearGradient2937" + id="linearGradient3109" + y2="20" + x2="122.74438" + y1="96" + x1="122.74438" /> + <linearGradient + gradientTransform="translate(-6.999995,16)" + gradientUnits="userSpaceOnUse" + id="XMLID_6_" + y2="0.00048828119" + x2="72.000504" + y1="96" + x1="72.000504"> + <stop + offset="0" + style="stop-color:#00479e;stop-opacity:1" + id="stop7" /> + <stop + offset="0.0769" + style="stop-color:#2c72c7;stop-opacity:1" + id="stop9" /> + <stop + offset="0.58579999" + style="stop-color:#6ea1df;stop-opacity:1" + id="stop11" /> + <stop + offset="0.96450001" + style="stop-color:#adcbee;stop-opacity:1" + id="stop13" /> + </linearGradient> + <filter + x="-0.025599999" + width="1.0512" + y="-0.384" + height="1.768" + id="filter2807"> + <feGaussianBlur + inkscape:collect="always" + stdDeviation="1.28" + id="feGaussianBlur2809" /> + </filter> + <linearGradient + gradientTransform="matrix(1.0033404,0,0,1,-8.2374684,16)" + gradientUnits="userSpaceOnUse" + id="XMLID_9_" + y2="19.9583" + x2="71.999496" + y1="14.2578" + x1="71.999496"> + <stop + offset="0.25" + style="stop-color:#71a8f5;stop-opacity:0" + id="stop46" /> + <stop + offset="1" + style="stop-color:#0057ae;stop-opacity:1" + id="stop48" /> + </linearGradient> + <linearGradient + id="linearGradient2822"> + <stop + offset="0" + style="stop-color:#ffffff;stop-opacity:1" + id="stop2824" /> + <stop + offset="1" + style="stop-color:#ffffff;stop-opacity:0" + id="stop2826" /> + </linearGradient> + <linearGradient + gradientTransform="translate(242.00093,332.5)" + gradientUnits="userSpaceOnUse" + id="linearGradient2927" + y2="-304.61469" + x2="-178" + y1="-228.3945" + x1="-178"> + <stop + offset="0" + style="stop-color:#cfe7ff;stop-opacity:1" + id="stop2929" /> + <stop + offset="0.1" + style="stop-color:#71a8f5;stop-opacity:1" + id="stop2931" /> + <stop + offset="1" + style="stop-color:#2c72c7;stop-opacity:1" + id="stop2933" /> + </linearGradient> + <linearGradient + gradientTransform="matrix(1.0033808,0,0,1,-8.2378002,8)" + gradientUnits="userSpaceOnUse" + id="linearGradient2937" + y2="20.043535" + x2="122.39215" + y1="96.721588" + x1="122.74438"> + <stop + offset="0" + style="stop-color:#72b4f4;stop-opacity:1" + id="stop2939" /> + <stop + offset="0.13053299" + style="stop-color:#b3d9ff;stop-opacity:1" + id="stop2941" /> + <stop + offset="0.34621301" + style="stop-color:#b3d9ff;stop-opacity:1" + id="stop2943" /> + <stop + offset="0.72006166" + style="stop-color:#71a8f5;stop-opacity:1" + id="stop2945" /> + <stop + offset="1" + style="stop-color:#508ed9;stop-opacity:1" + id="stop2947" /> + </linearGradient> + <filter + id="filter4292" + inkscape:collect="always"> + <feGaussianBlur + id="feGaussianBlur4294" + stdDeviation="2.1604423" + inkscape:collect="always" /> + </filter> + <linearGradient + y2="-373.1243" + x2="-56.357521" + y1="-381.09921" + x1="-86.120354" + gradientTransform="matrix(0,1,-1,0,-39.9985,140.0029)" + gradientUnits="userSpaceOnUse" + id="linearGradient8916" + xlink:href="#linearGradient5958" + inkscape:collect="always" /> + <linearGradient + id="linearGradient5958" + gradientUnits="userSpaceOnUse" + x1="-84.002403" + y1="-383.9971" + x2="-12.0029" + y2="-383.9971" + gradientTransform="matrix(0,1,-1,0,-39.9985,140.0029)"> + <stop + offset="0" + style="stop-color:#008c00;stop-opacity:1" + id="stop5960" /> + <stop + offset="1" + style="stop-color:#00bf00;stop-opacity:1" + id="stop5962" /> + </linearGradient> + <radialGradient + r="36" + fy="92" + fx="343.99899" + cy="92" + cx="343.99899" + gradientUnits="userSpaceOnUse" + id="radialGradient8920" + xlink:href="#linearGradient4770" + inkscape:collect="always" /> + <linearGradient + id="linearGradient4770" + gradientUnits="userSpaceOnUse" + x1="-84.002403" + y1="-383.9971" + x2="-12.0029" + y2="-383.9971" + gradientTransform="matrix(0,1,-1,0,-39.9985,140.0029)"> + <stop + offset="0" + style="stop-color:#e5ff00;stop-opacity:1" + id="stop4772" /> + <stop + offset="1" + style="stop-color:#bff500;stop-opacity:0;" + id="stop4774" /> + </linearGradient> + <linearGradient + y2="87.759453" + x2="336.98077" + y1="120.81158" + x1="328.12448" + gradientUnits="userSpaceOnUse" + id="linearGradient4272" + xlink:href="#linearGradient4296" + inkscape:collect="always" /> + <linearGradient + id="linearGradient4296"> + <stop + style="stop-color:#00ff00;stop-opacity:1" + offset="0" + id="stop4298" /> + <stop + style="stop-color:#006500;stop-opacity:1" + offset="1" + id="stop4300" /> + </linearGradient> + <clipPath + id="clipPath5163" + clipPathUnits="userSpaceOnUse"> + <circle + id="circle5165" + ry="8.0010004" + cy="92" + cx="343.99899" + rx="8.0010004" + r="36" + style="fill:url(#linearGradient5167);fill-opacity:1" + sodipodi:cx="343.99899" + sodipodi:cy="92" + sodipodi:rx="36" + sodipodi:ry="36" /> + </clipPath> + <filter + id="filter7317" + inkscape:collect="always"> + <feGaussianBlur + id="feGaussianBlur7319" + stdDeviation="2.8805897" + inkscape:collect="always" /> + </filter> + <linearGradient + y2="-131.93112" + x2="-45.096584" + y1="-131.93112" + x1="-80.00296" + gradientTransform="matrix(0,0.7388168,-0.7388168,0,-1.5226652,63.255682)" + gradientUnits="userSpaceOnUse" + id="linearGradient8927" + xlink:href="#linearGradient3711" + inkscape:collect="always" /> + <linearGradient + id="linearGradient3711" + gradientUnits="userSpaceOnUse" + x1="-84.002403" + y1="-383.9971" + x2="-23.516129" + y2="-383.9975" + gradientTransform="matrix(0,1,-1,0,-39.9985,140.0029)"> + <stop + offset="0" + style="stop-color:white;stop-opacity:1;" + id="stop3713" /> + <stop + offset="1" + style="stop-color:white;stop-opacity:0;" + id="stop3715" /> + </linearGradient> + <linearGradient + y2="65.932846" + x2="102" + y1="118" + x1="102" + gradientTransform="translate(20.000035,-56.000003)" + gradientUnits="userSpaceOnUse" + id="linearGradient6930" + xlink:href="#linearGradient6740" + inkscape:collect="always" /> + <linearGradient + id="linearGradient6740"> + <stop + id="stop6742" + offset="0" + style="stop-color:#004d00;stop-opacity:0;" /> + <stop + style="stop-color:#004d00;stop-opacity:1;" + offset="0.5" + id="stop6748" /> + <stop + id="stop6744" + offset="1" + style="stop-color:#004d00;stop-opacity:0;" /> + </linearGradient> + <filter + id="filter5943" + inkscape:collect="always"> + <feGaussianBlur + id="feGaussianBlur5945" + stdDeviation="1.04" + inkscape:collect="always" /> + </filter> + <inkscape:perspective + id="perspective3101" + inkscape:persp3d-origin="64 : 42.666667 : 1" + inkscape:vp_z="128 : 64 : 1" + inkscape:vp_y="0 : 1000 : 0" + inkscape:vp_x="0 : 64 : 1" + sodipodi:type="inkscape:persp3d" /> + </defs> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="3.8515625" + inkscape:cx="65.181339" + inkscape:cy="75.378539" + inkscape:current-layer="g3166" + showgrid="true" + inkscape:document-units="px" + inkscape:grid-bbox="true" + width="128px" + height="128px" + showguides="true" + inkscape:guide-bbox="true" + inkscape:window-width="1018" + inkscape:window-height="694" + inkscape:window-x="194" + inkscape:window-y="27" + inkscape:grid-points="true"> + <sodipodi:guide + orientation="horizontal" + position="9.1694763" + id="guide3196" /> + <inkscape:grid + id="GridFromPre046Settings" + type="xygrid" + originx="0px" + originy="0px" + spacingx="4px" + spacingy="4px" + color="#0000ff" + empcolor="#0000ff" + opacity="0.2" + empopacity="0.4" + empspacing="0" /> + </sodipodi:namedview> + <metadata + id="metadata1882"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + </cc:Work> + </rdf:RDF> + </metadata> + <g + id="layer1" + inkscape:label="Layer 1" + inkscape:groupmode="layer"> + <path + sodipodi:type="arc" + style="opacity:0.38139535;fill:url(#radialGradient3336);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1" + id="path1563" + sodipodi:cx="63.912209" + sodipodi:cy="115.70919" + sodipodi:rx="63.912209" + sodipodi:ry="12.641975" + d="M 127.82442 115.70919 A 63.912209 12.641975 0 1 1 0,115.70919 A 63.912209 12.641975 0 1 1 127.82442 115.70919 z" + transform="matrix(1.001374,0,0,0.410379,-2.393169e-5,75.32738)" /> + <g + id="g2494" + transform="matrix(1.008377,0,0,1.008628,-2.581806,4.000097)"> + <g + id="g6745"> + <path + sodipodi:nodetypes="ccccccc" + id="path2792" + d="M 38.338914,110.0964 L 37.913085,0.25841761 L 108.67949,0.66355815 C 110.77709,0.65541189 112.42414,2.3833898 112.43226,4.4816986 L 109.58501,110.33068 C 109.59313,112.42898 107.95921,114.07621 105.8616,114.08435 L 38.338914,110.0964 z " + style="fill:#2560a8;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:0.1300813" /> + <path + style="fill:url(#linearGradient2533);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="M 107.58766,3.0160825 C 112.67226,8.539454 112.17593,8.7907347 111.98069,12.109645 L 103.4758,13.38043 L 107.58766,3.0160825 z " + id="path3740" + sodipodi:nodetypes="cccc" /> + <path + style="fill:black;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:0.1300813" + d="M 39.597409,118.78309 L 32.549614,118.86172 L 31.344291,118.56658 L 30.344724,118.88633 L 22.534642,118.97346 C 21.039463,118.97927 19.817875,117.76602 19.812076,116.27033 L 18.079158,107.46529 L 17.931657,4.6068899 C 18.105065,2.0373514 19.701119,-0.14092656 21.892469,0.0070742271 L 37.967478,0.26457952 L 40.110107,9.1166895 C 41.122652,9.5020074 41.839123,10.48171 41.843585,11.633518 L 42.207934,116.07766 C 42.213733,117.57334 41.092588,118.7773 39.597409,118.78309 z " + id="rect2790" + sodipodi:nodetypes="cccccccccccccc" /> + <path + style="fill:url(#linearGradient2535);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:0.1300813" + d="M 40.073714,118.13966 L 33.025689,118.1707 L 31.791028,117.87105 L 30.780553,118.251 L 23.018883,118.33211 C 21.523704,118.33791 20.231044,117.12113 20.225245,115.62544 L 18.494036,106.82908 L 18.115689,6.8455024 C 18.312928,8.3833383 21.522007,11.885279 23.373216,11.961927 L 41.210254,12.067765 C 39.076323,46.615295 39.916268,82.154782 40.073714,118.13966 z " + id="path3812" + sodipodi:nodetypes="ccccccccccc" /> + <path + style="fill:url(#linearGradient2537);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="M 108.94084,9.3476881 L 107.71864,3.022683 L 22.621208,2.377771 C 19.231723,2.1488716 19.86448,9.0768877 23.696029,9.041723 L 108.94084,9.3476881 z " + id="path2797" + sodipodi:nodetypes="ccccc" /> + <path + sodipodi:nodetypes="cccccc" + id="path3724" + d="M 37.974899,0.33629792 L 108.61904,0.63114022 C 110.61979,0.62339083 112.21571,2.2145952 112.36535,4.1806735 C 111.8662,2.6754958 110.46956,1.5418605 108.79954,1.5483462 L 37.983674,1.22777 L 37.974899,0.33629792 z " + style="fill:black;fill-opacity:0.47560975;fill-rule:nonzero;stroke:none;stroke-width:0.1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:0.1300813" /> + <path + sodipodi:nodetypes="cccccc" + id="path3726" + d="M 38.029184,0.51766703 L 108.72142,0.97145536 C 110.7222,0.96370597 112.31811,2.5548894 112.46775,4.5209782 C 111.96861,3.01579 110.57195,1.8821547 108.90196,1.8886509 L 38.293697,1.6203779 L 38.029184,0.51766703 z " + style="opacity:0.49180328;fill:url(#linearGradient2539);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:0.1300813" /> + <path + style="opacity:0.34426228;fill:url(#linearGradient2541);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:0.1300813" + d="M 38.026583,0.52305609 L 108.72142,0.86701616 C 110.7222,0.85926677 112.31811,2.4504502 112.46775,4.416539 C 111.96861,2.9113508 110.45915,1.2044697 108.78912,1.2109553 L 38.180838,1.1846523 L 38.026583,0.52305609 z " + id="path3728" + sodipodi:nodetypes="cccccc" /> + <g + id="g5505" + style="opacity:0.397541" + transform="matrix(1.043191,-0.121063,-0.121022,-1.043547,2.311089,132.8239)"> + <path + sodipodi:nodetypes="cc" + id="path5475" + d="M 30.625,118.75 C 32.625,118.75 114.11742,108.58839 114.11742,108.58839" + style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:url(#linearGradient2543);stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:url(#linearGradient2545);stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="M 31.066942,117.61742 C 33.066942,117.61742 114.25,107.5 114.25,107.5" + id="path5485" + sodipodi:nodetypes="cc" /> + <path + sodipodi:nodetypes="cc" + id="path5489" + d="M 31.464689,116.79419 C 33.464689,116.79419 114.25,106.5 114.25,106.5" + style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:url(#linearGradient2547);stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:url(#linearGradient2549);stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="M 31.332107,119.81742 C 33.332107,119.81742 114.02903,109.7 114.02903,109.7" + id="path5493" + sodipodi:nodetypes="cc" /> + <path + sodipodi:nodetypes="cc" + id="path5497" + d="M 31.906631,115.81742 C 33.906631,115.81742 114.02903,105.7 114.02903,105.7" + style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:url(#linearGradient2551);stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" /> + <path + style="fill:none;fill-opacity:0.75;fill-rule:evenodd;stroke:url(#linearGradient2553);stroke-width:0.1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" + d="M 32.039214,120.90581 C 34.039214,120.90581 114.02903,110.7 114.02903,110.7" + id="path5501" + sodipodi:nodetypes="cc" /> + </g> + <path + style="opacity:0.68999999;fill:black;fill-opacity:0.47560975;fill-rule:nonzero;stroke:none;stroke-width:0.1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:0.1300813" + d="M 37.974899,0.33629792 L 108.61904,0.63114022 C 110.61979,0.62339083 112.21571,2.2145952 112.36535,4.1806735 C 111.81315,2.0428449 110.3244,1.0464218 108.65441,1.0529179 L 38.040198,0.74505206 L 37.974899,0.33629792 z " + id="path3732" + sodipodi:nodetypes="cccccc" /> + <path + sodipodi:nodetypes="ccccc" + id="path3754" + d="M 108.94084,9.3476881 L 107.71864,3.022683 L 22.621208,2.377771 C 19.231723,2.1488716 19.86448,9.0768877 23.696029,9.041723 L 108.94084,9.3476881 z " + style="fill:url(#linearGradient2555);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> + <path + style="opacity:0.42213117;fill:url(#linearGradient2557);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="M 19.836545,7.5017461 C 20.011478,8.2422096 21.550035,9.7376327 22.022102,9.8758371 C 27.863578,9.8411633 33.705055,9.8065104 39.54653,9.771847 C 39.562764,10.160664 39.578998,10.549501 39.595233,10.938339 C 33.660983,10.961127 27.726727,10.983895 21.792476,11.006684 C 21.093755,11.063029 20.058064,8.5949008 19.836545,7.5017461 z " + id="path3781" + sodipodi:nodetypes="cccccc" /> + <path + sodipodi:nodetypes="ccccsc" + id="path3791" + d="M 19.836545,7.5017461 C 20.011478,8.2422096 22.054175,9.8622496 22.526245,10.000444 C 28.367721,9.9657801 33.384639,9.9655713 39.226114,9.9308975 C 39.242349,10.319735 39.161716,10.474023 39.177952,10.862861 C 33.243703,10.885649 29.197342,10.746463 22.780819,10.806557 C 21.007717,10.823153 20.058064,8.5949008 19.836545,7.5017461 z " + style="opacity:0.42213117;fill:url(#linearGradient2559);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" /> + <path + style="opacity:0.42213117;fill:url(#linearGradient2561);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="M 19.836545,7.5017461 C 19.973529,7.4703621 20.114796,7.9000459 20.306814,8.1823659 C 20.861966,8.9986 21.825658,10.037958 22.803279,9.9458949 C 28.644754,9.9112316 33.384639,9.9655713 39.226114,9.9308975 C 39.242349,10.319735 39.075335,10.264884 39.091569,10.6537 C 33.157319,10.676499 28.675851,10.445135 22.741602,10.467924 C 21.513788,10.423652 20.516518,9.3012126 20.054131,8.2993587 C 19.919855,8.0084224 19.750056,7.5145086 19.836545,7.5017461 z " + id="path3793" + sodipodi:nodetypes="csccccsc" /> + <path + style="opacity:0.36885244;fill:url(#linearGradient2563);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:0.1300813" + d="M 30.384055,118.3042 L 31.17758,9.2405857 L 32.447883,9.2618077 L 31.38562,117.99387 L 30.384055,118.3042 z " + id="path3799" + sodipodi:nodetypes="ccccc" /> + <path + sodipodi:nodetypes="ccccccccccc" + id="path3835" + d="M 40.012936,113.99218 L 32.964912,114.02321 L 31.730248,113.72357 L 30.719775,114.10352 L 22.958107,114.18463 C 21.462927,114.19043 20.170266,112.97364 20.164468,111.47796 L 18.433259,102.6816 L 18.115689,6.8455024 C 18.312928,8.3833383 20.74035,11.975243 23.373216,11.961927 L 41.210254,12.067765 C 39.076323,46.615295 39.855493,78.007299 40.012936,113.99218 z " + style="fill:url(#linearGradient2565);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:0.1300813" /> + <path + style="fill:url(#linearGradient2567);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:0.1300813" + d="M 39.353258,118.79322 L 39.645997,9.0634463 L 110.25722,9.3644297 C 112.35481,9.3562834 114.00183,11.084272 114.00999,13.18256 L 111.52929,114.85415 C 111.53745,116.95245 109.9035,118.59968 107.80591,118.60781 L 39.353258,118.79322 z " + id="rect1887" + sodipodi:nodetypes="ccccccc" /> + <path + style="fill:black;fill-opacity:0.47560975;fill-rule:nonzero;stroke:none;stroke-width:0.1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:0.1300813" + d="M 39.632873,9.085295 L 110.27699,9.3801582 C 112.27777,9.3723984 113.87366,10.963592 114.02331,12.929671 C 113.5242,11.424493 112.12751,10.290858 110.45749,10.297343 L 39.641648,9.9767672 L 39.632873,9.085295 z " + id="path3703" + sodipodi:nodetypes="cccccc" /> + <path + style="opacity:0.49180328;fill:url(#linearGradient2569);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:0.1300813" + d="M 39.687156,9.7888497 L 110.3794,10.242648 C 112.38018,10.23491 113.97609,11.826103 114.12571,13.792182 C 113.62662,12.286983 112.22992,11.153369 110.55992,11.159844 L 39.64898,11.211677 L 39.687156,9.7888497 z " + id="path3718" + sodipodi:nodetypes="cccccc" /> + <path + style="fill:url(#radialGradient2571);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:0.1300813" + d="M 39.555393,118.1661 C 38.445647,118.15123 37.555613,69.450761 37.63304,9.3050142 L 41.722316,9.35983 C 41.628711,69.505351 40.665141,118.18097 39.555393,118.1661 z " + id="path3851" /> + <path + sodipodi:nodetypes="cccccc" + id="path3708" + d="M 39.435697,10.046167 L 110.3794,10.242648 C 112.38018,10.23491 113.97609,11.826103 114.12571,13.792182 C 113.62662,12.286983 112.1171,10.580123 110.4471,10.586609 L 39.40643,10.658818 L 39.435697,10.046167 z " + style="opacity:0.34426228;fill:url(#linearGradient2573);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:0.1300813" /> + <path + sodipodi:nodetypes="ccccccc" + id="path2084" + d="M 39.353258,118.79322 L 39.645997,9.0634463 L 110.25722,9.3644297 C 112.35481,9.3562834 114.00183,11.084272 114.00999,13.18256 L 111.52929,114.85415 C 111.53745,116.95245 109.9035,118.59968 107.80591,118.60781 L 39.353258,118.79322 z " + style="fill:url(#linearGradient2575);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:0.1300813" /> + <path + style="opacity:0.34426228;fill:url(#linearGradient2577);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:0.1300813" + d="M 39.825838,9.910678 L 110.3794,10.242648 C 112.38018,10.23491 113.97609,11.826103 114.12571,13.792182 C 113.62662,12.286983 112.21223,10.942475 110.54222,10.94895 L 39.827973,10.853983 L 39.825838,9.910678 z " + id="path3720" + sodipodi:nodetypes="cccccc" /> + <path + sodipodi:nodetypes="cccccc" + id="path3722" + d="M 39.632873,9.085295 L 110.27699,9.3801582 C 112.27777,9.3723984 113.87366,10.963592 114.02331,12.929671 C 113.47111,10.791842 111.98241,9.7954189 110.3124,9.801915 L 39.698169,9.4940387 L 39.632873,9.085295 z " + style="fill:black;fill-opacity:0.47560975;fill-rule:nonzero;stroke:none;stroke-width:0.1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:0.1300813" /> + <path + sodipodi:nodetypes="cccccccc" + id="path3769" + d="M 108.51772,118.58356 C 108.27231,118.63348 107.97922,118.64977 107.71701,118.65079 L 39.338733,118.80491 L 39.292607,118.22594 L 107.61417,118.12823 C 109.71174,118.12009 111.39269,116.40805 111.38455,114.30975 L 111.50452,114.91941 C 111.51166,116.75542 110.23559,118.23413 108.51772,118.58356 z " + style="opacity:0.34836067;fill:black;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:0.1300813" /> + <path + style="fill:url(#linearGradient2579);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="M 104.20386,93.260266 C 100.78681,90.059896 97.385363,86.842146 94.139693,83.465826 C 85.293323,73.843931 77.163448,63.606103 70.401256,52.387458 C 66.720514,46.276403 63.300484,40.02529 59.890846,33.769881 C 54.04496,26.921272 48.14362,20.121472 42.17667,13.375752 C 41.44724,12.538932 40.72594,11.688942 40,10.842182 L 42.20112,10.855802 C 43.10583,11.978642 44.01216,13.098862 44.9205,14.216032 C 49.07826,19.239842 53.25359,24.250452 57.428605,29.260125 C 54.9958,24.811862 52.53616,20.374962 49.96467,16.000222 C 49.23548,14.873742 47.13762,12.480172 46.08123,10.869862 L 49.2627,10.882562 C 50.7349,12.402392 51.52832,14.440042 52.97088,16.970652 C 56.013247,22.984262 59.038078,28.996886 62.170896,34.950433 C 66.401822,40.023224 70.632232,45.094777 74.85595,50.173617 C 84.095892,61.421487 93.610123,72.461038 104.84942,81.693506 L 104.78751,82.768286 C 92.905783,73.165201 83.056435,61.465631 73.335567,49.707763 C 70.33583,46.113468 67.326588,42.528199 64.301376,38.956213 C 66.850015,43.691213 69.485054,48.381608 72.276394,52.994405 C 79.202128,64.313335 87.554136,74.598311 96.648033,84.220636 C 99.101003,86.768686 101.67316,89.193016 104.29751,91.561216 L 104.20386,93.260266 z M 105.64151,67.462449 C 103.67191,62.04477 101.45583,56.719695 98.870443,51.535593 C 93.070283,39.334672 87.219122,27.117292 80.244132,15.532802 C 79.340132,14.106092 77.293057,11.989322 76.777153,11.000792 L 78.457134,11.009792 C 78.933045,11.238272 79.51208,11.540212 80.221491,11.933392 L 78.582764,11.008222 L 79.416086,11.011342 C 81.377278,12.142322 81.854211,13.666342 83.449624,16.575592 C 89.568798,28.154282 94.968033,40.097366 100.34672,52.032605 C 102.42881,56.337369 104.198,60.758149 105.76265,65.252449 L 105.64151,67.462449 z " + id="path2012" /> + <path + sodipodi:nodetypes="ccc" + id="path2276" + d="M -85.488193,-85.083786 L -85.488193,-88.002558 L -85.488193,-85.083786 z " + style="fill:white;fill-opacity:0.75688076;fill-rule:nonzero;stroke:none;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:1" /> + <path + style="fill:url(#linearGradient2581);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" + d="M 18.266324,93.747176 L 18.358605,107.54784 L 20.250357,116.87135 L 21.173163,118.11756 L 23.387899,118.57912 L 30.770347,118.53297 L 31.324031,118.30219 L 39.121742,118.53297 L 39.260164,93.977956 L 18.266324,93.747176 z " + id="path2973" /> + <path + style="opacity:0.34836067;fill:black;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:4;stroke-opacity:0.1300813" + d="M 108.51772,118.58356 C 108.27231,118.63348 107.97922,118.64977 107.71701,118.65079 L 39.338733,118.80491 L 39.292607,117.70374 L 107.61417,117.60603 C 109.71174,117.5979 111.39269,116.40805 111.38455,114.30975 L 111.50452,114.91941 C 111.51166,116.75542 110.23559,118.23413 108.51772,118.58356 z " + id="path2983" + sodipodi:nodetypes="cccccccc" /> + </g> + <g + id="g3166" + transform="translate(53.524281,32.275367)"> + <g + transform="translate(-20.021682,-65.961511)" + id="g3077"> + <g + id="g3640" + transform="translate(-31.999989,29.999999)"> + <circle + sodipodi:ry="36" + sodipodi:rx="36" + sodipodi:cy="92" + sodipodi:cx="343.99899" + style="opacity:0.5;fill:#000000;fill-opacity:1;filter:url(#filter4292)" + r="36" + rx="8.0010004" + cx="343.99899" + cy="92" + ry="8.0010004" + id="circle4274" + transform="matrix(-0.858425,0.2300143,-0.2300143,-0.858425,412.45864,35.85043)" /> + <circle + transform="matrix(-0.858425,0.2300143,-0.2300143,-0.858425,412.45864,31.85043)" + id="circle3581_2_" + ry="8.0010004" + cy="92" + cx="343.99899" + rx="8.0010004" + r="36" + style="fill:url(#linearGradient3088);fill-opacity:1" + sodipodi:cx="343.99899" + sodipodi:cy="92" + sodipodi:rx="36" + sodipodi:ry="36" /> + <circle + sodipodi:ry="36" + sodipodi:rx="36" + sodipodi:cy="92" + sodipodi:cx="343.99899" + style="fill:url(#radialGradient3090);fill-opacity:1" + r="36" + rx="8.0010004" + cx="343.99899" + cy="92" + ry="8.0010004" + id="circle4383" + transform="matrix(-0.6438188,0.1725107,-0.1725107,-0.6438188,333.34401,31.887831)" /> + <circle + sodipodi:ry="36" + sodipodi:rx="36" + sodipodi:cy="92" + sodipodi:cx="343.99899" + style="opacity:0.8;fill:none;fill-opacity:1;stroke:url(#linearGradient3092);stroke-width:6.75138187;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter7317)" + r="36" + rx="8.0010004" + cx="343.99899" + cy="92" + ry="8.0010004" + id="circle4776" + transform="matrix(-0.858425,-0.2300143,-0.2300143,0.858425,412.45864,32.149572)" + clip-path="url(#clipPath5163)" /> + <path + id="circle16776" + d="M 96.000027,4.1481901 C 84.654311,4.1481901 75.173932,12.159796 72.888913,22.826405 C 77.443574,27.0723 86.085806,29.937514 96.000027,29.937514 C 105.91426,29.937514 114.55648,27.0723 119.11114,22.826405 C 116.82613,12.159796 107.34574,4.1481901 96.000027,4.1481901 z" + style="opacity:0.8;fill:url(#linearGradient3094);fill-opacity:1" /> + <g + transform="translate(-26.000031,-3.999996)" + id="g6850"> + <path + id="path4123" + d="M 118.00003,15.999997 L 118.00003,31.999997 L 102.00003,31.999997 L 102.00003,39.999997 L 118.00003,39.999997 L 118.00003,55.999997 L 126.00003,55.999997 L 126.00003,39.999997 L 142.00003,39.999997 L 142.00003,31.999997 L 126.00003,31.999997 L 126.00003,15.999997 L 118.00003,15.999997 z" + style="fill:none;fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient3096);stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;filter:url(#filter5943)" + sodipodi:nodetypes="ccccccccccccc" /> + <path + style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1" + d="M 118.00003,15.999997 L 118.00003,31.999997 L 102.00003,31.999997 L 102.00003,39.999997 L 118.00003,39.999997 L 118.00003,55.999997 L 126.00003,55.999997 L 126.00003,39.999997 L 142.00003,39.999997 L 142.00003,31.999997 L 126.00003,31.999997 L 126.00003,15.999997 L 118.00003,15.999997 z" + id="rect3232" + sodipodi:nodetypes="ccccccccccccc" /> + </g> + </g> + </g> + </g> + </g> + </g> +</svg> diff --git a/src/calibre/gui2/images/swap.svg b/src/calibre/gui2/images/swap.svg new file mode 100644 index 0000000000..aa62316b34 --- /dev/null +++ b/src/calibre/gui2/images/swap.svg @@ -0,0 +1,722 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Created with Inkscape (http://www.inkscape.org/) --> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://web.resource.org/cc/" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="128" + height="128" + id="svg2606" + sodipodi:version="0.32" + inkscape:version="0.45.1" + version="1.0" + sodipodi:docname="edit-undo.svgz" + inkscape:output_extension="org.inkscape.output.svgz.inkscape" + sodipodi:docbase="/home/david/oxygen/trunk/scalable/actions" + inkscape:export-filename="edit-undo.png" + inkscape:export-xdpi="11.25" + inkscape:export-ydpi="11.25"> + <defs + id="defs2608"> + <linearGradient + inkscape:collect="always" + id="linearGradient3342"> + <stop + style="stop-color:#000000;stop-opacity:1;" + offset="0" + id="stop3344" /> + <stop + style="stop-color:#000000;stop-opacity:0;" + offset="1" + id="stop3347" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + id="linearGradient3326"> + <stop + style="stop-color:#000000;stop-opacity:1;" + offset="0" + id="stop3328" /> + <stop + style="stop-color:#000000;stop-opacity:0;" + offset="1" + id="stop3330" /> + </linearGradient> + <linearGradient + id="linearGradient3825"> + <stop + style="stop-color:#ffffff;stop-opacity:0;" + offset="0" + id="stop3827" /> + <stop + id="stop3833" + offset="0.5" + style="stop-color:#ffffff;stop-opacity:0.18705036;" /> + <stop + style="stop-color:#ffffff;stop-opacity:1;" + offset="1" + id="stop3829" /> + </linearGradient> + <linearGradient + id="linearGradient3751"> + <stop + style="stop-color:#beba2c;stop-opacity:1;" + offset="0" + id="stop3753" /> + <stop + style="stop-color:#b6be2c;stop-opacity:0;" + offset="1" + id="stop3755" /> + </linearGradient> + <linearGradient + id="linearGradient3528"> + <stop + style="stop-color:#eaf209;stop-opacity:1;" + offset="0" + id="stop3530" /> + <stop + style="stop-color:#c7c634;stop-opacity:0;" + offset="1" + id="stop3532" /> + </linearGradient> + <linearGradient + id="linearGradient3295"> + <stop + style="stop-color:#fffe63;stop-opacity:1;" + offset="0" + id="stop3297" /> + <stop + style="stop-color:#ffffff;stop-opacity:0;" + offset="1" + id="stop3299" /> + </linearGradient> + <linearGradient + id="linearGradient3202"> + <stop + style="stop-color:#fcff9c;stop-opacity:1;" + offset="0" + id="stop3204" /> + <stop + style="stop-color:#c1a965;stop-opacity:0;" + offset="1" + id="stop3206" /> + </linearGradient> + <radialGradient + id="XMLID_4_" + cx="48" + cy="-0.2148" + r="55.148" + gradientTransform="matrix(0.9792,0,0,0.9725,133.0002,20.8762)" + gradientUnits="userSpaceOnUse"> + <stop + offset="0" + style="stop-color:#cfd13d;stop-opacity:1;" + id="stop3082" /> + <stop + offset="1" + style="stop-color:#db8900;stop-opacity:1;" + id="stop3090" /> + </radialGradient> + <linearGradient + id="linearGradient3260" + inkscape:collect="always"> + <stop + id="stop3262" + offset="0" + style="stop-color:#ffffff;stop-opacity:1;" /> + <stop + id="stop3264" + offset="1" + style="stop-color:#ffffff;stop-opacity:0;" /> + </linearGradient> + <linearGradient + id="linearGradient3344"> + <stop + id="stop3346" + offset="0" + style="stop-color:#fdff63;stop-opacity:1;" /> + <stop + id="stop3348" + offset="1" + style="stop-color:#ffffff;stop-opacity:0;" /> + </linearGradient> + <linearGradient + id="linearGradient3449"> + <stop + id="stop3451" + offset="0" + style="stop-color:#000000;stop-opacity:1;" /> + <stop + id="stop3453" + offset="1" + style="stop-color:#000000;stop-opacity:0;" /> + </linearGradient> + <linearGradient + inkscape:collect="always" + xlink:href="#XMLID_4_" + id="linearGradient3516" + x1="147.09375" + y1="33.40625" + x2="8.083992" + y2="123.90625" + gradientUnits="userSpaceOnUse" /> + <radialGradient + inkscape:collect="always" + xlink:href="#XMLID_4_" + id="radialGradient3524" + cx="67.09375" + cy="116.90625" + fx="67.09375" + fy="116.90625" + r="56" + gradientUnits="userSpaceOnUse" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient3528" + id="radialGradient3535" + cx="99.726295" + cy="27.418272" + fx="64.689766" + fy="68.231934" + r="56" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.693735,5.8671246e-2,-3.6242796e-2,0.4285387,33.939389,26.8809)" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3295" + id="linearGradient3548" + x1="75.09375" + y1="4.5317035" + x2="75.09375" + y2="80.172485" + gradientUnits="userSpaceOnUse" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3260" + id="linearGradient3581" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(4.2161108e-3,1.9705695e-3)" + x1="75.09375" + y1="4.5317035" + x2="75.09375" + y2="80.172485" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3295" + id="linearGradient3613" + x1="208.59375" + y1="130.40625" + x2="208.59375" + y2="63.426777" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-137,0)" /> + <filter + inkscape:collect="always" + id="filter3639"> + <feGaussianBlur + inkscape:collect="always" + stdDeviation="1.0580524" + id="feGaussianBlur3641" /> + </filter> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient3449" + id="radialGradient3654" + cx="-10.165252" + cy="66.906013" + fx="-10.165252" + fy="66.906013" + r="59.995121" + gradientTransform="matrix(0.4582893,-2.1035589e-8,4.5903973e-8,1.0000813,20.447953,-5.1974351e-3)" + gradientUnits="userSpaceOnUse" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient3449" + id="radialGradient3658" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.2676699,0.521376,-0.7037472,0.3612977,108.99386,-36.062981)" + cx="167.67001" + cy="80.404922" + fx="167.67001" + fy="80.404922" + r="59.995121" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3260" + id="linearGradient3676" + x1="120.0625" + y1="12.569496" + x2="125.30366" + y2="14.444496" + gradientUnits="userSpaceOnUse" + spreadMethod="reflect" /> + <filter + inkscape:collect="always" + x="-0.15096202" + width="1.301924" + y="-0.13732364" + height="1.2746473" + id="filter3738"> + <feGaussianBlur + inkscape:collect="always" + stdDeviation="0.39257441" + id="feGaussianBlur3740" /> + </filter> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient3449" + id="radialGradient3744" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.982366,1.671718e-2,-3.5801148e-3,0.2103843,-18.56344,30.477792)" + cx="72.684891" + cy="48.228905" + fx="74.871155" + fy="26.862719" + r="59.995121" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient3751" + id="radialGradient3757" + cx="66.01458" + cy="126.69183" + fx="66.01458" + fy="126.69183" + r="59.99512" + gradientTransform="matrix(0.675025,0,0,0.3583625,19.527377,41.004647)" + gradientUnits="userSpaceOnUse" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient3260" + id="radialGradient3767" + cx="64.088867" + cy="7.4108429" + fx="64.088867" + fy="7.4108429" + r="59.995121" + gradientTransform="matrix(0.3093869,0,0,0.4779247,44.260611,3.8644223)" + gradientUnits="userSpaceOnUse" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3344" + id="linearGradient3771" + gradientUnits="userSpaceOnUse" + spreadMethod="reflect" + x1="120.0625" + y1="12.569496" + x2="125.30366" + y2="14.444496" /> + <filter + inkscape:collect="always" + id="filter3438"> + <feGaussianBlur + inkscape:collect="always" + stdDeviation="1.3342697" + id="feGaussianBlur3440" /> + </filter> + <filter + inkscape:collect="always" + id="filter3630"> + <feGaussianBlur + inkscape:collect="always" + stdDeviation="0.89883985" + id="feGaussianBlur3632" /> + </filter> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient3825" + id="radialGradient2361" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.6484284,0.1017206,-3.1257154e-2,0.1992521,-4.56257,53.15916)" + cx="-112.17241" + cy="118.60459" + fx="-113.14772" + fy="59.708473" + r="59.99512" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3326" + id="linearGradient2363" + gradientUnits="userSpaceOnUse" + x1="-151.43935" + y1="37.68198" + x2="-152.26776" + y2="57.25" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3326" + id="linearGradient2365" + gradientUnits="userSpaceOnUse" + x1="-132.51041" + y1="39.803303" + x2="-158.92462" + y2="72.881729" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3326" + id="linearGradient2367" + gradientUnits="userSpaceOnUse" + x1="-83.012932" + y1="44.753052" + x2="-158.92462" + y2="72.881729" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3342" + id="linearGradient3349" + x1="-73" + y1="105.625" + x2="-163" + y2="86.125" + gradientUnits="userSpaceOnUse" /> + <filter + inkscape:collect="always" + x="-0.087741371" + width="1.1754827" + y="-0.10211017" + height="1.2042203" + id="filter3363"> + <feGaussianBlur + inkscape:collect="always" + stdDeviation="3.0526685" + id="feGaussianBlur3365" /> + </filter> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3342" + id="linearGradient3372" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-40.5,-1.5)" + x1="-83.593941" + y1="137.13324" + x2="-138.0043" + y2="92.603989" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3342" + id="linearGradient3376" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-40.5,-1.5)" + x1="-61.802711" + y1="99.979607" + x2="-136.51074" + y2="112.70422" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient3825" + id="radialGradient3388" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.6484284,0.1017206,-3.1257154e-2,0.1992521,-4.56257,53.15916)" + cx="-112.17241" + cy="118.60459" + fx="-113.14772" + fy="59.708473" + r="59.99512" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3326" + id="linearGradient3390" + gradientUnits="userSpaceOnUse" + x1="-151.43935" + y1="37.68198" + x2="-152.26776" + y2="57.25" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3326" + id="linearGradient3392" + gradientUnits="userSpaceOnUse" + x1="-132.51041" + y1="39.803303" + x2="-158.92462" + y2="72.881729" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3326" + id="linearGradient3394" + gradientUnits="userSpaceOnUse" + x1="-83.012932" + y1="44.753052" + x2="-158.92462" + y2="72.881729" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3342" + id="linearGradient3396" + gradientUnits="userSpaceOnUse" + x1="-73" + y1="105.625" + x2="-163" + y2="86.125" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3342" + id="linearGradient3398" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-40.5,-1.5)" + x1="-83.593941" + y1="137.13324" + x2="-138.0043" + y2="92.603989" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3342" + id="linearGradient3400" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-40.5,-1.5)" + x1="-61.802711" + y1="99.979607" + x2="-136.51074" + y2="112.70422" /> + <radialGradient + inkscape:collect="always" + xlink:href="#linearGradient3825" + id="radialGradient3422" + gradientUnits="userSpaceOnUse" + gradientTransform="matrix(0.6484284,0.1017206,-3.1257154e-2,0.1992521,-4.56257,53.15916)" + cx="-112.17241" + cy="118.60459" + fx="-113.14772" + fy="59.708473" + r="59.99512" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3326" + id="linearGradient3424" + gradientUnits="userSpaceOnUse" + x1="-151.43935" + y1="37.68198" + x2="-152.26776" + y2="57.25" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3326" + id="linearGradient3426" + gradientUnits="userSpaceOnUse" + x1="-132.51041" + y1="39.803303" + x2="-158.92462" + y2="72.881729" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3326" + id="linearGradient3428" + gradientUnits="userSpaceOnUse" + x1="-83.012932" + y1="44.753052" + x2="-158.92462" + y2="72.881729" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3342" + id="linearGradient3430" + gradientUnits="userSpaceOnUse" + x1="-73" + y1="105.625" + x2="-163" + y2="86.125" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3342" + id="linearGradient3432" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-40.5,-1.5)" + x1="-83.593941" + y1="137.13324" + x2="-138.0043" + y2="92.603989" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3342" + id="linearGradient3434" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-40.5,-1.5)" + x1="-61.802711" + y1="99.979607" + x2="-136.51074" + y2="112.70422" /> + <mask + maskUnits="userSpaceOnUse" + id="mask3402"> + <g + id="g3404" + transform="translate(167.50257,-3.755156e-3)"> + <g + id="g3406" + transform="translate(80.51637,30.885255)"> + <path + style="opacity:1;fill:url(#radialGradient3422);fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:1.08779998;stroke-opacity:1" + d="M -184.42232,-32.47243 C -217.54751,-32.47243 -248.42232,-0.097625 -248.42232,33.02757 C -248.42232,66.15276 -217.04751,97.02757 -183.92232,97.02757 C -153.6332,97.02757 -128.58571,70.81131 -124.51607,41.68382 L -159.54732,36.65257 C -161.172,48.6137 -171.47739,57.62132 -183.92232,57.62132 C -197.49395,57.62132 -206.01607,46.0992 -206.01607,32.52757 C -206.01607,18.955936 -199.99395,12.43382 -186.42232,12.43382 C -179.6365,12.433819 -176.50103,10.198864 -172.04732,14.65257 L -176.8745,25.979749 C -178.93037,28.035619 -179.11822,29.285529 -178.55411,30.595278 C -178.04554,31.776057 -177.03338,33.12132 -174.34438,33.12132 L -130.39107,33.12132 C -126.54518,33.12132 -123.93208,30.466941 -123.93208,26.871189 L -124.00095,-17.206829 C -124.00095,-19.687584 -124.90346,-21.050058 -126.18242,-21.556444 C -127.49674,-22.076829 -129.21563,-21.679122 -131.28951,-19.605244 L -141.48482,-19.40993 C -152.34417,-30.269281 -167.85972,-32.47243 -184.42232,-32.47243 z " + id="path3408" + sodipodi:nodetypes="cssccsssccsccccsccc" /> + <path + sodipodi:nodetypes="ccccc" + style="fill:url(#linearGradient3424);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter3438)" + d="M -161.5,34.5 C -162,37 -180,54 -180,54 L -132.5,80 L -112,38.5 L -161.5,34.5 z " + id="path3410" /> + <path + sodipodi:nodetypes="ccccc" + id="path3412" + d="M -161.5,34.5 C -162,37 -181.27817,54.389087 -181.27817,54.389087 L -151.62742,97.591883 L -112,38.5 L -161.5,34.5 z " + style="fill:url(#linearGradient3426);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter3438)" /> + <path + style="fill:url(#linearGradient3428);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter3438)" + d="M -161.5,34.5 C -162,37 -181.27817,54.389087 -181.27817,54.389087 L -151.62742,97.591883 L -112,38.5 L -161.5,34.5 z " + id="path3414" + sodipodi:nodetypes="ccccc" /> + </g> + <rect + y="69.75" + x="-119" + height="71.75" + width="83.5" + id="rect3416" + style="opacity:1;fill:url(#linearGradient3430);fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.08779998;stroke-opacity:1;filter:url(#filter3363)" /> + <path + sodipodi:nodetypes="ccccc" + id="path3418" + d="M -159.5,68.25 L -39.138259,55.983708 L -93.453327,162.55286 L -197.79465,128.96507 L -159.5,68.25 z " + style="fill:url(#linearGradient3432);fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:1.08779998;stroke-opacity:1;filter:url(#filter3363)" + transform="matrix(0.6393762,0.7688941,-0.7688941,0.6393762,37.597642,128.08723)" /> + <path + transform="matrix(0.6393762,0.7688941,-0.7688941,0.6393762,37.597642,128.08723)" + style="fill:url(#linearGradient3434);fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:1.08779998;stroke-opacity:1;filter:url(#filter3363)" + d="M -159.5,68.25 L -39.138259,55.983708 L -93.453327,162.55286 L -197.79465,128.96507 L -159.5,68.25 z " + id="path3420" + sodipodi:nodetypes="ccccc" /> + </g> + </mask> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3751" + id="linearGradient3565" + x1="-267.47665" + y1="18.103027" + x2="-33.476654" + y2="18.103027" + gradientUnits="userSpaceOnUse" /> + <linearGradient + inkscape:collect="always" + xlink:href="#linearGradient3295" + id="linearGradient3567" + gradientUnits="userSpaceOnUse" + gradientTransform="translate(-137,0)" + x1="208.59375" + y1="130.40625" + x2="208.59375" + y2="63.426777" /> + </defs> + <sodipodi:namedview + id="base" + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1.0" + inkscape:pageopacity="0.0" + inkscape:pageshadow="2" + inkscape:zoom="4.6484375" + inkscape:cx="64" + inkscape:cy="64" + inkscape:document-units="px" + inkscape:current-layer="layer1" + width="128px" + height="128px" + gridspacingx="4px" + gridspacingy="4px" + gridempspacing="2" + showgrid="false" + inkscape:grid-points="true" + showguides="true" + inkscape:guide-bbox="true" + inkscape:window-width="748" + inkscape:window-height="681" + inkscape:window-x="526" + inkscape:window-y="51" /> + <metadata + id="metadata2611"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + </cc:Work> + </rdf:RDF> + </metadata> + <g + inkscape:label="Livello 1" + inkscape:groupmode="layer" + id="layer1"> + <g + id="g3835" + mask="url(#mask3402)" + transform="matrix(-1,0,0,1,128.17774,0)"> + <path + sodipodi:nodetypes="cssccsssccsccccsccc" + id="rect3204" + d="M 64.09375,3.90625 C 30.968558,3.9062499 4.0937499,30.781055 4.09375,63.90625 C 4.0937501,97.031442 30.96856,123.90625 64.09375,123.90625 C 94.382866,123.90625 119.43036,101.68999 123.5,72.5625 L 88.46875,67.53125 C 86.844066,79.492379 76.538676,88.5 64.09375,88.5 C 50.522122,88.499999 39.5,77.477881 39.5,63.90625 C 39.500001,50.334616 50.522119,39.3125 64.09375,39.3125 C 70.879568,39.312499 77.015044,42.077544 81.46875,46.53125 L 71.141571,56.858429 C 69.085701,58.914299 68.897846,60.164209 69.461963,61.473958 C 69.970531,62.654737 70.982695,64 73.671688,64 L 117.625,64 C 121.47089,64 124.08399,61.345621 124.08399,57.749869 L 124.01512,13.671851 C 124.01512,11.191096 123.11261,9.8286218 121.83365,9.3222363 C 120.51933,8.8018514 118.80044,9.1995576 116.72656,11.273436 L 106.53125,21.46875 C 95.671902,10.609399 80.656349,3.90625 64.09375,3.90625 z " + style="opacity:1;fill:url(#linearGradient3516);fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:1.08779998;stroke-opacity:1" /> + <path + style="opacity:0.79775277;fill:url(#radialGradient3757);fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:1.08779998;stroke-opacity:1" + d="M 64.09375,3.90625 C 30.968558,3.9062499 4.0937499,30.781055 4.09375,63.90625 C 4.0937501,97.031442 30.96856,123.90625 64.09375,123.90625 C 94.382866,123.90625 119.43036,101.68999 123.5,72.5625 L 88.46875,67.53125 C 86.844066,79.492379 76.538676,88.5 64.09375,88.5 C 50.522122,88.499999 39.5,77.477881 39.5,63.90625 C 39.500001,50.334616 50.522119,39.3125 64.09375,39.3125 C 70.879568,39.312499 77.015044,42.077544 81.46875,46.53125 L 71.141571,56.858429 C 69.085701,58.914299 68.897846,60.164209 69.461963,61.473958 C 69.970531,62.654737 70.982695,64 73.671688,64 L 117.625,64 C 121.47089,64 124.08399,61.345621 124.08399,57.749869 L 124.01512,13.671851 C 124.01512,11.191096 123.11261,9.8286218 121.83365,9.3222363 C 120.51933,8.8018514 118.80044,9.1995576 116.72656,11.273436 L 106.53125,21.46875 C 95.671902,10.609399 80.656349,3.90625 64.09375,3.90625 z " + id="path3749" + sodipodi:nodetypes="cssccsssccsccccsccc" /> + <path + sodipodi:nodetypes="cssccsssccsccccsccc" + id="path3656" + d="M 64.09375,3.90625 C 30.968558,3.9062499 4.0937499,30.781055 4.09375,63.90625 C 4.0937501,97.031442 30.96856,123.90625 64.09375,123.90625 C 94.382866,123.90625 119.43036,101.68999 123.5,72.5625 L 88.46875,67.53125 C 86.844066,79.492379 76.538676,88.5 64.09375,88.5 C 50.522122,88.499999 39.5,77.477881 39.5,63.90625 C 39.500001,50.334616 50.522119,39.3125 64.09375,39.3125 C 70.879568,39.312499 77.015044,42.077544 81.46875,46.53125 L 71.141571,56.858429 C 69.085701,58.914299 68.897846,60.164209 69.461963,61.473958 C 69.970531,62.654737 70.982695,64 73.671688,64 L 117.625,64 C 121.47089,64 124.08399,61.345621 124.08399,57.749869 L 124.01512,13.671851 C 124.01512,11.191096 123.11261,9.8286218 121.83365,9.3222363 C 120.51933,8.8018514 118.80044,9.1995576 116.72656,11.273436 L 106.53125,21.46875 C 95.671902,10.609399 80.656349,3.90625 64.09375,3.90625 z " + style="opacity:0.68913861;fill:url(#radialGradient3658);fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:1.08779998;stroke-opacity:1" /> + <path + style="opacity:1;fill:url(#radialGradient3654);fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:1.08779998;stroke-opacity:1" + d="M 64.09375,3.90625 C 30.968558,3.9062499 4.0937499,30.781055 4.09375,63.90625 C 4.0937501,97.031442 30.96856,123.90625 64.09375,123.90625 C 94.382866,123.90625 119.43036,101.68999 123.5,72.5625 L 88.46875,67.53125 C 86.844066,79.492379 76.538676,88.5 64.09375,88.5 C 50.522122,88.499999 39.5,77.477881 39.5,63.90625 C 39.500001,50.334616 50.522119,39.3125 64.09375,39.3125 C 70.879568,39.312499 77.015044,42.077544 81.46875,46.53125 L 71.141571,56.858429 C 69.085701,58.914299 68.897846,60.164209 69.461963,61.473958 C 69.970531,62.654737 70.982695,64 73.671688,64 L 117.625,64 C 121.47089,64 124.08399,61.345621 124.08399,57.749869 L 124.01512,13.671851 C 124.01512,11.191096 123.11261,9.8286218 121.83365,9.3222363 C 120.51933,8.8018514 118.80044,9.1995576 116.72656,11.273436 L 106.53125,21.46875 C 95.671902,10.609399 80.656349,3.90625 64.09375,3.90625 z " + id="path3643" + sodipodi:nodetypes="cssccsssccsccccsccc" /> + <path + sodipodi:nodetypes="cssccsssccsccccsccc" + id="path3742" + d="M 64.09375,3.90625 C 30.968558,3.9062499 4.0937499,30.781055 4.09375,63.90625 C 4.0937501,97.031442 30.96856,123.90625 64.09375,123.90625 C 94.382866,123.90625 119.43036,101.68999 123.5,72.5625 L 88.46875,67.53125 C 86.844066,79.492379 76.538676,88.5 64.09375,88.5 C 50.522122,88.499999 39.5,77.477881 39.5,63.90625 C 39.500001,50.334616 50.522119,39.3125 64.09375,39.3125 C 70.879568,39.312499 77.015044,42.077544 81.46875,46.53125 L 71.141571,56.858429 C 69.085701,58.914299 68.897846,60.164209 69.461963,61.473958 C 69.970531,62.654737 70.982695,64 73.671688,64 L 117.625,64 C 121.47089,64 124.08399,61.345621 124.08399,57.749869 L 124.01512,13.671851 C 124.01512,11.191096 123.11261,9.8286218 121.83365,9.3222363 C 120.51933,8.8018514 118.80044,9.1995576 116.72656,11.273436 L 106.53125,21.46875 C 95.671902,10.609399 80.656349,3.90625 64.09375,3.90625 z " + style="opacity:0.79775277;fill:url(#radialGradient3744);fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:1.08779998;stroke-opacity:1" /> + <path + style="opacity:0.74531836;fill:url(#radialGradient3767);fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:1.08779998;stroke-opacity:1;filter:url(#filter3630)" + d="M 64.09375,4.20625 C 30.968558,4.2062499 4.0937499,30.781055 4.09375,63.90625 C 4.0937501,97.031442 30.96856,123.90625 64.09375,123.90625 C 94.382866,123.90625 119.43036,101.68999 123.5,72.5625 L 88.46875,67.53125 C 86.844066,79.492379 76.538676,88.5 64.09375,88.5 C 50.522122,88.499999 39.5,77.477881 39.5,63.90625 C 39.500001,50.334616 50.522119,39.3125 64.09375,39.3125 C 70.879568,39.312499 77.015044,42.077544 81.46875,46.53125 L 71.141571,56.858429 C 69.085701,58.914299 68.897846,60.164209 69.461963,61.473958 C 69.970531,62.654737 70.982695,64 73.671688,64 L 117.625,64 C 121.47089,64 124.08399,61.345621 124.08399,57.749869 L 124.01512,13.671851 C 124.01512,11.191096 123.11261,9.8286218 121.83365,9.3222363 C 120.51933,8.8018514 118.80044,9.1995576 116.72656,11.273436 L 106.53125,21.46875 C 95.671902,10.609399 80.656349,4.20625 64.09375,4.20625 z " + id="path3759" + sodipodi:nodetypes="cssccsssccsccccsccc" /> + <path + sodipodi:nodetypes="cccczc" + id="path3660" + d="M 117.6875,10.75 L 118.625,15.125 L 119.875,16 L 123.875,13.375 C 124.12188,11.651249 123.52383,10.027571 121.9375,9.3749999 C 120.35116,8.7224285 118.77622,9.5017032 117.6875,10.75 z " + style="opacity:0.82022472;fill:url(#linearGradient3676);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter3738)" /> + <path + transform="matrix(0,1,1,0,60.363582,-60.363586)" + style="opacity:0.82022472;fill:url(#linearGradient3771);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter3738)" + d="M 117.6875,10.75 L 119.875,13.875 L 120.375,13.75 L 123.875,13.375 C 124.12188,11.651249 123.52383,10.027571 121.9375,9.3749999 C 120.35116,8.7224285 118.77622,9.5017032 117.6875,10.75 z " + id="path3769" + sodipodi:nodetypes="cccczc" /> + <path + id="path3494" + d="M 64.09375,7.90625 C 33.132052,7.9062499 8.0937499,32.944549 8.09375,63.90625 C 8.0937501,94.867948 33.132054,119.90625 64.09375,119.90625 C 91.026646,119.90625 113.21548,101.0995 118.625,75.90625 L 91.5,72.03125 C 88.061436,83.928551 77.059621,92.5 64.09375,92.5 C 48.356404,92.499999 35.5,79.643599 35.5,63.90625 C 35.500001,48.168899 48.356402,35.3125 64.09375,35.3125 C 71.966166,35.312499 79.145304,38.520304 84.3125,43.6875 C 85.071964,44.438909 85.499997,45.462886 85.5,46.53125 C 85.5,47.599614 85.071964,48.623591 84.3125,49.375 L 73.6875,60 L 117.625,60 C 119.63039,60 120.09375,59.407836 120.09375,57.75 L 120,13.65625 L 109.375,24.3125 C 108.62359,25.071964 107.59961,25.5 106.53125,25.5 C 105.46289,25.5 104.43891,25.071964 103.6875,24.3125 C 93.549835,14.174833 79.577106,7.90625 64.09375,7.90625 z " + style="opacity:1;fill:url(#radialGradient3524);fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.08779998;stroke-opacity:1" /> + <path + style="opacity:1;fill:url(#radialGradient3535);fill-opacity:1;stroke:none;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.08779998;stroke-opacity:1" + d="M 64.09375,7.90625 C 33.132052,7.9062499 8.0937499,32.944549 8.09375,63.90625 C 8.0937501,94.867948 33.132054,119.90625 64.09375,119.90625 C 91.026646,119.90625 113.21548,101.0995 118.625,75.90625 L 91.5,72.03125 C 88.061436,83.928551 77.059621,92.5 64.09375,92.5 C 48.356404,92.499999 35.5,79.643599 35.5,63.90625 C 35.500001,48.168899 48.356402,35.3125 64.09375,35.3125 C 71.966166,35.312499 79.145304,38.520304 84.3125,43.6875 C 85.071964,44.438909 85.499997,45.462886 85.5,46.53125 C 85.5,47.599614 85.071964,48.623591 84.3125,49.375 L 73.6875,60 L 117.625,60 C 119.63039,60 120.09375,59.407836 120.09375,57.75 L 120,13.65625 L 109.375,24.3125 C 108.62359,25.071964 107.59961,25.5 106.53125,25.5 C 105.46289,25.5 104.43891,25.071964 103.6875,24.3125 C 93.549835,14.174833 79.577106,7.90625 64.09375,7.90625 z " + id="path3526" /> + <path + sodipodi:nodetypes="csccssccccccscc" + id="path3537" + d="M 64.09375,7.90625 C 33.132052,7.9062499 8.0937499,32.944549 8.09375,63.90625 C 8.09375,64.474122 8.1082724,65.029981 8.125,65.59375 C 14.11447,66.271402 20.266218,66.74388 26.53125,67 C 26.260548,56.540958 30.202859,46.025084 38.34375,38.21875 C 53.683067,23.509813 78.072313,24.004431 92.78125,39.34375 C 95.545099,42.226046 97.537852,45.032117 99.34375,48.59375 L 78.84375,59 L 98,59 C 105.9282,56.973373 113.18621,55.563033 120.09375,52.8125 L 120,13.65625 L 109.375,24.3125 C 108.62359,25.071964 107.59961,25.5 106.53125,25.5 C 105.46289,25.5 104.43891,25.071964 103.6875,24.3125 C 93.549835,14.174833 79.577106,7.90625 64.09375,7.90625 z " + style="opacity:1;fill:url(#linearGradient3548);fill-opacity:1;stroke:none;stroke-width:8;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.08779998;stroke-opacity:1" /> + <path + sodipodi:nodetypes="cscscscccccccccccssssssccscscc" + id="path3553" + d="M 64.099866,7.9087646 C 33.138176,7.9087644 8.0998661,32.947063 8.0998661,63.908764 C 8.0998761,64.087476 8.0973761,64.263059 8.0998661,64.440014 C 8.3531061,33.696509 33.295846,8.9087645 64.099866,8.9087646 C 79.583236,8.9087645 93.555946,15.177347 103.69361,25.315014 C 104.44503,26.074479 105.469,26.502514 106.53736,26.502514 C 107.60573,26.502515 108.6297,26.074478 109.38111,25.315014 L 119.50611,15.158764 L 119.99986,52.708764 C 113.09232,55.459294 105.43431,56.569624 97.506116,58.596264 L 78.849866,59.002514 L 98.006116,59.002514 C 105.93431,56.975884 113.19232,55.565544 120.09986,52.815014 L 120.00611,14.658764 L 120.00611,13.658764 L 119.50611,14.158764 L 109.38111,24.315014 C 108.62971,25.074479 107.60572,25.502514 106.53736,25.502514 C 105.46901,25.502515 104.44502,25.074478 103.69361,24.315014 C 103.68314,24.304548 103.67283,24.294222 103.66236,24.283764 C 103.60999,24.231473 103.55869,24.179598 103.50611,24.127514 C 102.93231,23.559643 102.35524,23.012364 101.75611,22.471264 C 101.67459,22.397145 101.58807,22.326157 101.50611,22.252514 C 91.590066,13.342335 78.496526,7.9087646 64.099866,7.9087646 z M 63.443616,27.127514 C 54.205446,27.378034 45.040176,30.920194 37.849866,37.815014 C 30.217786,45.133448 26.722316,55.187931 26.537366,65.033764 C 26.777246,55.231884 30.717786,45.539698 38.349866,38.221264 C 51.665996,25.452364 71.803196,24.123207 86.506116,34.033764 C 79.627056,29.22869 71.518656,26.908534 63.443616,27.127514 z " + style="opacity:1;fill:url(#linearGradient3581);fill-opacity:1;stroke:none;stroke-width:8;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.08779998;stroke-opacity:1" /> + <path + id="path3603" + d="M 63.59375,7.90625 C 32.63205,7.9062499 7.59375,32.944549 7.59375,63.90625 C 7.59375,94.867948 32.63205,119.90625 63.59375,119.90625 C 90.52665,119.90625 112.71548,101.0995 118.125,75.90625 L 91,72.03125 C 87.56144,83.928551 76.55962,92.5 63.59375,92.5 C 47.8564,92.499999 35,79.643599 35,63.90625 C 35,48.168899 47.8564,35.3125 63.59375,35.3125 C 71.46617,35.312499 78.6453,38.520304 83.8125,43.6875 C 84.57196,44.438909 85,45.462886 85,46.53125 C 85,47.599614 84.57196,48.623591 83.8125,49.375 L 73.1875,60 L 117.125,60 C 119.13039,60 119.59375,59.407836 119.59375,57.75 L 119.5,13.65625 L 108.875,24.3125 C 108.12359,25.071964 107.09961,25.5 106.03125,25.5 C 104.96289,25.5 103.93891,25.071964 103.1875,24.3125 C 93.04984,14.174833 79.07711,7.90625 63.59375,7.90625 z " + style="opacity:1;fill:none;fill-opacity:1;stroke:url(#linearGradient3567);stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:1.08779998;stroke-opacity:1;filter:url(#filter3639)" /> + </g> + </g> +</svg> diff --git a/src/calibre/gui2/main.ui b/src/calibre/gui2/main.ui index e38b3833f6..a5f7c2ddcc 100644 --- a/src/calibre/gui2/main.ui +++ b/src/calibre/gui2/main.ui @@ -440,7 +440,7 @@ <action name="action_add" > <property name="icon" > <iconset resource="images.qrc" > - <normaloff>:/images/plus.svg</normaloff>:/images/plus.svg</iconset> + <normaloff>:/images/add_book.svg</normaloff>:/images/add_book.svg</iconset> </property> <property name="text" > <string>Add books</string>