diff --git a/linux_installer.py b/linux_installer.py index 7556f438fb..6a1acb40cd 100644 --- a/linux_installer.py +++ b/linux_installer.py @@ -6,7 +6,7 @@ __docformat__ = 'restructuredtext en' ''' Create linux binary. ''' -import glob, sys, subprocess, tarfile, os, re +import glob, sys, subprocess, tarfile, os, re, py_compile HOME = '/home/kovid' PYINSTALLER = os.path.expanduser('~/build/pyinstaller') CALIBREPREFIX = '___' @@ -30,7 +30,7 @@ def run_pyinstaller(args=sys.argv): subprocess.check_call('make plugins', shell=True) cp = HOME+'/build/'+os.path.basename(os.getcwd()) spec = open(os.path.join(PYINSTALLER, 'calibre', 'calibre.spec'), 'wb') - raw = re.sub(r'CALIBREPREFIX\s+=\s+\'___\'', 'CALIBREPREFIX = '+repr(cp), + raw = re.sub(r'CALIBREPREFIX\s+=\s+\'___\'', 'CALIBREPREFIX = '+repr(cp), open(__file__).read()) spec.write(raw) spec.close() @@ -64,12 +64,14 @@ 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']))): - temp.append(prefix + os.path.basename(f).partition('.')[0]) -hook = os.path.expanduser('~/temp/hook-calibre.py') -f = open(hook, 'wb') -hook_script = 'hiddenimports = %s'%repr(temp) -f.write(hook_script) + 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 @@ -82,18 +84,19 @@ for entry in entry_points['console_scripts'] + entry_points['gui_scripts']: executables.append(fields[0].strip()) scripts.append(os.path.join(CALIBRESRC, *map(lambda x: x.strip(), fields[1].split(':')[0].split('.')))+'.py') -recipes = Analysis(glob.glob(os.path.join(CALIBRESRC, 'calibre', 'web', 'feeds', 'recipes', '*.py')), - pathex=[CALIBRESRC], hookspath=[os.path.dirname(hook)], excludes=excludes) analyses = [Analysis([os.path.join(HOMEPATH,'support/_mountzlib.py'), os.path.join(HOMEPATH,'support/useUnicode.py'), loader, script], pathex=[PYINSTALLER, CALIBRESRC, CALIBREPLUGINS], excludes=excludes) for script in scripts] pyz = TOC() binaries = TOC() +pyz += extra_toc +pyz += recipes_toc + for a in analyses: pyz = a.pure + pyz binaries = a.binaries + binaries -pyz = PYZ(pyz + recipes.pure, name='library.pyz') +pyz = PYZ(pyz, name='library.pyz') built_executables = [] for script, exe, a in zip(scripts, executables, analyses): @@ -130,7 +133,7 @@ for dirpath, dirnames, filenames in os.walk(plugdir): binaries += plugins manifest = '/tmp/manifest' -open(manifest, 'wb').write('\\n'.join(executables)) +open(manifest, 'wb').write('\n'.join(executables)) version = '/tmp/version' open(version, 'wb').write(__version__) coll = COLLECT(binaries, pyz, diff --git a/osx_installer.py b/osx_installer.py index bd8b57a000..c092650de6 100644 --- a/osx_installer.py +++ b/osx_installer.py @@ -39,6 +39,7 @@ print >>loader, '%(function)s()' loader.close() os.chmod(loader_path, 0700) os.environ['PYTHONHOME'] = resources_dir +os.environ['FC_CONFIG_DIR'] = os.path.join(resources_dir, 'fonts') os.execv(loader_path, sys.argv) ''' CHECK_SYMLINKS_PRESCRIPT = \ @@ -51,7 +52,6 @@ def _check_symlinks_prescript(): import os scripts = %(sp)s links = %(sp)s -fonts_conf = %(sp)s os.setuid(0) for s, l in zip(scripts, links): if os.path.lexists(l): @@ -60,11 +60,6 @@ for s, l in zip(scripts, links): omask = os.umask(022) os.symlink(s, l) os.umask(omask) -if not os.path.exists('/etc/fonts/fonts.conf'): - print 'Creating default fonts.conf' - if not os.path.exists('/etc/fonts'): - os.makedirs('/etc/fonts') - os.link(fonts_conf, '/etc/fonts/fonts.conf') """ dest_path = %(dest_path)s @@ -72,7 +67,6 @@ if not os.path.exists('/etc/fonts/fonts.conf'): scripts = %(scripts)s links = [os.path.join(dest_path, i) for i in scripts] scripts = [os.path.join(resources_path, 'loaders', i) for i in scripts] - fonts_conf = os.path.join(resources_path, 'fonts.conf') bad = False for s, l in zip(scripts, links): @@ -80,12 +74,10 @@ if not os.path.exists('/etc/fonts/fonts.conf'): continue bad = True break - if not bad: - bad = os.path.exists('/etc/fonts/fonts.conf') if bad: auth = Authorization(destroyflags=(kAuthorizationFlagDestroyRights,)) fd, name = tempfile.mkstemp('.py') - os.write(fd, AUTHTOOL %(pp)s (sys.executable, repr(scripts), repr(links), repr(fonts_conf))) + os.write(fd, AUTHTOOL %(pp)s (sys.executable, repr(scripts), repr(links))) os.close(fd) os.chmod(name, 0700) try: @@ -249,13 +241,18 @@ _check_symlinks_prescript() print 'Adding plugins' module_dir = os.path.join(resource_dir, 'lib', 'python2.5', 'lib-dynload') print 'Adding fontconfig' - for f in glob.glob(os.path.expanduser('~/fontconfig/*')): + for f in glob.glob(os.path.expanduser('~/fontconfig2/*')): os.link(f, os.path.join(frameworks_dir, os.path.basename(f))) for src, dest in plugin_files: if 'dylib' in dest: os.link(src, os.path.join(frameworks_dir, dest)) else: os.link(src, os.path.join(module_dir, dest)) + dst = os.path.join(resource_dir, 'fonts') + if os.path.exists(dst): + shutil.rmtree(dst) + shutil.copytree('/usr/local/etc/fonts', dst, symlinks=False) + print print 'Adding IPython' dst = os.path.join(resource_dir, 'lib', 'python2.5', 'IPython') @@ -280,14 +277,12 @@ sys.frameworks_dir = os.path.join(os.path.dirname(os.environ['RESOURCEPATH']), ' f.write(src) f.close() print - print 'Adding GUI main.py' + print 'Adding main scripts to site-packages' f = zipfile.ZipFile(os.path.join(self.dist_dir, APPNAME+'.app', 'Contents', 'Resources', 'lib', 'python2.5', 'site-packages.zip'), 'a', zipfile.ZIP_DEFLATED) - f.write('src/calibre/gui2/main.py', 'calibre/gui2/main.py') + for script in scripts['gui']+scripts['console']: + f.write(script, script.partition('/')[-1]) f.close() print - print 'Adding default fonts.conf' - open(os.path.join(self.dist_dir, APPNAME+'.app', 'Contents', 'Resources', 'fonts.conf'), 'wb').write(open('/etc/fonts/fonts.conf').read()) - print print 'Building disk image' BuildAPP.makedmg(os.path.join(self.dist_dir, APPNAME+'.app'), APPNAME+'-'+VERSION) @@ -305,11 +300,12 @@ def main(): 'argv_emulation' : True, 'iconfile' : 'icons/library.icns', 'frameworks': ['libusb.dylib', 'libunrar.dylib'], - 'includes' : ['sip', 'pkg_resources', 'PyQt4.QtXml', + 'includes' : ['sip', 'pkg_resources', 'PyQt4.QtXml', 'PyQt4.QtSvg', 'PyQt4.QtWebKit', - 'mechanize', 'ClientForm', 'usbobserver', + 'mechanize', 'ClientForm', 'usbobserver', 'genshi', 'calibre.web.feeds.recipes.*', - 'keyword', 'codeop', 'pydoc'], + 'calibre.ebooks.lrf.any.*', 'calibre.ebooks.lrf.feeds.*', + 'keyword', 'codeop', 'pydoc', 'readline'], 'packages' : ['PIL', 'Authorization', 'rtf2xml', 'lxml'], 'excludes' : ['IPython'], 'plist' : { 'CFBundleGetInfoString' : '''calibre, an E-book management application.''' @@ -319,7 +315,10 @@ def main(): 'CFBundleVersion':APPNAME + ' ' + VERSION, 'LSMinimumSystemVersion':'10.4.3', 'LSMultipleInstancesProhibited':'true', - 'NSHumanReadableCopyright':'Copyright 2006, Kovid Goyal', + 'NSHumanReadableCopyright':'Copyright 2008, Kovid Goyal', + 'LSEnvironment':{ + 'FC_CONFIG_DIR':'@executable_path/../Resources/fonts', + } }, }, }, diff --git a/setup.py b/setup.py index 7019e0179c..dcbacb47c4 100644 --- a/setup.py +++ b/setup.py @@ -13,9 +13,6 @@ print 'Setup', APPNAME, 'version:', VERSION epsrc = re.compile(r'entry_points = (\{.*?\})', re.DOTALL).search(open('src/%s/linux.py'%APPNAME, 'rb').read()).group(1) entry_points = eval(epsrc, {'__appname__': APPNAME}) -if 'win32' in sys.platform.lower() or 'win64' in sys.platform.lower(): - entry_points['console_scripts'].append('parallel = %s.parallel:main'%APPNAME) - def _ep_to_script(ep, base='src'): return (base+os.path.sep+re.search(r'.*=\s*(.*?):', ep).group(1).replace('.', '/')+'.py').strip() diff --git a/src/calibre/__init__.py b/src/calibre/__init__.py index b34f86be8e..bcf069dd88 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 ' -__version__ = '0.4.72' +__version__ = '0.4.76' __docformat__ = "epytext" __author__ = "Kovid Goyal " __appname__ = 'calibre' @@ -38,6 +38,40 @@ try: except: preferred_encoding = 'utf-8' +_abspath = os.path.abspath +def my_abspath(path, encoding=sys.getfilesystemencoding()): + ''' + Work around for buggy os.path.abspath. This function accepts either byte strings, + in which it calls os.path.abspath, or unicode string, in which case it first converts + to byte strings using `encoding`, calls abspath and then decodes back to unicode. + ''' + to_unicode = False + if isinstance(path, unicode): + path = path.encode(encoding) + to_unicode = True + res = _abspath(path) + if to_unicode: + res = res.decode(encoding) + return res + +os.path.abspath = my_abspath +_join = os.path.join +def my_join(a, *p): + encoding=sys.getfilesystemencoding() + p = [a] + list(p) + _unicode = False + for i in p: + if isinstance(i, unicode): + _unicode = True + break + p = [i.encode(encoding) if isinstance(i, unicode) else i for i in p] + + res = _join(*p) + if _unicode: + res = res.decode(encoding) + return res + +os.path.join = my_join def osx_version(): if isosx: @@ -75,6 +109,8 @@ class ColoredFormatter(Formatter): def setup_cli_handlers(logger, level): + if os.environ.get('CALIBRE_WORKER', None) is not None and logger.handlers: + return logger.setLevel(level) if level == logging.WARNING: handler = logging.StreamHandler(sys.stdout) @@ -88,9 +124,7 @@ def setup_cli_handlers(logger, level): handler = logging.StreamHandler(sys.stderr) handler.setLevel(logging.DEBUG) handler.setFormatter(logging.Formatter('[%(levelname)s] %(filename)s:%(lineno)s: %(message)s')) - for hdlr in logger.handlers: - if hdlr.__class__ == handler.__class__: - logger.removeHandler(hdlr) + logger.addHandler(handler) class CustomHelpFormatter(IndentedHelpFormatter): @@ -364,9 +398,10 @@ def relpath(target, base=os.curdir): Base can be a directory specified either as absolute or relative to current dir. """ - if not os.path.exists(target): - raise OSError, 'Target does not exist: '+target - + #if not os.path.exists(target): + # raise OSError, 'Target does not exist: '+target + if target == base: + raise ValueError('target and base are both: %s'%target) if not os.path.isdir(base): raise OSError, 'Base is not a directory or does not exist: '+base @@ -374,13 +409,13 @@ def relpath(target, base=os.curdir): target_list = (os.path.abspath(target)).split(os.sep) # On the windows platform the target may be on a completely different drive from the base. - if iswindows and base_list[0] <> target_list[0]: - raise OSError, 'Target is on a different drive to base. Target: '+target_list[0].upper()+', base: '+base_list[0].upper() + if iswindows and base_list[0].upper() != target_list[0].upper(): + raise OSError, 'Target is on a different drive to base. Target: '+repr(target)+', base: '+repr(base) # Starting from the filepath root, work out how much of the filepath is # shared by base and target. for i in range(min(len(base_list), len(target_list))): - if base_list[i] <> target_list[i]: break + if base_list[i] != target_list[i]: break else: # If we broke out of the loop, i is pointing to the first differing path elements. # If we didn't break out of the loop, i is pointing to identical path elements. diff --git a/src/calibre/devices/prs505/driver.py b/src/calibre/devices/prs505/driver.py index 4f2e98b4f7..bbfbdf037c 100644 --- a/src/calibre/devices/prs505/driver.py +++ b/src/calibre/devices/prs505/driver.py @@ -351,6 +351,8 @@ class PRS505(Device): os.utime(path, None) def upload_books(self, files, names, on_card=False, end_session=True): + if on_card and not self._card_prefix: + raise ValueError(_('The reader has no storage card connected.')) path = os.path.join(self._card_prefix, self.CARD_PATH_PREFIX) if on_card \ else os.path.join(self._main_prefix, 'database', 'media', 'books') diff --git a/src/calibre/ebooks/__init__.py b/src/calibre/ebooks/__init__.py index 61153bdc8d..dd7e8fc96a 100644 --- a/src/calibre/ebooks/__init__.py +++ b/src/calibre/ebooks/__init__.py @@ -15,6 +15,6 @@ class ConversionError(Exception): class UnknownFormatError(Exception): pass -BOOK_EXTENSIONS = ['lrf', 'lrx', 'rar', 'zip', 'rtf', 'lit', 'txt', 'htm', 'xhtm', +BOOK_EXTENSIONS = ['lrf', 'rar', 'zip', 'rtf', 'lit', 'txt', 'htm', 'xhtm', 'html', 'xhtml', 'epub', 'pdf', 'prc', 'mobi', 'azw', - 'epub', 'fb2', 'djvu'] + 'epub', 'fb2', 'djvu', 'lrx'] diff --git a/src/calibre/ebooks/lrf/__init__.py b/src/calibre/ebooks/lrf/__init__.py index 1cdba123d8..6b724fd008 100644 --- a/src/calibre/ebooks/lrf/__init__.py +++ b/src/calibre/ebooks/lrf/__init__.py @@ -9,8 +9,6 @@ from optparse import OptionValueError from htmlentitydefs import name2codepoint from uuid import uuid4 -from fontTools.ttLib import TTLibError - from calibre.ebooks.lrf.pylrs.pylrs import Book as _Book from calibre.ebooks.lrf.pylrs.pylrs import TextBlock, Header, PutObj, \ Paragraph, TextStyle, BlockStyle diff --git a/src/calibre/ebooks/lrf/any/convert_from.py b/src/calibre/ebooks/lrf/any/convert_from.py index ab66fc1b89..c0a1a6500c 100644 --- a/src/calibre/ebooks/lrf/any/convert_from.py +++ b/src/calibre/ebooks/lrf/any/convert_from.py @@ -66,7 +66,7 @@ def traverse_subdirs(tdir): return tdir def handle_archive(path): - tdir = tempfile.mkdtemp(prefix=__appname__+'_') + tdir = tempfile.mkdtemp(prefix=__appname__+'_'+'archive_') extract(path, tdir) files = [] cdir = traverse_subdirs(tdir) @@ -75,9 +75,10 @@ def handle_archive(path): pat = os.path.join(cdir, '*.'+ext) files.extend(glob.glob(pat)) file = largest_file(files) - if file: - return tdir, file - file = find_htmlfile(cdir) + if not file: + file = find_htmlfile(cdir) + if isinstance(file, str): + file = file.decode(sys.getfilesystemencoding()) return tdir, file def process_file(path, options, logger=None): @@ -109,7 +110,7 @@ def process_file(path, options, logger=None): if not newpath: raise UnknownFormatError('Could not find ebook in archive') path = newpath - logger.info('Found ebook in archive: %s', path) + logger.info('Found ebook in archive: %s', repr(path)) try: ext = os.path.splitext(path)[1][1:].lower() convertor = None diff --git a/src/calibre/ebooks/lrf/epub/convert_from.py b/src/calibre/ebooks/lrf/epub/convert_from.py index 4dc531f86b..701681243e 100644 --- a/src/calibre/ebooks/lrf/epub/convert_from.py +++ b/src/calibre/ebooks/lrf/epub/convert_from.py @@ -29,7 +29,7 @@ def generate_html(pathtoepub, logger): zip_extract(pathtoepub, tdir) except: if os.path.exists(tdir) and os.path.isdir(tdir): - shutil.rmtree(tdir) + shutil.rmtree(tdir) raise ConversionError, '.epub extraction failed' return tdir @@ -42,7 +42,7 @@ def process_file(path, options, logger=None): tdir = generate_html(epub, logger) try: ocf = OCFDirReader(tdir) - htmlfile = ocf.opf.spine.items().next().href + htmlfile = ocf.opf.spine[0].path options.opf = os.path.join(tdir, ocf.container[OPF.MIMETYPE]) if not options.output: ext = '.lrs' if options.lrs else '.lrf' @@ -61,7 +61,7 @@ def process_file(path, options, logger=None): def main(args=sys.argv, logger=None): parser = option_parser() options, args = parser.parse_args(args) - if len(args) != 2: + if len(args) != 2: parser.print_help() print print 'No epub file specified' diff --git a/src/calibre/ebooks/lrf/fb2/fb2.xsl b/src/calibre/ebooks/lrf/fb2/fb2.xsl index 098532e44b..75f3c245ed 100644 --- a/src/calibre/ebooks/lrf/fb2/fb2.xsl +++ b/src/calibre/ebooks/lrf/fb2/fb2.xsl @@ -43,6 +43,7 @@ SMALL{ font-size : 80% } BLOCKQUOTE{ margin-left :4em; margin-top:1em; margin-right:0.2em;} HR{ color : Black } + DIV{font-family : "Times New Roman", Times, serif; text-align : justify} UL{margin-left: 0} .epigraph{width:50%; margin-left : 35%;} diff --git a/src/calibre/ebooks/lrf/html/convert_from.py b/src/calibre/ebooks/lrf/html/convert_from.py index 4d93b1a56b..15eede6d6c 100644 --- a/src/calibre/ebooks/lrf/html/convert_from.py +++ b/src/calibre/ebooks/lrf/html/convert_from.py @@ -368,9 +368,10 @@ class HTMLConverter(object, LoggingInterface): else: self.css[selector] = self.override_css[selector] - self.file_name = os.path.basename(path) - self.log_info(_('Processing %s'), path if self.verbose else self.file_name) - upath = path.encode('utf-8') if isinstance(path, unicode) else path + upath = path.encode(sys.getfilesystemencoding()) if isinstance(path, unicode) else path + self.file_name = os.path.basename(upath.decode(sys.getfilesystemencoding())) + self.log_info(_('Processing %s'), repr(upath) if self.verbose else repr(self.file_name)) + if not os.path.exists(upath): upath = upath.replace('&', '%26') #convertlit replaces & with %26 in file names f = open(upath, 'rb') @@ -870,11 +871,12 @@ class HTMLConverter(object, LoggingInterface): append_text(src) else: srcs = src.split('\n') - for src in srcs: - if src: - append_text(src) - if len(srcs) > 1: - self.line_break() + for src in srcs[:-1]: + append_text(src) + self.line_break() + last = srcs[-1] + if len(last): + append_text(last) def line_break(self): self.current_para.append(CR()) @@ -1798,6 +1800,7 @@ def process_file(path, options, logger=None): level = logging.DEBUG if options.verbose else logging.INFO logger = logging.getLogger('html2lrf') setup_cli_handlers(logger, level) + if not isinstance(path, unicode): path = path.decode(sys.getfilesystemencoding()) path = os.path.abspath(path) @@ -1968,7 +1971,7 @@ def try_opf(path, options, logger): continue if not getattr(options, 'cover', None) and orig_cover is not None: options.cover = orig_cover - options.spine = [i.href for i in opf.spine.items()] + options.spine = [i.path for i in opf.spine if i.path] if not getattr(options, 'toc', None): options.toc = opf.toc except Exception: diff --git a/src/calibre/ebooks/lrf/lit/convert_from.py b/src/calibre/ebooks/lrf/lit/convert_from.py index d93eaf9534..3d8a3f97b0 100644 --- a/src/calibre/ebooks/lrf/lit/convert_from.py +++ b/src/calibre/ebooks/lrf/lit/convert_from.py @@ -57,7 +57,7 @@ def process_file(path, options, logger=None): if opf: path = opf[0] opf = OPFReader(path) - htmlfile = opf.spine.items().next().href.replace('&', '%26') #convertlit replaces & with %26 + htmlfile = opf.spine[0].path.replace('&', '%26') #convertlit replaces & with %26 options.opf = path else: l = glob.glob(os.path.join(tdir, '*toc*.htm*')) diff --git a/src/calibre/ebooks/lrf/meta.py b/src/calibre/ebooks/lrf/meta.py index 9c2882dcee..80fc542c1c 100644 --- a/src/calibre/ebooks/lrf/meta.py +++ b/src/calibre/ebooks/lrf/meta.py @@ -375,7 +375,8 @@ class LRFMetaFile(object): delta = insert_into_file(self._file, stream, self.info_start, \ self.info_start + orig_size - 4) - self.toc_object_offset += delta + if self.toc_object_offset > 0: + self.toc_object_offset += delta self.object_index_offset += delta self.update_object_offsets(delta) @@ -480,7 +481,7 @@ class LRFMetaFile(object): @param args: The values to pack @param fmt: See U{struct} @param start: Position in file at which to write encoded data - """ + """ encoded = struct.pack(kwargs["fmt"], *args) self._file.seek(kwargs["start"]) self._file.write(encoded) @@ -685,3 +686,4 @@ def main(args=sys.argv): if __name__ == '__main__': sys.exit(main()) + diff --git a/src/calibre/ebooks/metadata/__init__.py b/src/calibre/ebooks/metadata/__init__.py index 2ca67e526d..e4fb42cc95 100644 --- a/src/calibre/ebooks/metadata/__init__.py +++ b/src/calibre/ebooks/metadata/__init__.py @@ -1,14 +1,17 @@ +#!/usr/bin/env python __license__ = 'GPL v3' -__copyright__ = '2008, Kovid Goyal ' +__copyright__ = '2008, Kovid Goyal kovid@kovidgoyal.net' +__docformat__ = 'restructuredtext en' + """ -Provides metadata editing support for PDF and RTF files. For LRF metadata, use -the L{lrf.meta} module. +Provides abstraction for metadata reading.writing from a variety of ebook formats. """ -__docformat__ = "epytext" -__author__ = "Kovid Goyal " +import os, mimetypes, sys +from urllib import unquote, quote +from urlparse import urlparse -from calibre import __version__ as VERSION +from calibre import __version__ as VERSION, relpath from calibre import OptionParser def get_parser(extension): @@ -24,6 +27,136 @@ def get_parser(extension): help=_('Set the comment')) return parser +class Resource(object): + ''' + Represents a resource (usually a file on the filesystem or a URL pointing + to the web. Such resources are commonly referred to in OPF files. + + They have the interface: + + :member:`path` + :member:`mime_type` + :method:`href` + + ''' + + def __init__(self, href_or_path, basedir=os.getcwd(), is_path=True): + self._href = None + self._basedir = None + self.path = None + self.fragment = '' + try: + self.mime_type = mimetypes.guess_type(href_or_path)[0] + except: + self.mime_type = None + if self.mime_type is None: + self.mime_type = 'application/octet-stream' + if is_path: + path = href_or_path + if not os.path.isabs(path): + path = os.path.abspath(os.path.join(path, basedir)) + if isinstance(path, str): + path = path.decode(sys.getfilesystemencoding()) + self.path = path + else: + url = urlparse(href_or_path) + if url[0] not in ('', 'file'): + self._href = href_or_path + else: + pc = url[2] + if isinstance(pc, unicode): + pc.encode('utf-8') + pc = unquote(pc).decode('utf-8') + self.path = os.path.abspath(os.path.join(basedir, pc.replace('/', os.sep))) + self.fragment = unquote(url[-1]) + + + def href(self, basedir=None): + ''' + Return a URL pointing to this resource. If it is a file on the filesystem + the URL is relative to `basedir`. + + `basedir`: If None, the basedir of this resource is used (see :method:`set_basedir`). + If this resource has no basedir, then the current working directory is used as the basedir. + ''' + if basedir is None: + if self._basedir: + basedir = self._basedir + else: + basedir = os.getcwd() + if self.path is None: + return self._href + f = self.fragment.encode('utf-8') if isinstance(self.fragment, unicode) else self.fragment + frag = '#'+quote(f) if self.fragment else '' + if self.path == basedir: + return ''+frag + try: + rpath = relpath(self.path, basedir) + except OSError: # On windows path and basedir could be on different drives + rpath = self.path + if isinstance(rpath, unicode): + rpath = rpath.encode('utf-8') + return quote(rpath.replace(os.sep, '/'))+frag + + def set_basedir(self, path): + self._basedir = path + + def basedir(self): + return self._basedir + + def __repr__(self): + return 'Resource(%s, %s)'%(repr(self.path), repr(self.href())) + + +class ResourceCollection(object): + + def __init__(self): + self._resources = [] + + def __iter__(self): + for r in self._resources: + yield r + + def __len__(self): + return len(self._resources) + + def __getitem__(self, index): + return self._resources[index] + + def __bool__(self): + return len(self._resources) > 0 + + def __str__(self): + resources = map(repr, self) + return '[%s]'%', '.join(resources) + + def __repr__(self): + return str(self) + + def append(self, resource): + if not isinstance(resource, Resource): + raise ValueError('Can only append objects of type Resource') + self._resources.append(resource) + + def remove(self, resource): + self._resources.remove(resource) + + @staticmethod + def from_directory_contents(top, topdown=True): + collection = ResourceCollection() + for spec in os.walk(top, topdown=topdown): + path = os.path.abspath(os.path.join(spec[0], spec[1])) + res = Resource.from_path(path) + res.set_basedir(top) + collection.append(res) + return collection + + def set_basedir(self, path): + for res in self: + res.set_basedir(path) + + + class MetaInformation(object): '''Convenient encapsulation of book metadata''' @@ -32,8 +165,8 @@ class MetaInformation(object): ans = MetaInformation(mi.title, mi.authors) for attr in ('author_sort', 'title_sort', 'comments', 'category', 'publisher', 'series', 'series_index', 'rating', - 'isbn', 'tags', 'cover_data', 'application_id', - 'manifest', 'spine', 'toc', 'cover'): + 'isbn', 'tags', 'cover_data', 'application_id', 'guide', + 'manifest', 'spine', 'toc', 'cover', 'language'): if hasattr(mi, attr): setattr(ans, attr, getattr(mi, attr)) @@ -63,12 +196,14 @@ class MetaInformation(object): self.rating = None if not mi else mi.rating self.isbn = None if not mi else mi.isbn self.tags = [] if not mi else mi.tags + self.language = None if not mi else mi.language # Typically a string describing the language #: mi.cover_data = (ext, data) self.cover_data = mi.cover_data if (mi and hasattr(mi, 'cover_data')) else (None, None) self.application_id = mi.application_id if (mi and hasattr(mi, 'application_id')) else None self.manifest = getattr(mi, 'manifest', None) self.toc = getattr(mi, 'toc', None) self.spine = getattr(mi, 'spine', None) + self.guide = getattr(mi, 'guide', None) self.cover = getattr(mi, 'cover', None) def smart_update(self, mi): @@ -84,7 +219,8 @@ class MetaInformation(object): for attr in ('author_sort', 'title_sort', 'comments', 'category', 'publisher', 'series', 'series_index', 'rating', - 'isbn', 'application_id', 'manifest', 'spine', 'toc', 'cover'): + 'isbn', 'application_id', 'manifest', 'spine', 'toc', + 'cover', 'language', 'guide'): if hasattr(mi, attr): val = getattr(mi, attr) if val is not None: @@ -114,7 +250,9 @@ class MetaInformation(object): if self.tags: ans += u'Tags : ' +unicode(self.tags) + '\n' if self.series: - ans += u'Series : '+unicode(self.series) + '(%d)'%self.series_index + ans += u'Series : '+unicode(self.series) + ' #%d\n'%self.series_index + if self.language: + ans += u'Language : ' + unicode(self.language) + u'\n' return ans.strip() def __nonzero__(self): diff --git a/src/calibre/ebooks/metadata/fb2.py b/src/calibre/ebooks/metadata/fb2.py index b3337ac62a..5bffb47409 100644 --- a/src/calibre/ebooks/metadata/fb2.py +++ b/src/calibre/ebooks/metadata/fb2.py @@ -21,11 +21,11 @@ def get_metadata(stream): if comments and len(comments) > 1: comments = comments.p.contents[0] series = soup.find("sequence") - series_name = series['name'] # series_index = series.index mi = MetaInformation(title, author) mi.comments = comments - mi.category = series_name + if series: + mi.series = series.get('name', None) # mi.series_index = series_index return mi diff --git a/src/calibre/ebooks/metadata/lit.py b/src/calibre/ebooks/metadata/lit.py index 892acec3f5..2b8c3a4b9f 100644 --- a/src/calibre/ebooks/metadata/lit.py +++ b/src/calibre/ebooks/metadata/lit.py @@ -5,7 +5,9 @@ Support for reading the metadata from a lit file. ''' import sys, struct, cStringIO, os +from itertools import repeat +from calibre import relpath from calibre.ebooks.metadata import MetaInformation from calibre.ebooks.metadata.opf import OPFReader @@ -188,7 +190,7 @@ class UnBinary(object): def write_spaces(self, depth): - self.buf.write(u' '.join(u'' for i in range(depth))) + self.buf.write(u''.join(repeat(' ', depth))) def item_path(self, internal_id): for i in self.manifest: @@ -692,6 +694,7 @@ class LitFile(object): try: self._stream.seek(self.content_offset + entry.offset) raw = self._stream.read(entry.size) + xml = \ '''\ @@ -721,9 +724,10 @@ def get_metadata(stream): try: litfile = LitFile(stream) src = litfile.meta.encode('utf-8') - mi = OPFReader(cStringIO.StringIO(src)) + mi = OPFReader(cStringIO.StringIO(src), dir=os.getcwd()) cover_url, cover_item = mi.cover, None if cover_url: + cover_url = relpath(cover_url, os.getcwd()) for item in litfile.manifest: if item.path == cover_url: cover_item = item.internal diff --git a/src/calibre/ebooks/metadata/opf.py b/src/calibre/ebooks/metadata/opf.py index bff9ed5f8a..e8075465a7 100644 --- a/src/calibre/ebooks/metadata/opf.py +++ b/src/calibre/ebooks/metadata/opf.py @@ -1,93 +1,205 @@ +import cStringIO __license__ = 'GPL v3' __copyright__ = '2008, Kovid Goyal ' import uuid '''Read/Write metadata from Open Packaging Format (.opf) files.''' -import sys, re, os, mimetypes -from urllib import unquote -from urlparse import urlparse -import xml.dom.minidom as dom -from itertools import repeat +import sys, re, os, glob from calibre import __appname__ from calibre.ebooks.metadata import MetaInformation -from calibre.ebooks.BeautifulSoup import BeautifulStoneSoup +from calibre.ebooks.BeautifulSoup import BeautifulStoneSoup, BeautifulSoup from calibre.ebooks.lrf import entity_to_unicode -from calibre.ebooks.metadata import get_parser +from calibre.ebooks.metadata import get_parser, Resource, ResourceCollection from calibre.ebooks.metadata.toc import TOC -class ManifestItem(object): - def __init__(self, item, cwd): - self.id = item['id'] if item.has_key('id') else '' - self.href = urlparse(unquote(item['href']))[2] if item.has_key('href') else '' - if not os.path.isabs(self.href): - self.href = os.path.join(cwd, self.href) - self.href = os.path.normpath(self.href) - if not os.path.exists(self.href): # Bug in Baen OPF files - nhref = os.path.join(os.path.dirname(self.href), os.path.basename(self.href).replace('__p_.htm', '__c_.htm')) - if os.path.exists(nhref): - self.href = nhref - self.media_type = item['media-type'] if item.has_key('media-type') else '' +class OPFSoup(BeautifulStoneSoup): + + def __init__(self, raw): + BeautifulStoneSoup.__init__(self, raw, + convertEntities=BeautifulSoup.HTML_ENTITIES, + selfClosingTags=['item', 'itemref', 'reference']) + +class ManifestItem(Resource): + + @staticmethod + def from_opf_manifest_item(item, basedir): + if item.has_key('href'): + res = ManifestItem(item['href'], basedir=basedir, is_path=False) + mt = item.get('media-type', '').strip() + if mt: + res.mime_type = mt + return res + + @apply + def media_type(): + def fget(self): + return self.mime_type + def fset(self, val): + self.mime_type = val + return property(fget=fget, fset=fset) + def __unicode__(self): - return u''%(self.id, self.href, self.media_type) + return u''%(self.id, self.href(), self.media_type) + + def __str__(self): + return unicode(self).encode('utf-8') + + def __repr__(self): + return unicode(self) + def __getitem__(self, index): if index == 0: - return self.href + return self.href() if index == 1: return self.media_type raise IndexError('%d out of bounds.'%index) -class Manifest(list): +class Manifest(ResourceCollection): - def __init__(self, soup, dir): - manifest = soup.find('manifest') - if manifest is not None: - for item in manifest.findAll('item'): - self.append(ManifestItem(item, dir)) + @staticmethod + def from_opf_manifest_element(manifest, dir): + m = Manifest() + for item in manifest.findAll('item'): + try: + m.append(ManifestItem.from_opf_manifest_item(item, dir)) + id = item.get('id', '') + if not id: + id = 'id%d'%m.next_id + m[-1].id = id + m.next_id += 1 + except ValueError: + continue + return m + + @staticmethod + def from_paths(entries): + ''' + `entries`: List of (path, mime-type) If mime-type is None it is autodetected + ''' + m = Manifest() + for path, mt in entries: + mi = ManifestItem(path, is_path=True) + if mt: + mi.mime_type = mt + mi.id = 'id%d'%m.next_id + m.next_id += 1 + m.append(mi) + return m + + def __init__(self): + ResourceCollection.__init__(self) + self.next_id = 1 + def item(self, id): for i in self: if i.id == id: - return i + return i + + def id_for_path(self, path): + path = os.path.normpath(os.path.abspath(path)) + for i in self: + if i.path and os.path.normpath(i.path) == path: + return i.id + + def path_for_id(self, id): + for i in self: + if i.id == id: + return i.path -class Spine(object): +class Spine(ResourceCollection): - def __init__(self, soup, manifest): + class Item(Resource): + + def __init__(self, idfunc, *args, **kwargs): + Resource.__init__(self, *args, **kwargs) + self.is_linear = True + self.id = idfunc(self.path) + + @staticmethod + def from_opf_spine_element(spine, manifest): + s = Spine(manifest) + for itemref in spine.findAll('itemref'): + if itemref.has_key('idref'): + r = Spine.Item(s.manifest.id_for_path, + s.manifest.path_for_id(itemref['idref']), is_path=True) + r.is_linear = itemref.get('linear', 'yes') == 'yes' + s.append(r) + return s + + @staticmethod + def from_paths(paths, manifest): + s = Spine(manifest) + for path in paths: + try: + s.append(Spine.Item(s.manifest.id_for_path, path, is_path=True)) + except: + continue + return s + + + + def __init__(self, manifest): + ResourceCollection.__init__(self) self.manifest = manifest - self.linear_ids, self.nonlinear_ids = [], [] - spine = soup.find('spine') - if spine is not None: - for itemref in spine.findAll('itemref'): - if itemref.has_key('idref'): - if itemref.get('linear', 'yes') == 'yes': - self.linear_ids.append(itemref['idref']) - else: - self.nonlinear_ids.append(itemref['idref']) + def linear_items(self): - for id in self.linear_ids: - yield self.manifest.item(id) - + for r in self: + if r.is_linear: + yield r.path def nonlinear_items(self): - for id in self.nonlinear_ids: - yield self.manifest.item(id) - - + for r in self: + if not r.is_linear: + yield r.path + def items(self): - for i in self.linear_ids + self.nonlinear_ids: - mi = self.manifest.item(i) - if getattr(mi, 'href', None): - yield mi - - def __iter__(self): - for i in self.linear_ids + self.nonlinear_ids: - yield i - + for i in self: + yield i.path + +class Guide(ResourceCollection): + + class Reference(Resource): + + @staticmethod + def from_opf_resource_item(ref, basedir): + title, href, type = ref.get('title', ''), ref['href'], ref['type'] + res = Guide.Reference(href, basedir, is_path=False) + res.title = title + res.type = type + return res + + def __repr__(self): + ans = '' + + + @staticmethod + def from_opf_guide(guide_elem, base_dir=os.getcwdu()): + coll = Guide() + for ref in guide_elem.findAll('reference'): + try: + ref = Guide.Reference.from_opf_resource_item(ref, base_dir) + coll.append(ref) + except: + continue + return coll + + def set_cover(self, path): + map(self.remove, [i for i in self if 'cover' in i.type.lower()]) + for type in ('cover', 'other.ms-coverimage-standard', 'other.ms-coverimage'): + self.append(Guide.Reference(path, is_path=True)) + self[-1].type = type + self[-1].title = '' + class standard_field(object): @@ -97,8 +209,6 @@ class standard_field(object): def __get__(self, obj, typ=None): return getattr(obj, 'get_'+self.name)() - def __set__(self, obj, val): - getattr(obj, 'set_'+self.name)(val) class OPF(MetaInformation): @@ -109,6 +219,7 @@ class OPF(MetaInformation): application_id = standard_field('application_id') title = standard_field('title') authors = standard_field('authors') + language = standard_field('language') title_sort = standard_field('title_sort') author_sort = standard_field('author_sort') comments = standard_field('comments') @@ -121,93 +232,15 @@ class OPF(MetaInformation): rating = standard_field('rating') tags = standard_field('tags') - HEADER = '''\ - - -''' def __init__(self): raise NotImplementedError('Abstract base class') - def _initialize(self): - if not hasattr(self, 'soup'): - self.soup = BeautifulStoneSoup(u'''\ -%s - - - - - -'''%(__appname__, self.HEADER)) - - def _commit(self, doc): - self.soup = BeautifulStoneSoup(doc.toxml('utf-8'), fromEncoding='utf-8') - - def _find_element(self, package, name, attrs=[]): - tags = package.getElementsByTagName(name) - for tag in tags: - match = True - for attr, vattr in attrs: - if tag.getAttribute(attr) != vattr: - match = False - break - if match: - return tag - return None - - def _set_metadata_element(self, name, value, attrs=[], - type='dc-metadata', replace=False): - self._initialize() - if isinstance(value, basestring): - value = [value] - attrs = [attrs] - - doc = dom.parseString(self.soup.__str__('UTF-8').strip()) - package = doc.documentElement - metadata = package.getElementsByTagName('metadata')[0] - - dcms = metadata.getElementsByTagName(type) - if dcms: - dcm = dcms[0] - else: - dcm = doc.createElement(type) - metadata.appendChild(dcm) - metadata.appendChild(doc.createTextNode('\n')) - tags = dcm.getElementsByTagName(name) - if tags and not replace: - for tag in tags: - tag.parentNode.removeChild(tag) - tag.unlink() - - for val, vattrs in zip(value, attrs): - if replace: - el = self._find_element(package, name, vattrs) - if el: - el.parentNode.removeChild(el) - el.unlink() - el = doc.createElement(name) - el.appendChild(doc.createTextNode(val)) - for attr, vattr in vattrs: - el.setAttribute(attr, vattr) - dcm.appendChild(el) - dcm.appendChild(doc.createTextNode('\n')) - self._commit(doc) - - def get_title(self): title = self.soup.package.metadata.find('dc:title') if title: return self.ENTITY_PATTERN.sub(entity_to_unicode, title.string).strip() return self.default_title.strip() - def set_title(self, title): - if not title: - title = 'Unknown' - self._set_metadata_element('dc:title', title) - def get_authors(self): creators = self.soup.package.metadata.findAll('dc:creator') for elem in creators: @@ -225,12 +258,6 @@ class OPF(MetaInformation): return [a.strip() for a in ans] return [] - def set_authors(self, authors): - if not authors: - authors = ['Unknown'] - attrs = list(repeat([('role', 'aut')], len(authors))) - self._set_metadata_element('dc:creator', authors, attrs) - def get_author_sort(self): creators = self.soup.package.metadata.findAll('dc:creator') for elem in creators: @@ -242,18 +269,6 @@ class OPF(MetaInformation): return self.ENTITY_PATTERN.sub(entity_to_unicode, fa).strip() if fa else None return None - def set_author_sort(self, aus): - if not aus: - aus = '' - self._initialize() - if not self.authors: - self.set_authors([]) - doc = dom.parseString(self.soup.__str__('UTF-8')) - package = doc.documentElement - aut = package.getElementsByTagName('dc:creator')[0] - aut.setAttribute('file-as', aus) - self._commit(doc) - def get_title_sort(self): title = self.soup.package.find('dc:title') if title: @@ -261,61 +276,29 @@ class OPF(MetaInformation): return title['file-as'].strip() return None - def set_title_sort(self, title_sort): - if not title_sort: - title_sort = '' - self._initialize() - if not self.title: - self.title = None - doc = dom.parseString(self.soup.__str__('UTF-8')) - package = doc.documentElement - tit = package.getElementsByTagName('dc:title')[0] - tit.setAttribute('file-as', title_sort) - self._commit(doc) - def get_comments(self): comments = self.soup.find('dc:description') if comments: return self.ENTITY_PATTERN.sub(entity_to_unicode, comments.string).strip() return None - def set_comments(self, comments): - if not comments: - comments = '' - self._set_metadata_element('dc:description', comments) - def get_uid(self): package = self.soup.find('package') if package.has_key('unique-identifier'): return package['unique-identifier'] - def set_uid(self, uid): - package = self.soup.find('package') - package['unique-identifier'] = str(uid) - def get_category(self): category = self.soup.find('dc:type') if category: return self.ENTITY_PATTERN.sub(entity_to_unicode, category.string).strip() return None - def set_category(self, category): - if not category: - category = '' - self._set_metadata_element('dc:type', category) - def get_publisher(self): publisher = self.soup.find('dc:publisher') if publisher: return self.ENTITY_PATTERN.sub(entity_to_unicode, publisher.string).strip() return None - def set_publisher(self, category): - if not category: - category = 'Unknown' - self._set_metadata_element('dc:publisher', category) - - def get_isbn(self): for item in self.soup.package.metadata.findAll('dc:identifier'): scheme = item.get('scheme') @@ -325,51 +308,27 @@ class OPF(MetaInformation): return str(item.string).strip() return None - def set_isbn(self, isbn): - if isbn: - self._set_metadata_element('dc:identifier', isbn, [('scheme', 'ISBN')], - replace=True) - + def get_language(self): + item = self.soup.package.metadata.find('dc:language') + if not item: + return _('Unknown') + return ''.join(item.findAll(text=True)).strip() + def get_application_id(self): for item in self.soup.package.metadata.findAll('dc:identifier'): if item.has_key('scheme') and item['scheme'] == __appname__: return str(item.string).strip() return None - def set_application_id(self, val): - if val: - self._set_metadata_element('dc:identifier', str(val), [('scheme', __appname__), ('id', __appname__+'_id')], - replace=True) - def get_cover(self): - guide = self.soup.package.find('guide') - if guide: - references = guide.findAll('reference') - for reference in references: - type = reference.get('type') - if not type: - continue - if type.lower() in ['cover', 'other.ms-coverimage-standard', "other.ms-coverimage"]: - return reference.get('href') - return None - - def set_cover(self, path): - self._initialize() - doc = dom.parseString(self.soup.__str__('UTF-8')) - package = doc.documentElement - guide = package.getElementsByTagName('guide') - if guide: - guide = guide[0] - else: - guide = doc.createElement('guide') - package.appendChild(guide) - el = self._find_element(guide, 'reference', [('type', 'cover')]) - if not el: - el = doc.createElement('reference') - guide.appendChild(el) - el.setAttribute('type', 'cover') - el.setAttribute('href', path) - self._commit(doc) + guide = getattr(self, 'guide', []) + if not guide: + guide = [] + references = [ref for ref in guide if 'cover' in ref.type.lower()] + for candidate in ('cover', 'other.ms-coverimage-standard', 'other.ms-coverimage'): + matches = [r for r in references if r.type.lower() == candidate and r.path] + if matches: + return matches[0].path def possible_cover_prefixes(self): isbn, ans = [], [] @@ -388,11 +347,6 @@ class OPF(MetaInformation): return str(s.string).strip() return None - def set_series(self, val): - if not val: - val = '' - self._set_metadata_element('series', val, type='x-metadata') - def get_series_index(self): s = self.soup.package.metadata.find('series-index') if s: @@ -402,11 +356,6 @@ class OPF(MetaInformation): return None return None - def set_series_index(self, val): - if not val: - val = 1 - self._set_metadata_element('series-index', str(val), type='x-metadata') - def get_rating(self): xm = self.soup.package.metadata.find('x-metadata') if not xm: @@ -419,11 +368,6 @@ class OPF(MetaInformation): return None return None - def set_rating(self, val): - if not val: - val = 0 - self._set_metadata_element('rating', str(val), type='x-metadata') - def get_tags(self): ans = [] subs = self.soup.findAll('dc:subject') @@ -433,42 +377,7 @@ class OPF(MetaInformation): ans.append(val) return [unicode(a).strip() for a in ans] - def set_tags(self, tags): - self._set_metadata_element('dc:subject', tags) - - def write(self, stream): - from lxml import etree - root = etree.fromstring(unicode(self.soup)) - root.text = '\n%4s'%' ' - for child in root: - child.text = '\n%8s'%' ' - child.tail = '\n%4s'%' ' if child is not root[-1] else '\n' - for grandchild in child: - grandchild.tail = '\n%8s'%' ' if grandchild is not child[-1] else '\n%4s'%' ' - - metadata = root.find('metadata') - if metadata is not None: - for parent in ['dc-metadata', 'x-metadata']: - parent = metadata.find(parent) - if parent is None: - continue - parent.text = '\n%12s'%' ' - for child in parent: - child.tail = '\n%8s'%' ' if child is parent[-1] else '\n%12s'%' ' - - def fix_self_closing_tags(el): - ''' Makes tags that have only whitespace content self closing ''' - if len(el) == 0 and (el.text is None or el.text.strip() == ''): - el.text = None - for child in el: - fix_self_closing_tags(child) - - fix_self_closing_tags(root) - - raw = self.HEADER + etree.tostring(root, encoding='UTF-8') - - stream.write(raw+'\n') - + class OPFReader(OPF): def __init__(self, stream, dir=os.getcwdu()): @@ -480,15 +389,27 @@ class OPFReader(OPF): self.default_title = stream.name if hasattr(stream, 'name') else 'Unknown' if hasattr(stream, 'seek'): stream.seek(0) - self.soup = BeautifulStoneSoup(stream.read()) + self.soup = OPFSoup(stream.read()) if manage: stream.close() - self.manifest = Manifest(self.soup, dir) - self.spine = Spine(self.soup, self.manifest) + self.manifest = Manifest() + m = self.soup.find('manifest') + if m is not None: + self.manifest = Manifest.from_opf_manifest_element(m, dir) + self.spine = None + spine = self.soup.find('spine') + if spine is not None: + self.spine = Spine.from_opf_spine_element(spine, self.manifest) + self.toc = TOC(base_path=dir) self.toc.read_from_opf(self) + guide = self.soup.find('guide') + if guide is not None: + self.guide = Guide.from_opf_guide(guide, dir) + self.base_dir = dir self.cover_data = (None, None) + class OPFCreator(MetaInformation): def __init__(self, base_path, *args, **kwargs): @@ -502,47 +423,34 @@ class OPFCreator(MetaInformation): self.base_path = os.path.abspath(base_path) if self.application_id is None: self.application_id = str(uuid.uuid4()) - self.toc = None - if isinstance(self.manifest, Manifest): - manifest = [] - for path, mt in self.manifest: - if not path.startswith(self.base_path): - raise ValueError('Inavlid manifest item %s for base path %s'%(path, self.base_path)) - path = path[len(self.base_path)+1:] - manifest.append((path, mt)) - self.manifest = manifest + if not isinstance(self.toc, TOC): + self.toc = None if not self.authors: self.authors = [_('Unknown')] - + if self.guide is None: + self.guide = Guide() + if self.cover: + self.guide.set_cover(self.cover) + + def create_manifest(self, entries): ''' Create - @param entries: List of (path, mime-type) - @param base_path: It is used to convert each path into a path relative to itself - @type entries: list of 2-tuples + + `entries`: List of (path, mime-type) If mime-type is None it is autodetected ''' - rentries = [] - base_path = self.base_path - mimetypes.init() - for href, mt in entries: - href = os.path.abspath(href) - if not href.startswith(base_path): - raise ValueError('OPF should only refer to files below it. %s is above %s'%(href, base_path)) - href = href[len(base_path)+1:].replace(os.sep, '/') - if not mt: - mt = mimetypes.guess_type(href)[0] - if not mt: - mt = '' - rentries.append((href, mt)) - - self.manifest = rentries + entries = map(lambda x: x if os.path.isabs(x[0]) else + (os.path.abspath(os.path.join(self.base_path, x[0])), x[1]), + entries) + self.manifest = Manifest.from_paths(entries) + self.manifest.set_basedir(self.base_path) def create_manifest_from_files_in(self, files_and_dirs): - #self.base_path = os.path.commonprefix(files_and_dirs) entries = [] def dodir(dir): - for root, dirs, files in os.walk(dir): + for spec in os.walk(dir): + root, files = spec[0], spec[-1] for name in files: path = os.path.join(root, name) if os.path.isfile(path): @@ -558,47 +466,49 @@ class OPFCreator(MetaInformation): def create_spine(self, entries): ''' - Create the element. Must first call L{create_manifest}. - @param: List of paths - @type param: list of strings - ''' - self.spine = [] + Create the element. Must first call :method:`create_manifest`. - for path in entries: - if not os.path.isabs(path): - path = os.path.join(self.base_path, path) - if not path.startswith(self.base_path): - raise ValueError('Invalid entry %s for base path %s'%(path, self.base_path)) - href = path[len(self.base_path)+1:] - in_manifest = False - for i, m in enumerate(self.manifest): - if m[0] == href: - in_manifest = True - break - if not in_manifest: - raise ValueError('%s is not in the manifest. (%s)'%(href, path)) - self.spine.append(i) - - + `entries`: List of paths + ''' + entries = map(lambda x: x if os.path.isabs(x) else + os.path.abspath(os.path.join(self.base_path, x)), entries) + self.spine = Spine.from_paths(entries, self.manifest) def set_toc(self, toc): ''' - Set the toc. You must call L{create_spine} before calling this + Set the toc. You must call :method:`create_spine` before calling this method. - @param toc: A Table of Contents - @type toc: L{TOC} + + `toc`: A :class:`TOC` object ''' self.toc = toc + def create_guide(self, guide_element): + self.guide = Guide.from_opf_guide(guide_element, self.base_path) + self.guide.set_basedir(self.base_path) + def render(self, opf_stream, ncx_stream=None): from calibre.resources import opf_template - from genshi.template import MarkupTemplate + from calibre.utils.genshi.template import MarkupTemplate template = MarkupTemplate(opf_template) + if self.manifest: + self.manifest.set_basedir(self.base_path) + if not self.guide: + self.guide = Guide() + if self.cover: + cover = self.cover + if not os.path.isabs(cover): + cover = os.path.abspath(os.path.join(self.base_path, cover)) + self.guide.set_cover(cover) + self.guide.set_basedir(self.base_path) + opf = template.generate(__appname__=__appname__, mi=self).render('xml') opf_stream.write(opf) + opf_stream.flush() toc = getattr(self, 'toc', None) if toc is not None and ncx_stream is not None: toc.render(ncx_stream, self.application_id) + ncx_stream.flush() def option_parser(): return get_parser('opf') @@ -609,18 +519,35 @@ def main(args=sys.argv): if len(args) != 2: parser.print_help() return 1 - mi = MetaInformation(OPFReader(open(args[1], 'rb'))) + mi = MetaInformation(OPFReader(open(args[1], 'rb'), os.path.abspath(os.path.dirname(args[1])))) + write = False if opts.title is not None: mi.title = opts.title.replace('&', '&').replace('<', '<').replace('>', '>') + write = True if opts.authors is not None: aus = [i.strip().replace('&', '&').replace('<', '<').replace('>', '>') for i in opts.authors.split(',')] mi.authors = aus + write = True if opts.category is not None: mi.category = opts.category.replace('&', '&').replace('<', '<').replace('>', '>') + write = True if opts.comment is not None: mi.comments = opts.comment.replace('&', '&').replace('<', '<').replace('>', '>') - mo = OPFCreator(os.getcwd(), mi) - mo.render(open(args[1], 'wb')) + write = True + if write: + mo = OPFCreator(os.path.dirname(args[1]), mi) + ncx = cStringIO.StringIO() + mo.render(open(args[1], 'wb'), ncx) + ncx = ncx.getvalue() + if ncx: + f = glob.glob(os.path.join(os.path.dirname(args[1]), '*.ncx')) + if f: + f = open(f[0], 'wb') + else: + f = open(os.path.splitext(args[1])[0]+'.ncx', 'wb') + f.write(ncx) + f.close() + print MetaInformation(OPFReader(open(args[1], 'rb'), os.path.abspath(os.path.dirname(args[1])))) return 0 if __name__ == '__main__': diff --git a/src/calibre/ebooks/metadata/opf.xml b/src/calibre/ebooks/metadata/opf.xml index f2c719d7f6..10623715ff 100644 --- a/src/calibre/ebooks/metadata/opf.xml +++ b/src/calibre/ebooks/metadata/opf.xml @@ -9,7 +9,8 @@ ${mi.title} ${author} ${mi.application_id} - + + ${mi.language if mi.language else 'Unknown'} ${mi.category} ${mi.comments} ${mi.publisher} @@ -17,23 +18,28 @@ ${mi.series} ${mi.series_index} ${mi.rating} - ${tag} + + ${tag} + - - + + + + - - - - - - - - + + - + + + + + + + + diff --git a/src/calibre/ebooks/metadata/toc.py b/src/calibre/ebooks/metadata/toc.py index e63b5363ae..a966dd6fae 100644 --- a/src/calibre/ebooks/metadata/toc.py +++ b/src/calibre/ebooks/metadata/toc.py @@ -65,8 +65,8 @@ class TOC(list): toc = opfreader.soup.find('guide').find('reference', attrs={'type':'toc'})['href'] except: for item in opfreader.manifest: - if 'toc' in item.href.lower(): - toc = item.href + if 'toc' in item.href().lower(): + toc = item.href() break if toc is not None: @@ -120,6 +120,9 @@ class TOC(list): process_navpoint(c, nd) nm = soup.find('navmap') + if nm is None: + raise ValueError('NCX files must have a element.') + for elem in nm: if getattr(elem, 'name', None) == 'navpoint': process_navpoint(elem, self) @@ -138,7 +141,7 @@ class TOC(list): def render(self, stream, uid): from calibre.resources import ncx_template - from genshi.template import MarkupTemplate + from calibre.utils.genshi.template import MarkupTemplate doctype = ('ncx', "-//NISO//DTD ncx 2005-1//EN", "http://www.daisy.org/z3986/2005/ncx-2005-1.dtd") template = MarkupTemplate(ncx_template) raw = template.generate(uid=uid, toc=self, __appname__=__appname__) diff --git a/src/calibre/ebooks/mobi/langcodes.py b/src/calibre/ebooks/mobi/langcodes.py new file mode 100644 index 0000000000..c0884e55a8 --- /dev/null +++ b/src/calibre/ebooks/mobi/langcodes.py @@ -0,0 +1,159 @@ +#!/usr/bin/env python +__license__ = 'GPL v3' +__copyright__ = '2008, Kovid Goyal kovid@kovidgoyal.net' +__docformat__ = 'restructuredtext en' + +main_language = { + 0 : "NEUTRAL", + 54 : "AFRIKAANS", + 28 : "ALBANIAN", + 1 : "ARABIC", + 43 : "ARMENIAN", + 77 : "ASSAMESE", + 44 : "AZERI", + 45 : "BASQUE", + 35 : "BELARUSIAN", + 69 : "BENGALI", + 2 : "BULGARIAN", + 3 : "CATALAN", + 4 : "CHINESE", + 26 : "CROATIAN", + 5 : "CZECH", + 6 : "DANISH", + 19 : "DUTCH", + 9 : "ENGLISH", + 37 : "ESTONIAN", + 56 : "FAEROESE", + 41 : "FARSI", + 11 : "FINNISH", + 12 : "FRENCH", + 55 : "GEORGIAN", + 7 : "GERMAN", + 8 : "GREEK", + 71 : "GUJARATI", + 13 : "HEBREW", + 57 : "HINDI", + 14 : "HUNGARIAN", + 15 : "ICELANDIC", + 33 : "INDONESIAN", + 16 : "ITALIAN", + 17 : "JAPANESE", + 75 : "KANNADA", + 63 : "KAZAK", + 87 : "KONKANI", + 18 : "KOREAN", + 38 : "LATVIAN", + 39 : "LITHUANIAN", + 47 : "MACEDONIAN", + 62 : "MALAY", + 76 : "MALAYALAM", + 58 : "MALTESE", + 78 : "MARATHI", + 97 : "NEPALI", + 20 : "NORWEGIAN", + 72 : "ORIYA", + 21 : "POLISH", + 22 : "PORTUGUESE", + 70 : "PUNJABI", + 23 : "RHAETOROMANIC", + 24 : "ROMANIAN", + 25 : "RUSSIAN", + 59 : "SAMI", + 79 : "SANSKRIT", + 26 : "SERBIAN", + 27 : "SLOVAK", + 36 : "SLOVENIAN", + 46 : "SORBIAN", + 10 : "SPANISH", + 48 : "SUTU", + 65 : "SWAHILI", + 29 : "SWEDISH", + 73 : "TAMIL", + 68 : "TATAR", + 74 : "TELUGU", + 30 : "THAI", + 49 : "TSONGA", + 50 : "TSWANA", + 31 : "TURKISH", + 34 : "UKRAINIAN", + 32 : "URDU", + 67 : "UZBEK", + 42 : "VIETNAMESE", + 52 : "XHOSA", + 53 : "ZULU", +} + +sub_language = { + 0 : "NEUTRAL", + 1 : "ARABIC_SAUDI_ARABIA", + 2 : "ARABIC_IRAQ", + 3 : "ARABIC_EGYPT", + 4 : "ARABIC_LIBYA", + 5 : "ARABIC_ALGERIA", + 6 : "ARABIC_MOROCCO", + 7 : "ARABIC_TUNISIA", + 8 : "ARABIC_OMAN", + 9 : "ARABIC_YEMEN", + 10 : "ARABIC_SYRIA", + 11 : "ARABIC_JORDAN", + 12 : "ARABIC_LEBANON", + 13 : "ARABIC_KUWAIT", + 14 : "ARABIC_UAE", + 15 : "ARABIC_BAHRAIN", + 16 : "ARABIC_QATAR", + 1 : "AZERI_LATIN", + 2 : "AZERI_CYRILLIC", + 1 : "CHINESE_TRADITIONAL", + 2 : "CHINESE_SIMPLIFIED", + 3 : "CHINESE_HONGKONG", + 4 : "CHINESE_SINGAPORE", + 1 : "DUTCH", + 2 : "DUTCH_BELGIAN", + 1 : "FRENCH", + 2 : "FRENCH_BELGIAN", + 3 : "FRENCH_CANADIAN", + 4 : "FRENCH_SWISS", + 5 : "FRENCH_LUXEMBOURG", + 6 : "FRENCH_MONACO", + 1 : "GERMAN", + 2 : "GERMAN_SWISS", + 3 : "GERMAN_AUSTRIAN", + 4 : "GERMAN_LUXEMBOURG", + 5 : "GERMAN_LIECHTENSTEIN", + 1 : "ITALIAN", + 2 : "ITALIAN_SWISS", + 1 : "KOREAN", + 1 : "LITHUANIAN", + 1 : "MALAY_MALAYSIA", + 2 : "MALAY_BRUNEI_DARUSSALAM", + 1 : "NORWEGIAN_BOKMAL", + 2 : "NORWEGIAN_NYNORSK", + 2 : "PORTUGUESE", + 1 : "PORTUGUESE_BRAZILIAN", + 2 : "SERBIAN_LATIN", + 3 : "SERBIAN_CYRILLIC", + 1 : "SPANISH", + 2 : "SPANISH_MEXICAN", + 4 : "SPANISH_GUATEMALA", + 5 : "SPANISH_COSTA_RICA", + 6 : "SPANISH_PANAMA", + 7 : "SPANISH_DOMINICAN_REPUBLIC", + 8 : "SPANISH_VENEZUELA", + 9 : "SPANISH_COLOMBIA", + 10 : "SPANISH_PERU", + 11 : "SPANISH_ARGENTINA", + 12 : "SPANISH_ECUADOR", + 13 : "SPANISH_CHILE", + 14 : "SPANISH_URUGUAY", + 15 : "SPANISH_PARAGUAY", + 16 : "SPANISH_BOLIVIA", + 17 : "SPANISH_EL_SALVADOR", + 18 : "SPANISH_HONDURAS", + 19 : "SPANISH_NICARAGUA", + 20 : "SPANISH_PUERTO_RICO", + 1 : "SWEDISH", + 2 : "SWEDISH_FINLAND", + 1 : "UZBEK_LATIN", + 2 : "UZBEK_CYRILLIC", + + } \ No newline at end of file diff --git a/src/calibre/ebooks/mobi/reader.py b/src/calibre/ebooks/mobi/reader.py index 99184d9244..adc8d0bc04 100644 --- a/src/calibre/ebooks/mobi/reader.py +++ b/src/calibre/ebooks/mobi/reader.py @@ -17,9 +17,10 @@ from calibre.ebooks.BeautifulSoup import BeautifulSoup from calibre.ebooks.mobi import MobiError from calibre.ebooks.mobi.huffcdic import HuffReader from calibre.ebooks.mobi.palmdoc import decompress_doc +from calibre.ebooks.mobi.langcodes import main_language, sub_language from calibre.ebooks.metadata import MetaInformation from calibre.ebooks.metadata.opf import OPFCreator - +from calibre.ebooks.metadata.toc import TOC class EXTHHeader(object): @@ -44,27 +45,24 @@ class EXTHHeader(object): self.cover_offset, = struct.unpack('>L', content) elif id == 202: self.thumbnail_offset, = struct.unpack('>L', content) - pos += 3 - stop = raw[pos:].find('\x00') - if stop > -1: - self.mi.title = raw[pos:pos+stop].decode(codec, 'ignore') + title = re.search(r'\0+([^\0]+)\0+', raw[pos:]) + if title: + self.mi.title = title.group(1).decode(codec, 'ignore') def process_metadata(self, id, content, codec): if id == 100: - aus = content.split(',') - authors = [] - for a in aus: - authors.extend(a.split('&')) - self.mi.authors = [i.decode(codec, 'ignore') for i in authors] + self.mi.authors = [content.decode(codec, 'ignore').strip()] elif id == 101: - self.mi.publisher = content.decode(codec, 'ignore') + self.mi.publisher = content.decode(codec, 'ignore').strip() elif id == 103: - self.mi.comments = content.decode(codec, 'ignore') + self.mi.comments = content.decode(codec, 'ignore') elif id == 104: - self.mi.isbn = content.decode(codec, 'ignore').strip().replace('-', '') + self.mi.isbn = content.decode(codec, 'ignore').strip().replace('-', '') elif id == 105: - self.mi.category = content.decode(codec, 'ignore') + if not self.mi.tags: + self.mi.tags = [] + self.mi.tags.append(content.decode(codec, 'ignore')) @@ -74,6 +72,7 @@ class BookHeader(object): self.compression_type = raw[:2] self.records, self.records_size = struct.unpack('>HH', raw[8:12]) self.encryption_type, = struct.unpack('>H', raw[12:14]) + self.doctype = raw[16:20] self.length, self.type, self.codepage, self.unique_id, self.version = \ struct.unpack('>LLLLL', raw[20:40]) @@ -98,11 +97,18 @@ class BookHeader(object): if self.compression_type == 'DH': self.huff_offset, self.huff_number = struct.unpack('>LL', raw[0x70:0x78]) + langcode = struct.unpack('!L', raw[0x5C:0x60])[0] + langid = langcode & 0xFF + sublangid = (langcode >> 10) & 0xFF + self.language = main_language.get(langid, 'ENGLISH') + self.sublanguage = sub_language.get(sublangid, 'NEUTRAL') + self.exth_flag, = struct.unpack('>L', raw[0x80:0x84]) self.exth = None if self.exth_flag & 0x40: self.exth = EXTHHeader(raw[16+self.length:], self.codec) self.exth.mi.uid = self.unique_id + self.exth.mi.language = self.language class MobiReader(object): @@ -166,20 +172,30 @@ class MobiReader(object): self.processed_html) soup = BeautifulSoup(self.processed_html.replace('> <', '>\n<')) + guide = soup.find('guide') for elem in soup.findAll(['metadata', 'guide']): elem.extract() - htmlfile = os.path.join(output_dir, self.name+'.html') + htmlfile = os.path.join(output_dir, self.name+'.html') + try: + for ref in guide.findAll('reference', href=True): + ref['href'] = os.path.basename(htmlfile)+ref['href'] + except AttributeError: + pass open(htmlfile, 'wb').write(unicode(soup).encode('utf8')) self.htmlfile = htmlfile if self.book_header.exth is not None: - opf = self.create_opf(htmlfile) - opf.render(open(os.path.splitext(htmlfile)[0]+'.opf', 'wb')) + ncx = cStringIO.StringIO() + opf = self.create_opf(htmlfile, guide) + opf.render(open(os.path.splitext(htmlfile)[0]+'.opf', 'wb'), ncx) + ncx = ncx.getvalue() + if ncx: + open(os.path.splitext(htmlfile)[0]+'.ncx', 'wb').write(ncx) def cleanup(self): - self.processed_html = re.sub(r'
', '', self.processed_html) + self.processed_html = re.sub(r'
', '', self.processed_html) - def create_opf(self, htmlfile): + def create_opf(self, htmlfile, guide=None): mi = self.book_header.exth.mi opf = OPFCreator(os.path.dirname(htmlfile), mi) if hasattr(self.book_header.exth, 'cover_offset'): @@ -191,6 +207,28 @@ class MobiReader(object): opf.create_manifest(manifest) opf.create_spine([os.path.basename(htmlfile)]) + toc = None + if guide: + opf.create_guide(guide) + for ref in opf.guide: + if ref.type.lower() == 'toc': + toc = ref.href() + if toc: + index = self.processed_html.find(' -1: + raw = ''+self.processed_html[index:] + soup = BeautifulSoup(raw) + tocobj = TOC() + for a in soup.findAll('a', href=True): + try: + text = ''.join(a.findAll(text=True)).strip() + except: + text = '' + tocobj.add_item(toc.partition('#')[0], a['href'][1:], text) + if tocobj is not None: + opf.set_toc(tocobj) + return opf @@ -215,7 +253,6 @@ class MobiReader(object): elif self.book_header.compression_type == '\x00\x01': self.mobi_html = ''.join(text_sections) - else: raise MobiError('Unknown compression algorithm: %s'%repr(self.book_header.compression_type)) @@ -228,7 +265,7 @@ class MobiReader(object): def add_anchors(self): positions = set([]) - link_pattern = re.compile(r']+filepos=[\'"]{0,1}(\d+)[^<>]*>', re.IGNORECASE) for match in link_pattern.finditer(self.mobi_html): positions.add(int(match.group(1))) positions = list(positions) @@ -245,7 +282,10 @@ class MobiReader(object): pos = end self.processed_html += self.mobi_html[pos:] - self.processed_html = link_pattern.sub(lambda match: ' + Kovid Goyal Dialog @@ -76,7 +77,7 @@ 0 - + 0 @@ -85,9 +86,9 @@ 638 - - - + + + @@ -102,7 +103,7 @@ - + @@ -124,7 +125,7 @@ - + Use &Roman numerals for series number @@ -134,9 +135,42 @@ - - - + + + + Show notification when &new version is available + + + + + + + + + Format for &single file save: + + + single_format + + + + + + + + + + &Priority for conversion jobs: + + + priority + + + + + + + Default network &timeout: @@ -146,7 +180,7 @@ - + Set the default timeout for network fetches (i.e. anytime we go out to the internet to get information) @@ -167,31 +201,78 @@ - - - - - - &Priority for conversion jobs: - - - priority - - - - - - - + + + + Toolbar + + + + + + + Large + + + + + Medium + + + + + Small + + + + + + + + &Button size in toolbar + + + toolbar_button_size + + + + + + + Show &text in toolbar buttons + + + true + + + + + - + + + + Select visible &columns in library view + + + + + + QAbstractItemView::NoSelection + + + + + + + Frequently used directories - + - + @@ -206,7 +287,7 @@ - + @@ -281,83 +362,6 @@ - - - - Qt::Vertical - - - - 392 - 16 - - - - - - - - Select visible &columns in library view - - - - - - QAbstractItemView::NoSelection - - - - - - - - - - Toolbar - - - - - - - Large - - - - - Medium - - - - - Small - - - - - - - - &Button size in toolbar - - - toolbar_button_size - - - - - - - Show &text in toolbar buttons - - - true - - - - - - @@ -365,8 +369,8 @@ 0 0 - 583 - 625 + 595 + 638 diff --git a/src/calibre/gui2/dialogs/job_view.ui b/src/calibre/gui2/dialogs/job_view.ui index d20f67f892..f30c4fc821 100644 --- a/src/calibre/gui2/dialogs/job_view.ui +++ b/src/calibre/gui2/dialogs/job_view.ui @@ -13,13 +13,17 @@ Details of job - :/images/view.svg + + :/images/view.svg:/images/view.svg - - - QTextEdit::NoWrap + + + false + + + true diff --git a/src/calibre/gui2/dialogs/metadata_bulk.py b/src/calibre/gui2/dialogs/metadata_bulk.py index 0cd7fc3a78..99175b656b 100644 --- a/src/calibre/gui2/dialogs/metadata_bulk.py +++ b/src/calibre/gui2/dialogs/metadata_bulk.py @@ -8,6 +8,7 @@ from PyQt4.QtGui import QDialog from calibre.gui2 import qstring_to_unicode from calibre.gui2.dialogs.metadata_bulk_ui import Ui_MetadataBulkDialog +from calibre.gui2.dialogs.tag_editor import TagEditor class MetadataBulkDialog(QDialog, Ui_MetadataBulkDialog): def __init__(self, window, rows, db): @@ -20,8 +21,6 @@ class MetadataBulkDialog(QDialog, Ui_MetadataBulkDialog): self.write_rating = False self.changed = False QObject.connect(self.button_box, SIGNAL("accepted()"), self.sync) - QObject.connect(self.series, SIGNAL('currentIndexChanged(int)'), self.series_changed) - QObject.connect(self.series, SIGNAL('editTextChanged(QString)'), self.series_changed) QObject.connect(self.rating, SIGNAL('valueChanged(int)'), self.rating_changed) all_series = self.db.all_series() @@ -31,9 +30,17 @@ class MetadataBulkDialog(QDialog, Ui_MetadataBulkDialog): self.series.addItem(name) self.series.lineEdit().setText('') - + QObject.connect(self.series, SIGNAL('currentIndexChanged(int)'), self.series_changed) + QObject.connect(self.series, SIGNAL('editTextChanged(QString)'), self.series_changed) + QObject.connect(self.tag_editor_button, SIGNAL('clicked()'), self.tag_editor) self.exec_() - + + def tag_editor(self): + d = TagEditor(self, self.db, None) + d.exec_() + if d.result() == QDialog.Accepted: + tag_string = ', '.join(d.tags) + self.tags.setText(tag_string) def sync(self): for id in self.ids: @@ -51,7 +58,7 @@ class MetadataBulkDialog(QDialog, Ui_MetadataBulkDialog): self.db.set_publisher(id, pub) tags = qstring_to_unicode(self.tags.text()).strip() if tags: - tags = tags.split(',') + tags = map(lambda x: x.strip(), tags.split(',')) self.db.set_tags(id, tags, append=True) remove_tags = qstring_to_unicode(self.remove_tags.text()).strip() if remove_tags: diff --git a/src/calibre/gui2/dialogs/metadata_bulk.ui b/src/calibre/gui2/dialogs/metadata_bulk.ui index a93df2be76..1b7929cdc6 100644 --- a/src/calibre/gui2/dialogs/metadata_bulk.ui +++ b/src/calibre/gui2/dialogs/metadata_bulk.ui @@ -13,9 +13,10 @@ Edit Meta information - :/images/edit_input.svg + + :/images/edit_input.svg:/images/edit_input.svg - + @@ -26,16 +27,7 @@ 6 - - 0 - - - 0 - - - 0 - - + 0 @@ -43,7 +35,7 @@ Meta information - + @@ -57,7 +49,7 @@ - + Change the author(s) of this book. Multiple authors should be separated by a comma @@ -77,7 +69,7 @@ - + Specify how the author(s) of this book should be sorted. For example Charles Dickens should be sorted as Dickens, Charles. @@ -94,7 +86,7 @@ - + Rating of this book. 0-5 stars @@ -126,7 +118,7 @@ - + Change the publisher of this book @@ -153,6 +145,20 @@ + + + + Open Tag Editor + + + Open Tag Editor + + + + :/images/chapters.svg:/images/chapters.svg + + + @@ -163,7 +169,7 @@ - + Comma separated list of tags to remove from the books. @@ -218,7 +224,7 @@ Qt::Horizontal - QDialogButtonBox::Cancel|QDialogButtonBox::NoButton|QDialogButtonBox::Ok + QDialogButtonBox::Cancel|QDialogButtonBox::Ok diff --git a/src/calibre/gui2/dialogs/metadata_single.py b/src/calibre/gui2/dialogs/metadata_single.py index f4fce00482..d4b9819af2 100644 --- a/src/calibre/gui2/dialogs/metadata_single.py +++ b/src/calibre/gui2/dialogs/metadata_single.py @@ -262,7 +262,7 @@ class MetadataSingleDialog(QDialog, Ui_MetadataSingleDialog): self.cover_changed = True self.cpixmap = pix except LibraryThingError, err: - error_dialog(self, _('Could not fetch cover'), _('Could not fetch cover.
')+str(err)).exec_() + error_dialog(self, _('Could not fetch cover'), _('Could not fetch cover.
')+unicode(err)).exec_() finally: self.fetch_cover_button.setEnabled(True) self.unsetCursor() diff --git a/src/calibre/gui2/dialogs/tag_editor.py b/src/calibre/gui2/dialogs/tag_editor.py index 8185d1e40a..68eca39c3e 100644 --- a/src/calibre/gui2/dialogs/tag_editor.py +++ b/src/calibre/gui2/dialogs/tag_editor.py @@ -9,14 +9,17 @@ from calibre.gui2 import question_dialog, error_dialog class TagEditor(QDialog, Ui_TagEditor): - def __init__(self, window, db, index): + def __init__(self, window, db, index=None): QDialog.__init__(self, window) Ui_TagEditor.__init__(self) self.setupUi(self) self.db = db self.index = index - tags = self.db.tags(self.index) + if self.index is not None: + tags = self.db.tags(self.index) + else: + tags = [] if tags: tags = [tag.lower().strip() for tag in tags.split(',') if tag.strip()] tags.sort() diff --git a/src/calibre/gui2/images/dialog_information.svg b/src/calibre/gui2/images/dialog_information.svg index b43e46c5e9..995f74cd78 100644 --- a/src/calibre/gui2/images/dialog_information.svg +++ b/src/calibre/gui2/images/dialog_information.svg @@ -2946,13 +2946,6 @@ id="defs155" /> - - - %s: %s

'%self.exception + ans = u'

%s:'%self.exception ans += '

Traceback:

%s
'%self.last_traceback return ans @@ -381,10 +381,19 @@ class JobManager(QAbstractTableModel): _('Cannot kill already completed jobs.')).exec_() return if status == 1: - error_dialog(gui_parent, _('Cannot kill job'), - _('Cannot kill waiting jobs.')).exec_() - return - self.process_server.kill(job.id) + self.update_lock.lock() + try: + self.waiting_jobs.remove(job) + self.finished_jobs.append(job) + self.emit(SIGNAL('job_done(int)'), job.id) + job.result = self.process_server.KILL_RESULT + finally: + self.update_lock.unlock() + else: + self.process_server.kill(job.id) + self.reset() + if len(self.running_jobs) + len(self.waiting_jobs) == 0: + self.emit(SIGNAL('no_more_jobs()')) class DetailView(QDialog, Ui_Dialog): diff --git a/src/calibre/gui2/library.py b/src/calibre/gui2/library.py index 5fdfeae25a..4f567cb496 100644 --- a/src/calibre/gui2/library.py +++ b/src/calibre/gui2/library.py @@ -148,9 +148,13 @@ class BooksModel(QAbstractTableModel): ''' Return list indices of all cells in index.row()''' return [ self.index(index.row(), c) for c in range(self.columnCount(None))] - def save_to_disk(self, rows, path, single_dir=False): + def save_to_disk(self, rows, path, single_dir=False, single_format=None): rows = [row.row() for row in rows] - self.db.export_to_dir(path, rows, self.sorted_on[0] == 1, single_dir=single_dir) + if single_format is None: + return self.db.export_to_dir(path, rows, self.sorted_on[0] == 1, single_dir=single_dir) + else: + return self.db.export_single_format_to_dir(path, rows, single_format) + def delete_books(self, indices): ids = [ self.id(i) for i in indices ] @@ -322,7 +326,7 @@ class BooksModel(QAbstractTableModel): return ans def id(self, row): - return self.db.id(row.row()) + return self.db.id(getattr(row, 'row', lambda:row)()) def title(self, row_number): return self.db.title(row_number) diff --git a/src/calibre/gui2/lrf_renderer/main.py b/src/calibre/gui2/lrf_renderer/main.py index edab6b0c1b..2fc4222a8f 100644 --- a/src/calibre/gui2/lrf_renderer/main.py +++ b/src/calibre/gui2/lrf_renderer/main.py @@ -1,13 +1,12 @@ from calibre.gui2.library import SearchBox __license__ = 'GPL v3' __copyright__ = '2008, Kovid Goyal ' -import sys, logging, os, traceback, time, cPickle +import sys, logging, os, traceback, time -from PyQt4.QtGui import QKeySequence, QPainter, QDialog, QSpinBox, QSlider -from PyQt4.QtCore import Qt, QObject, SIGNAL, QCoreApplication, QThread, \ - QVariant +from PyQt4.QtGui import QKeySequence, QPainter, QDialog, QSpinBox, QSlider, QIcon +from PyQt4.QtCore import Qt, QObject, SIGNAL, QCoreApplication, QThread -from calibre import __appname__, __version__, __author__, setup_cli_handlers, islinux, Settings +from calibre import __appname__, setup_cli_handlers, islinux, Settings from calibre.ebooks.lrf.lrfparser import LRFDocument from calibre.gui2 import ORG_NAME, APP_UID, error_dialog, choose_files, Application @@ -57,7 +56,7 @@ class Config(QDialog, Ui_ViewerConfig): class Main(MainWindow, Ui_MainWindow): def __init__(self, logger, opts, parent=None): - MainWindow.__init__(self, parent) + MainWindow.__init__(self, opts, parent) Ui_MainWindow.__init__(self) self.setupUi(self) self.setAttribute(Qt.WA_DeleteOnClose) @@ -263,9 +262,12 @@ def file_renderer(stream, opts, parent=None, logger=None): def option_parser(): - from optparse import OptionParser - parser = OptionParser(usage='%prog book.lrf', version=__appname__+' '+__version__, - epilog='Created by ' + __author__) + from calibre.gui2.main_window import option_parser + parser = option_parser('''\ +%prog [options] book.lrf + +Read the LRF ebook book.lrf +''') parser.add_option('--verbose', default=False, action='store_true', dest='verbose', help='Print more information about the rendering process') parser.add_option('--visual-debug', help='Turn on visual aids to debugging the rendering engine', @@ -283,7 +285,7 @@ def normalize_settings(parser, opts): for opt in parser.option_list: if not opt.dest: continue - if getattr(opts, opt.dest) == opt.default: + if getattr(opts, opt.dest) == opt.default and hasattr(saved_opts, opt.dest): continue setattr(saved_opts, opt.dest, getattr(opts, opt.dest)) return saved_opts @@ -298,6 +300,7 @@ def main(args=sys.argv, logger=None): pid = os.fork() if islinux else -1 if pid <= 0: app = Application(args) + app.setWindowIcon(QIcon(':/images/viewer.svg')) QCoreApplication.setOrganizationName(ORG_NAME) QCoreApplication.setApplicationName(APP_UID) opts = normalize_settings(parser, opts) diff --git a/src/calibre/gui2/main.py b/src/calibre/gui2/main.py index e9a3298845..7b54ad8bf8 100644 --- a/src/calibre/gui2/main.py +++ b/src/calibre/gui2/main.py @@ -10,7 +10,8 @@ from PyQt4.QtGui import QPixmap, QColor, QPainter, QMenu, QIcon, QMessageBox, \ from PyQt4.QtSvg import QSvgRenderer from calibre import __version__, __appname__, islinux, sanitize_file_name, \ - Settings, pictureflowerror, iswindows, isosx + Settings, pictureflowerror, iswindows, isosx,\ + preferred_encoding from calibre.ptempfile import PersistentTemporaryFile from calibre.ebooks.metadata.meta import get_metadata, get_filename_pat, set_filename_pat from calibre.devices.errors import FreeSpaceError @@ -19,11 +20,11 @@ from calibre.gui2 import APP_UID, warning_dialog, choose_files, error_dialog, \ initialize_file_icon_provider, question_dialog,\ pixmap_to_data, choose_dir, ORG_NAME, \ set_sidebar_directories, \ - SingleApplication, Application, available_height + SingleApplication, Application, available_height, max_available_height from calibre.gui2.cover_flow import CoverFlow, DatabaseImages from calibre.library.database import LibraryDatabase from calibre.gui2.update import CheckForUpdates -from calibre.gui2.main_window import MainWindow +from calibre.gui2.main_window import MainWindow, option_parser from calibre.gui2.main_ui import Ui_MainWindow from calibre.gui2.device import DeviceDetector, DeviceManager from calibre.gui2.status import StatusBar @@ -46,7 +47,6 @@ from calibre.ebooks import BOOK_EXTENSIONS from calibre.ebooks.lrf import preferred_source_formats as LRF_PREFERRED_SOURCE_FORMATS from calibre.library.database2 import LibraryDatabase2, CoverCache - class Main(MainWindow, Ui_MainWindow): def set_default_thumbnail(self, height): @@ -58,8 +58,8 @@ class Main(MainWindow, Ui_MainWindow): p.end() self.default_thumbnail = (pixmap.width(), pixmap.height(), pixmap_to_data(pixmap)) - def __init__(self, single_instance, parent=None): - MainWindow.__init__(self, parent) + def __init__(self, single_instance, opts, parent=None): + MainWindow.__init__(self, opts, parent) self.single_instance = single_instance if self.single_instance is not None: self.connect(self.single_instance, SIGNAL('message_received(PyQt_PyObject)'), @@ -112,6 +112,19 @@ class Main(MainWindow, Ui_MainWindow): sm = QMenu() sm.addAction(QIcon(':/images/reader.svg'), _('Send to main memory')) sm.addAction(QIcon(':/images/sd.svg'), _('Send to storage card')) + sm.addAction(QIcon(':/images/reader.svg'), _('Send to main memory')+' '+_('and delete from library')) + sm.addAction(QIcon(':/images/sd.svg'), _('Send to storage card')+' '+_('and delete from library')) + sm.addSeparator() + sm.addAction(_('Send to storage card by default')) + sm.actions()[-1].setCheckable(True) + def default_sync(checked): + Settings().set('send to device by default', bool(checked)) + QObject.disconnect(self.action_sync, SIGNAL("triggered(bool)"), self.sync_to_main_memory) + QObject.disconnect(self.action_sync, SIGNAL("triggered(bool)"), self.sync_to_card) + QObject.connect(self.action_sync, SIGNAL("triggered(bool)"), self.sync_to_card if checked else self.sync_to_main_memory) + QObject.connect(sm.actions()[-1], SIGNAL('toggled(bool)'), default_sync) + sm.actions()[-1].setChecked(Settings().get('send to device by default', False)) + default_sync(sm.actions()[-1].isChecked()) self.sync_menu = sm # Needed md = QMenu() md.addAction(_('Edit metadata individually')) @@ -128,14 +141,16 @@ class Main(MainWindow, Ui_MainWindow): QObject.connect(self.add_menu.actions()[2], SIGNAL("triggered(bool)"), self.add_recursive_multiple) QObject.connect(self.action_del, SIGNAL("triggered(bool)"), self.delete_books) QObject.connect(self.action_edit, SIGNAL("triggered(bool)"), self.edit_metadata) - QObject.connect(md.actions()[0], SIGNAL('triggered(bool)'), self.edit_metadata) + QObject.connect(md.actions()[0], SIGNAL('triggered(bool)'), partial(self.edit_metadata, bulk=False)) QObject.connect(md.actions()[1], SIGNAL('triggered(bool)'), self.edit_bulk_metadata) - QObject.connect(self.action_sync, SIGNAL("triggered(bool)"), self.sync_to_main_memory) QObject.connect(sm.actions()[0], SIGNAL('triggered(bool)'), self.sync_to_main_memory) QObject.connect(sm.actions()[1], SIGNAL('triggered(bool)'), self.sync_to_card) + QObject.connect(sm.actions()[2], SIGNAL('triggered(bool)'), partial(self.sync_to_main_memory, delete_from_library=True)) + QObject.connect(sm.actions()[3], SIGNAL('triggered(bool)'), partial(self.sync_to_card, delete_from_library=True)) self.save_menu = QMenu() self.save_menu.addAction(_('Save to disk')) self.save_menu.addAction(_('Save to disk in a single directory')) + self.save_menu.addAction(_('Save only %s format to disk')%Settings().get('save to disk single format', 'lrf').upper()) self.view_menu = QMenu() self.view_menu.addAction(_('View')) @@ -144,6 +159,7 @@ class Main(MainWindow, Ui_MainWindow): QObject.connect(self.action_save, SIGNAL("triggered(bool)"), self.save_to_disk) QObject.connect(self.save_menu.actions()[0], SIGNAL("triggered(bool)"), self.save_to_disk) QObject.connect(self.save_menu.actions()[1], SIGNAL("triggered(bool)"), self.save_to_single_dir) + QObject.connect(self.save_menu.actions()[2], SIGNAL("triggered(bool)"), self.save_single_format_to_disk) QObject.connect(self.action_view, SIGNAL("triggered(bool)"), self.view_book) QObject.connect(self.view_menu.actions()[0], SIGNAL("triggered(bool)"), self.view_book) QObject.connect(self.view_menu.actions()[1], SIGNAL("triggered(bool)"), self.view_specific_format) @@ -229,7 +245,7 @@ class Main(MainWindow, Ui_MainWindow): self.status_bar.cover_flow_button.disable(pictureflowerror) - self.setMaximumHeight(available_height()) + self.setMaximumHeight(max_available_height()) ####################### Setup device detection ######################## self.detector = DeviceDetector(sleep_time=2000) @@ -253,8 +269,6 @@ class Main(MainWindow, Ui_MainWindow): self.setMaximumHeight(available_height()) - - def sync_cf_to_listview(self, index, *args): if not hasattr(index, 'row') and self.library_view.currentIndex().row() != index: index = self.library_view.model().index(index, 0) @@ -496,7 +510,8 @@ class Main(MainWindow, Ui_MainWindow): ''' Called once books have been uploaded. ''' - metadata, on_card = self.upload_memory.pop(id)[:2] + metadata, on_card, memory = self.upload_memory.pop(id) + if exception: if isinstance(exception, FreeSpaceError): where = 'in main memory.' if 'memory' in str(exception) else 'on the storage card.' @@ -516,6 +531,9 @@ class Main(MainWindow, Ui_MainWindow): view = self.card_view if on_card else self.memory_view view.model().resort(reset=False) view.model().research() + if memory and memory[1]: + rows = map(self.library_view.model().db.index, memory[1]) + self.library_view.model().delete_books(rows) ############################################################################ @@ -563,17 +581,19 @@ class Main(MainWindow, Ui_MainWindow): ############################################################################ ############################### Edit metadata ############################## - def edit_metadata(self, checked): + def edit_metadata(self, checked, bulk=None): ''' - Edit metadata of selected books in library individually. + Edit metadata of selected books in library. ''' rows = self.library_view.selectionModel().selectedRows() - if len(rows) > 1: - return self.edit_bulk_metadata(checked) if not rows or len(rows) == 0: d = error_dialog(self, _('Cannot edit metadata'), _('No books selected')) d.exec_() return + + if bulk or (bulk is None and len(rows) > 1): + return self.edit_bulk_metadata(checked) + for row in rows: d = MetadataSingleDialog(self, row.row(), self.library_view.model().db) @@ -598,11 +618,11 @@ class Main(MainWindow, Ui_MainWindow): ############################################################################ ############################# Syncing to device############################# - def sync_to_main_memory(self, checked): - self.sync_to_device(False) + def sync_to_main_memory(self, checked, delete_from_library=False): + self.sync_to_device(False, delete_from_library) - def sync_to_card(self, checked): - self.sync_to_device(True) + def sync_to_card(self, checked, delete_from_library=False): + self.sync_to_device(True, delete_from_library) def cover_to_thumbnail(self, data): p = QPixmap() @@ -613,7 +633,7 @@ class Main(MainWindow, Ui_MainWindow): p = p.scaledToHeight(ht, Qt.SmoothTransformation) return (p.width(), p.height(), pixmap_to_data(p)) - def sync_to_device(self, on_card): + def sync_to_device(self, on_card, delete_from_library): rows = self.library_view.selectionModel().selectedRows() if not self.device_manager or not rows or len(rows) == 0: return @@ -661,7 +681,8 @@ class Main(MainWindow, Ui_MainWindow): else: prefix = prefix.decode('ascii', 'ignore').encode('ascii', 'ignore') names.append('%s_%d%s'%(prefix, id, os.path.splitext(f)[1])) - self.upload_books(gf, names, good, on_card, memory=_files) + remove = [self.library_view.model().id(r) for r in rows] if delete_from_library else [] + self.upload_books(gf, names, good, on_card, memory=(_files, remove)) self.status_bar.showMessage(_('Sending books to device.'), 5000) if bad: bad = '\n'.join('
  • %s
  • '%(i,) for i in bad) @@ -673,20 +694,32 @@ class Main(MainWindow, Ui_MainWindow): ############################################################################ ############################## Save to disk ################################ + def save_single_format_to_disk(self, checked): + self.save_to_disk(checked, True, Settings().get('save to disk single format', 'lrf')) + def save_to_single_dir(self, checked): self.save_to_disk(checked, True) - def save_to_disk(self, checked, single_dir=False): + def save_to_disk(self, checked, single_dir=False, single_format=None): rows = self.current_view().selectionModel().selectedRows() if not rows or len(rows) == 0: d = error_dialog(self, _('Cannot save to disk'), _('No books selected')) d.exec_() return + dir = choose_dir(self, 'save to disk dialog', ('Choose destination directory')) if not dir: return if self.current_view() == self.library_view: - self.current_view().model().save_to_disk(rows, dir, single_dir=single_dir) + failures = self.current_view().model().save_to_disk(rows, dir, + single_dir=single_dir, single_format=single_format) + if failures and single_format is not None: + msg = _('

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

      ')%single_format.upper() + for f in failures: + msg += '
    • %s
    • '%f[1] + msg += '
    ' + warning_dialog(self, _('Could not save some ebooks'), msg).exec_() + QDesktopServices.openUrl(QUrl('file:'+dir)) else: paths = self.current_view().model().paths(rows) self.job_manager.run_device_job(self.books_saved, @@ -1069,24 +1102,48 @@ class Main(MainWindow, Ui_MainWindow): self.device_error_dialog.show() def conversion_job_exception(self, id, description, exception, formatted_traceback, log): + + def safe_print(msgs, file=sys.stderr): + for i, msg in enumerate(msgs): + if not msg: + msg = '' + if isinstance(msg, unicode): + msgs[i] = msg.encode(preferred_encoding, 'replace') + msg = ' '.join(msgs) + print >>file, msg + + def safe_unicode(arg): + if not arg: + arg = unicode(repr(arg)) + if isinstance(arg, str): + arg = arg.decode(preferred_encoding, 'replace') + if not isinstance(arg, unicode): + try: + arg = unicode(repr(arg)) + except: + arg = u'Could not convert to unicode' + return arg + + only_msg = getattr(exception, 'only_msg', False) + description, exception, formatted_traceback, log = map(safe_unicode, + (description, exception, formatted_traceback, log)) try: - print >>sys.stderr, 'Error in job:', description.encode('utf8') + safe_print('Error in job:', description) if log: - print >>sys.stderr, log.encode('utf8', 'ignore') if isinstance(log, unicode) else log - print >>sys.stderr, exception - print >>sys.stderr, formatted_traceback.encode('utf8', 'ignore') if isinstance(formatted_traceback, unicode) else formatted_traceback + safe_print(log) + safe_print(exception) + safe_print(formatted_traceback) except: pass - if getattr(exception, 'only_msg', False): - error_dialog(self, _('Conversion Error'), unicode(exception)).exec_() + if only_msg: + error_dialog(self, _('Conversion Error'), exception).exec_() return - msg = u'

    %s:

    '%exception + msg = u'

    %s:'%exception msg += u'

    Failed to perform job: '+description msg += u'

    Detailed traceback:

    '
    -        msg += formatted_traceback + '
    ' - msg += '

    Log:

    '
    -        if log:
    -            msg += log.encode('utf8', 'ignore') if isinstance(log, unicode) else log.decode('utf8', 'ignore')
    +        msg += formatted_traceback + u'
    ' + msg += u'

    Log:

    '
    +        msg += log
             ConversionErrorDialog(self, 'Conversion Error', msg, show=True)
     
     
    @@ -1173,7 +1230,7 @@ class Main(MainWindow, Ui_MainWindow):
                                                         device=self.device_info)))
             self.vanity.update()
             s = Settings()
    -        if s.get('update to version %s'%version, True):
    +        if s.get('new version notification', True) and s.get('update to version %s'%version, True):
                 d = question_dialog(self, _('Update available'), _('%s has been updated to version %s. See the new features. Visit the download page?')%(__appname__, version))
                 if d.exec_() == QMessageBox.Yes:
                     url = 'http://calibre.kovidgoyal.net/download_'+('windows' if iswindows else 'osx' if isosx else 'linux')
    @@ -1186,6 +1243,13 @@ def main(args=sys.argv):
     
         pid = os.fork() if islinux else -1
         if pid <= 0:
    +        parser = option_parser('''\
    +%prog [opts] [path_to_ebook]
    +
    +Launch the main calibre Graphical User Interface and optionally add the ebook at
    +path_to_ebook to the database.
    +''')
    +        opts, args = parser.parse_args(args)
             app = Application(args)
             app.setWindowIcon(QIcon(':/library'))
             QCoreApplication.setOrganizationName(ORG_NAME)
    @@ -1193,7 +1257,7 @@ def main(args=sys.argv):
             single_instance = None if SingleApplication is None else SingleApplication('calibre GUI')
             if not singleinstance('calibre GUI'):
                 if single_instance is not None and single_instance.is_running() and \
    -               single_instance.send_message('launched:'+repr(sys.argv)):
    +               single_instance.send_message('launched:'+repr(args)):
                         return 0
     
                 QMessageBox.critical(None, 'Cannot Start '+__appname__,
    @@ -1201,14 +1265,14 @@ def main(args=sys.argv):
                 return 1
             initialize_file_icon_provider()
             try:
    -            main = Main(single_instance)
    +            main = Main(single_instance, opts)
             except DatabaseLocked, err:
                 QMessageBox.critical(None, 'Cannot Start '+__appname__,
                 '

    Another program is using the database.
    Perhaps %s is already running?
    If not try deleting the file %s'%(__appname__, err.lock_file_path)) return 1 sys.excepthook = main.unhandled_exception - if len(sys.argv) > 1: - main.add_filesystem_book(sys.argv[1]) + if len(args) > 1: + main.add_filesystem_book(args[1]) return app.exec_() return 0 @@ -1219,7 +1283,7 @@ if __name__ == '__main__': except: if not iswindows: raise from PyQt4.QtGui import QErrorMessage - logfile = os.path.expanduser('~/calibre.log') + logfile = os.path.join(os.path.expanduser('~'), 'calibre.log') if os.path.exists(logfile): log = open(logfile).read() if log.strip(): diff --git a/src/calibre/gui2/main_window.py b/src/calibre/gui2/main_window.py index c2b5efc0ed..c84ce915fe 100644 --- a/src/calibre/gui2/main_window.py +++ b/src/calibre/gui2/main_window.py @@ -3,13 +3,43 @@ __copyright__ = '2008, Kovid Goyal ' import StringIO, traceback, sys -from PyQt4.QtGui import QMainWindow +from PyQt4.Qt import QMainWindow, QString, Qt, QFont from calibre.gui2.dialogs.conversion_error import ConversionErrorDialog +from calibre import OptionParser + +def option_parser(usage='''\ +Usage: %prog [options] + +Launch the Graphical User Interface +'''): + parser = OptionParser(usage) + parser.add_option('--redirect-console-output', default=False, action='store_true', dest='redirect', + help=_('Redirect console output to a dialog window (both stdout and stderr). Useful on windows where GUI apps do not have a output streams.')) + return parser + +class DebugWindow(ConversionErrorDialog): + + def __init__(self, parent): + ConversionErrorDialog.__init__(self, parent, 'Console output', '') + self.setModal(Qt.NonModal) + font = QFont() + font.setStyleHint(QFont.TypeWriter) + self.text.setFont(font) + + def write(self, msg): + self.text.setPlainText(self.text.toPlainText()+QString(msg)) + + def flush(self): + pass class MainWindow(QMainWindow): - def __init__(self, parent=None): + def __init__(self, opts, parent=None): QMainWindow.__init__(self, parent) + if getattr(opts, 'redirect', False): + self.__console_redirect = DebugWindow(self) + sys.stdout = sys.stderr = self.__console_redirect + self.__console_redirect.show() def unhandled_exception(self, type, value, tb): try: @@ -19,7 +49,7 @@ class MainWindow(QMainWindow): print >>sys.stderr, fe msg = '

    ' + unicode(str(value), 'utf8', 'replace') + '

    ' msg += '

    Detailed traceback:

    '+fe+'
    ' - d = ConversionErrorDialog(self, 'ERROR: Unhandled exception', msg) + d = ConversionErrorDialog(self, _('ERROR: Unhandled exception'), msg) d.exec_() except: pass \ No newline at end of file diff --git a/src/calibre/gui2/pictureflow/PyQt/configure.py b/src/calibre/gui2/pictureflow/PyQt/configure.py index e24e9a8405..8b6295d817 100644 --- a/src/calibre/gui2/pictureflow/PyQt/configure.py +++ b/src/calibre/gui2/pictureflow/PyQt/configure.py @@ -43,6 +43,7 @@ else: makefile.extra_lib_dirs = ['..\\..\\.build\\release', '../../.build', '.'] makefile.extra_libs = ['pictureflow0' if 'win' in sys.platform and 'darwin' not in sys.platform else "pictureflow"] makefile.extra_cflags = ['-arch i386', '-arch ppc'] if 'darwin' in sys.platform else [] +makefile.extra_lflags = ['-arch i386', '-arch ppc'] if 'darwin' in sys.platform else [] makefile.extra_cxxflags = makefile.extra_cflags # Generate the Makefile itself. diff --git a/src/calibre/gui2/widgets.py b/src/calibre/gui2/widgets.py index 1f9de46c5b..06a85128bd 100644 --- a/src/calibre/gui2/widgets.py +++ b/src/calibre/gui2/widgets.py @@ -231,7 +231,7 @@ class JobsView(TableView): def __init__(self, parent): TableView.__init__(self, parent) - self.connect(self, SIGNAL('activated(QModelIndex)'), self.show_details) + self.connect(self, SIGNAL('doubleClicked(QModelIndex)'), self.show_details) def show_details(self, index): row = index.row() diff --git a/src/calibre/library/cli.py b/src/calibre/library/cli.py index 8b9d11bb28..5864c83a38 100644 --- a/src/calibre/library/cli.py +++ b/src/calibre/library/cli.py @@ -102,14 +102,14 @@ List the books available in the calibre database. if not set(fields).issubset(FIELDS): parser.print_help() print - print _('Invalid fields. Available fields:'), ','.join(FIELDS) + print >>sys.stderr, _('Invalid fields. Available fields:'), ','.join(FIELDS) return 1 db = get_db(dbpath, opts) if not opts.sort_by in FIELDS: parser.print_help() print - print _('Invalid sort field. Available fields:'), ','.join(FIELDS) + print >>sys.stderr, _('Invalid sort field. Available fields:'), ','.join(FIELDS) return 1 do_list(db, fields, opts.sort_by, opts.ascending, opts.search) @@ -123,6 +123,7 @@ class DevNull(object): NULL = DevNull() def do_add(db, paths, one_book_per_directory, recurse, add_duplicates): + orig = sys.stdout sys.stdout = NULL try: files, dirs = [], [] @@ -171,26 +172,26 @@ 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 _('The following books were not added as they already exist in the database (see --duplicates option):') + 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): title = title.encode(preferred_encoding) - print '\t', title + ':' + print >>sys.stderr, '\t', title + ':' for path in formats: - print '\t\t ', path + print >>sys.stderr, '\t\t ', path if file_duplicates: for path, mi in zip(file_duplicates[0], file_duplicates[2]): title = mi.title if isinstance(title, unicode): title = title.encode(preferred_encoding) - print '\t', title+':' - print '\t\t ', path + print >>sys.stderr, '\t', title+':' + print >>sys.stderr, '\t\t ', path if send_message is not None: send_message('refreshdb:', 'calibre GUI') finally: - sys.stdout = sys.__stdout__ + sys.stdout = orig @@ -213,7 +214,7 @@ the directory related options below. if len(args) < 2: parser.print_help() print - print _('You must specify at least one file to add') + print >>sys.stderr, _('You must specify at least one file to add') return 1 do_add(get_db(dbpath, opts), args[1:], opts.one_book_per_directory, opts.recurse, opts.duplicates) return 0 @@ -243,7 +244,7 @@ list of id numbers (you can get id numbers by using the list command). For examp if len(args) < 2: parser.print_help() print - print _('You must specify at least one book to remove') + print >>sys.stderr, _('You must specify at least one book to remove') return 1 ids = [] @@ -274,7 +275,7 @@ by id. You can get id by using the list command. If the format already exists, i if len(args) < 3: parser.print_help() print - print _('You must specify an id and an ebook file') + print >>sys.stderr, _('You must specify an id and an ebook file') return 1 id, file, fmt = int(args[1]), open(args[2], 'rb'), os.path.splitext(args[2])[-1] @@ -300,7 +301,7 @@ do nothing. if len(args) < 3: parser.print_help() print - print _('You must specify an id and a format') + print >>sys.stderr, _('You must specify an id and a format') return 1 id, fmt = int(args[1]), args[2].upper() @@ -331,7 +332,7 @@ id is an id number from the list command. if len(args) < 2: parser.print_help() print - print _('You must specify an id') + print >>sys.stderr, _('You must specify an id') return 1 id = int(args[1]) do_show_metadata(get_db(dbpath, opts), id, opts.as_opf) @@ -358,15 +359,47 @@ show_metadata command. if len(args) < 3: parser.print_help() print - print _('You must specify an id and a metadata file') + print >>sys.stderr, _('You must specify an id and a metadata file') return 1 id, opf = int(args[1]), open(args[2], 'rb') do_set_metadata(get_db(dbpath, opts), id, opf) return 0 +def do_export(db, ids, dir, single_dir, by_author): + if ids is None: + ids = db.all_ids() + db.export_to_dir(dir, ids, byauthor=by_author, single_dir=single_dir, index_is_id=True) + +def command_export(args, dbpath): + parser = get_parser(_('''\ +%prog export [options] ids + +Export the books specified by ids (a comma separated list) to the filesystem. +The export operation saves all formats of the book, its cover and metadata (in +an opf file). You can get id numbers from the list command. +''')) + parser.add_option('--all', default=False, action='store_true', + help=_('Export all books in database, ignoring the list of ids.')) + parser.add_option('--to-dir', default='.', + help=(_('Export books to the specified directory. Default is')+' %default')) + parser.add_option('--single-dir', default=False, action='store_true', + help=_('Export all books into a single directory')) + parser.add_option('--by-author', default=False, action='store_true', + help=_('Create file names as author - title instead of title - author')) + opts, args = parser.parse_args(sys.argv[1:]+args) + if (len(args) < 2 and not opts.all): + parser.print_help() + print + print >>sys.stderr, _('You must specify some ids or the %s option')%'--all' + return 1 + ids = None if opts.all else map(int, args[1].split(',')) + dir = os.path.abspath(os.path.expanduser(opts.to_dir)) + do_export(get_db(dbpath, opts), ids, dir, opts.single_dir, opts.by_author) + return 0 + def main(args=sys.argv): commands = ('list', 'add', 'remove', 'add_format', 'remove_format', - 'show_metadata', 'set_metadata') + 'show_metadata', 'set_metadata', 'export') parser = OptionParser(_( '''\ %%prog command [options] [arguments] diff --git a/src/calibre/library/database.py b/src/calibre/library/database.py index fdd46f32fa..ee5632d8c2 100644 --- a/src/calibre/library/database.py +++ b/src/calibre/library/database.py @@ -1376,6 +1376,9 @@ ALTER TABLE books ADD COLUMN isbn TEXT DEFAULT "" COLLATE NOCASE; self.conn.execute('VACUUM;') self.conn.commit() + def all_ids(self): + return [i[0] for i in self.conn.execute('SELECT id FROM books').fetchall()] + def export_to_dir(self, dir, indices, byauthor=False, single_dir=False, index_is_id=False): if not os.path.exists(dir): @@ -1410,7 +1413,6 @@ ALTER TABLE books ADD COLUMN isbn TEXT DEFAULT "" COLLATE NOCASE; name = au + ' - ' + title if byauthor else title + ' - ' + au name += '_'+id base = dir if single_dir else tpath - mi = OPFCreator(base, self.get_metadata(idx, index_is_id=index_is_id)) cover = self.cover(idx, index_is_id=index_is_id) if cover is not None: @@ -1537,6 +1539,25 @@ ALTER TABLE books ADD COLUMN isbn TEXT DEFAULT "" COLLATE NOCASE; if res is not None: duplicates.extend(res) return duplicates + + def export_single_format_to_dir(self, dir, indices, format, index_is_id=False): + if not index_is_id: + indices = map(self.id, indices) + failures = [] + for id in indices: + try: + data = self.format(id, format, index_is_id=True) + except: + failures.append((id, self.title(id, index_is_id=True))) + title = self.title(id, index_is_id=True) + au = self.authors(id, index_is_id=True) + if not au: + au = _('Unknown') + fname = '%s - %s.%s'%(title, au, format.lower()) + fname = sanitize_file_name(fname) + open(os.path.join(dir, fname), 'wb').write(data) + return failures + class SearchToken(object): diff --git a/src/calibre/libunrar.py b/src/calibre/libunrar.py index 3348019bac..149b83d1b1 100644 --- a/src/calibre/libunrar.py +++ b/src/calibre/libunrar.py @@ -7,10 +7,10 @@ See ftp://ftp.rarlabs.com/rar/unrarsrc-3.7.5.tar.gz """ import os, ctypes from ctypes import Structure, c_char_p, c_uint, c_void_p, POINTER, \ - byref, c_wchar_p, CFUNCTYPE, c_int, c_long, c_char, c_wchar + byref, c_wchar_p, c_int, c_char, c_wchar from StringIO import StringIO -from calibre import iswindows, isosx, load_library +from calibre import iswindows, load_library _librar_name = 'libunrar' cdll = ctypes.cdll diff --git a/src/calibre/linux.py b/src/calibre/linux.py index 3bc5cd9467..d292f244ce 100644 --- a/src/calibre/linux.py +++ b/src/calibre/linux.py @@ -46,9 +46,10 @@ entry_points = { 'librarything = calibre.ebooks.metadata.library_thing:main', 'mobi2oeb = calibre.ebooks.mobi.reader:main', 'lrf2html = calibre.ebooks.lrf.html.convert_to:main', - 'calibre-debug = calibre.debug:main', - 'calibredb = calibre.library.cli:main', + 'calibre-debug = calibre.debug:main', + 'calibredb = calibre.library.cli:main', 'calibre-fontconfig = calibre.utils.fontconfig:main', + 'calibre-parallel = calibre.parallel:main', ], 'gui_scripts' : [ __appname__+' = calibre.gui2.main:main', @@ -353,13 +354,20 @@ def install_man_pages(fatal_errors): prog = src[:src.index('=')].strip() if prog in ('prs500', 'pdf-meta', 'epub-meta', 'lit-meta', 'markdown-calibre', 'calibre-debug', 'fb2-meta', - 'calibre-fontconfig'): + 'calibre-fontconfig', 'calibre-parallel'): continue help2man = ('help2man', prog, '--name', 'part of %s'%__appname__, '--section', '1', '--no-info', '--include', f.name, '--manual', __appname__) manfile = os.path.join(manpath, prog+'.1'+__appname__+'.bz2') - p = subprocess.Popen(help2man, stdout=subprocess.PIPE) + try: + p = subprocess.Popen(help2man, stdout=subprocess.PIPE) + except OSError, err: + import errno + if err.errno != errno.ENOENT: + raise + print 'Failed to install MAN pages as help2man is missing from your system' + break raw = re.compile(r'^\.IP\s*^([A-Z :]+)$', re.MULTILINE).sub(r'.SS\n\1', p.stdout.read()) if not raw.strip(): print 'Unable to create MAN page for', prog diff --git a/src/calibre/manual/custom.py b/src/calibre/manual/custom.py index c4d45ffce2..2098369fee 100644 --- a/src/calibre/manual/custom.py +++ b/src/calibre/manual/custom.py @@ -10,7 +10,7 @@ from sphinx.ext.autodoc import get_module_charset, prepare_docstring from docutils.statemachine import ViewList from docutils import nodes -from genshi.template import TextTemplate +from genshi.template import OldTextTemplate as TextTemplate sys.path.append(os.path.abspath('../../../')) from calibre.linux import entry_points diff --git a/src/calibre/parallel.py b/src/calibre/parallel.py index 7c0c997def..f8a50d3859 100644 --- a/src/calibre/parallel.py +++ b/src/calibre/parallel.py @@ -1,75 +1,231 @@ from __future__ import with_statement __license__ = 'GPL v3' -__copyright__ = '2008, Kovid Goyal ' +__copyright__ = '2008, Kovid Goyal kovid@kovidgoyal.net' +__docformat__ = 'restructuredtext en' + ''' -Used to run jobs in parallel in separate processes. +Used to run jobs in parallel in separate processes. Features output streaming, +support for progress notification as well as job killing. The worker processes +are controlled via a simple protocol run over TCP/IP sockets. The control happens +mainly in two class, :class:`Server` and :class:`Overseer`. The worker is +encapsulated in the function :function:`worker`. Every worker process +has the environment variable :envvar:`CALIBRE_WORKER` defined. + +The worker control protocol has two modes of operation. In the first mode, the +worker process listens for commands from the controller process. The controller +process can either hand off a job to the worker or tell the worker to die. +Once a job is handed off to the worker, the protocol enters the second mode, where +the controller listens for messages from the worker. The worker can send progress updates +as well as console output (i.e. text that would normally have been written to stdout +or stderr by the job). Once the job completes (or raises an exception) the worker +returns the result (or exception) to the controller adnt he protocol reverts to the first mode. + +In the second mode, the controller can also send the worker STOP messages, in which case +the worker interrupts the job and dies. The sending of progress and console output messages +is buffered and asynchronous to prevent the job from being IO bound. ''' -import sys, os, gc, cPickle, traceback, atexit, cStringIO, time, \ - subprocess, socket, collections, binascii +import sys, os, gc, cPickle, traceback, atexit, cStringIO, time, signal, \ + subprocess, socket, collections, binascii, re, tempfile, thread from select import select from functools import partial from threading import RLock, Thread, Event -from calibre.ebooks.lrf.any.convert_from import main as any2lrf -from calibre.ebooks.lrf.web.convert_from import main as web2lrf -from calibre.ebooks.lrf.feeds.convert_from import main as feeds2lrf -from calibre.gui2.lrf_renderer.main import main as lrfviewer from calibre.ptempfile import PersistentTemporaryFile +from calibre import iswindows, detect_ncpus, isosx -try: - from calibre.ebooks.lrf.html.table_as_image import do_render as render_table -except: # Dont fail is PyQt4.4 not present - render_table = None -from calibre import iswindows, islinux, detect_ncpus - -sa = None -job_id = None - -def report_progress(percent, msg=''): - if sa is not None and job_id is not None: - msg = 'progress:%s:%f:%s'%(job_id, percent, msg) - sa.send_message(msg) - -_notify = 'fskjhwseiuyweoiu987435935-0342' +#: A mapping from job names to functions that perform the jobs PARALLEL_FUNCS = { - 'any2lrf' : partial(any2lrf, gui_mode=True), - 'web2lrf' : web2lrf, - 'lrfviewer' : lrfviewer, - 'feeds2lrf' : partial(feeds2lrf, notification=_notify), - 'render_table': render_table, - } + 'any2lrf' : + ('calibre.ebooks.lrf.any.convert_from', 'main', dict(gui_mode=True), None), + + 'lrfviewer' : + ('calibre.gui2.lrf_renderer.main', 'main', {}, None), + + 'feeds2lrf' : + ('calibre.ebooks.lrf.feeds.convert_from', 'main', {}, 'notification'), + + 'render_table' : + ('calibre.ebooks.lrf.html.table_as_image', 'do_render', {}, None), +} -python = sys.executable -popen = subprocess.Popen -if iswindows: - if hasattr(sys, 'frozen'): - python = os.path.join(os.path.dirname(python), 'parallel.exe') - else: - python = os.path.join(os.path.dirname(python), 'Scripts\\parallel.exe') - open = partial(subprocess.Popen, creationflags=0x08) # CREATE_NO_WINDOW=0x08 so that no ugly console is popped up +isfrozen = hasattr(sys, 'frozen') -if islinux and hasattr(sys, 'frozen_path'): - python = os.path.join(getattr(sys, 'frozen_path'), 'calibre-parallel') - popen = partial(subprocess.Popen, cwd=getattr(sys, 'frozen_path')) +win32event = __import__('win32event') if iswindows else None +win32process = __import__('win32process') if iswindows else None +msvcrt = __import__('msvcrt') if iswindows else None -prefix = 'import sys; sys.in_worker = True; ' -if hasattr(sys, 'frameworks_dir'): - fd = getattr(sys, 'frameworks_dir') - prefix += 'sys.frameworks_dir = "%s"; sys.frozen = "macosx_app"; '%fd - if fd not in os.environ['PATH']: - os.environ['PATH'] += ':'+fd -if 'parallel' in python: - executable = [python] - worker_command = '%s:%s' - free_spirit_command = '%s' -else: - executable = [python, '-c'] - worker_command = prefix + 'from calibre.parallel import worker; worker(%s, %s)' - free_spirit_command = prefix + 'from calibre.parallel import free_spirit; free_spirit(%s)' +class WorkerStatus(object): + ''' + A platform independent class to control child processes. Provides the + methods: + + .. method:: WorkerStatus.is_alive() + + Return True is the child process is alive (i.e. it hasn't exited and returned a return code). + + .. method:: WorkerStatus.returncode() + + Wait for the child process to exit and return its return code (blocks until child returns). + + .. method:: WorkerStatus.kill() + + Forcibly terminates child process using operating system specific semantics. + ''' + + def __init__(self, obj): + ''' + `obj`: On windows a process handle, on unix a subprocess.Popen object. + ''' + self.obj = obj + self.win32process = win32process # Needed if kill is called during shutdown of interpreter + self.os = os + self.signal = signal + ext = 'windows' if iswindows else 'unix' + for func in ('is_alive', 'returncode', 'kill'): + setattr(self, func, getattr(self, func+'_'+ext)) + + def is_alive_unix(self): + return self.obj.poll() == None + + def returncode_unix(self): + return self.obj.wait() + + def kill_unix(self): + os.kill(self.obj.pid, self.signal.SIGKILL) + + def is_alive_windows(self): + return win32event.WaitForSingleObject(self.obj, 0) != win32event.WAIT_OBJECT_0 + + def returncode_windows(self): + return win32process.GetExitCodeProcess(self.obj) + + def kill_windows(self, returncode=-1): + self.win32process.TerminateProcess(self.obj, returncode) + +class WorkerMother(object): + ''' + Platform independent object for launching child processes. All processes + have the environment variable :envvar:`CALIBRE_WORKER` set. + + ..method:: WorkerMother.spawn_free_spirit(arg) + + Launch a non monitored process with argument `arg`. + + ..method:: WorkerMother.spawn_worker(arg) + + Launch a monitored and controllable process with argument `arg`. + ''' + + 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 + if iswindows: + self.executable = os.path.join(os.path.dirname(sys.executable), + 'calibre-parallel.exe' if isfrozen else 'Scripts\\calibre-parallel.exe') + elif isosx: + self.executable = sys.executable + self.prefix = '' + if isfrozen: + fd = getattr(sys, 'frameworks_dir') + contents = os.path.dirname(fd) + resources = os.path.join(contents, 'Resources') + sp = os.path.join(resources, 'lib', 'python'+sys.version[:3], 'site-packages.zip') + + 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' + + 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') + self.spawn_worker_osx = lambda arg : self.spawn_free_spirit_osx(arg, type='worker') + + for func in ('spawn_free_spirit', 'spawn_worker'): + setattr(self, func, getattr(self, func+'_'+ext)) + + + def cleanup_child_windows(self, child, name=None, fd=None): + try: + child.kill() + except: + pass + try: + if fd is not None: + self.os.close(fd) + except: + pass + try: + if name is not None and os.path.exists(name): + self.os.unlink(name) + except: + pass + + def cleanup_child_linux(self, child): + try: + child.kill() + except: + pass + + def get_env(self): + env = dict(os.environ) + env['CALIBRE_WORKER'] = '1' + if hasattr(self, 'env'): + env.update(self.env) + return env + + def spawn_free_spirit_osx(self, arg, type='free_spirit'): + script = 'from calibre.parallel import main; main(args=["calibre-parallel", %s]);'%repr(arg) + cmdline = [self.executable, '-c', self.prefix+script] + child = WorkerStatus(subprocess.Popen(cmdline, env=self.get_env())) + atexit.register(self.cleanup_child_linux, child) + return child + + def spawn_free_spirit_linux(self, arg, type='free_spirit'): + cmdline = [self.executable, arg] + child = WorkerStatus(subprocess.Popen(cmdline, env=self.get_env())) + atexit.register(self.cleanup_child_linux, child) + return child + + def spawn_free_spirit_windows(self, arg, type='free_spirit'): + fd, name = tempfile.mkstemp('.log', 'calibre_'+type+'_') + handle = msvcrt.get_osfhandle(fd) + si = win32process.STARTUPINFO() + si.hStdOutput = handle + si.hStdError = handle + cmdline = self.executable + ' ' + str(arg) + hProcess = \ + win32process.CreateProcess( + None, # Application Name + cmdline, # Command line + None, # processAttributes + None, # threadAttributes + 1, # bInheritHandles + win32process.CREATE_NO_WINDOW, # Dont want ugly console popping up + self.get_env(), # New environment + None, # Current directory + si + )[0] + child = WorkerStatus(hProcess) + atexit.register(self.cleanup_child_windows, child, name, fd) + return child + + +mother = WorkerMother() def write(socket, msg, timeout=5): + ''' + Write a message on socket. If `msg` is unicode, it is encoded in utf-8. + Raises a `RuntimeError` if the socket is not ready for writing or the writing fails. + `msg` is broken into chunks of size 4096 and sent. The :function:`read` function + automatically re-assembles the chunks into whole message. + ''' if isinstance(msg, unicode): msg = msg.encode('utf-8') length = None @@ -88,6 +244,11 @@ def write(socket, msg, timeout=5): def read(socket, timeout=5): + ''' + Read a message from `socket`. The message must have been sent with the :function:`write` + function. Raises a `RuntimeError` if the message is corrpted. Can return an + empty string. + ''' buf = cStringIO.StringIO() length = None while select([socket],[],[],timeout)[0]: @@ -108,6 +269,11 @@ def read(socket, timeout=5): return msg class RepeatingTimer(Thread): + ''' + Calls a specified function repeatedly at a specified interval. Runs in a + daemon thread (i.e. the interpreter can exit while it is still running). + Call :meth:`start()` to start it. + ''' def repeat(self): while True: @@ -116,25 +282,31 @@ class RepeatingTimer(Thread): break self.action() - def __init__(self, interval, func): + def __init__(self, interval, func, name): self.event = Event() self.interval = interval self.action = func - Thread.__init__(self, target=self.repeat) + Thread.__init__(self, target=self.repeat, name=name) self.setDaemon(True) class ControlError(Exception): pass class Overseer(object): + ''' + Responsible for controlling worker processes. The main interface is the + methods, :meth:`initialize_job`, :meth:`control`. + ''' KILL_RESULT = 'Server: job killed by user|||#@#$%&*)*(*$#$%#$@&' INTERVAL = 0.1 def __init__(self, server, port, timeout=5): - self.cmd = worker_command%(repr('127.0.0.1'), repr(port)) - self.process = popen(executable + [self.cmd]) + self.worker_status = mother.spawn_worker('127.0.0.1:%d'%port) self.socket = server.accept()[0] + # Needed if terminate called hwen interpreter is shutting down + self.os = os + self.signal = signal self.working = False self.timeout = timeout @@ -152,9 +324,7 @@ class Overseer(object): raise RuntimeError('Worker sulking') def terminate(self): - ''' - Kill process. - ''' + 'Kill worker process.' try: if self.socket: self.write('STOP:') @@ -170,10 +340,12 @@ class Overseer(object): except: pass else: - import signal try: - os.kill(self.worker_pid, signal.SIGKILL) - time.sleep(0.05) + try: + self.os.kill(self.worker_pid, self.signal.SIGKILL) + time.sleep(0.5) + finally: + self.worker_status.kill() except: pass @@ -188,16 +360,19 @@ class Overseer(object): return hasattr(other, 'process') and hasattr(other, 'worker_pid') and self.worker_pid == other.worker_pid def __bool__(self): - self.process.poll() - return self.process.returncode is None - - def pid(self): - return self.worker_pid + return self.worker_status.is_alive() def select(self, timeout=0): return select([self.socket], [self.socket], [self.socket], timeout) def initialize_job(self, job): + ''' + Sends `job` to worker process. Can raise `ControlError` if worker process + does not respond appropriately. In this case, this Overseer is useless + and should be discarded. + + `job`: An instance of :class:`Job`. + ''' self.job_id = job.job_id self.working = True self.write('JOB:'+cPickle.dumps((job.func, job.args, job.kwdargs), -1)) @@ -209,40 +384,44 @@ class Overseer(object): self.job = job def control(self): - try: - if select([self.socket],[],[],0)[0]: - msg = self.read() - word, msg = msg.partition(':')[0], msg.partition(':')[-1] - if word == 'RESULT': - self.write('OK') - return Result(cPickle.loads(msg), None, None) - elif word == 'OUTPUT': - self.write('OK') - try: - self.output(''.join(cPickle.loads(msg))) - except: - self.output('Bad output message: '+ repr(msg)) - elif word == 'PROGRESS': - self.write('OK') - percent = None - try: - percent, msg = cPickle.loads(msg)[-1] - except: - print 'Bad progress update:', repr(msg) - if self.progress and percent is not None: - self.progress(percent, msg) - elif word == 'ERROR': - self.write('OK') - return Result(None, *cPickle.loads(msg)) - else: - self.terminate() - return Result(None, ControlError('Worker sent invalid msg: %s', repr(msg)), '') - self.process.poll() - if self.process.returncode is not None: - return Result(None, ControlError('Worker process died unexpectedly with returncode: %d'%self.process.returncode), '') - finally: - self.working = False - self.last_job_time = time.time() + ''' + Listens for messages from the worker process and dispatches them + appropriately. If the worker process dies unexpectedly, returns a result + of None with a ControlError indicating the worker died. + + Returns a :class:`Result` instance or None, if the worker is still working. + ''' + if select([self.socket],[],[],0)[0]: + msg = self.read() + word, msg = msg.partition(':')[0], msg.partition(':')[-1] + if word == 'RESULT': + self.write('OK') + return Result(cPickle.loads(msg), None, None) + elif word == 'OUTPUT': + self.write('OK') + try: + self.output(''.join(cPickle.loads(msg))) + except: + self.output('Bad output message: '+ repr(msg)) + elif word == 'PROGRESS': + self.write('OK') + percent = None + try: + percent, msg = cPickle.loads(msg)[-1] + except: + print 'Bad progress update:', repr(msg) + if self.progress and percent is not None: + self.progress(percent, msg) + elif word == 'ERROR': + self.write('OK') + return Result(None, *cPickle.loads(msg)) + else: + self.terminate() + return Result(None, ControlError('Worker sent invalid msg: %s', repr(msg)), '') + if not self.worker_status.is_alive(): + return Result(None, ControlError('Worker process died unexpectedly with returncode: %d'%self.process.returncode), '') + + class Job(object): @@ -325,14 +504,23 @@ class Server(Thread): if len(self.jobs) > 0 and len(self.working) < self.number_of_workers: job = self.jobs.popleft() with self.pool_lock: - o = self.pool.pop() if self.pool else Overseer(self.server_socket, self.port) - try: - o.initialize_job(job) - except Exception, err: - res = Result(None, unicode(err), traceback.format_exc()) - job.done(res) - o.terminate() o = None + while self.pool: + o = self.pool.pop() + try: + o.initialize_job(job) + break + except: + o.terminate() + if o is None: + o = Overseer(self.server_socket, self.port) + try: + o.initialize_job(job) + except Exception, err: + o.terminate() + res = Result(None, unicode(err), traceback.format_exc()) + job.done(res) + o = None if o: with self.working_lock: self.working.append(o) @@ -354,7 +542,10 @@ class Server(Thread): with self.pool_lock: self.pool.append(o) - time.sleep(1) + try: + time.sleep(1) + except: + return def killall(self): @@ -393,8 +584,8 @@ class Server(Thread): pt = PersistentTemporaryFile('.pickle', '_IPC_') pt.write(cPickle.dumps((func, args, kwdargs))) pt.close() - cmd = free_spirit_command%repr(binascii.hexlify(pt.name)) - popen(executable + [cmd]) + mother.spawn_free_spirit(binascii.hexlify(pt.name)) + ########################################################################################## ##################################### CLIENT CODE ##################################### @@ -406,8 +597,7 @@ class BufferedSender(object): self.socket = socket self.wbuf, self.pbuf = [], [] self.wlock, self.plock = RLock(), RLock() - self.timer = RepeatingTimer(0.5, self.send) - self.prefix = prefix + self.timer = RepeatingTimer(0.5, self.send, 'BufferedSender') self.timer.start() def write(self, msg): @@ -417,6 +607,15 @@ class BufferedSender(object): self.wbuf.append(msg) def send(self): + if select([self.socket], [], [], 0)[0]: + msg = read(self.socket) + if msg == 'PING:': + write(self.socket, 'OK') + elif msg: + self.socket.shutdown(socket.SHUT_RDWR) + thread.interrupt_main() + time.sleep(1) + raise SystemExit if not select([], [self.socket], [], 30)[1]: print >>sys.__stderr__, 'Cannot pipe to overseer' return @@ -442,13 +641,18 @@ class BufferedSender(object): def flush(self): pass +def get_func(name): + module, func, kwdargs, notification = PARALLEL_FUNCS[name] + module = __import__(module, fromlist=[1]) + func = getattr(module, func) + return func, kwdargs, notification + def work(client_socket, func, args, kwdargs): - func = PARALLEL_FUNCS[func] - if hasattr(func, 'keywords'): - for key, val in func.keywords.items(): - if val == _notify and hasattr(sys.stdout, 'notify'): - func.keywords[key] = sys.stdout.notify - res = func(*args, **kwdargs) + func, kargs, notification = get_func(func) + if notification is not None and hasattr(sys.stdout, 'notify'): + kargs[notification] = sys.stdout.notify + kargs.update(kwdargs) + res = func(*args, **kargs) if hasattr(sys.stdout, 'send'): sys.stdout.send() return res @@ -467,6 +671,9 @@ def worker(host, port): sys.stderr = sys.stdout while True: + if not select([client_socket], [], [], 60)[0]: + time.sleep(1) + continue msg = read(client_socket, timeout=60) if msg.startswith('JOB:'): func, args, kwdargs = cPickle.loads(msg[4:]) @@ -481,7 +688,10 @@ def worker(host, port): if read(client_socket, 10) != 'OK': break gc.collect() + elif msg == 'PING:': + write(client_socket, 'OK') elif msg == 'STOP:': + client_socket.shutdown(socket.SHUT_RDWR) return 0 elif not msg: time.sleep(1) @@ -490,21 +700,23 @@ def worker(host, port): return 1 def free_spirit(path): - func, args, kwdargs = cPickle.load(open(binascii.unhexlify(path), 'rb')) + func, args, kwdargs = cPickle.load(open(path, 'rb')) try: os.unlink(path) except: pass - PARALLEL_FUNCS[func](*args, **kwdargs) + func, kargs = get_func(func)[:2] + kargs.update(kwdargs) + func(*args, **kargs) def main(args=sys.argv): args = args[1].split(':') if len(args) == 1: - free_spirit(args[0].replace("'", '')) + free_spirit(binascii.unhexlify(re.sub(r'[^a-f0-9A-F]', '', args[0]))) else: worker(args[0].replace("'", ''), int(args[1])) return 0 if __name__ == '__main__': sys.exit(main()) - \ No newline at end of file + diff --git a/src/calibre/terminfo.py b/src/calibre/terminfo.py index 2ed03a3077..121f5fcfd1 100644 --- a/src/calibre/terminfo.py +++ b/src/calibre/terminfo.py @@ -1,6 +1,6 @@ __license__ = 'GPL v3' __copyright__ = '2008, Kovid Goyal ' -import sys, re +import sys, re, os """ Get information about the terminal we are running in """ @@ -94,7 +94,7 @@ class TerminalController: except: return # If the stream isn't a tty, then assume it has no capabilities. - if hasattr(sys, 'in_worker') or not hasattr(term_stream, 'isatty') or not term_stream.isatty(): return + if os.environ.get('CALIBRE_WORKER', None) is not None or not hasattr(term_stream, 'isatty') or not term_stream.isatty(): return # Check the terminal type. If we fail, then assume that the # terminal has no capabilities. diff --git a/src/calibre/trac/plugins/download.py b/src/calibre/trac/plugins/download.py index fe66dad363..ed9a8483a0 100644 --- a/src/calibre/trac/plugins/download.py +++ b/src/calibre/trac/plugins/download.py @@ -37,7 +37,6 @@ class Distribution(object): ('dbus-python', '0.82.2', 'dbus-python', 'python-dbus', 'dbus-python'), ('convertlit', '1.8', 'convertlit', None, None), ('lxml', '1.3.3', 'lxml', 'python-lxml', 'python-lxml'), - ('genshi', '0.4.4', 'genshi', 'python-genshi', 'python-genshi'), ('help2man', '1.36.4', 'help2man', 'help2man', 'help2man'), ] @@ -81,9 +80,8 @@ class Distribution(object): self.command = cmd.strip() easy_install = 'easy_install' if os == 'debian': - self.command += '\n'+prefix + 'cp -R /usr/share/pycentral/fonttools/site-packages/FontTools* /usr/lib/python2.5/site-packages/' easy_install = 'easy_install-2.5' - self.command += '\n'+prefix+easy_install+' -U TTFQuery calibre \n'+prefix+'calibre_postinstall' + self.command += '\n'+prefix+easy_install+' -U calibre \n'+prefix+'calibre_postinstall' try: self.manual = Markup(self.MANUAL_MAP[os]) except KeyError: @@ -231,7 +229,7 @@ If not, head over to \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-06-15 22:20+0000\n" +"X-Launchpad-Export-Date: 2008-07-02 15:52+0000\n" "X-Generator: Launchpad (build Unknown)\n" "Generated-By: pygettext.py 1.5\n" -#: /home/kovid/work/calibre/src/calibre/__init__.py:96 +#: /home/kovid/work/calibre/src/calibre/__init__.py:133 msgid "%sUsage%s: %s\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/__init__.py:133 +#: /home/kovid/work/calibre/src/calibre/__init__.py:170 msgid "Created by " msgstr "" @@ -31,6 +31,10 @@ msgstr "" 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 "" @@ -42,8 +46,14 @@ msgid "" msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:76 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:271 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:677 +#: /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 "" @@ -66,7 +76,7 @@ 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:401 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:409 msgid "Publisher" msgstr "" @@ -151,58 +161,77 @@ msgid "" "HTML or CSS." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:129 +#: /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:135 +#: /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:137 +#: /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:139 +#: /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:141 +#: /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:145 +#: /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:149 +#: /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:153 +#: /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:157 -msgid "" -"Prevent the automatic insertion of page breaks before detected chapters." +#: /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:161 +#: /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:164 +#: /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 " @@ -213,12 +242,12 @@ msgid "" "has only a few elements." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:174 +#: /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:176 +#: /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 " @@ -226,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:179 +#: /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:182 +#: /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:184 +#: /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:186 +#: /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:189 +#: /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 " @@ -252,33 +281,33 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:197 +#: /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:200 +#: /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:203 +#: /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:207 +#: /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:209 +#: /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:211 +#: /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:213 +#: /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 " @@ -334,95 +363,95 @@ msgstr "" msgid "Fetching of recipe failed: " msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:309 +#: /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:311 +#: /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:333 +#: /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:349 +#: /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:366 +#: /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:380 +#: /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:518 -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:531 +#: /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:523 +#: /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:543 +#: /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:587 +#: /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:929 +#: /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:967 +#: /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:982 +#: /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:1687 +#: /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:1689 +#: /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:1711 +#: /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:1741 +#: /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:1781 +#: /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:1784 +#: /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:1913 +#: /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:1919 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1982 msgid "" "Usage: %prog [options] mybook.html\n" "\n" @@ -486,11 +515,11 @@ msgstr "" msgid "Convert LRS to LRS, useful for debugging." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:454 +#: /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:579 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:580 msgid "" "%prog [options] mybook.lrf\n" "\n" @@ -499,52 +528,52 @@ msgid "" "\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:586 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:18 +#: /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:588 +#: /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:590 +#: /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:592 +#: /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:594 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:22 +#: /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:597 +#: /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:600 +#: /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:604 +#: /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:606 +#: /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:608 +#: /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:610 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:611 msgid "Don't know what this is for" msgstr "" @@ -607,11 +636,11 @@ msgid "" "%prog converts mybook.txt to mybook.lrf" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:20 +#: /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:24 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:27 msgid "Set the comment" msgstr "" @@ -677,11 +706,11 @@ msgid "" "Fetch a cover image for the book identified by ISBN from LibraryThing.com\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/lit.py:747 +#: /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:754 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/lit.py:758 msgid "Cover saved to" msgstr "" @@ -693,19 +722,19 @@ msgstr "" msgid "No filename specified." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:304 +#: /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:306 +#: /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:325 +#: /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:327 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:364 msgid "OEB ebook created in" msgstr "" @@ -713,18 +742,18 @@ msgstr "" #: /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:268 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:396 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:747 +#: /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:512 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:285 +#: /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:239 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:246 msgid "Comments" msgstr "" @@ -743,144 +772,148 @@ msgstr "" msgid "Choose Format" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:22 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:23 msgid "Basic" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:23 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:24 msgid "Advanced" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:97 +#: /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:97 +#: /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:97 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:100 +#: /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:100 +#: /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:112 +#: /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:112 +#: /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:198 -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:264 +#: /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:199 +#: /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:200 +#: /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:201 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:209 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:211 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:494 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:280 +#: /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:291 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:295 +#: /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:230 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:232 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:233 -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:257 -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:263 -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:265 +#: /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:202 +#: /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:203 +#: /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:204 +#: /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:205 +#: /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:206 -msgid "&Priority for conversion jobs:" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:207 -msgid "Frequently used directories" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:208 -msgid "Add a directory to the frequently used directories list" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:210 -msgid "Remove a directory from the frequently used directories list" -msgstr "" - #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:212 -msgid "Select visible &columns in library view" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:213 msgid "Toolbar" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:214 +#: /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:215 +#: /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:216 +#: /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:217 +#: /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:218 +#: /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 "Free unused diskspace from the database" +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:221 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:226 msgid "&Metadata from file name" msgstr "" @@ -889,9 +922,9 @@ msgid "ERROR" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:37 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:273 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:397 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:748 +#: /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 "" @@ -903,19 +936,23 @@ msgstr "" msgid "ISBN" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:105 +#: /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:106 +#: /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:141 +#: /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:141 +#: /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 "" @@ -935,7 +972,7 @@ msgid "" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata_ui.py:80 -msgid "&Access Key;" +msgid "&Access Key:" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata_ui.py:81 @@ -951,7 +988,7 @@ 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:30 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/job_view_ui.py:31 msgid "Details of job" msgstr "" @@ -959,6 +996,10 @@ msgstr "" 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 "" @@ -967,435 +1008,454 @@ msgstr "" msgid "&Stop selected job" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:57 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:289 +#: /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:59 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:290 +#: /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:61 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:291 +#: /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:63 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:292 +#: /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:89 +#: /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:90 +#: /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:94 +#: /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:102 +#: /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:105 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:161 +#: /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:171 +#: /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:172 +#: /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:180 +#: /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:181 +#: /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:187 +#: /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:253 +#: /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:254 +#: /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:255 +#: /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:256 +#: /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:289 +#: /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:290 +#: /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:291 +#: /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:292 +#: /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:300 +#: /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:400 +#: /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:488 +#: /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:489 +#: /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:490 +#: /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:491 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:292 +#: /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:492 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:293 +#: /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:493 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:294 +#: /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:495 +#: /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:496 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:260 +#: /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:497 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:261 +#: /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:498 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:110 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:262 +#: /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:499 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:501 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:111 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:263 +#: /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:500 +#: /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:502 -#: /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:270 +#: /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:503 -#: /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:271 +#: /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:504 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:272 +#: /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:505 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:121 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:273 +#: /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:506 -#: /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:276 +#: /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:507 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:508 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:125 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:126 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:277 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:278 +#: /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:509 -#: /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:281 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:282 +#: /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:511 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:283 +#: /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:513 +#: /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:514 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:521 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:523 +#: /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:515 +#: /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:516 +#: /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:517 +#: /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:518 +#: /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:519 +#: /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:520 +#: /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:522 +#: /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:524 +#: /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:525 +#: /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:526 +#: /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:527 +#: /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:528 +#: /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:529 +#: /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:530 +#: /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:531 +#: /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:532 +#: /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:533 +#: /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:534 +#: /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:535 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:537 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:539 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:541 +#: /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:536 +#: /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:538 +#: /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:540 +#: /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:542 +#: /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:543 +#: /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:544 +#: /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:545 +#: /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:546 +#: /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:547 +#: /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:548 +#: /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:549 +#: /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:550 +#: /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:551 +#: /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:552 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:574 msgid "" "\n" "\n" +"\n" "

      " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:108 +#: /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:109 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:259 +#: /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:112 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:264 +#: /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:113 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:265 +#: /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:114 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:266 +#: /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:115 -#: /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:267 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:268 +#: /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:117 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:269 +#: /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:120 +#: /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:122 +#: /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:123 +#: /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 "" @@ -1422,49 +1482,44 @@ msgstr "" msgid "You must specify the ISBN identifier for this book." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:258 +#: /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:274 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:275 -msgid "Open Tag Editor" -msgstr "" - -#: /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:277 msgid "Remove unused series (Series that have no books)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:284 +#: /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:286 +#: /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:287 +#: /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:288 +#: /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:290 +#: /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:296 +#: /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:297 +#: /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:298 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:296 msgid "Change password" msgstr "" @@ -1493,13 +1548,13 @@ msgid "Tag" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search.py:18 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:244 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:403 +#: /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:681 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:689 msgid "Format" msgstr "" @@ -1607,95 +1662,95 @@ 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:96 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:218 +#: /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:91 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:99 +#: /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:109 +#: /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:110 +#: /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:114 +#: /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:115 +#: /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:120 +#: /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:121 +#: /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:162 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:171 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:194 -msgid "Invalid input" -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 "

      Could not create recipe. Error:
      %s" +msgid "Invalid input" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:178 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:200 -msgid "Replace recipe?" +#: /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:187 +#: /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:187 +#: /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:212 +#: /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:213 +#: /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:214 +#: /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:215 +#: /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:216 +#: /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:217 +#: /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:219 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:215 msgid "" "\n" +"\n" "

      " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:108 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:114 msgid "Edit Meta information" msgstr "Editar Meta-informació" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:109 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:259 +#: /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 "Meta-informació" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:112 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:264 +#: /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 "&Ordena autors: " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:113 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:265 +#: /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." @@ -1545,32 +1605,39 @@ msgstr "" "Especifiqueu com s'ha d'ordenar l'autor(s) d'aquest llibre. Per " "exemple,ordena Vicent A. Estellés com a Estellés, Vicent A." -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:114 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:266 +#: /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 "&Valoració:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:115 -#: /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:267 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:268 +#: /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 "Valora aquest llibre: 0-5 estreles" -#: /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:269 +#: /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 " estreles" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:120 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:126 msgid "Add Ta&gs: " msgstr "Afe&geix les etiquetes: " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:122 +#: /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:123 +#: /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 "" @@ -1597,50 +1664,45 @@ msgstr "No puc aconseguir la coberta" msgid "You must specify the ISBN identifier for this book." msgstr "Cal especificar un ISBN correcte per al llibre." -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:258 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:256 msgid "Edit Meta Information" msgstr "Edita la meta-informació" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:274 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:275 -msgid "Open Tag Editor" -msgstr "" - -#: /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:277 msgid "Remove unused series (Series that have no books)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:284 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:282 msgid "IS&BN:" msgstr "IS&BN:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:286 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:284 msgid "Fetch metadata from server" msgstr "Recull metadades des del servidor" -#: /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:285 msgid "Available Formats" msgstr "Formats disponibles" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:288 +#: /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 "Afegir un nou format per a aquest llibre a la base de dades" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:290 +#: /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 "" "Elimina els formats seleccionats per a aquest llibre de la base de dades." -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:296 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:294 msgid "Fetch cover image from server" msgstr "Recolliu la coberta des del servidor" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:297 +#: /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:298 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:296 msgid "Change password" msgstr "" @@ -1669,13 +1731,13 @@ msgid "Tag" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search.py:18 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:244 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:403 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:251 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:411 msgid "Series" msgstr "Sèries" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search.py:19 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:681 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:689 msgid "Format" msgstr "Format" @@ -1783,95 +1845,95 @@ 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:96 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:218 +#: /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:91 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:99 +#: /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:109 +#: /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:110 +#: /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:114 +#: /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:115 +#: /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:120 +#: /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:121 +#: /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:162 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:171 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:194 -msgid "Invalid input" -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 "

      Could not create recipe. Error:
      %s" +msgid "Invalid input" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:178 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:200 -msgid "Replace recipe?" +#: /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:187 +#: /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:187 +#: /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:212 +#: /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:213 +#: /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:214 +#: /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:215 +#: /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:216 +#: /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:217 +#: /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:219 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:215 msgid "" "\n" +#~ "

      " +#~ msgstr "" +#~ "\n" +#~ "\n" +#~ "

      " + +#: /home/kovid/work/calibre/src/calibre/__init__.py:133 msgid "%sUsage%s: %s\n" msgstr "%sBenutzung%s: %s\n" -#: /home/kovid/work/calibre/src/calibre/__init__.py:133 +#: /home/kovid/work/calibre/src/calibre/__init__.py:170 msgid "Created by " msgstr "Erstellt von " @@ -71,7 +103,11 @@ msgstr "Erstellt von " #: /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 "Konnte das %s Laufwerk nicht finden. Neustart versuchen." +msgstr "Konnte das Laufwerk %s nicht finden. Versuchen Sie einen Neustart." + +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:355 +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 msgid "Set the title. Default: filename." @@ -86,8 +122,14 @@ msgstr "" "angegeben werden. Voreinstellung: %default" #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:76 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:271 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:677 +#: /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 "Unbekannt" @@ -110,7 +152,7 @@ msgstr "Sortierung nach Autor" #: /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:401 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:409 msgid "Publisher" msgstr "Herausgeber" @@ -169,7 +211,7 @@ msgstr "Paragraphen durch Leerzeilen trennen." #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:107 msgid "Add a header to all the pages with title and author." -msgstr "Kopfzeile mit Titel und Autornamen für alle Seiten einfügen." +msgstr "Kopfzeile mit Titel und Autor für alle Seiten einfügen." #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:109 msgid "" @@ -222,7 +264,7 @@ msgid "" msgstr "" "Inhalt schwarz-weiß rendern anstatt in den in HTML oder CSS angegeben Farben." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:129 +#: /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 " @@ -232,23 +274,39 @@ 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:135 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:134 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:137 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:136 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:139 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:138 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:141 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:140 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:145 +#: /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 "" +"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 +msgid "" +"Multiply the size of text in rendered tables by this factor. Default is " +"%default" +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 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 " @@ -258,26 +316,23 @@ msgstr "" "dass Verknüpfungen ignoriert werden. Ein negativer Wert bedeutet, dass alle " " Elemente ignoriert werden." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:149 +#: /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 "" -"Ein regulärer Ausdruck. tags, deren Verknüpfungen ignoriert werden. " +"Ein regulärer Ausdruck. Elemente, deren Verknüpfungen ignoriert werden. " "Voreinstellung %default" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:153 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:157 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:157 -msgid "" -"Prevent the automatic insertion of page breaks before detected chapters." -msgstr "" -"Automatisches Einfügen von Seitenumbrüchen vor ermittelten Kapiteln " -"verhindern." - #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:161 +msgid "Prevent the automatic detection chapters." +msgstr "Automatische Erkennung von Kapiteln verhindern." + +#: /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" @@ -285,7 +340,20 @@ 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:164 +#: /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 "" +"Erkenne einen Kapitelanfang anhand des Elements mit dem angegebenen " +"Attribut. Das Format dieser Option ist tagname regexp,attribute " +"name,attribute value regexp. Um zum Beispiel alle \"header\" (\"h\") " +"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 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 " @@ -304,14 +372,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:174 +#: /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 "" "Seitenumbruch erzwingen vor Elementen, deren Namen diesem regulären Ausdruck " "entsprechen." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:176 +#: /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 " @@ -324,16 +392,16 @@ msgstr "" "class=\"chapter\" anzupassen, verwenden Sie \"h\\d,class,chapter\". " "Voreinstellung ist %default" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:179 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:184 msgid "Add detected chapters to the table of contents." -msgstr "Ermittelte Kapitel zum Inhaltsverzeichnis hinzufügen." +msgstr "Die ermittelten Kapitel zum Inhaltsverzeichnis hinzufügen." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:182 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:187 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:184 +#: /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." @@ -341,11 +409,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:186 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:191 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:189 +#: /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 " @@ -359,27 +427,27 @@ msgstr "" "angegeben: --serif-family \"Times New Roman\"\n" " " -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:197 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:202 msgid "The serif family of fonts to embed" msgstr "Serife Schriftartfamilie einbetten" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:200 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:205 msgid "The sans-serif family of fonts to embed" msgstr "Serifenlose Schriftartfamilie einbetten" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:203 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:208 msgid "The monospace family of fonts to embed" msgstr "Nichtproportionale Schriftartfamilie einbetten" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:207 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:212 msgid "Be verbose while processing" msgstr "Mehr Wörter bei der weiteren Verarbeitung angeben." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:209 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:214 msgid "Convert to LRS" msgstr "Zu LRS konvertieren" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:211 +#: /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." @@ -388,7 +456,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:213 +#: /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 " @@ -446,7 +514,7 @@ msgstr "" "%prog [options] dateiname.fb2\n" "\n" "\n" -"%prog ckonvertiert dateiname.fb2 in dateiname.lrf" +"%prog konvertiert dateiname.fb2 in dateiname.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 @@ -465,56 +533,56 @@ msgstr "Einstellungen für html2lrf" msgid "Fetching of recipe failed: " msgstr "Abruf des Rezepts misslungen: " -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:309 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:315 msgid "\tBook Designer file detected." msgstr "\tBook Designer Datei erkannt." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:311 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:317 msgid "\tParsing HTML..." msgstr "\tAnalysiere HTML..." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:333 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:339 msgid "\tBaen file detected. Re-parsing..." msgstr "\tBaen Datei erkannt. Analysiere erneut..." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:349 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:355 msgid "Written preprocessed HTML to " msgstr "Vorverarbeitetes HTML gespeichert unter " -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:366 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:372 msgid "Processing %s" msgstr "Verarbeite %s" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:380 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:386 msgid "\tConverting to BBeB..." msgstr "\tKonvertiere in BBeB..." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:518 -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:531 +#: /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 "Konnte Datei nicht analysieren: %s" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:523 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:534 msgid "%s is an empty file" msgstr "%s ist eine leere Datei" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:543 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:554 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:587 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:598 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:929 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:943 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:967 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:981 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:982 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:996 msgid "" "Could not process image: %s\n" "%s" @@ -522,14 +590,14 @@ msgstr "" "Konnte Bild nicht verarbeiten: %s\n" "%s" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1687 +#: /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 "" "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:1689 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1745 msgid "" "Bad table:\n" "%s" @@ -537,11 +605,11 @@ msgstr "" "Schlechte Tabelle:\n" "%s" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1711 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1767 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:1741 +#: /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." @@ -549,19 +617,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:1781 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1839 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:1784 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1842 msgid "Cannot read from: %s" msgstr "Lesen nicht möglich von: %s" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1913 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1976 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:1919 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1982 msgid "" "Usage: %prog [options] mybook.html\n" "\n" @@ -640,11 +708,11 @@ msgstr "Mit mehr Wörtern fortfahren" msgid "Convert LRS to LRS, useful for debugging." msgstr "Konvertierung von LRS in LRS, hilfreich bei der Fehlersuche." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:454 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:455 msgid "Invalid LRF file. Could not set metadata." msgstr "Ungültige LRF Datei. Konnte Meta-Daten nicht festlegen." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:579 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:580 msgid "" "%prog [options] mybook.lrf\n" "\n" @@ -658,45 +726,45 @@ msgstr "" "Zeigt/verändert die Metadaten in einer LRF Datei.\n" "\n" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:586 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:18 +#: /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 "Geben Sie den Buchtitel an" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:588 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:589 msgid "Set sort key for the title" msgstr "Sortierung nach Titel" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:590 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:591 msgid "Set the author" msgstr "Geben Sie den Autor an" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:592 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:593 msgid "Set sort key for the author" msgstr "Sortierung nach Autor" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:594 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:22 +#: /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 "Die Kategorie dieses Buches ... (Z. B.: Geschichte)" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:597 +#: /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 "" "Pfad zu einer Grafik, die als Thumbnail für diese Datei verwendet werden soll" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:600 +#: /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 "" "Pfad zu einer Text Datei, deren Inhalt als Bemerkung in der LRF Datei " "gespeichert wird" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:604 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:605 msgid "Extract thumbnail from LRF file" msgstr "Thumbnail von LRF Datei extrahieren" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:606 +#: /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." @@ -705,11 +773,11 @@ msgstr "" "festgelegt ist, werden Suchmethoden verwendet, um das Umschlagbild zu " "erraten." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:608 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:609 msgid "Set book ID" msgstr "Geben Sie die Buch ID an" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:610 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:611 msgid "Don't know what this is for" msgstr "Was weiß ich, für was das ist" @@ -794,11 +862,11 @@ msgstr "" "\n" "%prog konvertiert dateiname.txt in dateiname.lrf" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:20 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:23 msgid "Set the authors" msgstr "Gebe Autoren ein" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:24 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:27 msgid "Set the comment" msgstr "Gebe Kommentar ein" @@ -882,11 +950,11 @@ msgstr "" "Umschlagbild des Buches mit der angegebenen ISBN von LibraryThing.com " "abrufen\n" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/lit.py:747 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/lit.py:751 msgid "Usage: %s file.lit" msgstr "Benutzung: %s dateiname.lit" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/lit.py:754 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/lit.py:758 msgid "Cover saved to" msgstr "Umschlagbild gespeichert unter" @@ -898,19 +966,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:304 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:341 msgid "%prog [options] myebook.mobi" msgstr "%prog [options] dateiname.mobi" -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:306 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:343 msgid "Output directory. Defaults to current directory." msgstr "Ausgabeverzeichnis. Voreinstellung ist akutelles Verzeichnis." -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:325 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:362 msgid "Raw MOBI HTML saved in" msgstr "Original MOBI HTML gespeichert in" -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:327 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:364 msgid "OEB ebook created in" msgstr "OEB eBook erstellt in" @@ -918,18 +986,18 @@ msgstr "OEB eBook erstellt in" #: /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:268 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:396 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:747 +#: /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 "Titel" #: /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:512 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:285 +#: /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:239 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:246 msgid "Comments" msgstr "Bemerkung" @@ -948,82 +1016,90 @@ msgstr "TextLabel" msgid "Choose Format" msgstr "Format wählen" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:22 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:23 msgid "Basic" msgstr "Einfach" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:23 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:24 msgid "Advanced" msgstr "Erweitert" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:97 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:102 msgid "
      Must be a directory." msgstr "
      Muss ein Verzeichnis sein." -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:97 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:102 msgid "Invalid database location " msgstr "Ortsangabe der Datenbank ungültig " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:97 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:100 +#: /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 "Ortsangabe der Datenbank ungültig" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:100 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:105 msgid "Invalid database location.
      Cannot write to " msgstr "Ortsangabe der Datenbank ungültig.
      Speichern nicht möglich " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:112 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:117 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:112 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:117 msgid "Compacting..." msgstr "Komprimiere Datenbank..." -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:198 -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:264 +#: /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 "Konfiguration" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:199 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:203 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:200 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:204 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:201 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:209 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:211 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:494 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:280 +#: /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:291 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:295 +#: /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:230 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:232 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:233 -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:257 -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:263 -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:265 +#: /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:202 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:206 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:203 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:207 +msgid "Format for &single file save:" +msgstr "Format zur &Speicherung einer Datei:" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:208 +msgid "&Priority for conversion jobs:" +msgstr "&Priorität der Konvertierungsaufträge:" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:209 msgid "Default network &timeout:" msgstr "Voreinstellung für Zei&tüberschreitung bei Netzwerkverbindungen:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:204 +#: /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)" @@ -1031,65 +1107,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:205 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:211 msgid " seconds" msgstr " Sekunden" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:206 -msgid "&Priority for conversion jobs:" -msgstr "&Priorität der Konvertierungsaufträge:" +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:212 +msgid "Toolbar" +msgstr "Symbolleiste" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:207 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:213 +msgid "Large" +msgstr "Groß" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:214 +msgid "Medium" +msgstr "Mittel" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:215 +msgid "Small" +msgstr "Klein" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:216 +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 +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 +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 msgid "Frequently used directories" msgstr "Häufig benutzte Verzeichnisse" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:208 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:220 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:210 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:222 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:212 -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:213 -msgid "Toolbar" -msgstr "Symbolleiste" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:214 -msgid "Large" -msgstr "Groß" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:215 -msgid "Medium" -msgstr "Mittel" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:216 -msgid "Small" -msgstr "Klein" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:217 -msgid "&Button size in toolbar" -msgstr "&Button Größe in der Symbolleiste" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:218 -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:219 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:224 msgid "Free unused diskspace from the database" msgstr "Freier unbenutzter Festplattenspeicher der Datenbank" -#: /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 "&Compact database" msgstr "Datenbank &komprimieren" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:221 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:226 msgid "&Metadata from file name" msgstr "&Meta-Daten aus dem Dateinamen" @@ -1098,9 +1170,9 @@ msgid "ERROR" msgstr "FEHLER" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:37 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:273 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:397 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:748 +#: /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 "Autor(en)" @@ -1112,21 +1184,25 @@ msgstr "Sortierung nach Autor" msgid "ISBN" msgstr "ISBN" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:105 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:104 msgid "Cannot connect" msgstr "Verbindung nicht möglich" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:106 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:105 msgid "You must specify a valid access key for isbndb.com" msgstr "" "Sie müssen einen gültigen Zugangsschlüssel (access key) für isbndb.com " "angeben" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:141 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:139 +msgid "Error fetching metadata" +msgstr "Fehler beim Abrufen der Meta-Daten" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:144 msgid "No metadata found" msgstr "Keine Meta-Daten gefunden" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:141 +#: /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 "" @@ -1151,8 +1227,8 @@ msgstr "" "erhalten." #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata_ui.py:80 -msgid "&Access Key;" -msgstr "&Zugriffsschlüssel:" +msgid "&Access Key:" +msgstr "Zug&angsschlüssel:" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata_ui.py:81 msgid "Fetch" @@ -1169,7 +1245,7 @@ msgstr "" "Wählen Sie aus der unten stehenden Liste das Buch, das Ihrer Ausgabe " "entspricht" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/job_view_ui.py:30 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/job_view_ui.py:31 msgid "Details of job" msgstr "Details des Auftrags" @@ -1177,6 +1253,10 @@ msgstr "Details des Auftrags" msgid "Unavailable" msgstr "Nicht verfügbar" +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/jobs.py:38 +msgid " - Jobs" +msgstr " - Aufträge" + #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/jobs_ui.py:38 msgid "Active Jobs" msgstr "Aktive Aufträge" @@ -1185,74 +1265,74 @@ msgstr "Aktive Aufträge" msgid "&Stop selected job" msgstr "Ausgewählten Auftrag &stoppen" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:57 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:289 +#: /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 "Meta-Daten" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:59 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:290 +#: /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 "Look & Feel" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:61 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:291 +#: /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 "Seiteneinrichtung" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:63 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:292 +#: /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 "Ermittlung der Kapitel" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:89 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:92 msgid "No available formats" msgstr "Keine verfügbaren Formate" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:90 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:93 msgid "Cannot convert %s as this book has no supported formats" msgstr "" "Kann %s nicht konvertieren, da dieses Buch nicht den bekannten Formaten " "entspricht" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:94 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:97 msgid "Choose the format to convert into LRF" msgstr "Wählen Sie das Format, das zu LRF konvertiert werden soll" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:102 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:105 msgid "Convert %s to LRF" msgstr "Konvertiere %s in LRF" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:105 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:161 +#: /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 "Voreinstellungen zur Konvertierung wählen" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:171 +#: /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 "Lesen nicht möglich" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:172 +#: /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 "Sie haben nicht die nötigen Rechte, um diese Datei zu lesen: " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:180 +#: /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 "Fehler beim Lesen der Datei" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:181 +#: /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 "

      Es trat ein Fehler beim Lesen dieser Datei auf:
      " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:187 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:189 msgid " is not a valid picture" msgstr " ist kein gültiges Bild" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:253 +#: /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:" @@ -1260,11 +1340,11 @@ msgstr "" "Datei vorbearbeiten bevor sie zu LRF konvertiert wird. Das ist hilfreich, " "wenn Sie wissen, dass die Datei von einer der folgenden Bezugsquellen stammt:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:254 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:256 msgid "

      1. baen - Books from BAEN Publishers
      2. " msgstr "
        1. baen - Bücher von BAEN Publishers
        2. " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:255 +#: /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. " @@ -1272,11 +1352,11 @@ msgstr "" "
        5. pdftohtml - HTML Dateien, die mit dem Programm pdftohtml erstellt " "wurden
        6. " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:256 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:258 msgid "
        7. book-designer - HTML0 files from Book Designer
        8. " msgstr "
        9. book-designer - HTML Dateien von Book Designer
        10. " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:289 +#: /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." @@ -1285,7 +1365,7 @@ msgstr "" "Daten werden sowohl in der Datenbank als auch in der erstellten LRF Datei " "aktualisiert." -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:290 +#: /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." @@ -1293,7 +1373,7 @@ msgstr "" "Aussehen der erstellten LRF Datei durch die Angabe von Schriftgrößen und " "Wortabständen angleichen." -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:291 +#: /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." @@ -1301,69 +1381,69 @@ msgstr "" "Seiteneinstellungen wie Ränder und die Bildschirmgröße des Zielgeräts " "angeben." -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:292 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:294 msgid "Fine tune the detection of chapter and section headings." msgstr "Feineinstellung der Erkennung von Kapitel- und Absatzüberschriften." -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:300 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:303 msgid "No help available" msgstr "Keine Hilfe verfügbar" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:400 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:404 msgid "Bulk convert ebooks to LRF" msgstr "eBooks auf einmal zu LRF konvertieren" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:488 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:507 msgid "Convert to LRF" msgstr "Zu LRF konvertieren" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:489 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:508 msgid "Category" msgstr "Kategorie" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:490 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:509 msgid "Options" msgstr "Auswahlmöglichkeiten" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:491 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:292 +#: /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 "Umschlagbild" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:492 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:293 +#: /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 "&Umschlagbild ändern:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:493 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:294 +#: /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 "Nach Umschlagbild durchsuchen..." -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:495 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:514 msgid "Use cover from &source file" msgstr "Um&schlagbild der Quelldatei verwenden" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:496 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:260 +#: /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 "&Titel: " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:497 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:261 +#: /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 "Titel dieses Buches ändern" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:498 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:110 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:262 +#: /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 "&Autor(en): " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:499 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:501 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:111 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:263 +#: /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" @@ -1371,30 +1451,30 @@ msgstr "" "Autor dieses Buches ändern. Mehrere Autoren sollten durch Kommata getrennt " "werden" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:500 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:519 msgid "Author So&rt:" msgstr "So&rtierung nach Autor:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:502 -#: /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:270 +#: /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 "&Herausgeber: " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:503 -#: /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:271 +#: /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 "Herausgeber dieses Buches ändern" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:504 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:272 +#: /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 "&Etiketten: " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:505 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:121 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:273 +#: /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." @@ -1403,183 +1483,195 @@ msgstr "" "Büchern.

          Sie können für Etiketten durch Kommata getrennte Wörter " "oder Sätze verwenden." -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:506 -#: /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:276 +#: /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 "&Serien:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:507 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:508 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:125 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:126 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:277 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:278 +#: /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 "Liste der bekannten Serien. Sie können neue Serien hinzufügen." -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:509 -#: /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:281 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:282 +#: /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 "Index der Serien." -#: /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:283 +#: /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 "Buch " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:513 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:532 msgid "Base &font size:" msgstr "Ausgangsschrift&größe:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:514 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:521 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:523 +#: /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 " Punkt" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:515 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:534 msgid "Embedded Fonts" msgstr "Eingebundene Schriften" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:516 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:535 msgid "&Serif:" msgstr "&Serif:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:517 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:536 msgid "S&ans-serif:" msgstr "S&ans-serif:" -#: /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:537 msgid "&Monospace:" msgstr "&Monospace:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:519 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:538 msgid "Source en&coding:" msgstr "En&codierung der Quelldatei:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:520 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:539 msgid "Minimum &indent:" msgstr "E&inrücken mindestens:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:522 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:541 msgid "&Word spacing:" msgstr "&Wortabstand:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:524 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:543 msgid "Enable auto &rotation of images" msgstr "Automatische &Rotation von Bildern einschalten" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:525 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:544 msgid "Insert &blank lines between paragraphs" msgstr "&Leerzeilen zwischen Paragraphen einfügen" -#: /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:545 msgid "Ignore &tables" msgstr "&Tabellen ignorieren" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:527 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:546 msgid "Ignore &colors" msgstr "Farben nicht bea&chten" -#: /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:547 msgid "&Preprocess:" msgstr "&Vorbearbeiten:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:529 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:548 msgid "Header" msgstr "Kopfzeile" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:530 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:549 msgid "&Show header" msgstr "Kopfzeile an&zeigen" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:531 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:550 msgid "&Header format:" msgstr "&Kopfzeilenformat:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:532 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:551 msgid "Override
          CSS" msgstr "CSS
          überschreiben" -#: /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:552 msgid "&Profile:" msgstr "&Profil:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:534 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:553 msgid "&Left Margin:" msgstr "&Linker Rand:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:535 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:537 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:539 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:541 +#: /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 " Pixel" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:536 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:555 msgid "&Right Margin:" msgstr "&Rechter Rand:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:538 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:557 msgid "&Top Margin:" msgstr "&Oberer Rand:" -#: /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:559 msgid "&Bottom Margin:" msgstr "&Unterer Rand:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:542 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:561 +msgid "&Convert tables to images (good for large/complex tables)" +msgstr "&Konvertiere Tabellen in Bilder (gut bei großen/komlexen Tabellen)" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:562 +msgid "&Multiplier for text size in rendered tables:" +msgstr "&Faktor der Textgröße in gerenderten Tabellen:" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:563 msgid "Title based detection" msgstr "Auf Titel basierende Ermittlung" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:543 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:564 msgid "&Disable chapter detection" msgstr "Kapitel Ermittlung &deaktivieren" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:544 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:565 msgid "&Regular expression:" msgstr "&Regulärer Ausdruck:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:545 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:566 msgid "Add &chapters to table of contents" msgstr "&Kapitel zum Inhaltsverzeichnis hinzufügen" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:546 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:567 msgid "Don't add &links to the table of contents" msgstr "Keine &Links zum Inhaltsverzeichnis hinzufügen" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:547 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:568 msgid "Tag based detection" msgstr "Auf Etiketten basierende Ermittlung" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:548 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:569 msgid "&Page break before tag:" msgstr "&Seitenumbruch vor Element:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:549 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:570 msgid "&Force page break before tag:" msgstr "Seitenumbruch vor Element &erzwingen:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:550 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:571 msgid "Force page break before &attribute:" msgstr "Seitenumbruch vor &Attribut erzwingen:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:551 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:572 +msgid "Detect chapter &at tag:" +msgstr "Erkenne K&apitel bei Element:" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:573 msgid "Help on item" msgstr "Hilfe für das jeweilige Objekt" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:552 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:574 msgid "" "\n" "\n" +"\n" "

          " @@ -1589,28 +1681,28 @@ msgstr "" "\n" +"\n" "

          " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:108 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:114 msgid "Edit Meta information" msgstr "Meta-Informationen bearbeiten" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:109 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:259 +#: /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 "Meta-Informationen" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:112 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:264 +#: /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 "S&ortierung nach Autor: " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:113 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:265 +#: /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." @@ -1618,32 +1710,39 @@ msgstr "" "Geben Sie an, wie der Autor dieses Buches sortiert werden soll. \"Charles " "Dickens\" zum Beispiel als \"Dickens, Charles\"." -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:114 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:266 +#: /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 "&Bewertung:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:115 -#: /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:267 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:268 +#: /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 "Bewertung dieses Buches: 0-5 Sterne" -#: /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:269 +#: /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 " Sterne" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:120 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:126 msgid "Add Ta&gs: " msgstr "&Etiketten hinzufügen: " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:122 +#: /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 "Etiketten-Editor öffnen" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:130 msgid "&Remove tags:" msgstr "Etiketten entfe&rnen:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:123 +#: /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 "" "Durch getrennte Liste der Etiketten, die von den Büchern entfernt werden. " @@ -1674,50 +1773,45 @@ msgstr "Kann kein Umschlagbild abrufen" msgid "You must specify the ISBN identifier for this book." msgstr "Sie müssen die ISBN für dieses Buch angeben." -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:258 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:256 msgid "Edit Meta Information" msgstr "Meta-Informationen bearbeiten" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:274 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:275 -msgid "Open Tag Editor" -msgstr "Etiketten-Editor öffnen" - -#: /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:277 msgid "Remove unused series (Series that have no books)" msgstr "Unbenutzte Serien entfernen (Serien ohne Bücher)" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:284 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:282 msgid "IS&BN:" msgstr "IS&BN:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:286 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:284 msgid "Fetch metadata from server" msgstr "Meta-Daten vom Server abrufen" -#: /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:285 msgid "Available Formats" msgstr "Verfügbare Formate" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:288 +#: /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 "Ein neues Format für dieses Buch zur Datenbank hinzufügen" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:290 +#: /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 "Markierte Formate dieses Buches aus der Datenbank löschen" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:296 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:294 msgid "Fetch cover image from server" msgstr "Umschlagbild vom Server abrufen" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:297 +#: /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 "" "Benutzername und/oder Passwort Ihres Kontos bei LibraryThing.com ändern" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:298 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:296 msgid "Change password" msgstr "Passwort ändern" @@ -1746,13 +1840,13 @@ msgid "Tag" msgstr "Etikett" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search.py:18 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:244 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:403 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:251 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:411 msgid "Series" msgstr "Serie" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search.py:19 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:681 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:689 msgid "Format" msgstr "Format" @@ -1870,96 +1964,96 @@ msgid "Recipe for " msgstr "Rezept für " #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:86 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:96 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:218 +#: /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 "In erweiterten Modus umschalten" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:91 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:99 +#: /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 "Zum Basis Modus wechseln" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:109 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:110 msgid "Feed must have a title" msgstr "Feed benötigt einen Titel" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:110 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:111 msgid "The feed must have a title" msgstr "Feed benötigt einen Titel" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:114 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:115 msgid "Feed must have a URL" msgstr "Feed benötigt eine URL" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:115 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:116 msgid "The feed %s must have a URL" msgstr "Feed %s benötigt eine URL" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:120 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:121 msgid "Already exists" msgstr "Gibts hier schon" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:121 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:122 msgid "This feed has already been added to the recipe" msgstr "Dieser Feed wurde schon zu diesem Rezept hinzugefügt" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:162 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:171 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:194 -msgid "Invalid input" -msgstr "Ungültige Eingabe" - #: /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 "Ungültige Eingabe" + +#: /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 "

          Konnte Rezept nicht erstellen. Fehler:
          %s" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:178 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:200 +#: /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 "Rezept ersetzen?" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:179 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:201 +#: /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 "" "Es gibt schon ein erstelltes Rezept mit dem Namen %s. Soll es ersetzt werden?" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:187 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:188 msgid "Choose a recipe file" msgstr "Eine Rezept Datei auswählen" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:187 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:188 msgid "Recipes" msgstr "Rezepte" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:212 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:208 msgid "Add custom news source" msgstr "Eigene Nachrichtenquelle hinzufügen" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:213 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:209 msgid "Available user recipes" msgstr "Verfügbare Benutzer-Rezepte" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:214 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:210 msgid "Add/Update &recipe" msgstr "Rezept &hinzufügen/aktualisieren" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:215 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:211 msgid "&Remove recipe" msgstr "Rezept entfe&rnen" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:216 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:212 msgid "&Share recipe" msgstr "Rezept ver&teilen" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:217 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:213 msgid "&Load recipe from file" msgstr "Rezept aus Datei &laden" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:219 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:215 msgid "" "\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/es.po b/src/calibre/translations/es.po index 60e3560a54..0cb1067064 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-12 20:18+0000\n" -"PO-Revision-Date: 2008-06-15 08:31+0000\n" -"Last-Translator: S. Dorscht <Unknown>\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" "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-06-15 22:20+0000\n" +"X-Launchpad-Export-Date: 2008-07-02 15:52+0000\n" "X-Generator: Launchpad (build Unknown)\n" #~ msgid "" @@ -37,6 +37,12 @@ msgstr "" #~ "Expresión regular. Las marcas <a> que tengan href coincidentes, son " #~ "ignoradas. Por defecto: %default" +#~ msgid "" +#~ "Prevent the automatic insertion of page breaks before detected chapters." +#~ msgstr "" +#~ "Evita la inserción automática de saltos de página delante de los capítulos " +#~ "detectados." + #~ msgid "" #~ "Force a page break before tags whoose names match this regular expression." #~ msgstr "" @@ -57,6 +63,15 @@ msgstr "" #~ "fuents, familia\" ( --serif-family \"%s, Times New Roman\")\n" #~ " " +#~ msgid "&Access Key;" +#~ msgstr "Clave de &acceso;" + +#~ msgid "Cannot kill waiting jobs." +#~ msgstr "No se pueden detener trabajos en espera" + +#~ msgid "Job killed by user" +#~ msgstr "Trabajo detenido por el usuario" + #~ msgid "%s is not available in LRF format. Please convert it first." #~ msgstr "\"%s\" no es un archivo LRF. Conviértalo primero." @@ -139,11 +154,34 @@ msgstr "" #~ "Guardar el texto de abajo en el archivo recipe.py y enviarlo a un amigo para " #~ "permitirle también a él usar esta receta." -#: /home/kovid/work/calibre/src/calibre/__init__.py:96 +#~ msgid "" +#~ "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" " +#~ "\"http://www.w3.org/TR/REC-html40/strict.dtd\">\n" +#~ "<html><head><meta name=\"qrichtext\" content=\"1\" /><style " +#~ "type=\"text/css\">\n" +#~ "p, li { white-space: pre-wrap; }\n" +#~ "</style></head><body style=\" font-family:'DejaVu Sans'; font-size:10pt; " +#~ "font-weight:400; font-style:normal;\">\n" +#~ "<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; " +#~ "margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-" +#~ "family:'Sans Serif'; font-size:9pt;\"></p></body></html>" +#~ msgstr "" +#~ "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" " +#~ "\"http://www.w3.org/TR/REC-html40/strict.dtd\">\n" +#~ "<html><head><meta name=\"qrichtext\" content=\"1\" /><style " +#~ "type=\"text/css\">\n" +#~ "p, li { white-space: pre-wrap; }\n" +#~ "</style></head><body style=\" font-family:'DejaVu Sans'; font-size:10pt; " +#~ "font-weight:400; font-style:normal;\">\n" +#~ "<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; " +#~ "margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-" +#~ "family:'Sans Serif'; font-size:9pt;\"></p></body></html>" + +#: /home/kovid/work/calibre/src/calibre/__init__.py:133 msgid "%sUsage%s: %s\n" msgstr "%sUso%s: %s\n" -#: /home/kovid/work/calibre/src/calibre/__init__.py:133 +#: /home/kovid/work/calibre/src/calibre/__init__.py:170 msgid "Created by " msgstr "Creado por " @@ -153,6 +191,10 @@ msgstr "Creado por " msgid "Unable to detect the %s disk drive. Try rebooting." 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 "" + #: /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." @@ -166,8 +208,14 @@ msgstr "" "defecto: %default" #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:76 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:271 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:677 +#: /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 "Desconocido" @@ -190,7 +238,7 @@ msgstr "Clave de orden para el autor" #: /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:401 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:409 msgid "Publisher" msgstr "Editorial" @@ -225,6 +273,10 @@ msgid "" "option obsoletes the --font-delta option and takes precedence over it. To " "use --font-delta, set this to 0. Default: %defaultpt" msgstr "" +"Especifique el tamaño de la fuente base en puntos. Todas las fuentes serán " +"reescaladas en concordancia. Esta opción deja obsoleta la oción --font-delta " +"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 msgid "Enable autorotation of images that are wider than the screen width." @@ -296,7 +348,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:129 +#: /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 " @@ -306,23 +358,39 @@ 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:135 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:134 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:137 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:136 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:139 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:138 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:141 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:140 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:145 +#: /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 "" +"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 +msgid "" +"Multiply the size of text in rendered tables by this factor. Default is " +"%default" +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 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 " @@ -331,7 +399,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:149 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:153 msgid "" "A regular expression. <a> tags whose href matches will be ignored. Defaults " "to %default" @@ -339,18 +407,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:153 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:157 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:157 -msgid "" -"Prevent the automatic insertion of page breaks before detected chapters." -msgstr "" -"Evita la inserción automática de saltos de página delante de los capítulos " -"detectados." - #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:161 +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 msgid "" "The regular expression used to detect chapter titles. It is searched for in " "heading tags (h1-h6). Defaults to %default" @@ -358,7 +423,20 @@ 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:164 +#: /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 "" +"Detectar el comienzo de un capítulo en un elemento que contenga el atributo " +"especificado. El formato para ésta espresión es tagname regexp, nombre del " +"atributo, valor del atributo regexp. Por ejemplo, para encontrar todas las " +"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 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 " @@ -376,14 +454,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:174 +#: /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 "" "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:176 +#: /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 " @@ -395,16 +473,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:179 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:184 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:182 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:187 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:184 +#: /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." @@ -412,39 +490,44 @@ 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:186 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:191 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:189 +#: /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 "" +"Especificar familias truetype para serif, sans-serif y funetes monoespacio. " +"Éstas fuentes se integrarán en el fichero LRF. Como observación: fuentes " +"customizadas hacen que los cambios de páginas sean más lentos. Por ejemplo: -" +"-serif-family \"Times New Roman\"\n" +" " -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:197 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:202 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:200 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:205 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:203 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:208 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:207 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:212 msgid "Be verbose while processing" msgstr "Ser prolijo al procesar" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:209 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:214 msgid "Convert to LRS" msgstr "Convertir a LRS" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:211 +#: /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." @@ -452,7 +535,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:213 +#: /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 " @@ -523,56 +606,56 @@ msgstr "Opciones para controlar el comportamiento de html2rtf" msgid "Fetching of recipe failed: " msgstr "Obtención fallida de la receta: " -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:309 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:315 msgid "\tBook Designer file detected." msgstr "\tBook Designer archivo detectado." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:311 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:317 msgid "\tParsing HTML..." msgstr "\tAnalizando HTML..." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:333 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:339 msgid "\tBaen file detected. Re-parsing..." msgstr "\tBaen archivo detectado. Volver a analizar..." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:349 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:355 msgid "Written preprocessed HTML to " msgstr "HTML preprocesado escrito en " -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:366 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:372 msgid "Processing %s" msgstr "Procesando %s" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:380 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:386 msgid "\tConverting to BBeB..." msgstr "\tConversión a BBeB..." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:518 -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:531 +#: /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 "No se pudo analizar el archivo: %s" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:523 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:534 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:543 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:554 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:587 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:598 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:929 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:943 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:967 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:981 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:982 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:996 msgid "" "Could not process image: %s\n" "%s" @@ -580,14 +663,14 @@ msgstr "" "No se puedo procesar imagen: %s\n" "%s" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1687 +#: /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 "" "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:1689 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1745 msgid "" "Bad table:\n" "%s" @@ -595,11 +678,11 @@ msgstr "" "Tabla errónea:\n" "%s" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1711 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1767 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:1741 +#: /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." @@ -607,19 +690,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:1781 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1839 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:1784 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1842 msgid "Cannot read from: %s" msgstr "No se puedo leer de: %s" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1913 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1976 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:1919 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1982 msgid "" "Usage: %prog [options] mybook.html\n" "\n" @@ -699,11 +782,11 @@ msgstr "Procesado detallado" msgid "Convert LRS to LRS, useful for debugging." msgstr "Convierte LRS a LRS, útil para depurar." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:454 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:455 msgid "Invalid LRF file. Could not set metadata." msgstr "Archivo LRF no válido. No se pudo asignar metadatos." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:579 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:580 msgid "" "%prog [options] mybook.lrf\n" "\n" @@ -717,43 +800,43 @@ msgstr "" "Ver/editar los metadatos en un archivo LRF.\n" "\n" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:586 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:18 +#: /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 "Insertar el nombre del libro" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:588 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:589 msgid "Set sort key for the title" msgstr "Insertar la clave de orden por título" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:590 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:591 msgid "Set the author" msgstr "Insertar el autor" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:592 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:593 msgid "Set sort key for the author" msgstr "Insertar la clave de orden por autor" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:594 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:22 +#: /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 "Categoria a la que pertenece el libro. Por ejemplo, Historia" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:597 +#: /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 "Ruta al archivo de imagen que se utilizará como miniatura" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:600 +#: /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 "" "Ruta al archivo txt que contiene el comentaria a guardar en el archivo LRF" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:604 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:605 msgid "Extract thumbnail from LRF file" msgstr "Extraer la miniatura del archivo LRF" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:606 +#: /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." @@ -761,11 +844,11 @@ msgstr "" "Extraer portada de un archivo LRF. Nótese que el formato LRF no contiene una " "portada predefinida, así que se usa heurística para encontrar la portada." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:608 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:609 msgid "Set book ID" msgstr "Insertar el ID del libro" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:610 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:611 msgid "Don't know what this is for" msgstr "No sé para qué sirve esto" @@ -846,11 +929,11 @@ msgstr "" "\n" "%prog convierte milibro.txt en milibro.lrf" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:20 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:23 msgid "Set the authors" msgstr "Introduzca los autores" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:24 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:27 msgid "Set the comment" msgstr "Vea el comentario" @@ -931,11 +1014,11 @@ msgstr "" "Adquiere una portada para el libro identificado por el ISBN en " "LibraryThing.com\n" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/lit.py:747 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/lit.py:751 msgid "Usage: %s file.lit" msgstr "Uso: %s archivo.lit" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/lit.py:754 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/lit.py:758 msgid "Cover saved to" msgstr "Portada guardada en" @@ -947,19 +1030,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:304 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:341 msgid "%prog [options] myebook.mobi" msgstr "%prog [opciones] miebook.mobi" -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:306 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:343 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:325 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:362 msgid "Raw MOBI HTML saved in" msgstr "HTML MOBI en bruto guardado en" -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:327 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:364 msgid "OEB ebook created in" msgstr "Ebook OEB creado en" @@ -967,18 +1050,18 @@ msgstr "Ebook OEB creado en" #: /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:268 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:396 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:747 +#: /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 "Título" #: /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:512 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:285 +#: /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:239 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:246 msgid "Comments" msgstr "Comentarios" @@ -997,82 +1080,90 @@ msgstr "TextLabel" msgid "Choose Format" msgstr "Elegir formato" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:22 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:23 msgid "Basic" msgstr "Básico" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:23 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:24 msgid "Advanced" msgstr "Avanzada" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:97 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:102 msgid "<br>Must be a directory." msgstr "<br>Debe ser un directorio." -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:97 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:102 msgid "Invalid database location " msgstr "Ubicación no válida " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:97 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:100 +#: /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 "Ubicación no válida" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:100 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:105 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:112 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:117 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:112 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:117 msgid "Compacting..." msgstr "Compactando..." -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:198 -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:264 +#: /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 "Configuración" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:199 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:203 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:200 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:204 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:201 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:209 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:211 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:494 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:280 +#: /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:291 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:295 +#: /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:230 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:232 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:233 -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:257 -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:263 -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:265 +#: /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:202 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:206 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:203 +#: /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 "&Prioridad para los trabajos de conversión:" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:209 msgid "Default network &timeout:" msgstr "&timeout por defecto de la red:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:204 +#: /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)" @@ -1080,63 +1171,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:205 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:211 msgid " seconds" msgstr " segundos" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:206 -msgid "&Priority for conversion jobs:" -msgstr "&Prioridad para los trabajos de conversión:" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:207 -msgid "Frequently used directories" -msgstr "Directorios usados con frecuencia" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:208 -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:210 -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:212 -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:213 msgid "Toolbar" msgstr "Barra de herramientas" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:214 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:213 msgid "Large" msgstr "Grande" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:215 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:214 msgid "Medium" msgstr "Medio" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:216 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:215 msgid "Small" msgstr "Pequeño" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:217 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:216 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:218 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:217 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 +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 +msgid "Frequently used directories" +msgstr "Directorios usados con frecuencia" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:220 +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 +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 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:220 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:225 msgid "&Compact database" msgstr "&Compactar base de datos" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:221 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:226 msgid "&Metadata from file name" msgstr "&Metadatos a partir del nombre de archivo" @@ -1145,9 +1232,9 @@ msgid "ERROR" msgstr "ERROR" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:37 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:273 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:397 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:748 +#: /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 "Autor(es)" @@ -1159,19 +1246,23 @@ msgstr "Ordenación por autor" msgid "ISBN" msgstr "ISBN" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:105 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:104 msgid "Cannot connect" msgstr "No se puede conectar" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:106 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:105 msgid "You must specify a valid access key for isbndb.com" msgstr "Especifica una clave de acceso válida para isbndb.com" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:141 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:139 +msgid "Error fetching metadata" +msgstr "Error de obtención de metadatos" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:144 msgid "No metadata found" msgstr "No encontró metadatos" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:141 +#: /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 "" @@ -1195,8 +1286,8 @@ msgstr "" "acceso." #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata_ui.py:80 -msgid "&Access Key;" -msgstr "Clave de &acceso;" +msgid "&Access Key:" +msgstr "&Clave de acceso:" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata_ui.py:81 msgid "Fetch" @@ -1211,7 +1302,7 @@ msgid "" "Select the book that most closely matches your copy from the list below" msgstr "Seleccionar el libro que más se aproxime al listado mostrado abajo" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/job_view_ui.py:30 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/job_view_ui.py:31 msgid "Details of job" msgstr "Detalles del trabajo" @@ -1219,6 +1310,10 @@ msgstr "Detalles del trabajo" msgid "Unavailable" msgstr "No disponible" +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/jobs.py:38 +msgid " - Jobs" +msgstr " - encargos" + #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/jobs_ui.py:38 msgid "Active Jobs" msgstr "Trebajos activos" @@ -1227,72 +1322,72 @@ msgstr "Trebajos activos" msgid "&Stop selected job" msgstr "&Detener trabajo seleccionado" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:57 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:289 +#: /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 "Metadatos" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:59 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:290 +#: /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 "Apariencia" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:61 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:291 +#: /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 "Configuración de página" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:63 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:292 +#: /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 "Detección de capítulos" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:89 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:92 msgid "No available formats" msgstr "Formatos no disponibles" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:90 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:93 msgid "Cannot convert %s as this book has no supported formats" msgstr "No se puede convertir %s porque el formato no está soportado" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:94 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:97 msgid "Choose the format to convert into LRF" msgstr "Elegir el formato a conertir en LRF" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:102 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:105 msgid "Convert %s to LRF" msgstr "Convertir %s a LRF" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:105 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:161 +#: /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 "Fijar valores de conversión por defecto" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:171 +#: /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 "No se puede leer" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:172 +#: /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 "No tienes permiso de lectura en el archivo: " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:180 +#: /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 "Error leyendo archivo" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:181 +#: /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 "<p>There was an error reading from file: <br /><b>" msgstr "<p>Hubo un error leyendo el archivo: <br /><b>" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:187 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:189 msgid " is not a valid picture" msgstr " no es una imagen válida" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:253 +#: /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:" @@ -1300,22 +1395,22 @@ msgstr "" "Preprocesar el archivo antes de convertir a LRF, útil si se conoce el origen " "del archivo. Tipos de archivos conocidos:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:254 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:256 msgid "<ol><li><b>baen</b> - Books from BAEN Publishers</li>" msgstr "<ol><li><b>baen</b> - Libros de BAEN Publishers</li>" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:255 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:257 msgid "" "<li><b>pdftohtml</b> - HTML files that are the output of the program " "pdftohtml</li>" msgstr "" "<li><b>pdftohtml</b> - Archivos HTML creados con el programa pdftohtml</li>" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:256 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:258 msgid "<li><b>book-designer</b> - HTML0 files from Book Designer</li>" msgstr "<li><b>book-designer</b> - Archivos HTML0 de Book Designer</li>" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:289 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:291 msgid "" "Specify metadata such as title and author for the book.<p>Metadata will be " "updated in the database as well as the generated LRF file." @@ -1323,7 +1418,7 @@ msgstr "" "Especificar datos como título y autor para el libro.<p>Esta información se " "actualiza tanto en la base de datos como en el archivo LRF." -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:290 +#: /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." @@ -1331,76 +1426,76 @@ msgstr "" "Mejorar la apariencia del archivo LRF generado, especificando el tamaño de " "fuente y el espaciado entre palabras." -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:291 +#: /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 "" "Configuración de página del dispositivo: márgenes y tamaño de la pantalla" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:292 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:294 msgid "Fine tune the detection of chapter and section headings." msgstr "Afinar la detección de capítulos y secciones." -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:300 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:303 msgid "<font color=\"gray\">No help available</font>" msgstr "<font color=\"gray\">Ayuda no disponible</font>" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:400 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:404 msgid "Bulk convert ebooks to LRF" msgstr "Convertir ebooks a LRF en masa" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:488 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:507 msgid "Convert to LRF" msgstr "Convertir a LRF" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:489 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:508 msgid "Category" msgstr "Categoría" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:490 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:509 msgid "Options" msgstr "Opciones" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:491 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:292 +#: /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 "Portada" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:492 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:293 +#: /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 "Cambia la imagen de &portada:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:493 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:294 +#: /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 "Localizar una imagen a utilizar como portada de este libro." -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:495 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:514 msgid "Use cover from &source file" msgstr "Usar portada del archivo &fuente" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:496 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:260 +#: /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 "&Título: " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:497 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:261 +#: /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 "Cambiar el título del libro" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:498 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:110 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:262 +#: /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 "&Autor(es): " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:499 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:501 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:111 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:263 +#: /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" @@ -1408,30 +1503,30 @@ msgstr "" "Cambia el(los) autor(es). Para especificar más de uno, sepárelos mediante " "comas." -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:500 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:519 msgid "Author So&rt:" msgstr "O&rd&en por autor:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:502 -#: /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:270 +#: /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 "&Editorial: " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:503 -#: /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:271 +#: /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 "Cambia la editorial del libro" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:504 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:272 +#: /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 "Etique&tas: " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:505 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:121 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:273 +#: /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. " "<br><br>They can be any words or phrases, separated by commas." @@ -1439,183 +1534,196 @@ msgstr "" "Etiquetas para categorizar el libr (muy útil en búsquedas). <br><br>Puede " "utilizarse qualquier palabra o frase, separada medante comas." -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:506 -#: /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:276 +#: /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 "&Series:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:507 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:508 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:125 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:126 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:277 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:278 +#: /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 "Listado de series conocidas. Se puede añadir nuevas series." -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:509 -#: /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:281 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:282 +#: /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 "Índice de serie." -#: /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:283 +#: /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 "Libro " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:513 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:532 msgid "Base &font size:" msgstr "Tamaño de la &fuente base:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:514 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:521 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:523 +#: /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 " puntos" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:515 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:534 msgid "Embedded Fonts" msgstr "Fuentes incrustadas" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:516 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:535 msgid "&Serif:" msgstr "&Serif:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:517 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:536 msgid "S&ans-serif:" msgstr "S&ans-serif:" -#: /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:537 msgid "&Monospace:" msgstr "&Monospace:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:519 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:538 msgid "Source en&coding:" msgstr "&Codificación de la fuente:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:520 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:539 msgid "Minimum &indent:" msgstr "&Sangrado mínimo:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:522 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:541 msgid "&Word spacing:" msgstr "&Espaciado de palabras:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:524 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:543 msgid "Enable auto &rotation of images" msgstr "Activa la &rotación automática de imágenes" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:525 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:544 msgid "Insert &blank lines between paragraphs" msgstr "Inserta líneas en &blanco entre párrafos" -#: /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:545 msgid "Ignore &tables" msgstr "Ignora las &tablas" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:527 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:546 msgid "Ignore &colors" msgstr "Ignorar &colores" -#: /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:547 msgid "&Preprocess:" msgstr "&Preprocesamiento:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:529 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:548 msgid "Header" msgstr "Encabezado" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:530 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:549 msgid "&Show header" msgstr "&Mostrar encabezado" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:531 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:550 msgid "&Header format:" msgstr "&Formato del encabezado:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:532 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:551 msgid "Override<br>CSS" msgstr "Substituye<br>CSS" -#: /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:552 msgid "&Profile:" msgstr "&Perfil:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:534 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:553 msgid "&Left Margin:" msgstr "Margen &Izquierdo:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:535 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:537 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:539 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:541 +#: /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 " Píxeles" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:536 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:555 msgid "&Right Margin:" msgstr "Margen &Derecho:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:538 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:557 msgid "&Top Margin:" msgstr "Margen &Superior:" -#: /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:559 msgid "&Bottom Margin:" msgstr "Margen &Inferior:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:542 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:561 +msgid "&Convert tables to images (good for large/complex tables)" +msgstr "" +"&Convertir las tablas a imágenes (bueno para tablas grandes y complejas)" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:562 +msgid "&Multiplier for text size in rendered tables:" +msgstr "&Multiplicador para tamaño del texto en las tablas renderizadas." + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:563 msgid "Title based detection" msgstr "Detección basada en el título" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:543 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:564 msgid "&Disable chapter detection" msgstr "&Desactivar detección de capítulos" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:544 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:565 msgid "&Regular expression:" msgstr "Expresión &Regular:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:545 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:566 msgid "Add &chapters to table of contents" msgstr "Añadir &capítulos a la tabla de contenidos" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:546 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:567 msgid "Don't add &links to the table of contents" msgstr "No añada &enlaces a la tabla de contenidos" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:547 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:568 msgid "Tag based detection" msgstr "Detección basada en etiquetas" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:548 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:569 msgid "&Page break before tag:" msgstr "Inserta un salto de &página delante de la marca:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:549 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:570 msgid "&Force page break before tag:" msgstr "&Fuerza un salto de página delante de la marca:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:550 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:571 msgid "Force page break before &attribute:" msgstr "Fuerza un salto de página delante del &atributo:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:551 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:572 +msgid "Detect chapter &at tag:" +msgstr "Detectar Capítulo &at tag:" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:573 msgid "Help on item" msgstr "Ayuda con el ítem" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:552 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:574 msgid "" "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" " "\"http://www.w3.org/TR/REC-html40/strict.dtd\">\n" "<html><head><meta name=\"qrichtext\" content=\"1\" /><style " "type=\"text/css\">\n" "p, li { white-space: pre-wrap; }\n" -"</style></head><body style=\" font-family:'DejaVu Sans'; font-size:10pt; " -"font-weight:400; font-style:normal;\">\n" +"</style></head><body style=\" font-family:'Candara'; font-size:11pt; font-" +"weight:400; font-style:normal;\">\n" "<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; " "margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-" "family:'Sans Serif'; font-size:9pt;\"></p></body></html>" @@ -1625,28 +1733,28 @@ msgstr "" "<html><head><meta name=\"qrichtext\" content=\"1\" /><style " "type=\"text/css\">\n" "p, li { white-space: pre-wrap; }\n" -"</style></head><body style=\" font-family:'DejaVu Sans'; font-size:10pt; " -"font-weight:400; font-style:normal;\">\n" +"</style></head><body style=\" font-family:'Candara'; font-size:11pt; font-" +"weight:400; font-style:normal;\">\n" "<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; " "margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-" "family:'Sans Serif'; font-size:9pt;\"></p></body></html>" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:108 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:114 msgid "Edit Meta information" msgstr "Editar Meta-información" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:109 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:259 +#: /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 "Meta-información" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:112 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:264 +#: /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 "&Ordenar autores: " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:113 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:265 +#: /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." @@ -1654,32 +1762,39 @@ msgstr "" "Especificar cómo ordenar el(los) autor(es) de este libro. Por ejemplo,ordena " "Federico García Lorca como Lorca, Federico" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:114 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:266 +#: /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 "&Valoración:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:115 -#: /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:267 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:268 +#: /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 "Valora este libro: 0-5 estrellas" -#: /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:269 +#: /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 " estrellas" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:120 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:126 msgid "Add Ta&gs: " msgstr "Aña&dir las etiquetas: " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:122 +#: /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 "Abrir editor de etiquetas" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:130 msgid "&Remove tags:" msgstr "&Quitar etiquetas" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:123 +#: /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 "Lista de etiquetas separadas por comas para eliminar de los libros " @@ -1709,52 +1824,47 @@ msgstr "No se puede descargar la portada" msgid "You must specify the ISBN identifier for this book." msgstr "Especifique primero un ISBN válido para el libro." -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:258 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:256 msgid "Edit Meta Information" msgstr "Editar meta-información" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:274 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:275 -msgid "Open Tag Editor" -msgstr "Abrir editor de etiquetas" - -#: /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:277 msgid "Remove unused series (Series that have no books)" msgstr "" "Eliminar series que no están en uso (series que no tienen ningún libro " "asociado)" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:284 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:282 msgid "IS&BN:" msgstr "IS&BN:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:286 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:284 msgid "Fetch metadata from server" msgstr "Buscar metadatos en el servidor" -#: /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:285 msgid "Available Formats" msgstr "Formatos disponibles" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:288 +#: /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 "Añadir un nuevo formato para este libro en la base de datos" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:290 +#: /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 "" "Elimina los formatos seleccionados para este libro de la base de datos." -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:296 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:294 msgid "Fetch cover image from server" msgstr "Buscar portada en el servidor" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:297 +#: /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 "Cambiar nombre de usuario y/o clave de tu cuenta de LibraryThing.com" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:298 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:296 msgid "Change password" msgstr "Cambiar contraseña" @@ -1783,13 +1893,13 @@ msgid "Tag" msgstr "Etiqueta" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search.py:18 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:244 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:403 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:251 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:411 msgid "Series" msgstr "Series" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search.py:19 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:681 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:689 msgid "Format" msgstr "Formato" @@ -1906,95 +2016,95 @@ msgid "Recipe for " msgstr "Receta para " #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:86 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:96 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:218 +#: /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 "Cambiar a modo avanzado" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:91 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:99 +#: /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 "Cambiar a modo básico" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:109 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:110 msgid "Feed must have a title" msgstr "el Feed debe tener un título" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:110 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:111 msgid "The feed must have a title" msgstr "Newsfeed tiene que aver un título" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:114 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:115 msgid "Feed must have a URL" msgstr "El feed ha de tener una URL" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:115 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:116 msgid "The feed %s must have a URL" msgstr "el Feed debe tener una dirección" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:120 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:121 msgid "Already exists" msgstr "Ya existe" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:121 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:122 msgid "This feed has already been added to the recipe" msgstr "Este Feed ya se ha añadido a la receta" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:162 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:171 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:194 -msgid "Invalid input" -msgstr "Entrada incorrecta" - #: /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 "Entrada incorrecta" + +#: /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 "<p>Could not create recipe. Error:<br>%s" msgstr "<p>No se puede crear la receta. Error:<br>%s" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:178 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:200 +#: /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 "Reemplazar la receta?" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:179 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:201 +#: /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 "una receta personalizada llamada %s ya existe. Quiere reemplazarla?" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:187 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:188 msgid "Choose a recipe file" msgstr "Seleccionar un archivo de receta" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:187 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:188 msgid "Recipes" msgstr "Recetas" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:212 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:208 msgid "Add custom news source" msgstr "Añadir nueva fuente personalizada" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:213 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:209 msgid "Available user recipes" msgstr "Recetas de usuario disponibles" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:214 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:210 msgid "Add/Update &recipe" msgstr "Añadir/Actualizar &receta" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:215 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:211 msgid "&Remove recipe" msgstr "&Eliminar receta" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:216 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:212 msgid "&Share recipe" msgstr "&Compartir receta" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:217 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:213 msgid "&Load recipe from file" msgstr "&Cargar receta desde un archivo" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:219 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:215 msgid "" "<html><head><meta name=\"qrichtext\" content=\"1\" /><style " "type=\"text/css\">\n" @@ -2018,56 +2128,56 @@ msgstr "" "necesitará utilizar el \"modo avanzado\" para una configuración mas " "detallada del proceso de adquisición de los datos</p></body></html>" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:223 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:219 msgid "Recipe &title:" msgstr "&Título de la receta" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:224 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:220 msgid "&Oldest article:" msgstr "&Artículo más antiguo" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:225 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:221 msgid "The oldest article to download" msgstr "El artículo más antiguo a descargar" -#: /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:222 msgid " days" msgstr " días" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:227 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:223 msgid "&Max. number of articles per feed:" msgstr "Número máximo de articulos por feed:" -#: /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:224 msgid "Maximum number of articles to download per feed." msgstr "Número máximo de articulos a descargar por cada feed:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:229 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:225 msgid "Feeds in recipe" msgstr "Feeds en la receta" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:231 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:227 msgid "Remove feed from recipe" msgstr "Eliminar feeds de la receta" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:234 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:237 +#: /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 "Añadir feeds a la receta" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:235 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:231 msgid "&Feed title:" msgstr "&Título del newsfeed:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:236 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:232 msgid "Feed &URL:" msgstr "Newsfeed &URL:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:238 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:234 msgid "&Add feed" msgstr "&Añadir feed" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:239 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:235 msgid "" "For help with writing advanced news recipes, please visit <a " "href=\"http://calibre.kovidgoyal.net/user_manual/news.html\">User Recipes</a>" @@ -2076,7 +2186,7 @@ msgstr "" "<a href=\"http://calibre.kovidgoyal.net/user_manual/news.html\">Recetas de " "Usuario</a>" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:240 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:236 msgid "Recipe source code (python)" msgstr "Código fuente de la receta (python)" @@ -2161,45 +2271,44 @@ msgstr "Nombre de grupo de expresión regular (?P<series_index>)" msgid "ISBN:" msgstr "ISBN:" -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:291 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:313 msgid "Job" msgstr "Trabajo" -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:292 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:314 msgid "Status" msgstr "Estado" -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:293 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:315 msgid "Progress" msgstr "Progreso" -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:294 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:316 msgid "Running time" msgstr "Tiempo transcurrido en ejecución" -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:322 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:344 msgid "Error" msgstr "Error" -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:322 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:344 msgid "Finished" msgstr "Terminado" -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:324 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:346 msgid "Waiting" msgstr "En espera..." -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:324 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:346 msgid "Working" msgstr "Procesando..." -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:354 -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:358 -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:362 +#: /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 "No se puede detener este trabajo" -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:355 +#: /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." @@ -2207,62 +2316,58 @@ msgstr "" "No se pueden detener los trabajos que estan en comunicación con el " "dispositivo ya que pueden causar corrupción de datos" -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:359 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:381 msgid "Cannot kill already completed jobs." msgstr "No se pueden detener trabajos ya finalizados" -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:363 -msgid "Cannot kill waiting jobs." -msgstr "No se pueden detener trabajos en espera" - -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:228 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:234 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:238 +#: /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 "Ninguno" -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:229 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:402 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:687 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:751 +#: /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 "Etiquetas" -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:235 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:242 msgid "Formats" msgstr "Formatos" -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:244 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:251 msgid "Book <font face=\"serif\">%s</font> of %s." msgstr "Libro <font face=\"serif\">%s</font> de %s." -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:388 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:396 msgid "Double click to <b>edit</b> me<br><br>" msgstr "Doble click para <b>editarme</b>" -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:398 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:749 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:406 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:757 msgid "Size (MB)" msgstr "Tamaño (MB)" -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:399 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:750 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:407 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:758 msgid "Date" msgstr "Fecha" -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:400 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:408 msgid "Rating" msgstr "Valoración" -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:682 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:690 msgid "Path" msgstr "Ruta" -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:686 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:694 msgid "Timestamp" msgstr "Marca de tiempo" -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:786 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:794 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)" @@ -2283,15 +2388,15 @@ msgstr "Partición de palabras" 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/main.py:64 +#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main.py:63 msgid " - LRF Viewer" msgstr " - Visor de LRF" -#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main.py:155 +#: /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 "<b>No </b>se han encontrado coincidencias para \"<i>%s</i>\"." -#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main.py:155 +#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main.py:154 msgid "No matches found" msgstr "No se han encontrado coincidencias" @@ -2352,26 +2457,37 @@ 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: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:115 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:117 msgid "Send to storage card" msgstr "Envia a la targeta de memoria" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:118 +#: /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 "Editar metadatos individualmente" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:119 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:132 msgid "Edit metadata in bulk" msgstr "Edita metadatos en bloque" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:122 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:135 msgid "Add books from a single directory" msgstr "añadir libros desde un único directorio" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:123 +#: /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)" @@ -2379,7 +2495,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:124 +#: /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)" @@ -2387,49 +2503,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:138 -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:274 +#: /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 "Guardar en el disco" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:139 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:153 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:142 -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:280 +#: /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 "Mostrar" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:143 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:158 msgid "View specific format" msgstr "Ver formato específico" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:158 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:174 msgid "Convert individually" msgstr "Convertir individualmente" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:159 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:175 msgid "Bulk convert" msgstr "Convertir en bloque" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:303 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:309 msgid " detected." msgstr " detectado." -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:303 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:309 msgid "Device: " msgstr "Dispositivo: " -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:328 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:334 msgid "Connected " msgstr "Conectado " -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:340 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:346 msgid "Device database corrupted" msgstr "Base de datos del dispositivo corrupta" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:341 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:347 msgid "" "\n" " <p>The database of books on the reader is corrupted. Try the " @@ -2459,8 +2579,8 @@ msgstr "" " </ol>\n" " " -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:393 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:467 +#: /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>" @@ -2468,52 +2588,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:396 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:470 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:402 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:476 msgid "Duplicates found!" msgstr "¡Duplicados encontrados!" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:429 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:442 +#: /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 "Enviando libros al dispositivo" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:500 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:507 msgid "No space on device" msgstr "No hay espacio en el dispositivo" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:501 +#: /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 "" "<p>No se pueden guardar los libros porque no hay espacio en el dispositivo " -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:536 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:546 msgid "Deleting books from device." msgstr "Eliminando libros del dispositivo" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:570 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:587 +#: /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 "No se pueden editar los metadatos" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:570 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:587 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:675 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:736 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:797 +#: /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 "No hay libros seleccionados" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:658 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:674 msgid "Sending books to device." msgstr "Enviando libros al dispositivo" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:661 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:677 msgid "No suitable formats" msgstr "No hay formatos adecuados" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:662 +#: /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>" @@ -2521,68 +2641,78 @@ 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:675 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:694 msgid "Cannot save to disk" msgstr "No se puede guardar en disco" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:714 +#: /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 "Busca noticias de " -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:716 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:744 msgid "Fetching news from " msgstr "Buscando noticias de " -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:726 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:754 msgid "News fetched. Uploading to device." msgstr "Noticias adquiridas. Enviando al dispositivo." -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:736 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:797 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:764 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:834 msgid "Cannot convert" msgstr "No se puede convertir" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:745 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:773 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:867 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:885 +#: /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 "Seleccione un libro" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:867 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:885 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:899 +#: /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 "No se puede visualizar" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:873 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:904 +#: /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 "Elija el formato para visualizar" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:900 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:938 msgid "%s has no available formats." msgstr "%s no tiene formatos disponibles" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:938 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:976 msgid "Cannot configure" msgstr "No se puede configurar" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:938 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:976 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:961 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:999 msgid "Copying database to " msgstr "Copiando base de datos a " -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:976 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1014 msgid "Invalid database" msgstr "Base de datos no valida" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:977 +#: /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" @@ -2590,24 +2720,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:985 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1023 msgid "Could not move database" msgstr "No se puede mover la base de datos" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1006 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1044 msgid "No detailed info available" msgstr "No hay información detallada disponible" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1007 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1045 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:1049 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1087 msgid "Error talking to device" msgstr "Error de comunicación con el dispositivo" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1050 +#: /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." @@ -2615,15 +2745,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:1076 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1139 msgid "Conversion Error" msgstr "Error de conversión" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1098 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1158 msgid "Database does not exist" msgstr "No existe la base de datos" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1098 +#: /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." @@ -2631,7 +2761,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:1149 +#: /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>" @@ -2639,7 +2769,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:1155 +#: /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>. " @@ -2649,27 +2779,27 @@ 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:1155 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1215 msgid "Update available" msgstr "Actualización disponible" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:255 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:256 msgid "calibre" msgstr "calibre" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:256 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:257 msgid "Advanced search" msgstr "Búsqueda avanzada" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:258 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:259 msgid "Alt+S" msgstr "Alt+S" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:259 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:260 msgid "&Search:" msgstr "&Buscar:" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:260 +#: /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" @@ -2677,7 +2807,7 @@ msgstr "" "Busca libros por título o autor. <br><br>Los espacios entre palabras se " "sustituyen por AND." -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:261 +#: /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" @@ -2685,63 +2815,76 @@ msgstr "" "Buscar libros por título, autor, editorial, etiquetas y " "comentaris<br><br>Los espacios entre parlabras se sustituyen por AND." -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:262 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:263 msgid "Reset Quick Search" msgstr "Reinicializar búsqueda rápida" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:266 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:267 msgid "Add books" msgstr "Añadir libros" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:267 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:268 msgid "A" msgstr "A" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:268 #: /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 "Suprimir libros" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:270 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:271 msgid "Del" msgstr "Borrar" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:271 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:272 msgid "Edit meta information" msgstr "Editar la meta-información" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:272 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:273 msgid "E" msgstr "E" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:273 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:274 msgid "Send to device" msgstr "Enviar al dispositivo" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:275 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:276 msgid "S" msgstr "S" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:276 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:277 msgid "Fetch news" msgstr "Descargar noticias (RSS)" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:277 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:278 msgid "F" msgstr "F" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:278 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:279 msgid "Convert E-books" msgstr "Convertir Ebooks" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:279 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:280 msgid "C" msgstr "C" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:281 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:282 msgid "V" msgstr "V" +#: /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 "" +"Redireccionar salida de consola hacia una ventana de diálogo (ambas stdout " +"and stderr). Útil en windows, donde las aplicacines en GUI no tienen cadenas " +"de salida." + +#: /home/kovid/work/calibre/src/calibre/gui2/main_window.py:52 +msgid "ERROR: Unhandled exception" +msgstr "ERROR: Excepción no Contemplada" + #: /home/kovid/work/calibre/src/calibre/gui2/news.py:32 msgid "Add a custom news source" msgstr "Añadir nueva fuente de noticias" @@ -2791,11 +2934,11 @@ msgstr "Expresión regular no válida" msgid "Invalid regular expression: %s" msgstr "Expresión regular no valida: %s" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:166 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:169 msgid "Library" msgstr "Biblioteca" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:167 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:170 msgid "" "Reader\n" "%s available" @@ -2803,7 +2946,7 @@ msgstr "" "Sony Reader\n" "%s disponible" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:168 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:171 msgid "" "Card\n" "%s available" @@ -2811,21 +2954,21 @@ msgstr "" "Tarjeta\n" "%s disponible" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:172 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:175 msgid "Click to see the list of books available on your computer" msgstr "Haga click para ver la lista de libros disponibles en su ordenador" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:173 +#: /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 "Haga click para ver la lista de libros disponibles en su lector" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:174 +#: /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 "" "Haga click para ver la lista de libros en la tarjeta de almacenamiento de su " "lector" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:25 +#: /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." @@ -2833,7 +2976,7 @@ msgstr "" "Camino a la base de datos calibre. El valor predeterminado es a usar la ruta " "almacenada en la configuración." -#: /home/kovid/work/calibre/src/calibre/library/cli.py:80 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:82 msgid "" "%prog list [options]\n" "\n" @@ -2843,26 +2986,33 @@ msgstr "" "\n" "Mostrar los libros disponibles en la base de datos calibre. \n" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:88 +#: /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 "" +"Campos a mostrar cuando se listan libros de la Base de Datos. Tienen que " +"estar separados por comas.\n" +"Campos disponibles: %s\n" +"Defecto: %%default" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:90 +#: /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 "" +"Campos por los que ordenar el resultado.\n" +"Campos disponibles: %s\n" +"Defecto: %%default" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:92 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:94 msgid "Sort results in ascending order" msgstr "Clasificar los resultados en orden ascendente" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:94 +#: /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 " @@ -2872,15 +3022,15 @@ msgstr "" "consulta de búsqueda consulte la documentación relacionada con la búsqueda " "en el Manual del usuario. El valor predeterminado es a no hacer el filtrado." -#: /home/kovid/work/calibre/src/calibre/library/cli.py:101 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:103 msgid "Invalid fields. Available fields:" msgstr "Campos no válidos. Los campos disponibles:" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:108 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:110 msgid "Invalid sort field. Available fields:" msgstr "Campo de clasificación no válido. Los campos disponibles:" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:170 +#: /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):" @@ -2888,7 +3038,7 @@ msgstr "" "Los siguientes libros no se han añadido como ya existen en la base de datos " "(véase la opción --duplicates)" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:195 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:197 msgid "" "%prog add [options] file1 file2 file3 ...\n" "\n" @@ -2903,7 +3053,7 @@ msgstr "" "directorios, consulte las opciones relacionadas a los directorios más abajo. " "\n" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:204 +#: /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" @@ -2911,11 +3061,11 @@ msgstr "" "Supongamos que cada directorio tiene un solo libro lógico y que todos los " "archivos en este directorio son diferentes formatos de este libro" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:206 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:208 msgid "Process directories recursively" msgstr "Proceso de directorios recursivamente" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:208 +#: /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." @@ -2923,11 +3073,11 @@ msgstr "" "Añadir a base de datos de libros, aunque ya existen. La comparación se " "realiza sobre la base de títulos de libros." -#: /home/kovid/work/calibre/src/calibre/library/cli.py:213 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:215 msgid "You must specify at least one file to add" msgstr "Debe especificar al menos un archivo para añadir" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:231 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:233 msgid "" "%prog remove ids\n" "\n" @@ -2942,11 +3092,11 @@ msgstr "" "números de identificación utilizando el commando \"list\"). Por ejemplo, " "23,34,57-85\n" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:243 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:245 msgid "You must specify at least one book to remove" msgstr "Debe especificar al menos un libro para eliminar" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:263 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:265 msgid "" "%prog add_format [options] id ebook_file\n" "\n" @@ -2955,15 +3105,15 @@ msgid "" "already exists, it is replaced.\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:274 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:276 msgid "You must specify an id and an ebook file" msgstr "Debe especificar un ID y un ebook archivo" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:279 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:281 msgid "ebook file must have an extension" msgstr "ebook archivo debe tener una extensión" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:287 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:289 msgid "" "\n" "%prog remove_format [options] id fmt\n" @@ -2980,11 +3130,86 @@ msgstr "" "archivo como LRF o TXT o EPUB. Si el libro lógico no tiene fmt disponible, " "no hacer nada.\n" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:300 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:302 msgid "You must specify an id and a format" msgstr "Debe especificar un ID y un formato" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:310 +#: /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 "" +"\n" +"%prog show_metadata [options] id\n" +"Muestra los metadatos almacenados en la Base de Datos de calibre para el " +"libro identificado por ID.\n" +"Id es un número de identificador de la lista de comandos. \n" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:328 +msgid "Print metadata in OPF form (XML)" +msgstr "Imprimir metadatos en formato OPF (XML)" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:333 +msgid "You must specify an id" +msgstr "Usted debe especificar un ID" + +#: /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 "Usted debe especificar un ID y un archivo de metadatos" + +#: /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 "" +"Exportar todos los libros en la base de datos, haciendo caso omiso de la " +"lista de identificaciones." + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:382 +msgid "Export books to the specified directory. Default is" +msgstr "" +"Exportar libros para el directorio especificado. El valor por defecto es" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:384 +msgid "Export all books into a single directory" +msgstr "Exportar todos los libros en un solo directorio" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:386 +msgid "Create file names as author - title instead of title - author" +msgstr "" +"Crear nombres de archivo como autor - título en lugar de título - autor" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:391 +msgid "You must specify some ids or the %s option" +msgstr "Debe especificar algunas identificaciones o la opción %s" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:401 msgid "" "%%prog command [options] [arguments]\n" "\n" @@ -2996,11 +3221,11 @@ msgid "" "For help on an individual command: %%prog command --help\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/parallel.py:131 -msgid "Job killed by user" -msgstr "Trabajo detenido por el usuario" +#: /home/kovid/work/calibre/src/calibre/parallel.py:317 +msgid "Could not launch worker process." +msgstr "No se ha podido abrir el proceso trabajador." -#: /home/kovid/work/calibre/src/calibre/utils/fontconfig.py:124 +#: /home/kovid/work/calibre/src/calibre/utils/fontconfig.py:146 msgid "Could not initialize the fontconfig library" msgstr "No se ha podido inicializar la biblioteca fontconfig" @@ -3026,7 +3251,7 @@ msgid "Unknown feed" msgstr "Newsfeed desconocido" #: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:95 -#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:115 +#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:117 msgid "Untitled article" msgstr "Artículo sin título" @@ -3208,32 +3433,33 @@ msgstr "No fué posible descargar la portada: %s" msgid "Downloading cover from %s" msgstr "Descargando portada desde %s" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:699 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:698 msgid "Untitled Article" msgstr "Artículo sin título" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:743 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:744 msgid "" "\n" "Downloaded article %s from %s\n" "%s" msgstr "" "\n" -"Artículo %s descargado desde %s" +"Artículo %s descargado desde %s\n" +"%s" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:749 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:750 msgid "Article downloaded: %s" msgstr "Artículo descargado: %s" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:755 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:756 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:760 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:761 msgid "Article download failed: %s" msgstr "Error en la descarga del artículo: %s" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:775 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:776 msgid "Fetching feed" msgstr "Buscando newsfeed" diff --git a/src/calibre/translations/fr.po b/src/calibre/translations/fr.po index 7454c5abe2..24e767cdbb 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-12 20:18+0000\n" -"PO-Revision-Date: 2008-05-24 06:22+0000\n" -"Last-Translator: FixB <Unknown>\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" "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-06-15 22:20+0000\n" +"X-Launchpad-Export-Date: 2008-07-02 15:52+0000\n" "X-Generator: Launchpad (build Unknown)\n" "Generated-By: pygettext.py 1.5\n" @@ -33,6 +33,12 @@ msgstr "" #~ "Une expression régulière. Les tags <a> qui respectent cette expression " #~ "seront ignorés. Par défaut : %default" +#~ msgid "" +#~ "Prevent the automatic insertion of page breaks before detected chapters." +#~ msgstr "" +#~ "Empêche l'insertion automatique d'un saut de page avant chaque chapitre " +#~ "détecté." + #~ msgid "" #~ "Force a page break before tags whoose names match this regular expression." #~ msgstr "" @@ -56,6 +62,9 @@ msgstr "" #~ msgid "Server error. Try again later." #~ msgstr "Erreur Serveur. Veuillez essayer ultérieurement." +#~ msgid "&Access Key;" +#~ msgstr "&Access Key;" + #~ 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." @@ -164,11 +173,11 @@ msgstr "" #~ "margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-" #~ "family:'Sans Serif';\"></p></body></html>" -#: /home/kovid/work/calibre/src/calibre/__init__.py:96 +#: /home/kovid/work/calibre/src/calibre/__init__.py:133 msgid "%sUsage%s: %s\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/__init__.py:133 +#: /home/kovid/work/calibre/src/calibre/__init__.py:170 msgid "Created by " msgstr "Créé par " @@ -178,6 +187,10 @@ msgstr "Créé par " 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 "Indiquer le titre. Par défaut : nom du fichier." @@ -191,8 +204,14 @@ msgstr "" "Par défaut : %default" #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:76 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:271 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:677 +#: /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 "Inconnu" @@ -215,7 +234,7 @@ msgstr "Clé de tri pour l'auteur" #: /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:401 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:409 msgid "Publisher" msgstr "Editeur" @@ -317,7 +336,7 @@ msgid "" "HTML or CSS." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:129 +#: /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 " @@ -327,23 +346,35 @@ 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:135 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:134 msgid "Left margin of page. Default is %default px." msgstr "La marge de gauche. Par défaut : %default points." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:137 +#: /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:139 +#: /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:141 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:140 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:145 +#: /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 <a> tags are " @@ -353,24 +384,21 @@ 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:149 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:153 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:153 -msgid "Don't add links to the table of contents." -msgstr "" - #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:157 -msgid "" -"Prevent the automatic insertion of page breaks before detected chapters." -msgstr "" -"Empêche l'insertion automatique d'un saut de page avant chaque chapitre " -"détecté." +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 +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" @@ -379,7 +407,15 @@ 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:164 +#: /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 " @@ -398,12 +434,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:174 +#: /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:176 +#: /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 " @@ -416,16 +452,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:179 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:184 msgid "Add detected chapters to the table of contents." -msgstr "" +msgstr "Ajouter les chapitres détectés à la table des matières." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:182 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:187 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:184 +#: /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." @@ -433,12 +469,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:186 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:191 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:189 +#: /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 " @@ -446,27 +482,27 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:197 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:202 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:200 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:205 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:203 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:208 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:207 +#: /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:209 +#: /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:211 +#: /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." @@ -475,7 +511,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:213 +#: /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 " @@ -521,105 +557,105 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/feeds/convert_from.py:22 msgid "Options to control the behavior of feeds2disk" -msgstr "" +msgstr "Options pour contrôler le comportement de feeds2disk" #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/feeds/convert_from.py:24 msgid "Options to control the behavior of html2lrf" -msgstr "" +msgstr "Options pour contrôler le comportement de html2lrf" #: /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:309 +#: /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:311 +#: /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:333 +#: /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:349 +#: /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:366 +#: /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:380 +#: /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:518 -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:531 +#: /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:523 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:534 msgid "%s is an empty file" -msgstr "" +msgstr "%s est un fichier vide" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:543 +#: /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:587 +#: /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:929 +#: /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:967 +#: /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:982 +#: /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:1687 +#: /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:1689 +#: /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:1711 +#: /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:1741 +#: /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:1781 +#: /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:1784 +#: /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:1913 +#: /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:1919 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1982 msgid "" "Usage: %prog [options] mybook.html\n" "\n" @@ -683,11 +719,11 @@ msgstr "" msgid "Convert LRS to LRS, useful for debugging." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:454 +#: /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:579 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:580 msgid "" "%prog [options] mybook.lrf\n" "\n" @@ -696,55 +732,55 @@ msgid "" "\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:586 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:18 +#: /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 "Définit le titre du livre" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:588 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:589 msgid "Set sort key for the title" msgstr "Définit la clé de tri pour le titre" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:590 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:591 msgid "Set the author" msgstr "Définit l'auteur" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:592 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:593 msgid "Set sort key for the author" msgstr "Définit la clef de tri pour l'auteur" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:594 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:22 +#: /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 "La catégorie à laquelle le livre appartient. Exemple : Histoire" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:597 +#: /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 "" "Chemin d'une image qui sera utilisée comme vignette pour ces fichiers" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:600 +#: /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 "" "Chemin d'un fichier texte contenant les commentaires qui seront inclus dans " "le fichier lrf." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:604 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:605 msgid "Extract thumbnail from LRF file" msgstr "Extrait la vignette du fichier LRF" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:606 +#: /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:608 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:609 msgid "Set book ID" msgstr "Définit l'ID du livre" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:610 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:611 msgid "Don't know what this is for" msgstr "Je ne sais pas à quoi cela sert" @@ -807,11 +843,11 @@ msgid "" "%prog converts mybook.txt to mybook.lrf" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:20 +#: /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:24 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:27 msgid "Set the comment" msgstr "" @@ -879,11 +915,11 @@ msgid "" "Fetch a cover image for the book identified by ISBN from LibraryThing.com\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/lit.py:747 +#: /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:754 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/lit.py:758 msgid "Cover saved to" msgstr "" @@ -895,19 +931,19 @@ msgstr "" msgid "No filename specified." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:304 +#: /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:306 +#: /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:325 +#: /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:327 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:364 msgid "OEB ebook created in" msgstr "" @@ -915,18 +951,18 @@ msgstr "" #: /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:268 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:396 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:747 +#: /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 "Titre" #: /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:512 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:285 +#: /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:239 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:246 msgid "Comments" msgstr "Commentaires" @@ -945,145 +981,149 @@ msgstr "TextLabel" msgid "Choose Format" msgstr "Choisir le format" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:22 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:23 msgid "Basic" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:23 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:24 msgid "Advanced" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:97 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:102 msgid "<br>Must be a directory." msgstr "<br>Doit être un répertoire." -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:97 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:102 msgid "Invalid database location " msgstr "Chemin de la database invalide " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:97 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:100 +#: /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 "Chemin de la database invalide" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:100 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:105 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:112 +#: /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:112 +#: /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:198 -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:264 +#: /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 "Configuration" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:199 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:203 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:200 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:204 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:201 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:209 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:211 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:494 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:280 +#: /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:291 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:295 +#: /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:230 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:232 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:233 -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:257 -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:263 -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:265 +#: /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:202 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:206 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:203 +#: /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 "&Priorité pour les travaux de conversion :" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:209 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:204 +#: /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:205 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:211 msgid " seconds" msgstr " secondes" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:206 -msgid "&Priority for conversion jobs:" -msgstr "&Priorité pour les travaux de conversion :" +#: /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:207 +#: /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 "Répertoires utilisés fréquemment" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:208 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:220 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:210 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:222 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:212 -msgid "Select visible &columns in library view" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:213 -msgid "Toolbar" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:214 -msgid "Large" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:215 -msgid "Medium" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:216 -msgid "Small" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:217 -msgid "&Button size in toolbar" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:218 -msgid "Show &text in toolbar buttons" -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 "Free unused diskspace from the database" 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 "&Compact database" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:221 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:226 msgid "&Metadata from file name" msgstr "" @@ -1092,9 +1132,9 @@ msgid "ERROR" msgstr "ERREUR" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:37 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:273 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:397 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:748 +#: /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 "Auteur(s)" @@ -1106,19 +1146,23 @@ msgstr "" msgid "ISBN" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:105 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:104 msgid "Cannot connect" msgstr "Impossible de se connecter" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:106 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:105 msgid "You must specify a valid access key for isbndb.com" msgstr "Vous devez spécifier une clef d'accès valide à isbndb.com" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:141 +#: /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:141 +#: /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 "" @@ -1141,8 +1185,8 @@ msgstr "" "(access key)." #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata_ui.py:80 -msgid "&Access Key;" -msgstr "&Access Key;" +msgid "&Access Key:" +msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata_ui.py:81 msgid "Fetch" @@ -1159,7 +1203,7 @@ msgstr "" "Sélectionnez le livre qui correspond le mieux au votre dans la liste ci-" "dessous." -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/job_view_ui.py:30 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/job_view_ui.py:31 msgid "Details of job" msgstr "" @@ -1167,6 +1211,10 @@ msgstr "" msgid "Unavailable" msgstr "Indisponible" +#: /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 "Exécutions en cours" @@ -1175,74 +1223,74 @@ msgstr "Exécutions en cours" msgid "&Stop selected job" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:57 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:289 +#: /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 "Metadata" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:59 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:290 +#: /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 "Présentation" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:61 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:291 +#: /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 "Mise en page" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:63 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:292 +#: /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 "Détection des chapitres" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:89 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:92 msgid "No available formats" msgstr "Aucun format disponible" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:90 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:93 msgid "Cannot convert %s as this book has no supported formats" msgstr "" "Conversion du livre %s impossible parcequ'il ne dispose d'aucun format " "supporté" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:94 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:97 msgid "Choose the format to convert into LRF" msgstr "Choix du format de conversion vers LRF" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:102 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:105 msgid "Convert %s to LRF" msgstr "Conversion de %s en LRF" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:105 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:161 +#: /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 "Définir les paramètres par défaut de conversion" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:171 +#: /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 "Impossible de lire" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:172 +#: /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 "Vous n'avez pas les permissions nécessaires pour lire ce fichier: " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:180 +#: /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 "Erreur à la lecture du fichier" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:181 +#: /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 "<p>There was an error reading from file: <br /><b>" msgstr "<p>Il y a eu une erreur à la lecture du fichier : <br /><b>" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:187 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:189 msgid " is not a valid picture" msgstr " n'est pas une image vailde" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:253 +#: /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:" @@ -1250,23 +1298,23 @@ msgstr "" "Pré-processe le fichier avant la conversion vers le format LRF. Ceci est " "utile si vous connaissez l'origine du fichiers. Origines connues :" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:254 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:256 msgid "<ol><li><b>baen</b> - Books from BAEN Publishers</li>" msgstr "<ol><li><b>baen</b> -Livres des éditions BAEN </li>" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:255 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:257 msgid "" "<li><b>pdftohtml</b> - HTML files that are the output of the program " "pdftohtml</li>" msgstr "" "<li><b>pdftohtml</b> - fichiers HTML générés par le programme pdftohtml</li>" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:256 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:258 msgid "<li><b>book-designer</b> - HTML0 files from Book Designer</li>" msgstr "" "<li><b>book-designer</b> - Fichiers HTML0 générés avec Book Designer</li>" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:289 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:291 msgid "" "Specify metadata such as title and author for the book.<p>Metadata will be " "updated in the database as well as the generated LRF file." @@ -1274,7 +1322,7 @@ msgstr "" "Définit les metadata comme le titre et l'auteur du livre.<p>Les metadata " "seront modifiées dans la base de données et dans le fichier LRF généré." -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:290 +#: /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." @@ -1282,7 +1330,7 @@ msgstr "" "Ajuste la présentation du fichier LRF généré en définissant des paramètres " "tels que la taille des polices et l'espacement entre les mots." -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:291 +#: /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." @@ -1290,69 +1338,69 @@ msgstr "" "Définit les paramètres de la pages tels que les marges et la taille de " "l'écran du lecteur cible." -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:292 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:294 msgid "Fine tune the detection of chapter and section headings." msgstr "Peaufiner la détection des chapitres et des en-têtes de section." -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:300 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:303 msgid "<font color=\"gray\">No help available</font>" msgstr "<font color=\"gray\">Aucune aide n'est disponible</font>" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:400 +#: /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:488 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:507 msgid "Convert to LRF" msgstr "Convertir en LRF" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:489 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:508 msgid "Category" msgstr "Catégorie" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:490 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:509 msgid "Options" msgstr "Options" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:491 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:292 +#: /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 "Couverture du livre" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:492 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:293 +#: /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 "Modifie l'image &cover :" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:493 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:294 +#: /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 "Rechercher une image à utiliser en tant que couverture du livre." -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:495 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:514 msgid "Use cover from &source file" msgstr "Utilise l'image de couverture du fichier &source" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:496 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:260 +#: /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 "&Titre : " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:497 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:261 +#: /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 "Modifie le titre du livre" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:498 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:110 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:262 +#: /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 "&Auteurs : " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:499 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:501 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:111 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:263 +#: /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" @@ -1360,30 +1408,30 @@ msgstr "" "Modifie les auteurs du livres. Si plusieurs auteurs, les séparer avec des " "virgules." -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:500 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:519 msgid "Author So&rt:" msgstr "T&ri de l'auteur :" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:502 -#: /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:270 +#: /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 "&Editeur : " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:503 -#: /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:271 +#: /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 "Modifie l'éditeur du livre" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:504 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:272 +#: /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 "Ta&gs : " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:505 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:121 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:273 +#: /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. " "<br><br>They can be any words or phrases, separated by commas." @@ -1391,204 +1439,216 @@ msgstr "" "Tags caractérisant le livre, particulièrement utile pour la recherche. <br> " "<br> Cela peut être n'importe quels mots, séparés par des virgules." -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:506 -#: /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:276 +#: /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 "&Séries :" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:507 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:508 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:125 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:126 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:277 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:278 +#: /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 "Liste de séries connues. Vous pouvez ajouter de nouvelles séries." -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:509 -#: /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:281 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:282 +#: /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 "Index de séries" -#: /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:283 +#: /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 "Livre " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:513 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:532 msgid "Base &font size:" msgstr "Taille de &police par défaut :" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:514 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:521 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:523 +#: /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 " pts" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:515 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:534 msgid "Embedded Fonts" msgstr "Polices inclues" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:516 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:535 msgid "&Serif:" msgstr "&Serif :" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:517 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:536 msgid "S&ans-serif:" msgstr "S&ans-serif :" -#: /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:537 msgid "&Monospace:" msgstr "&Monospace :" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:519 +#: /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:520 +#: /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:522 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:541 msgid "&Word spacing:" msgstr "Espacement entre &mots :" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:524 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:543 msgid "Enable auto &rotation of images" msgstr "Active l'auto &rotation des images" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:525 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:544 msgid "Insert &blank lines between paragraphs" msgstr "Insère des lignes &blanches entre les paragraphes" -#: /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:545 msgid "Ignore &tables" msgstr "Ignore les &tables" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:527 +#: /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:528 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:547 msgid "&Preprocess:" msgstr "&Preprocess :" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:529 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:548 msgid "Header" msgstr "En-têtre" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:530 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:549 msgid "&Show header" msgstr "&Affiche l'en-tête" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:531 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:550 msgid "&Header format:" msgstr "Format de l'&en-tête" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:532 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:551 msgid "Override<br>CSS" msgstr "Surcharge <br> CSS" -#: /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:552 msgid "&Profile:" msgstr "&Profil :" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:534 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:553 msgid "&Left Margin:" msgstr "Marge &Gauche :" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:535 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:537 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:539 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:541 +#: /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 " px" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:536 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:555 msgid "&Right Margin:" msgstr "Marge &Droite :" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:538 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:557 msgid "&Top Margin:" msgstr "Marge &Haute :" -#: /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:559 msgid "&Bottom Margin:" msgstr "Marge &Basse :" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:542 +#: /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 "Détection basée sur les titres" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:543 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:564 msgid "&Disable chapter detection" msgstr "&Désactive la détection de chapitres" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:544 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:565 msgid "&Regular expression:" msgstr "Expression &Régulière :" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:545 +#: /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:546 +#: /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:547 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:568 msgid "Tag based detection" msgstr "Détection basée sur des tags" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:548 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:569 msgid "&Page break before tag:" msgstr "Saut de &page avant le tag:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:549 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:570 msgid "&Force page break before tag:" msgstr "&Force un saut de page avant le tag:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:550 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:571 msgid "Force page break before &attribute:" msgstr "Force un saut de page avant l'&attribut :" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:551 +#: /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 "Aide" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:552 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:574 msgid "" "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" " "\"http://www.w3.org/TR/REC-html40/strict.dtd\">\n" "<html><head><meta name=\"qrichtext\" content=\"1\" /><style " "type=\"text/css\">\n" "p, li { white-space: pre-wrap; }\n" -"</style></head><body style=\" font-family:'DejaVu Sans'; font-size:10pt; " -"font-weight:400; font-style:normal;\">\n" +"</style></head><body style=\" font-family:'Candara'; font-size:11pt; font-" +"weight:400; font-style:normal;\">\n" "<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; " "margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-" "family:'Sans Serif'; font-size:9pt;\"></p></body></html>" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:108 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:114 msgid "Edit Meta information" msgstr "Editer les informations Metadata" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:109 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:259 +#: /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 "Informations (metadata)" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:112 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:264 +#: /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 "Clé de tr&i de l'auteur : " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:113 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:265 +#: /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." @@ -1596,32 +1656,39 @@ msgstr "" "Définit comment l'auteur de ce livre doit être classé. Par exemple, Charles " "Dickens peut être classé comme Dickens, Charles." -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:114 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:266 +#: /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 "&Note :" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:115 -#: /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:267 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:268 +#: /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 "Note de ce livre. de 0 à 5 étoiles" -#: /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:269 +#: /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 " étoiles" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:120 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:126 msgid "Add Ta&gs: " msgstr "Ajout de Ta&gs : " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:122 +#: /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 "Ouvre l'éditeur de mots-clefs" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:130 msgid "&Remove tags:" msgstr "&Supprime des mots-clefs :" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:123 +#: /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 "Liste de mots-clefs séparés par des virgules à retirer des livres. " @@ -1651,51 +1718,46 @@ msgstr "Erreur à la récupération de l'image de couverture" msgid "You must specify the ISBN identifier for this book." msgstr "Vous devez fournir l'identifiant ISBN de ce livre." -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:258 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:256 msgid "Edit Meta Information" msgstr "Edition des metadata" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:274 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:275 -msgid "Open Tag Editor" -msgstr "Ouvre l'éditeur de mots-clefs" - -#: /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:277 msgid "Remove unused series (Series that have no books)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:284 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:282 msgid "IS&BN:" msgstr "I&SBN :" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:286 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:284 msgid "Fetch metadata from server" msgstr "Récupération des metadata depuis le serveur" -#: /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:285 msgid "Available Formats" msgstr "Formats disponibles" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:288 +#: /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 "Ajout d'un nouveau format dans la base de données pour ce livre" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:290 +#: /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 "Retire les formats sélectionnés de ce livre de la base de données." -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:296 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:294 msgid "Fetch cover image from server" msgstr "Récupération de l'image de couverture depuis le serveur" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:297 +#: /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 "" "Modifie le nom d'utilisateur et/ou le mot de passe de votre compte à " "LibraryThing.com" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:298 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:296 msgid "Change password" msgstr "Modifie le mot de passe" @@ -1724,13 +1786,13 @@ msgid "Tag" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search.py:18 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:244 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:403 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:251 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:411 msgid "Series" msgstr "Séries" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search.py:19 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:681 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:689 msgid "Format" msgstr "Format" @@ -1841,95 +1903,95 @@ 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:96 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:218 +#: /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:91 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:99 +#: /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:109 +#: /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:110 +#: /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:114 +#: /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:115 +#: /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:120 +#: /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:121 +#: /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:162 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:171 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:194 -msgid "Invalid input" -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 "<p>Could not create recipe. Error:<br>%s" +msgid "Invalid input" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:178 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:200 -msgid "Replace recipe?" +#: /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 "<p>Could not create recipe. Error:<br>%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:187 +#: /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:187 +#: /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:212 +#: /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:213 +#: /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:214 +#: /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:215 +#: /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:216 +#: /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:217 +#: /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:219 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:215 msgid "" "<html><head><meta name=\"qrichtext\" content=\"1\" /><style " "type=\"text/css\">\n" @@ -1943,62 +2005,62 @@ msgid "" "process.</p></body></html>" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:223 +#: /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:224 +#: /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:225 +#: /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:226 +#: /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:227 +#: /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:228 +#: /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:229 +#: /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:231 +#: /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:234 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:237 +#: /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:235 +#: /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:236 +#: /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:238 +#: /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:239 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:235 msgid "" "For help with writing advanced news recipes, please visit <a " "href=\"http://calibre.kovidgoyal.net/user_manual/news.html\">User Recipes</a>" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:240 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:236 msgid "Recipe source code (python)" msgstr "" @@ -2077,106 +2139,101 @@ msgstr "" msgid "ISBN:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:291 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:313 msgid "Job" msgstr "Travaux" -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:292 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:314 msgid "Status" msgstr "Statut" -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:293 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:315 msgid "Progress" msgstr "Progression" -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:294 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:316 msgid "Running time" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:322 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:344 msgid "Error" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:322 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:344 msgid "Finished" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:324 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:346 msgid "Waiting" msgstr "En attente" -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:324 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:346 msgid "Working" msgstr "En cours" -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:354 -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:358 -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:362 +#: /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:355 +#: /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:359 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:381 msgid "Cannot kill already completed jobs." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:363 -msgid "Cannot kill waiting jobs." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:228 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:234 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:238 +#: /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 "Aucun" -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:229 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:402 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:687 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:751 +#: /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 "Tags" -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:235 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:242 msgid "Formats" msgstr "Formats" -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:244 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:251 msgid "Book <font face=\"serif\">%s</font> of %s." msgstr "Livre <font face=\"serif\">%s</font> of %s." -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:388 +#: /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:398 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:749 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:406 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:757 msgid "Size (MB)" msgstr "Taille (MB)" -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:399 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:750 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:407 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:758 msgid "Date" msgstr "Date" -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:400 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:408 msgid "Rating" msgstr "Note" -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:682 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:690 msgid "Path" msgstr "Chemin" -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:686 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:694 msgid "Timestamp" msgstr "Horodatage" -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:786 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:794 msgid "Search (For Advanced Search click the button to the left)" msgstr "" @@ -2198,15 +2255,15 @@ 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:64 +#: /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:155 +#: /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 "<b>Aucun résultat</b> pour la recherche <i>%s</i>." -#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main.py:155 +#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main.py:154 msgid "No matches found" msgstr "Aucun résultat" @@ -2265,80 +2322,95 @@ 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 "Envoi vers la mémoire du lecteur" #: /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:118 +#: /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 "Edition des metadata individuellement" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:119 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:132 msgid "Edit metadata in bulk" msgstr "Edition des metadata par lot" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:122 +#: /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:123 +#: /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:124 +#: /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:138 -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:274 +#: /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 "Enregistrer sur le disque" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:139 +#: /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:142 -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:280 +#: /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 "Visualiser" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:143 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:158 msgid "View specific format" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:158 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:174 msgid "Convert individually" msgstr "Convertion individuelle" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:159 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:175 msgid "Bulk convert" msgstr "Convertion par lot" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:303 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:309 msgid " detected." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:303 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:309 msgid "Device: " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:328 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:334 msgid "Connected " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:340 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:346 msgid "Device database corrupted" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:341 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:347 msgid "" "\n" " <p>The database of books on the reader is corrupted. Try the " @@ -2354,8 +2426,8 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:393 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:467 +#: /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>" @@ -2363,120 +2435,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:396 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:470 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:402 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:476 msgid "Duplicates found!" msgstr "Des doublons ont été détectés !" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:429 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:442 +#: /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:500 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:507 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:501 +#: /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 "" "<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:536 +#: /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:570 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:587 +#: /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 "Erreur à l'édition des metadat" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:570 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:587 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:675 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:736 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:797 +#: /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 "Aucun livre sélectionné" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:658 +#: /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:661 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:677 msgid "No suitable formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:662 +#: /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:675 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:694 msgid "Cannot save to disk" msgstr "Ne peut pas enregistrer sur le disque" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:714 +#: /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:716 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:744 msgid "Fetching news from " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:726 +#: /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:736 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:797 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:764 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:834 msgid "Cannot convert" msgstr "Conversion impossible" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:745 +#: /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:867 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:885 +#: /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 "Aucun livre sélectionné" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:867 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:885 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:899 +#: /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 "Impossible de visualiser" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:873 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:904 +#: /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:900 +#: /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:938 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:976 msgid "Cannot configure" msgstr "Configuration impossible" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:938 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:976 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:961 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:999 msgid "Copying database to " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:976 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1014 msgid "Invalid database" msgstr "Base de données invalide" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:977 +#: /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" @@ -2484,23 +2566,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:985 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1023 msgid "Could not move database" msgstr "Déplacement de la base de données impossible" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1006 +#: /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:1007 +#: /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:1049 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1087 msgid "Error talking to device" msgstr "Erreur pendant la communication avec le lecteur électronique" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1050 +#: /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." @@ -2509,54 +2591,54 @@ msgstr "" "lecteur électronique. Veuillez déconnecter et reconnecter le lecteur " "électronique et redémarrer." -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1076 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1139 msgid "Conversion Error" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1098 +#: /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:1098 +#: /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:1149 +#: /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:1155 +#: /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:1155 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1215 msgid "Update available" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:255 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:256 msgid "calibre" msgstr "calibre" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:256 +#: /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:258 +#: /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:259 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:260 msgid "&Search:" msgstr "&Recherche :" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:260 +#: /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" @@ -2564,7 +2646,7 @@ msgstr "" "Recherche les livres par titre ou auteur <br><br>Recherche en ET pour les " "mots séparés par des espaces." -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:261 +#: /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" @@ -2572,63 +2654,73 @@ msgstr "" "Recherche les livres par titre, auteur, éditeur, tags et commentaires " "<br><br>Recherche en ET pour les mots séparés par des espaces." -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:262 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:263 msgid "Reset Quick Search" msgstr "Réinitialisation de la recherche rapide" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:266 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:267 msgid "Add books" msgstr "Ajout d'un livre" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:267 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:268 msgid "A" msgstr "A" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:268 #: /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 "Suppression du livre" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:270 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:271 msgid "Del" msgstr "Suppression" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:271 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:272 msgid "Edit meta information" msgstr "Edition des metadata" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:272 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:273 msgid "E" msgstr "E" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:273 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:274 msgid "Send to device" msgstr "Envoyer au lecteur" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:275 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:276 msgid "S" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:276 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:277 msgid "Fetch news" msgstr "Récupérer des News" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:277 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:278 msgid "F" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:278 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:279 msgid "Convert E-books" msgstr "Convertir des ebooks" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:279 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:280 msgid "C" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:281 +#: /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 "" @@ -2673,11 +2765,11 @@ msgstr "" msgid "Invalid regular expression: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:166 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:169 msgid "Library" msgstr "Librairie" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:167 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:170 msgid "" "Reader\n" "%s available" @@ -2685,7 +2777,7 @@ msgstr "" "Lecteur \n" "%s disponible" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:168 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:171 msgid "" "Card\n" "%s available" @@ -2693,32 +2785,32 @@ msgstr "" "Carte\n" "%s disponible" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:172 +#: /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:173 +#: /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:174 +#: /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:25 +#: /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:80 +#: /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:88 +#: /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" @@ -2726,39 +2818,39 @@ msgid "" "Default: %%default" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:90 +#: /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:92 +#: /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:94 +#: /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:101 +#: /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:108 +#: /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:170 +#: /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:195 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:197 msgid "" "%prog add [options] file1 file2 file3 ...\n" "\n" @@ -2767,27 +2859,27 @@ msgid "" "the directory related options below. \n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:204 +#: /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:206 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:208 msgid "Process directories recursively" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:208 +#: /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:213 +#: /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:231 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:233 msgid "" "%prog remove ids\n" "\n" @@ -2796,11 +2888,11 @@ msgid "" "command). For example, 23,34,57-85\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:243 +#: /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:263 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:265 msgid "" "%prog add_format [options] id ebook_file\n" "\n" @@ -2809,15 +2901,15 @@ msgid "" "already exists, it is replaced.\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:274 +#: /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:279 +#: /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:287 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:289 msgid "" "\n" "%prog remove_format [options] id fmt\n" @@ -2827,11 +2919,77 @@ msgid "" "EPUB. If the logical book does not have fmt available, do nothing.\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:300 +#: /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:310 +#: /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" @@ -2843,11 +3001,11 @@ msgid "" "For help on an individual command: %%prog command --help\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/parallel.py:131 -msgid "Job killed by user" +#: /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:124 +#: /home/kovid/work/calibre/src/calibre/utils/fontconfig.py:146 msgid "Could not initialize the fontconfig library" msgstr "" @@ -2873,7 +3031,7 @@ 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:115 +#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:117 msgid "Untitled article" msgstr "" @@ -3015,30 +3173,30 @@ msgstr "" msgid "Downloading cover from %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:699 +#: /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:743 +#: /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:749 +#: /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:755 +#: /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:760 +#: /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:775 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:776 msgid "Fetching feed" msgstr "" diff --git a/src/calibre/translations/it.po b/src/calibre/translations/it.po index 445a32c0e7..cb2fa7d4cd 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-12 20:18+0000\n" -"PO-Revision-Date: 2008-06-12 22:40+0000\n" -"Last-Translator: S. Dorscht <Unknown>\n" +"POT-Creation-Date: 2008-06-30 23:41+0000\n" +"PO-Revision-Date: 2008-07-01 16:54+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-06-15 22:20+0000\n" +"X-Launchpad-Export-Date: 2008-07-02 15:52+0000\n" "X-Generator: Launchpad (build Unknown)\n" "Generated-By: pygettext.py 1.5\n" @@ -36,6 +36,12 @@ msgstr "" #~ "Un'espressione regolare. I tag <a> i cui href corrispondono verranno " #~ "ignorati. Predefinita: %default" +#~ msgid "" +#~ "Prevent the automatic insertion of page breaks before detected chapters." +#~ msgstr "" +#~ "Previene l'inserimento automatico di interruzioni di pagina prima dei " +#~ "capitoli individuati" + #~ msgid "" #~ "Force a page break before tags whoose names match this regular expression." #~ msgstr "" @@ -60,6 +66,15 @@ msgstr "" #~ msgid "The author whoose book to search for." #~ msgstr "L'autore del libro da cercare" +#~ msgid "&Access Key;" +#~ msgstr "&Chiave d'accesso;" + +#~ msgid "Cannot kill waiting jobs." +#~ msgstr "Impossibile terminare i lavori in attesa" + +#~ msgid "Job killed by user" +#~ msgstr "Lavoro terminato dall'utente" + #~ msgid "" #~ "Save the text below into a file named recipe.py and send the file to your " #~ "friends, to allow them to use this recipe." @@ -67,11 +82,34 @@ msgstr "" #~ "Salvare il testo sottostante in un file di nome recipe.py e mandaro ai " #~ "propri amici, in modo da permettergli di usare questa formula." -#: /home/kovid/work/calibre/src/calibre/__init__.py:96 +#~ msgid "" +#~ "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" " +#~ "\"http://www.w3.org/TR/REC-html40/strict.dtd\">\n" +#~ "<html><head><meta name=\"qrichtext\" content=\"1\" /><style " +#~ "type=\"text/css\">\n" +#~ "p, li { white-space: pre-wrap; }\n" +#~ "</style></head><body style=\" font-family:'DejaVu Sans'; font-size:10pt; " +#~ "font-weight:400; font-style:normal;\">\n" +#~ "<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; " +#~ "margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-" +#~ "family:'Sans Serif'; font-size:9pt;\"></p></body></html>" +#~ msgstr "" +#~ "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" " +#~ "\"http://www.w3.org/TR/REC-html40/strict.dtd\">\n" +#~ "<html><head><meta name=\"qrichtext\" content=\"1\" /><style " +#~ "type=\"text/css\">\n" +#~ "p, li { white-space: pre-wrap; }\n" +#~ "</style></head><body style=\" font-family:'DejaVu Sans'; font-size:10pt; " +#~ "font-weight:400; font-style:normal;\">\n" +#~ "<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; " +#~ "margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-" +#~ "family:'Sans Serif'; font-size:9pt;\"></p></body></html>" + +#: /home/kovid/work/calibre/src/calibre/__init__.py:133 msgid "%sUsage%s: %s\n" msgstr "%sUso%s: %s\n" -#: /home/kovid/work/calibre/src/calibre/__init__.py:133 +#: /home/kovid/work/calibre/src/calibre/__init__.py:170 msgid "Created by " msgstr "Creato da " @@ -81,6 +119,10 @@ msgstr "Creato da " msgid "Unable to detect the %s disk drive. Try rebooting." msgstr "Impossibile individuare il disco %s. Provare a riavviare." +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:355 +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 msgid "Set the title. Default: filename." msgstr "Imposta il titolo. Predefinito: nome del file" @@ -94,8 +136,14 @@ msgstr "" "Predefinito: %default" #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:76 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:271 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:677 +#: /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 "Sconosciuto" @@ -118,7 +166,7 @@ msgstr "Chiave per la classificazione dell'autore" #: /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:401 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:409 msgid "Publisher" msgstr "Editore" @@ -230,7 +278,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:129 +#: /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 " @@ -240,23 +288,39 @@ 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:135 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:134 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:137 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:136 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:139 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:138 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:141 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:140 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:145 +#: /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 "" +"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 +msgid "" +"Multiply the size of text in rendered tables by this factor. Default is " +"%default" +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 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 " @@ -266,7 +330,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:149 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:153 msgid "" "A regular expression. <a> tags whose href matches will be ignored. Defaults " "to %default" @@ -274,18 +338,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:153 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:157 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:157 -msgid "" -"Prevent the automatic insertion of page breaks before detected chapters." -msgstr "" -"Previene l'inserimento automatico di interruzioni di pagina prima dei " -"capitoli individuati" - #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:161 +msgid "Prevent the automatic detection chapters." +msgstr "Previene l'individuazione automatica dei capitoli." + +#: /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" @@ -293,7 +354,20 @@ 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:164 +#: /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 "" +"Individua l'inizio di un capitolo con un tag che ha l'attributo specificato. " +"Il formato di questa opzione è regexp nome tag,nome attributo,regexp valore " +"attributo. Ad esempio per far corrispondere tutti i tag di intestazione che " +"hanno l'attributo class=\"capitolo\", bisogna usare \"h\\d,class,capitolo\". " +"Predefinito: %default" + +#: /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 " @@ -312,14 +386,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:174 +#: /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 "" "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:176 +#: /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 " @@ -332,15 +406,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:179 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:184 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:182 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:187 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:184 +#: /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." @@ -348,11 +422,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:186 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:191 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:189 +#: /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 " @@ -365,27 +439,27 @@ msgstr "" "nel girare le pagine. Ad esempio: --serif-family \"Times New Roman\"\n" " " -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:197 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:202 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:200 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:205 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:203 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:208 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:207 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:212 msgid "Be verbose while processing" msgstr "Prolisso durante il processamento" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:209 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:214 msgid "Convert to LRS" msgstr "Converte in LRS" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:211 +#: /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." @@ -393,7 +467,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:213 +#: /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 " @@ -467,56 +541,56 @@ msgstr "Opzioni per controllare il comportamento di html2lrf" msgid "Fetching of recipe failed: " msgstr "Scaricamento della formula fallito: " -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:309 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:315 msgid "\tBook Designer file detected." msgstr "\tFile di Book Designer individuato" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:311 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:317 msgid "\tParsing HTML..." msgstr "\tAnalisi HTML..." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:333 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:339 msgid "\tBaen file detected. Re-parsing..." msgstr "\tFile di Baen individuato. Rianalizzo..." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:349 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:355 msgid "Written preprocessed HTML to " msgstr "HTML preprocessato scritto in " -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:366 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:372 msgid "Processing %s" msgstr "Sto processando %s" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:380 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:386 msgid "\tConverting to BBeB..." msgstr "\tConversione in BBeB..." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:518 -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:531 +#: /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 "Impossibile analizzare il file: %s" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:523 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:534 msgid "%s is an empty file" msgstr "%S è un file vuoto" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:543 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:554 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:587 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:598 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:929 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:943 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:967 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:981 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:982 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:996 msgid "" "Could not process image: %s\n" "%s" @@ -524,14 +598,14 @@ msgstr "" "Impossibile processare l'immagine: %s\n" "%s" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1687 +#: /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 "" "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:1689 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1745 msgid "" "Bad table:\n" "%s" @@ -539,11 +613,11 @@ msgstr "" "Tabella malformata:\n" "%s" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1711 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1767 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:1741 +#: /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." @@ -551,19 +625,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:1781 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1839 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:1784 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1842 msgid "Cannot read from: %s" msgstr "Impossibile leggere da: %s" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1913 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1976 msgid "Failed to process opf file" msgstr "Processamento del file OPF fallito" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1919 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1982 msgid "" "Usage: %prog [options] mybook.html\n" "\n" @@ -603,7 +677,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/lrfparser.py:133 msgid "Output LRS file" -msgstr "Estrae un file LRS" +msgstr "Restituisce un file LRS" #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/lrfparser.py:151 msgid "Parsing LRF..." @@ -642,11 +716,11 @@ msgstr "Processamento prolisso" msgid "Convert LRS to LRS, useful for debugging." msgstr "Converte LRS in LRS, utile per il debugging" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:454 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:455 msgid "Invalid LRF file. Could not set metadata." msgstr "File LRF non valido. Impossibile inviare metadati." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:579 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:580 msgid "" "%prog [options] mybook.lrf\n" "\n" @@ -660,44 +734,44 @@ msgstr "" "Mostra/modifica i metadati in un file LRF\n" "\n" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:586 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:18 +#: /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 "Imposta il titolo del libro" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:588 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:589 msgid "Set sort key for the title" msgstr "Imposta la chiave per la classificazione del titolo" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:590 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:591 msgid "Set the author" msgstr "Imposta l'autore" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:592 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:593 msgid "Set sort key for the author" msgstr "Imposta la chiave per la classificazione dell'autore" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:594 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:22 +#: /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 "La categoria a cui questo libro appartiene. Es: Storia" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:597 +#: /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 "" "Percorso a un'immagine che verrà impostata come miniatura di questo file" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:600 +#: /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 "" "Percorso a un file TXT contenente il commento che verrà incluso nel file LRF" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:604 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:605 msgid "Extract thumbnail from LRF file" msgstr "Estrae la miniatura da un file LRF" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:606 +#: /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." @@ -706,11 +780,11 @@ msgstr "" "copertina definita, quindi viene usato un algoritmo euristico per provare ad " "indovinare la copertina." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:608 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:609 msgid "Set book ID" msgstr "Imposta l'ID del libro" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:610 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:611 msgid "Don't know what this is for" msgstr "Non so a cosa serve questo" @@ -793,11 +867,11 @@ msgstr "" "\n" "%prog converte miolibro.txt in miolibro.lrf" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:20 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:23 msgid "Set the authors" msgstr "Imposta gli autori" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:24 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:27 msgid "Set the comment" msgstr "Imposta il commento" @@ -881,11 +955,11 @@ msgstr "" "Scarica un'immagine di copertina per il libro identificato dall'ISBN da " "LibraryThing.com\n" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/lit.py:747 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/lit.py:751 msgid "Usage: %s file.lit" msgstr "Uso: %s file.lit" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/lit.py:754 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/lit.py:758 msgid "Cover saved to" msgstr "Copertina salvata in" @@ -897,19 +971,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:304 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:341 msgid "%prog [options] myebook.mobi" msgstr "%prog [opzioni] miolibro.mobi" -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:306 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:343 msgid "Output directory. Defaults to current directory." msgstr "Cartella in uscita. Predefinita: cartella corrente" -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:325 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:362 msgid "Raw MOBI HTML saved in" msgstr "MOBI HTML raw salvato in" -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:327 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:364 msgid "OEB ebook created in" msgstr "Libro OEB creato in" @@ -917,18 +991,18 @@ msgstr "Libro OEB creato in" #: /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:268 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:396 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:747 +#: /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 "Titolo" #: /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:512 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:285 +#: /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:239 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:246 msgid "Comments" msgstr "Commenti" @@ -947,82 +1021,90 @@ msgstr "EtichettaDiTesto" msgid "Choose Format" msgstr "Scegliere il formato" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:22 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:23 msgid "Basic" msgstr "Base" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:23 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:24 msgid "Advanced" msgstr "Avanzata" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:97 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:102 msgid "<br>Must be a directory." msgstr "<br>Deve essere una cartella" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:97 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:102 msgid "Invalid database location " msgstr "Percorso database non valido " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:97 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:100 +#: /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 "Percorso database non valido" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:100 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:105 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:112 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:117 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:112 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:117 msgid "Compacting..." msgstr "Compattamento..." -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:198 -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:264 +#: /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 "Configurazione" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:199 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:203 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:200 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:204 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:201 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:209 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:211 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:494 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:280 +#: /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:291 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:295 +#: /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:230 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:232 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:233 -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:257 -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:263 -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:265 +#: /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:202 +#: /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" -#: /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 "Format for &single file save:" +msgstr "&Formato per salvataggio singolo file:" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:208 +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 msgid "Default network &timeout:" msgstr "&Timeout predefinito della rete:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:204 +#: /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)" @@ -1030,63 +1112,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:205 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:211 msgid " seconds" msgstr " secondi" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:206 -msgid "&Priority for conversion jobs:" -msgstr "Pri&orità per i lavori di conversione:" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:207 -msgid "Frequently used directories" -msgstr "Cartelle usate frequentemente" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:208 -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:210 -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:212 -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:213 msgid "Toolbar" msgstr "Barra degli strumenti" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:214 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:213 msgid "Large" msgstr "Grande" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:215 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:214 msgid "Medium" msgstr "Media" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:216 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:215 msgid "Small" msgstr "Piccola" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:217 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:216 msgid "&Button size in toolbar" msgstr "&Dimensione bottoni nella 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:217 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 +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 +msgid "Frequently used directories" +msgstr "Cartelle usate frequentemente" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:220 +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 +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 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:220 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:225 msgid "&Compact database" msgstr "&Compatta database" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:221 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:226 msgid "&Metadata from file name" msgstr "&Metadati dal nome del file" @@ -1095,9 +1173,9 @@ msgid "ERROR" msgstr "ERRORE" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:37 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:273 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:397 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:748 +#: /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 "Autore(i)" @@ -1109,20 +1187,24 @@ msgstr "Classificazione autore" msgid "ISBN" msgstr "ISBN" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:105 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:104 msgid "Cannot connect" msgstr "Impossibile connettersi" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:106 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:105 msgid "You must specify a valid access key for isbndb.com" msgstr "" "È necessario specificare delle chiavi d'accesso valide per isbndb.com" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:141 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:139 +msgid "Error fetching metadata" +msgstr "Errore nello scaricamento dei metadati" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:144 msgid "No metadata found" msgstr "Messun metadato trovato" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:141 +#: /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 "" @@ -1147,8 +1229,8 @@ msgstr "" "d'accesso." #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata_ui.py:80 -msgid "&Access Key;" -msgstr "&Chiave d'accesso;" +msgid "&Access Key:" +msgstr "&Chiave d'accesso:" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata_ui.py:81 msgid "Fetch" @@ -1165,7 +1247,7 @@ msgstr "" "Selezionare il libro che corrisponde maggiormente alla propria copia " "dall'elenco sottostante" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/job_view_ui.py:30 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/job_view_ui.py:31 msgid "Details of job" msgstr "Dettagli del lavoro" @@ -1173,6 +1255,10 @@ msgstr "Dettagli del lavoro" msgid "Unavailable" msgstr "Non disponibile" +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/jobs.py:38 +msgid " - Jobs" +msgstr " - Lavori" + #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/jobs_ui.py:38 msgid "Active Jobs" msgstr "Lavori attivi" @@ -1181,73 +1267,73 @@ msgstr "Lavori attivi" msgid "&Stop selected job" msgstr "I&nterrompi il lavoro selezionato" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:57 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:289 +#: /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 "Metadati" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:59 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:290 +#: /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 "Visualizzazione" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:61 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:291 +#: /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 "Imposta pagina" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:63 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:292 +#: /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 "Individuazione capitoli" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:89 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:92 msgid "No available formats" msgstr "Nessun formato disponibile" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:90 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:93 msgid "Cannot convert %s as this book has no supported formats" msgstr "" "Impossibile convertire %s perché questo libro non ha formati supportati" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:94 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:97 msgid "Choose the format to convert into LRF" msgstr "Scegliere il formato da convertire in LRF" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:102 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:105 msgid "Convert %s to LRF" msgstr "Converte %s in LRF" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:105 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:161 +#: /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 "Impostazioni di conversione predefinite" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:171 +#: /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 "Impossibile leggere" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:172 +#: /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 "Non si hanno i permessi per leggere il file: " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:180 +#: /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 "Errore nella lettura del file" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:181 +#: /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 "<p>There was an error reading from file: <br /><b>" msgstr "<p>Si è verificato un errore nella lettura del file: <br /><b>" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:187 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:189 msgid " is not a valid picture" msgstr " non è un'immagine valida" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:253 +#: /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:" @@ -1255,22 +1341,22 @@ msgstr "" "Preprocessa il file prima di convertirlo in LRF. È utile se si conosce la " "fonte da cui proviene il file. Fonti conosciute:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:254 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:256 msgid "<ol><li><b>baen</b> - Books from BAEN Publishers</li>" msgstr "<ol><li><b>baen</b> - Libri dall'editore BAEN</li>" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:255 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:257 msgid "" "<li><b>pdftohtml</b> - HTML files that are the output of the program " "pdftohtml</li>" msgstr "" "<li><b>pdftohtml</b> - File HTML generati dal programma pdftohtml</li>" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:256 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:258 msgid "<li><b>book-designer</b> - HTML0 files from Book Designer</li>" msgstr "<li><b>book-designer</b> - File HTML0 da Book Designer</li>" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:289 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:291 msgid "" "Specify metadata such as title and author for the book.<p>Metadata will be " "updated in the database as well as the generated LRF file." @@ -1278,7 +1364,7 @@ msgstr "" "Specifica metadati come il titolo e l'autore del libro.<p>I metadati saranno " "aggiornati nel database e nel file LRF generato" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:290 +#: /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." @@ -1286,7 +1372,7 @@ msgstr "" "Aggiusta la visualizzazione del file LRF generato specificando parametri " "come la dimensione dei caratteri e la spaziatura tra le parole" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:291 +#: /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." @@ -1294,72 +1380,72 @@ msgstr "" "Specifica le impostazioni della pagina come i margini e la dimensione dello " "schermo del dispositivo" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:292 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:294 msgid "Fine tune the detection of chapter and section headings." msgstr "" "Mette a punto in modo fine l'individuazione delle intestazioni dei capitoli " "e delle sezioni" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:300 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:303 msgid "<font color=\"gray\">No help available</font>" msgstr "<font color=\"gray\">Nessun aiuto disponibile</font>" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:400 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:404 msgid "Bulk convert ebooks to LRF" msgstr "Conversione in gruppo di libri in LRF" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:488 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:507 msgid "Convert to LRF" msgstr "Converti in LRF" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:489 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:508 msgid "Category" msgstr "Categoria" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:490 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:509 msgid "Options" msgstr "Opzioni" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:491 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:292 +#: /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 "Copertina del libro" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:492 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:293 +#: /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 "Ca&mbia l'immagine di copertina:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:493 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:294 +#: /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 "" "Sfoglia per trovare un'immagine da usare come copertina per questo libro" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:495 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:514 msgid "Use cover from &source file" msgstr "Usa copertina del file di &origine" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:496 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:260 +#: /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 "&Titolo: " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:497 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:261 +#: /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 "Cambia il titolo di questo libro" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:498 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:110 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:262 +#: /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 "A&utore(i): " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:499 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:501 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:111 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:263 +#: /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" @@ -1367,30 +1453,30 @@ msgstr "" "Cambia l'autore di questo libro. Autori multipli devono essere separati da " "una virgola" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:500 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:519 msgid "Author So&rt:" msgstr "Classifica&zione autore:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:502 -#: /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:270 +#: /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 "&Editore: " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:503 -#: /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:271 +#: /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 "Cambia l'editore di questo libro" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:504 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:272 +#: /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 "T&ag: " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:505 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:121 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:273 +#: /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. " "<br><br>They can be any words or phrases, separated by commas." @@ -1399,183 +1485,196 @@ msgstr "" "ricerche. <br>Possono essere qualsiasi parola o frase, separati da una " "virgola" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:506 -#: /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:276 +#: /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 "&Serie:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:507 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:508 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:125 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:126 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:277 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:278 +#: /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 "Lista di serie conosciute. È possibile aggiungere nuove serie" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:509 -#: /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:281 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:282 +#: /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 "Indice serie" -#: /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:283 +#: /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 "Libro " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:513 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:532 msgid "Base &font size:" msgstr "&Grandezza caratteri di base:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:514 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:521 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:523 +#: /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 " pt" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:515 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:534 msgid "Embedded Fonts" msgstr "Caratteri inclusi" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:516 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:535 msgid "&Serif:" msgstr "&Con grazie:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:517 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:536 msgid "S&ans-serif:" msgstr "&Senza grazie:" -#: /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:537 msgid "&Monospace:" msgstr "&Dimensione fissa:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:519 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:538 msgid "Source en&coding:" msgstr "C&odifica sorgente:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:520 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:539 msgid "Minimum &indent:" msgstr "I&ndentazione minima:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:522 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:541 msgid "&Word spacing:" msgstr "Spaziat&ura caratteri:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:524 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:543 msgid "Enable auto &rotation of images" msgstr "Abilita &rotazione automatica delle immagini" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:525 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:544 msgid "Insert &blank lines between paragraphs" msgstr "Ins&erisci linee bianche tra i paragrafi" -#: /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:545 msgid "Ignore &tables" msgstr "Ignora ta&belle" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:527 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:546 msgid "Ignore &colors" msgstr "Ignor&a colori" -#: /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:547 msgid "&Preprocess:" msgstr "&Preprocessamento:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:529 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:548 msgid "Header" msgstr "Intestazione" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:530 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:549 msgid "&Show header" msgstr "&Mostra intestazione" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:531 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:550 msgid "&Header format:" msgstr "&Formato intestazione:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:532 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:551 msgid "Override<br>CSS" msgstr "Sovrascrivi<br>CSS" -#: /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:552 msgid "&Profile:" msgstr "&Profilo:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:534 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:553 msgid "&Left Margin:" msgstr "Margine &sinistro:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:535 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:537 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:539 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:541 +#: /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 " px" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:536 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:555 msgid "&Right Margin:" msgstr "Margine &destro:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:538 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:557 msgid "&Top Margin:" msgstr "Margine s&uperiore:" -#: /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:559 msgid "&Bottom Margin:" msgstr "Margine i&nferiore:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:542 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:561 +msgid "&Convert tables to images (good for large/complex tables)" +msgstr "&Converti tabelle in immagini (utile per tabelle grandi/complesse)" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:562 +msgid "&Multiplier for text size in rendered tables:" +msgstr "" +"&Moltiplicatore per la dimensione del testo nelle tabelle trasformate:" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:563 msgid "Title based detection" msgstr "Individuazione basata sul titolo" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:543 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:564 msgid "&Disable chapter detection" msgstr "&Disabilita l'individuazione del capitoli" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:544 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:565 msgid "&Regular expression:" msgstr "&Espressione regolare:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:545 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:566 msgid "Add &chapters to table of contents" msgstr "Aggiungi i &capitoli al sommario" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:546 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:567 msgid "Don't add &links to the table of contents" msgstr "Non aggiungere li&nk al sommario" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:547 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:568 msgid "Tag based detection" msgstr "Individuazione basata sui tag" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:548 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:569 msgid "&Page break before tag:" msgstr "I&nterruzione di pagina prima del tag:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:549 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:570 msgid "&Force page break before tag:" msgstr "&Forza interruzione di pagina prima del tag:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:550 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:571 msgid "Force page break before &attribute:" msgstr "Forza interruzione di pagina prima dell'&attributo:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:551 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:572 +msgid "Detect chapter &at tag:" +msgstr "Indi&vidua capitolo col tag:" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:573 msgid "Help on item" msgstr "Aiuto per l'elemento" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:552 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:574 msgid "" "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" " "\"http://www.w3.org/TR/REC-html40/strict.dtd\">\n" "<html><head><meta name=\"qrichtext\" content=\"1\" /><style " "type=\"text/css\">\n" "p, li { white-space: pre-wrap; }\n" -"</style></head><body style=\" font-family:'DejaVu Sans'; font-size:10pt; " -"font-weight:400; font-style:normal;\">\n" +"</style></head><body style=\" font-family:'Candara'; font-size:11pt; font-" +"weight:400; font-style:normal;\">\n" "<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; " "margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-" "family:'Sans Serif'; font-size:9pt;\"></p></body></html>" @@ -1585,28 +1684,28 @@ msgstr "" "<html><head><meta name=\"qrichtext\" content=\"1\" /><style " "type=\"text/css\">\n" "p, li { white-space: pre-wrap; }\n" -"</style></head><body style=\" font-family:'DejaVu Sans'; font-size:10pt; " -"font-weight:400; font-style:normal;\">\n" +"</style></head><body style=\" font-family:'Candara'; font-size:11pt; font-" +"weight:400; font-style:normal;\">\n" "<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; " "margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-" "family:'Sans Serif'; font-size:9pt;\"></p></body></html>" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:108 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:114 msgid "Edit Meta information" msgstr "Modifica metadati" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:109 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:259 +#: /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 "Metadati" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:112 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:264 +#: /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 "&Classificazione autore: " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:113 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:265 +#: /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." @@ -1614,32 +1713,39 @@ msgstr "" "Specifica come deve essere classificato l'autore di questo libro. Ad " "esempio, Charles Dickens deve essere classificato come Dickens, Charles." -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:114 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:266 +#: /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 "&Giudizio:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:115 -#: /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:267 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:268 +#: /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 "Giudizio su questo libro. 0-5 stelle" -#: /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:269 +#: /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 " stelle" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:120 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:126 msgid "Add Ta&gs: " msgstr "&Aggiungi tag: " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:122 +#: /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 "Apri l'editor dei tag" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:130 msgid "&Remove tags:" msgstr "&Rimuovi tag:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:123 +#: /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 "Lista separata da virgole dei tag da rimuovere dal libro " @@ -1669,50 +1775,45 @@ msgstr "Impossibile scaricare la copertina" msgid "You must specify the ISBN identifier for this book." msgstr "È necessario specificare il codice ISBN di questo libro" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:258 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:256 msgid "Edit Meta Information" msgstr "Modifica metadati" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:274 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:275 -msgid "Open Tag Editor" -msgstr "Apri l'editor dei tag" - -#: /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:277 msgid "Remove unused series (Series that have no books)" msgstr "Rimuovi serie inutilizzate (che non hanno libri)" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:284 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:282 msgid "IS&BN:" msgstr "IS&BN:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:286 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:284 msgid "Fetch metadata from server" msgstr "Scarica metadati dal server" -#: /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:285 msgid "Available Formats" msgstr "Formati disponibili" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:288 +#: /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 "Aggiungi un nuovo formato al database per questo libro" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:290 +#: /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 "Rimuovi il formato selezionato dal database per questo libro" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:296 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:294 msgid "Fetch cover image from server" msgstr "Scarica immagine di copertina dal server" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:297 +#: /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 "" "Cambia il nome utente e/o password del proprio account su LibraryThing.com" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:298 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:296 msgid "Change password" msgstr "Cambia password" @@ -1741,13 +1842,13 @@ msgid "Tag" msgstr "Tag" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search.py:18 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:244 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:403 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:251 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:411 msgid "Series" msgstr "Serie" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search.py:19 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:681 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:689 msgid "Format" msgstr "Formato" @@ -1861,95 +1962,95 @@ msgid "Recipe for " msgstr "Formula per " #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:86 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:96 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:218 +#: /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 "Passa alla modalità avanzata" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:91 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:99 +#: /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 "Passa alla modalità base" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:109 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:110 msgid "Feed must have a title" msgstr "Il feed deve avere un titolo" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:110 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:111 msgid "The feed must have a title" msgstr "Il feed deve avere un titolo" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:114 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:115 msgid "Feed must have a URL" msgstr "Il feed deve avere una URL" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:115 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:116 msgid "The feed %s must have a URL" msgstr "Il feed %S deve avere una URL" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:120 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:121 msgid "Already exists" msgstr "Esiste già" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:121 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:122 msgid "This feed has already been added to the recipe" msgstr "Questo feed è già stato aggiunto alla formula" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:162 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:171 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:194 -msgid "Invalid input" -msgstr "Input non valido" - #: /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 "Input non valido" + +#: /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 "<p>Could not create recipe. Error:<br>%s" msgstr "<p>Impossibile creare la formula. Errore:<br>%s" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:178 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:200 +#: /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 "Sovrascrivere la formula?" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:179 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:201 +#: /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 "Esiste già una formula personalizzata di nome %s. Sovrascriverla?" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:187 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:188 msgid "Choose a recipe file" msgstr "Scegliere un file di formula" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:187 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:188 msgid "Recipes" msgstr "Formule" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:212 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:208 msgid "Add custom news source" msgstr "Aggiungi una fonte di notizie personalizzata" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:213 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:209 msgid "Available user recipes" msgstr "Formule utente disponibili" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:214 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:210 msgid "Add/Update &recipe" msgstr "Aggiungi/Aggiorna for&mula" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:215 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:211 msgid "&Remove recipe" msgstr "&Rimuovi formula" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:216 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:212 msgid "&Share recipe" msgstr "Condi&vidi formula" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:217 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:213 msgid "&Load recipe from file" msgstr "Carica formula &da file" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:219 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:215 msgid "" "<html><head><meta name=\"qrichtext\" content=\"1\" /><style " "type=\"text/css\">\n" @@ -1973,56 +2074,56 @@ msgstr "" "parte dei feed, bisognerà usare la \"Modalità avanzata\" per personalizzare " "ulteriormente il processo di scaricamento.</p></body></html>" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:223 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:219 msgid "Recipe &title:" msgstr "&Titolo formula:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:224 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:220 msgid "&Oldest article:" msgstr "Arti&colo più vecchio:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:225 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:221 msgid "The oldest article to download" msgstr "L'articolo più vecchio da scaricare" -#: /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:222 msgid " days" msgstr " giorni" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:227 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:223 msgid "&Max. number of articles per feed:" msgstr "&Numero massimo di articoli per feed:" -#: /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:224 msgid "Maximum number of articles to download per feed." msgstr "Massimo numero di articoli da scaricare per feed" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:229 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:225 msgid "Feeds in recipe" msgstr "Feed nella formula" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:231 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:227 msgid "Remove feed from recipe" msgstr "Rimuove il feed dalla formula" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:234 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:237 +#: /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 "Aggiunge il feed alla formula" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:235 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:231 msgid "&Feed title:" msgstr "Tit&olo del feed:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:236 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:232 msgid "Feed &URL:" msgstr "&URL del feed:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:238 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:234 msgid "&Add feed" msgstr "&Aggiungi feed" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:239 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:235 msgid "" "For help with writing advanced news recipes, please visit <a " "href=\"http://calibre.kovidgoyal.net/user_manual/news.html\">User Recipes</a>" @@ -2031,7 +2132,7 @@ msgstr "" "href=\"http://calibre.kovidgoyal.net/user_manual/news.html\">Formule " "utente</a>" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:240 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:236 msgid "Recipe source code (python)" msgstr "Codice sorgente formula (python)" @@ -2116,45 +2217,44 @@ msgstr "Nome del gruppo per l'espressione regolare (?P<series_index>)" msgid "ISBN:" msgstr "ISBN:" -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:291 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:313 msgid "Job" msgstr "Lavoro" -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:292 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:314 msgid "Status" msgstr "Stato" -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:293 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:315 msgid "Progress" msgstr "Progresso" -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:294 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:316 msgid "Running time" msgstr "Tempo di esecuzione" -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:322 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:344 msgid "Error" msgstr "Errore" -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:322 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:344 msgid "Finished" msgstr "Finito" -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:324 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:346 msgid "Waiting" msgstr "In attesa" -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:324 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:346 msgid "Working" msgstr "In esecuzione" -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:354 -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:358 -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:362 +#: /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 "Impossibile terminare il lavoro" -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:355 +#: /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." @@ -2162,62 +2262,58 @@ msgstr "" "Impossibile terminare i lavori che stanno comunicando col dispositivo dato " "che potrebbe causare una corruzione dei dati" -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:359 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:381 msgid "Cannot kill already completed jobs." msgstr "Impossibile terminare i lavori già completati" -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:363 -msgid "Cannot kill waiting jobs." -msgstr "Impossibile terminare i lavori in attesa" - -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:228 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:234 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:238 +#: /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 "Nessuno" -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:229 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:402 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:687 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:751 +#: /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 "Tag" -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:235 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:242 msgid "Formats" msgstr "Formati" -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:244 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:251 msgid "Book <font face=\"serif\">%s</font> of %s." msgstr "Libro <font face=\"serif\">%s</font> di %s" -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:388 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:396 msgid "Double click to <b>edit</b> me<br><br>" msgstr "Doppio clic per modificarmi" -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:398 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:749 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:406 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:757 msgid "Size (MB)" msgstr "Dimensione (MB)" -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:399 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:750 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:407 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:758 msgid "Date" msgstr "Data" -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:400 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:408 msgid "Rating" msgstr "Giudizio" -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:682 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:690 msgid "Path" msgstr "Percorso" -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:686 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:694 msgid "Timestamp" msgstr "Timestamp" -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:786 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:794 msgid "Search (For Advanced Search click the button to the left)" msgstr "Cerca (Per la ricerca avanzata fare clic sul bottone a sinistra)" @@ -2237,15 +2333,15 @@ msgstr "Unisci" 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/main.py:64 +#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main.py:63 msgid " - LRF Viewer" msgstr " - Lettore LRF" -#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main.py:155 +#: /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 "<b>Nessuna corrispondenza</b> trovata per la frase <i>%s</i>" -#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main.py:155 +#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main.py:154 msgid "No matches found" msgstr "Nessuna corrispondenza trovata" @@ -2306,26 +2402,37 @@ 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: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: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:118 +#: /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 "e elimina dalla libreria" + +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:119 +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 msgid "Edit metadata individually" msgstr "Modifica metadati individualmente" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:119 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:132 msgid "Edit metadata in bulk" msgstr "Modifica metadati in gruppo" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:122 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:135 msgid "Add books from a single directory" msgstr "Aggiungi libri da una singola cartella" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:123 +#: /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)" @@ -2333,7 +2440,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:124 +#: /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)" @@ -2341,49 +2448,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:138 -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:274 +#: /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 "Salva su disco" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:139 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:153 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:142 -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:280 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:154 +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_ui.py:281 msgid "View" msgstr "Leggi" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:143 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:158 msgid "View specific format" msgstr "Leggi uno specifico formato" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:158 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:174 msgid "Convert individually" msgstr "Converti individualmente" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:159 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:175 msgid "Bulk convert" msgstr "Converti in gruppo" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:303 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:309 msgid " detected." msgstr " individuato." -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:303 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:309 msgid "Device: " msgstr "Dispositivo: " -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:328 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:334 msgid "Connected " msgstr "Connesso " -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:340 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:346 msgid "Device database corrupted" msgstr "Database del dispositivo corrotto" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:341 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:347 msgid "" "\n" " <p>The database of books on the reader is corrupted. Try the " @@ -2412,8 +2523,8 @@ msgstr "" " </ol>\n" " " -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:393 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:467 +#: /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>" @@ -2421,53 +2532,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:396 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:470 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:402 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:476 msgid "Duplicates found!" msgstr "Scoperti duplicati!" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:429 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:442 +#: /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 "Caricamento libri nel dispositivo." -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:500 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:507 msgid "No space on device" msgstr "Spazio insufficiente sul dispositivo" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:501 +#: /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 "" "<p>Impossibile salvare libri sul dispositivo perché non c'è più spazio " "disponibile " -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:536 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:546 msgid "Deleting books from device." msgstr "Cancellamento libri dal dispositivo." -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:570 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:587 +#: /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 "Impossibile modificare i metadati" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:570 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:587 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:675 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:736 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:797 +#: /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 "Nessun libro selezionato" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:658 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:674 msgid "Sending books to device." msgstr "Invio libri al dispositivo." -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:661 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:677 msgid "No suitable formats" msgstr "Nessun formato adatto" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:662 +#: /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>" @@ -2475,68 +2586,80 @@ 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:675 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:694 msgid "Cannot save to disk" msgstr "Impossibile salvare sul disco" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:714 +#: /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 "" +"<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 +msgid "Could not save some ebooks" +msgstr "Impossibile salvare alcuni libri" + +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:742 msgid "Fetch news from " msgstr "Scarica notizie da " -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:716 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:744 msgid "Fetching news from " msgstr "Scaricamento notizie da " -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:726 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:754 msgid "News fetched. Uploading to device." msgstr "Notizie scaricate. Salvataggio sul dispositivo" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:736 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:797 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:764 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:834 msgid "Cannot convert" msgstr "Impossibile convertire" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:745 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:773 msgid "Starting Bulk conversion of %d books" msgstr "Avviamento conversione in gruppo di %d libri" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:867 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:885 +#: /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 "Nessun libro selezionato" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:867 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:885 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:899 +#: /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 "Impossibile leggere" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:873 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:904 +#: /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 "Scegliere il formato da leggere" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:900 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:938 msgid "%s has no available formats." msgstr "%s non ha formati disponibili" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:938 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:976 msgid "Cannot configure" msgstr "Impossibile configurare" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:938 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:976 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:961 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:999 msgid "Copying database to " msgstr "Copiatura database in " -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:976 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1014 msgid "Invalid database" msgstr "Database non valido" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:977 +#: /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" @@ -2544,25 +2667,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:985 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1023 msgid "Could not move database" msgstr "Impossibile spostare il database" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1006 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1044 msgid "No detailed info available" msgstr "Nessuna informazione dettagliata disponibile" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1007 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1045 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:1049 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1087 msgid "Error talking to device" msgstr "Errore di comunicazione col dispositivo" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1050 +#: /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." @@ -2570,15 +2693,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:1076 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1139 msgid "Conversion Error" msgstr "Errore di conversione" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1098 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1158 msgid "Database does not exist" msgstr "Il database non esiste" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1098 +#: /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." @@ -2586,7 +2709,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:1149 +#: /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>" @@ -2594,7 +2717,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:1155 +#: /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>. " @@ -2604,27 +2727,27 @@ 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:1155 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1215 msgid "Update available" msgstr "Aggiornamento disponibile" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:255 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:256 msgid "calibre" msgstr "calibre" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:256 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:257 msgid "Advanced search" msgstr "Ricerca avanzata" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:258 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:259 msgid "Alt+S" msgstr "Alt+S" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:259 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:260 msgid "&Search:" msgstr "&Cerca:" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:260 +#: /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" @@ -2632,7 +2755,7 @@ msgstr "" "Cerca nella lista dei libri per titolo o autore<br><br>Parole separate da " "spazi hanno come operatore AND" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:261 +#: /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" @@ -2640,63 +2763,75 @@ msgstr "" "Cerca nella lista dei libri per titolo, autore, editore, tag e " "commenti<br><br>Parole separate da spazi hanno come operatore AND" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:262 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:263 msgid "Reset Quick Search" msgstr "Resetta ricerca veloce" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:266 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:267 msgid "Add books" msgstr "Aggiungi libri" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:267 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:268 msgid "A" msgstr "A" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:268 #: /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 "Rimuovi libri" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:270 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:271 msgid "Del" msgstr "Canc" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:271 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:272 msgid "Edit meta information" msgstr "Modifica metadati" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:272 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:273 msgid "E" msgstr "E" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:273 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:274 msgid "Send to device" msgstr "Invia al dispositivo" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:275 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:276 msgid "S" msgstr "S" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:276 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:277 msgid "Fetch news" msgstr "Scarica notizie" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:277 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:278 msgid "F" msgstr "F" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:278 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:279 msgid "Convert E-books" msgstr "Converti libri" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:279 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:280 msgid "C" msgstr "C" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:281 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:282 msgid "V" msgstr "V" +#: /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 "" +"Redireziona l'output della console a una finestra di dialogo (sia stdout ceh " +"stderr). Utile nelle finestre dove l'applicazione GUI non ha un output." + +#: /home/kovid/work/calibre/src/calibre/gui2/main_window.py:52 +msgid "ERROR: Unhandled exception" +msgstr "ERRORE: eccezione non gestita" + #: /home/kovid/work/calibre/src/calibre/gui2/news.py:32 msgid "Add a custom news source" msgstr "Aggiungi una fonte di notizie personalizzata" @@ -2746,11 +2881,11 @@ msgstr "Espressione regolare non valida" msgid "Invalid regular expression: %s" msgstr "Espressione regolare non valida: %s" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:166 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:169 msgid "Library" msgstr "Biblioteca" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:167 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:170 msgid "" "Reader\n" "%s available" @@ -2758,7 +2893,7 @@ msgstr "" "Lettore\n" "%s disponibili" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:168 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:171 msgid "" "Card\n" "%s available" @@ -2766,24 +2901,24 @@ msgstr "" "Scheda\n" "%s disponibili" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:172 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:175 msgid "Click to see the list of books available on your computer" msgstr "" "Fare clic per vedere la lista di libri disponibili sul proprio computer" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:173 +#: /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 "" "Fare clic per vedere la lista di libri nella memoria principale del proprio " "lettore" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:174 +#: /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 "" "Fare clic per vedere la lista di libri nella scheda di memoria del proprio " "lettore" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:25 +#: /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." @@ -2791,7 +2926,7 @@ msgstr "" "Percorso al database di calibre. L'opzione predefinita è quella di usare il " "percorso salvato nelle opzioni." -#: /home/kovid/work/calibre/src/calibre/library/cli.py:80 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:82 msgid "" "%prog list [options]\n" "\n" @@ -2801,7 +2936,7 @@ msgstr "" "\n" "Mostra un elenco dei libri disponibili nel database di calibre. \n" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:88 +#: /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" @@ -2813,7 +2948,7 @@ msgstr "" "Campi disponibili: %s\n" "Predefinito: %%default" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:90 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:92 msgid "" "The field by which to sort the results.\n" "Available fields: %s\n" @@ -2823,11 +2958,11 @@ msgstr "" "Campi disponibili: %s\n" "Predefinito: %%default" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:92 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:94 msgid "Sort results in ascending order" msgstr "Ordina i risultati in ordine crescente" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:94 +#: /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 " @@ -2837,15 +2972,15 @@ msgstr "" "documentazione relativa alla ricerca nel Manuale Utente. L'opzione " "predefinita è quella di non filtrare." -#: /home/kovid/work/calibre/src/calibre/library/cli.py:101 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:103 msgid "Invalid fields. Available fields:" msgstr "Campi non validi. Campi disponibili:" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:108 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:110 msgid "Invalid sort field. Available fields:" msgstr "Campo per l'ordinamento non valido. Campi disponibili:" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:170 +#: /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):" @@ -2853,7 +2988,7 @@ msgstr "" "I seguenti libri non sono stati aggiunti perché già esistenti nel database " "(vedere l'opzione --duplicates):" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:195 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:197 msgid "" "%prog add [options] file1 file2 file3 ...\n" "\n" @@ -2867,7 +3002,7 @@ msgstr "" "cartelle, leggere\n" "le opzioni dedicate alle cartelle in basso. \n" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:204 +#: /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" @@ -2875,21 +3010,21 @@ msgstr "" "Assume che ogni cartella abbia un solo libro logico e che tutti i file " "presenti siano diversi formati per quel libro" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:206 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:208 msgid "Process directories recursively" msgstr "Processa cartelle ricorsivamente" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:208 +#: /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 "Aggiunge libri al database anche se esistono già." -#: /home/kovid/work/calibre/src/calibre/library/cli.py:213 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:215 msgid "You must specify at least one file to add" msgstr "È necessario specificare almeno un file da aggiungere" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:231 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:233 msgid "" "%prog remove ids\n" "\n" @@ -2903,11 +3038,11 @@ msgstr "" "separata da virgole di numeri id (è possibile ottenere i numeri id usando il " "comando list). Ad esempio: 23,34,57-85\n" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:243 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:245 msgid "You must specify at least one book to remove" msgstr "È necessario specificare almeno un libro da aggiungere" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:263 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:265 msgid "" "%prog add_format [options] id ebook_file\n" "\n" @@ -2921,15 +3056,15 @@ msgstr "" "identificato da id. È possibile ottenere gli id usando il comando list. Se " "il formato esiste già, verrà sovrascritto.\n" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:274 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:276 msgid "You must specify an id and an ebook file" msgstr "È necessario specificare un id e un file ebook" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:279 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:281 msgid "ebook file must have an extension" msgstr "I file ebook devono avere un'estensione" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:287 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:289 msgid "" "\n" "%prog remove_format [options] id fmt\n" @@ -2946,11 +3081,102 @@ msgstr "" "file come LRF, TXT o EPUB. Se il libro logico non ha un fmt disponibile, non " "fa niente.\n" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:300 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:302 msgid "You must specify an id and a format" msgstr "È necessario specificare un id e un formato" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:310 +#: /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 "" +"\n" +"%prog show_metedata [opzioni] id\n" +"\n" +"Mostra i metedati salvati nel database di calibre per il libro identificato " +"da id. \n" +"id è un numero id dalla lista dei comandi. \n" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:328 +msgid "Print metadata in OPF form (XML)" +msgstr "Stampa i metafati in formato OPF (XML)" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:333 +msgid "You must specify an id" +msgstr "È necessario specificare un id" + +#: /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 "" +"\n" +"%prog set_metadata [opzioni] id /percorso/a/metadati.opf\n" +"\n" +"Imposta i metadati salvati nel database di calibre per il libro identificato " +"da id\n" +"presi dal file OPF metadati.opf. id è un numero id dalla lista dei comandi. " +"È \n" +"possibile farsi un'idea generale del formato OPF usando il parametro --as-" +"opf\n" +"nel comando show_metadata.\n" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:360 +msgid "You must specify an id and a metadata file" +msgstr "È necessario specificare un id e un file di metadati" + +#: /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 "" +"%prog export [opzioni] id \n" +"\n" +"Esporta i libri specificati da id (lista separata da virgole) nel " +"filesystem.\n" +"L'operazione di esportazione salva tutti i formati del libro, la sua " +"copertina\n" +"e i metadati (in un file opf). È possibile prendere i dumeri di id dalla " +"lista dei comandi. \n" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:380 +msgid "Export all books in database, ignoring the list of ids." +msgstr "Esporta tutti i libri del database, ignorando la lista di id." + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:382 +msgid "Export books to the specified directory. Default is" +msgstr "Esporta i libri nella cartella specificata. Predefinita:" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:384 +msgid "Export all books into a single directory" +msgstr "Esporta tutti i libri in una singola cartell" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:386 +msgid "Create file names as author - title instead of title - author" +msgstr "" +"Crea i nomi dei file come \"autore - titolo\" invece di \"titolo - autore\"" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:391 +msgid "You must specify some ids or the %s option" +msgstr "È necessario specificare qualche id o l'opzione %s" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:401 msgid "" "%%prog command [options] [arguments]\n" "\n" @@ -2966,11 +3192,11 @@ msgstr "" " \n" "Per aiuto su un singolo comando: %%prog comando --help\n" -#: /home/kovid/work/calibre/src/calibre/parallel.py:131 -msgid "Job killed by user" -msgstr "Lavoro terminato dall'utente" +#: /home/kovid/work/calibre/src/calibre/parallel.py:317 +msgid "Could not launch worker process." +msgstr "Impossibile avviare il gestore dei lavori." -#: /home/kovid/work/calibre/src/calibre/utils/fontconfig.py:124 +#: /home/kovid/work/calibre/src/calibre/utils/fontconfig.py:146 msgid "Could not initialize the fontconfig library" msgstr "Impossibile inizializzare la libreria fontconfig" @@ -2996,7 +3222,7 @@ msgid "Unknown feed" msgstr "Feed sconosciuto" #: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:95 -#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:115 +#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:117 msgid "Untitled article" msgstr "Articolo senza titolo" @@ -3175,11 +3401,11 @@ msgstr "Impossibile scaricare la copertina: %s" msgid "Downloading cover from %s" msgstr "Scaricamento copertina da %s" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:699 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:698 msgid "Untitled Article" msgstr "Articolo senza titolo" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:743 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:744 msgid "" "\n" "Downloaded article %s from %s\n" @@ -3189,19 +3415,19 @@ msgstr "" "Scaricato articolo %s da %s\n" "%s" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:749 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:750 msgid "Article downloaded: %s" msgstr "Articolo scaricato: %s" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:755 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:756 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:760 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:761 msgid "Article download failed: %s" msgstr "Scaricamento fallito dell'articolo: %s" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:775 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:776 msgid "Fetching feed" msgstr "Scaricamento feed" diff --git a/src/calibre/translations/nds.po b/src/calibre/translations/nds.po index 9e837a78bd..702ab4ba47 100644 --- a/src/calibre/translations/nds.po +++ b/src/calibre/translations/nds.po @@ -5,16 +5,16 @@ # Kovid Goyal <kovid@kovidgoyal.net>, 2007, 2008. msgid "" msgstr "" -"Project-Id-Version: nds\n" +"Project-Id-Version: de\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2008-06-12 20:18+0000\n" -"PO-Revision-Date: 2008-06-12 22:39+0000\n" +"POT-Creation-Date: 2008-06-30 23:41+0000\n" +"PO-Revision-Date: 2008-07-01 17:48+0000\n" "Last-Translator: S. Dorscht <Unknown>\n" -"Language-Team: nds\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-06-15 22:20+0000\n" +"X-Launchpad-Export-Date: 2008-07-02 15:52+0000\n" "X-Generator: Launchpad (build Unknown)\n" "Generated-By: pygettext.py 1.5\n" @@ -52,6 +52,15 @@ msgstr "" #~ msgid "The author whoose book to search for." #~ msgstr "Der Autor des gesuchten Buches." +#~ msgid "&Access Key;" +#~ msgstr "&Zugriffsschlüssel:" + +#~ msgid "Cannot kill waiting jobs." +#~ msgstr "Kann Aufträge in Warteliste nicht abbrechen." + +#~ msgid "Job killed by user" +#~ msgstr "Auftrag durch Benutzer abgebrochen" + #~ msgid "" #~ "Save the text below into a file named recipe.py and send the file to your " #~ "friends, to allow them to use this recipe." @@ -59,11 +68,34 @@ msgstr "" #~ "Speichern Sie den unten stehenden Text als Rezept.py Datei und senden Sie " #~ "die Datei an Freunde, damit sie dieses Rezept ebenfalls benutzen können." -#: /home/kovid/work/calibre/src/calibre/__init__.py:96 +#~ msgid "" +#~ "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" " +#~ "\"http://www.w3.org/TR/REC-html40/strict.dtd\">\n" +#~ "<html><head><meta name=\"qrichtext\" content=\"1\" /><style " +#~ "type=\"text/css\">\n" +#~ "p, li { white-space: pre-wrap; }\n" +#~ "</style></head><body style=\" font-family:'DejaVu Sans'; font-size:10pt; " +#~ "font-weight:400; font-style:normal;\">\n" +#~ "<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; " +#~ "margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-" +#~ "family:'Sans Serif'; font-size:9pt;\"></p></body></html>" +#~ msgstr "" +#~ "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" " +#~ "\"http://www.w3.org/TR/REC-html40/strict.dtd\">\n" +#~ "<html><head><meta name=\"qrichtext\" content=\"1\" /><style " +#~ "type=\"text/css\">\n" +#~ "p, li { white-space: pre-wrap; }\n" +#~ "</style></head><body style=\" font-family:'DejaVu Sans'; font-size:10pt; " +#~ "font-weight:400; font-style:normal;\">\n" +#~ "<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; " +#~ "margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-" +#~ "family:'Sans Serif'; font-size:9pt;\"></p></body></html>" + +#: /home/kovid/work/calibre/src/calibre/__init__.py:133 msgid "%sUsage%s: %s\n" msgstr "%sBenutzung%s: %s\n" -#: /home/kovid/work/calibre/src/calibre/__init__.py:133 +#: /home/kovid/work/calibre/src/calibre/__init__.py:170 msgid "Created by " msgstr "Erstellt von " @@ -71,7 +103,11 @@ msgstr "Erstellt von " #: /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 "Konnte das %s Laufwerk nicht finden. Neustart versuchen." +msgstr "Konnte das Laufwerk %s nicht finden. Versuchen Sie einen Neustart." + +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:355 +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 msgid "Set the title. Default: filename." @@ -86,8 +122,14 @@ msgstr "" "angegeben werden. Voreinstellung: %default" #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:76 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:271 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:677 +#: /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 "Unbekannt" @@ -110,7 +152,7 @@ msgstr "Sortierung nach Autor" #: /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:401 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:409 msgid "Publisher" msgstr "Herausgeber" @@ -169,7 +211,7 @@ msgstr "Paragraphen durch Leerzeilen trennen." #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:107 msgid "Add a header to all the pages with title and author." -msgstr "Kopfzeile mit Titel und Autornamen für alle Seiten einfügen." +msgstr "Kopfzeile mit Titel und Autor für alle Seiten einfügen." #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:109 msgid "" @@ -222,7 +264,7 @@ msgid "" msgstr "" "Inhalt schwarz-weiß rendern anstatt in den in HTML oder CSS angegeben Farben." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:129 +#: /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 " @@ -232,23 +274,39 @@ 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:135 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:134 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:137 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:136 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:139 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:138 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:141 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:140 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:145 +#: /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 "" +"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 +msgid "" +"Multiply the size of text in rendered tables by this factor. Default is " +"%default" +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 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 " @@ -258,26 +316,23 @@ 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:149 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:153 msgid "" "A regular expression. <a> tags whose href matches will be ignored. Defaults " "to %default" msgstr "" -"Ein regulärer Ausdruck. <a> tags, deren Verknüpfungen ignoriert werden. " +"Ein regulärer Ausdruck. <a> Elemente, deren Verknüpfungen ignoriert werden. " "Voreinstellung %default" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:153 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:157 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:157 -msgid "" -"Prevent the automatic insertion of page breaks before detected chapters." -msgstr "" -"Automatisches Einfügen von Seitenumbrüchen vor ermittelten Kapiteln " -"verhindern." - #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:161 +msgid "Prevent the automatic detection chapters." +msgstr "Automatische Erkennung von Kapiteln verhindern." + +#: /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" @@ -285,7 +340,20 @@ 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:164 +#: /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 "" +"Erkenne einen Kapitelanfang anhand des Elements mit dem angegebenen " +"Attribut. Das Format dieser Option ist tagname regexp,attribute " +"name,attribute value regexp. Um zum Beispiel alle \"header\" (\"h\") " +"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 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 " @@ -304,14 +372,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:174 +#: /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 "" "Seitenumbruch erzwingen vor Elementen, deren Namen diesem regulären Ausdruck " "entsprechen." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:176 +#: /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 " @@ -324,16 +392,16 @@ msgstr "" "class=\"chapter\" anzupassen, verwenden Sie \"h\\d,class,chapter\". " "Voreinstellung ist %default" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:179 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:184 msgid "Add detected chapters to the table of contents." -msgstr "Ermittelte Kapitel zum Inhaltsverzeichnis hinzufügen." +msgstr "Die ermittelten Kapitel zum Inhaltsverzeichnis hinzufügen." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:182 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:187 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:184 +#: /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." @@ -341,11 +409,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:186 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:191 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:189 +#: /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 " @@ -359,27 +427,27 @@ msgstr "" "angegeben: --serif-family \"Times New Roman\"\n" " " -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:197 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:202 msgid "The serif family of fonts to embed" msgstr "Serife Schriftartfamilie einbetten" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:200 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:205 msgid "The sans-serif family of fonts to embed" msgstr "Serifenlose Schriftartfamilie einbetten" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:203 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:208 msgid "The monospace family of fonts to embed" msgstr "Nichtproportionale Schriftartfamilie einbetten" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:207 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:212 msgid "Be verbose while processing" msgstr "Mehr Wörter bei der weiteren Verarbeitung angeben." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:209 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:214 msgid "Convert to LRS" msgstr "Zu LRS konvertieren" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:211 +#: /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." @@ -388,7 +456,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:213 +#: /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 " @@ -446,7 +514,7 @@ msgstr "" "%prog [options] dateiname.fb2\n" "\n" "\n" -"%prog ckonvertiert dateiname.fb2 in dateiname.lrf" +"%prog konvertiert dateiname.fb2 in dateiname.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 @@ -465,56 +533,56 @@ msgstr "Einstellungen für html2lrf" msgid "Fetching of recipe failed: " msgstr "Abruf des Rezepts misslungen: " -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:309 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:315 msgid "\tBook Designer file detected." msgstr "\tBook Designer Datei erkannt." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:311 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:317 msgid "\tParsing HTML..." msgstr "\tAnalysiere HTML..." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:333 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:339 msgid "\tBaen file detected. Re-parsing..." msgstr "\tBaen Datei erkannt. Analysiere erneut..." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:349 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:355 msgid "Written preprocessed HTML to " msgstr "Vorverarbeitetes HTML gespeichert unter " -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:366 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:372 msgid "Processing %s" msgstr "Verarbeite %s" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:380 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:386 msgid "\tConverting to BBeB..." msgstr "\tKonvertiere in BBeB..." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:518 -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:531 +#: /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 "Konnte Datei nicht analysieren: %s" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:523 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:534 msgid "%s is an empty file" msgstr "%s ist eine leere Datei" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:543 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:554 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:587 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:598 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:929 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:943 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:967 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:981 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:982 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:996 msgid "" "Could not process image: %s\n" "%s" @@ -522,14 +590,14 @@ msgstr "" "Konnte Bild nicht verarbeiten: %s\n" "%s" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1687 +#: /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 "" "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:1689 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1745 msgid "" "Bad table:\n" "%s" @@ -537,11 +605,11 @@ msgstr "" "Schlechte Tabelle:\n" "%s" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1711 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1767 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:1741 +#: /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." @@ -549,19 +617,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:1781 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1839 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:1784 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1842 msgid "Cannot read from: %s" msgstr "Lesen nicht möglich von: %s" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1913 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1976 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:1919 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1982 msgid "" "Usage: %prog [options] mybook.html\n" "\n" @@ -640,11 +708,11 @@ msgstr "Mit mehr Wörtern fortfahren" msgid "Convert LRS to LRS, useful for debugging." msgstr "Konvertierung von LRS in LRS, hilfreich bei der Fehlersuche." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:454 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:455 msgid "Invalid LRF file. Could not set metadata." msgstr "Ungültige LRF Datei. Konnte Meta-Daten nicht festlegen." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:579 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:580 msgid "" "%prog [options] mybook.lrf\n" "\n" @@ -658,45 +726,45 @@ msgstr "" "Zeigt/verändert die Metadaten in einer LRF Datei.\n" "\n" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:586 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:18 +#: /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 "Geben Sie den Buchtitel an" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:588 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:589 msgid "Set sort key for the title" msgstr "Sortierung nach Titel" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:590 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:591 msgid "Set the author" msgstr "Geben Sie den Autor an" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:592 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:593 msgid "Set sort key for the author" msgstr "Sortierung nach Autor" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:594 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:22 +#: /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 "Die Kategorie dieses Buches ... (Z. B.: Geschichte)" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:597 +#: /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 "" "Pfad zu einer Grafik, die als Thumbnail für diese Datei verwendet werden soll" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:600 +#: /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 "" "Pfad zu einer Text Datei, deren Inhalt als Bemerkung in der LRF Datei " "gespeichert wird" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:604 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:605 msgid "Extract thumbnail from LRF file" msgstr "Thumbnail von LRF Datei extrahieren" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:606 +#: /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." @@ -705,11 +773,11 @@ msgstr "" "festgelegt ist, werden Suchmethoden verwendet, um das Umschlagbild zu " "erraten." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:608 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:609 msgid "Set book ID" msgstr "Geben Sie die Buch ID an" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:610 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:611 msgid "Don't know what this is for" msgstr "Was weiß ich, für was das ist" @@ -794,11 +862,11 @@ msgstr "" "\n" "%prog konvertiert dateiname.txt in dateiname.lrf" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:20 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:23 msgid "Set the authors" msgstr "Gebe Autoren ein" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:24 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:27 msgid "Set the comment" msgstr "Gebe Kommentar ein" @@ -882,11 +950,11 @@ msgstr "" "Umschlagbild des Buches mit der angegebenen ISBN von LibraryThing.com " "abrufen\n" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/lit.py:747 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/lit.py:751 msgid "Usage: %s file.lit" msgstr "Benutzung: %s dateiname.lit" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/lit.py:754 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/lit.py:758 msgid "Cover saved to" msgstr "Umschlagbild gespeichert unter" @@ -898,19 +966,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:304 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:341 msgid "%prog [options] myebook.mobi" msgstr "%prog [options] dateiname.mobi" -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:306 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:343 msgid "Output directory. Defaults to current directory." msgstr "Ausgabeverzeichnis. Voreinstellung ist akutelles Verzeichnis." -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:325 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:362 msgid "Raw MOBI HTML saved in" msgstr "Original MOBI HTML gespeichert in" -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:327 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:364 msgid "OEB ebook created in" msgstr "OEB eBook erstellt in" @@ -918,18 +986,18 @@ msgstr "OEB eBook erstellt in" #: /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:268 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:396 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:747 +#: /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 "Titel" #: /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:512 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:285 +#: /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:239 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:246 msgid "Comments" msgstr "Bemerkung" @@ -948,82 +1016,90 @@ msgstr "TextLabel" msgid "Choose Format" msgstr "Format wählen" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:22 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:23 msgid "Basic" msgstr "Einfach" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:23 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:24 msgid "Advanced" msgstr "Erweitert" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:97 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:102 msgid "<br>Must be a directory." msgstr "<br>Muss ein Verzeichnis sein." -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:97 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:102 msgid "Invalid database location " msgstr "Ortsangabe der Datenbank ungültig " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:97 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:100 +#: /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 "Ortsangabe der Datenbank ungültig" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:100 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:105 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:112 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:117 msgid "Compacting database. This may take a while." -msgstr "Verdichte Datenbank. Das kann dauern..." +msgstr "Komprimiere Datenbank. Das kann etwas dauern..." -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:112 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:117 msgid "Compacting..." -msgstr "Verdichte Datenbank..." +msgstr "Komprimiere Datenbank..." -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:198 -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:264 +#: /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 "Konfiguration" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:199 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:203 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:200 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:204 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:201 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:209 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:211 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:494 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:280 +#: /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:291 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:295 +#: /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:230 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:232 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:233 -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:257 -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:263 -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:265 +#: /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:202 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:206 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:203 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:207 +msgid "Format for &single file save:" +msgstr "Format zur &Speicherung einer Datei:" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:208 +msgid "&Priority for conversion jobs:" +msgstr "&Priorität der Konvertierungsaufträge:" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:209 msgid "Default network &timeout:" msgstr "Voreinstellung für Zei&tüberschreitung bei Netzwerkverbindungen:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:204 +#: /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)" @@ -1031,65 +1107,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:205 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:211 msgid " seconds" msgstr " Sekunden" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:206 -msgid "&Priority for conversion jobs:" -msgstr "&Priorität der Konvertierungsaufträge:" +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:212 +msgid "Toolbar" +msgstr "Symbolleiste" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:207 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:213 +msgid "Large" +msgstr "Groß" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:214 +msgid "Medium" +msgstr "Mittel" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:215 +msgid "Small" +msgstr "Klein" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:216 +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 +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 +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 msgid "Frequently used directories" msgstr "Häufig benutzte Verzeichnisse" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:208 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:220 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:210 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:222 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:212 -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:213 -msgid "Toolbar" -msgstr "Symbolleiste" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:214 -msgid "Large" -msgstr "Groß" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:215 -msgid "Medium" -msgstr "Mittel" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:216 -msgid "Small" -msgstr "Klein" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:217 -msgid "&Button size in toolbar" -msgstr "&Button Größe in der Symbolleiste" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:218 -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:219 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:224 msgid "Free unused diskspace from the database" msgstr "Freier unbenutzter Festplattenspeicher der Datenbank" -#: /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 "&Compact database" -msgstr "Datenbank verdi&chten" +msgstr "Datenbank &komprimieren" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:221 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:226 msgid "&Metadata from file name" msgstr "&Meta-Daten aus dem Dateinamen" @@ -1098,9 +1170,9 @@ msgid "ERROR" msgstr "FEHLER" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:37 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:273 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:397 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:748 +#: /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 "Autor(en)" @@ -1112,21 +1184,25 @@ msgstr "Sortierung nach Autor" msgid "ISBN" msgstr "ISBN" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:105 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:104 msgid "Cannot connect" msgstr "Verbindung nicht möglich" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:106 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:105 msgid "You must specify a valid access key for isbndb.com" msgstr "" "Sie müssen einen gültigen Zugangsschlüssel (access key) für isbndb.com " "angeben" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:141 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:139 +msgid "Error fetching metadata" +msgstr "Fehler beim Abrufen der Meta-Daten" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:144 msgid "No metadata found" msgstr "Keine Meta-Daten gefunden" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:141 +#: /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 "" @@ -1151,8 +1227,8 @@ msgstr "" "erhalten." #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata_ui.py:80 -msgid "&Access Key;" -msgstr "&Zugriffsschlüssel:" +msgid "&Access Key:" +msgstr "Zug&angsschlüssel:" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata_ui.py:81 msgid "Fetch" @@ -1169,7 +1245,7 @@ msgstr "" "Wählen Sie aus der unten stehenden Liste das Buch, das Ihrer Ausgabe " "entspricht" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/job_view_ui.py:30 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/job_view_ui.py:31 msgid "Details of job" msgstr "Details des Auftrags" @@ -1177,6 +1253,10 @@ msgstr "Details des Auftrags" msgid "Unavailable" msgstr "Nicht verfügbar" +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/jobs.py:38 +msgid " - Jobs" +msgstr " - Aufträge" + #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/jobs_ui.py:38 msgid "Active Jobs" msgstr "Aktive Aufträge" @@ -1185,74 +1265,74 @@ msgstr "Aktive Aufträge" msgid "&Stop selected job" msgstr "Ausgewählten Auftrag &stoppen" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:57 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:289 +#: /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 "Meta-Daten" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:59 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:290 +#: /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 "Look & Feel" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:61 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:291 +#: /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 "Seiteneinrichtung" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:63 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:292 +#: /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 "Ermittlung der Kapitel" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:89 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:92 msgid "No available formats" msgstr "Keine verfügbaren Formate" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:90 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:93 msgid "Cannot convert %s as this book has no supported formats" msgstr "" "Kann %s nicht konvertieren, da dieses Buch nicht den bekannten Formaten " "entspricht" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:94 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:97 msgid "Choose the format to convert into LRF" msgstr "Wählen Sie das Format, das zu LRF konvertiert werden soll" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:102 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:105 msgid "Convert %s to LRF" msgstr "Konvertiere %s in LRF" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:105 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:161 +#: /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 "Voreinstellungen zur Konvertierung wählen" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:171 +#: /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 "Lesen nicht möglich" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:172 +#: /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 "Sie haben nicht die nötigen Rechte, um diese Datei zu lesen: " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:180 +#: /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 "Fehler beim Lesen der Datei" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:181 +#: /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 "<p>There was an error reading from file: <br /><b>" msgstr "<p>Es trat ein Fehler beim Lesen dieser Datei auf: <br /><b>" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:187 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:189 msgid " is not a valid picture" msgstr " ist kein gültiges Bild" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:253 +#: /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:" @@ -1260,11 +1340,11 @@ msgstr "" "Datei vorbearbeiten bevor sie zu LRF konvertiert wird. Das ist hilfreich, " "wenn Sie wissen, dass die Datei von einer der folgenden Bezugsquellen stammt:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:254 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:256 msgid "<ol><li><b>baen</b> - Books from BAEN Publishers</li>" msgstr "<ol><li><b>baen</b> - Bücher von BAEN Publishers</li>" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:255 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:257 msgid "" "<li><b>pdftohtml</b> - HTML files that are the output of the program " "pdftohtml</li>" @@ -1272,11 +1352,11 @@ msgstr "" "<li><b>pdftohtml</b> - HTML Dateien, die mit dem Programm pdftohtml erstellt " "wurden</li>" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:256 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:258 msgid "<li><b>book-designer</b> - HTML0 files from Book Designer</li>" msgstr "<li><b>book-designer</b> - HTML Dateien von Book Designer</li>" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:289 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:291 msgid "" "Specify metadata such as title and author for the book.<p>Metadata will be " "updated in the database as well as the generated LRF file." @@ -1285,7 +1365,7 @@ msgstr "" "Daten werden sowohl in der Datenbank als auch in der erstellten LRF Datei " "aktualisiert." -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:290 +#: /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." @@ -1293,7 +1373,7 @@ msgstr "" "Aussehen der erstellten LRF Datei durch die Angabe von Schriftgrößen und " "Wortabständen angleichen." -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:291 +#: /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." @@ -1301,69 +1381,69 @@ msgstr "" "Seiteneinstellungen wie Ränder und die Bildschirmgröße des Zielgeräts " "angeben." -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:292 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:294 msgid "Fine tune the detection of chapter and section headings." msgstr "Feineinstellung der Erkennung von Kapitel- und Absatzüberschriften." -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:300 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:303 msgid "<font color=\"gray\">No help available</font>" msgstr "<font color=\"gray\">Keine Hilfe verfügbar</font>" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:400 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:404 msgid "Bulk convert ebooks to LRF" msgstr "eBooks auf einmal zu LRF konvertieren" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:488 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:507 msgid "Convert to LRF" msgstr "Zu LRF konvertieren" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:489 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:508 msgid "Category" msgstr "Kategorie" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:490 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:509 msgid "Options" msgstr "Auswahlmöglichkeiten" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:491 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:292 +#: /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 "Umschlagbild" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:492 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:293 +#: /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 "&Umschlagbild ändern:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:493 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:294 +#: /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 "Nach Umschlagbild durchsuchen..." -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:495 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:514 msgid "Use cover from &source file" msgstr "Um&schlagbild der Quelldatei verwenden" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:496 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:260 +#: /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 "&Titel: " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:497 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:261 +#: /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 "Titel dieses Buches ändern" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:498 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:110 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:262 +#: /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 "&Autor: " +msgstr "&Autor(en): " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:499 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:501 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:111 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:263 +#: /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" @@ -1371,30 +1451,30 @@ msgstr "" "Autor dieses Buches ändern. Mehrere Autoren sollten durch Kommata getrennt " "werden" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:500 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:519 msgid "Author So&rt:" msgstr "So&rtierung nach Autor:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:502 -#: /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:270 +#: /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 "&Herausgeber: " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:503 -#: /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:271 +#: /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 "Herausgeber dieses Buches ändern" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:504 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:272 +#: /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 "&Etiketten: " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:505 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:121 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:273 +#: /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. " "<br><br>They can be any words or phrases, separated by commas." @@ -1403,183 +1483,195 @@ msgstr "" "Büchern. <br><br>Sie können für Etiketten durch Kommata getrennte Wörter " "oder Sätze verwenden." -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:506 -#: /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:276 +#: /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 "&Serien:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:507 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:508 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:125 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:126 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:277 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:278 +#: /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 "Liste der bekannten Serien. Sie können neue Serien hinzufügen." -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:509 -#: /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:281 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:282 +#: /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 "Index der Serien." -#: /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:283 +#: /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 "Buch " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:513 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:532 msgid "Base &font size:" msgstr "Ausgangsschrift&größe:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:514 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:521 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:523 +#: /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 " Punkt" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:515 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:534 msgid "Embedded Fonts" msgstr "Eingebundene Schriften" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:516 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:535 msgid "&Serif:" msgstr "&Serif:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:517 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:536 msgid "S&ans-serif:" msgstr "S&ans-serif:" -#: /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:537 msgid "&Monospace:" msgstr "&Monospace:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:519 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:538 msgid "Source en&coding:" msgstr "En&codierung der Quelldatei:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:520 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:539 msgid "Minimum &indent:" msgstr "E&inrücken mindestens:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:522 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:541 msgid "&Word spacing:" msgstr "&Wortabstand:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:524 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:543 msgid "Enable auto &rotation of images" msgstr "Automatische &Rotation von Bildern einschalten" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:525 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:544 msgid "Insert &blank lines between paragraphs" msgstr "&Leerzeilen zwischen Paragraphen einfügen" -#: /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:545 msgid "Ignore &tables" msgstr "&Tabellen ignorieren" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:527 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:546 msgid "Ignore &colors" msgstr "Farben nicht bea&chten" -#: /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:547 msgid "&Preprocess:" msgstr "&Vorbearbeiten:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:529 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:548 msgid "Header" msgstr "Kopfzeile" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:530 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:549 msgid "&Show header" msgstr "Kopfzeile an&zeigen" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:531 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:550 msgid "&Header format:" msgstr "&Kopfzeilenformat:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:532 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:551 msgid "Override<br>CSS" msgstr "CSS<br>überschreiben" -#: /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:552 msgid "&Profile:" msgstr "&Profil:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:534 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:553 msgid "&Left Margin:" msgstr "&Linker Rand:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:535 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:537 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:539 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:541 +#: /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 " Pixel" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:536 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:555 msgid "&Right Margin:" msgstr "&Rechter Rand:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:538 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:557 msgid "&Top Margin:" msgstr "&Oberer Rand:" -#: /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:559 msgid "&Bottom Margin:" msgstr "&Unterer Rand:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:542 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:561 +msgid "&Convert tables to images (good for large/complex tables)" +msgstr "&Konvertiere Tabellen in Bilder (gut bei großen/komlexen Tabellen)" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:562 +msgid "&Multiplier for text size in rendered tables:" +msgstr "&Faktor der Textgröße in gerenderten Tabellen:" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:563 msgid "Title based detection" msgstr "Auf Titel basierende Ermittlung" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:543 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:564 msgid "&Disable chapter detection" msgstr "Kapitel Ermittlung &deaktivieren" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:544 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:565 msgid "&Regular expression:" msgstr "&Regulärer Ausdruck:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:545 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:566 msgid "Add &chapters to table of contents" msgstr "&Kapitel zum Inhaltsverzeichnis hinzufügen" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:546 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:567 msgid "Don't add &links to the table of contents" msgstr "Keine &Links zum Inhaltsverzeichnis hinzufügen" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:547 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:568 msgid "Tag based detection" msgstr "Auf Etiketten basierende Ermittlung" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:548 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:569 msgid "&Page break before tag:" msgstr "&Seitenumbruch vor Element:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:549 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:570 msgid "&Force page break before tag:" msgstr "Seitenumbruch vor Element &erzwingen:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:550 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:571 msgid "Force page break before &attribute:" msgstr "Seitenumbruch vor &Attribut erzwingen:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:551 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:572 +msgid "Detect chapter &at tag:" +msgstr "Erkenne K&apitel bei Element:" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:573 msgid "Help on item" msgstr "Hilfe für das jeweilige Objekt" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:552 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:574 msgid "" "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" " "\"http://www.w3.org/TR/REC-html40/strict.dtd\">\n" "<html><head><meta name=\"qrichtext\" content=\"1\" /><style " "type=\"text/css\">\n" "p, li { white-space: pre-wrap; }\n" -"</style></head><body style=\" font-family:'DejaVu Sans'; font-size:10pt; " -"font-weight:400; font-style:normal;\">\n" +"</style></head><body style=\" font-family:'Candara'; font-size:11pt; font-" +"weight:400; font-style:normal;\">\n" "<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; " "margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-" "family:'Sans Serif'; font-size:9pt;\"></p></body></html>" @@ -1589,28 +1681,28 @@ msgstr "" "<html><head><meta name=\"qrichtext\" content=\"1\" /><style " "type=\"text/css\">\n" "p, li { white-space: pre-wrap; }\n" -"</style></head><body style=\" font-family:'DejaVu Sans'; font-size:10pt; " -"font-weight:400; font-style:normal;\">\n" +"</style></head><body style=\" font-family:'Candara'; font-size:11pt; font-" +"weight:400; font-style:normal;\">\n" "<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; " "margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-" "family:'Sans Serif'; font-size:9pt;\"></p></body></html>" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:108 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:114 msgid "Edit Meta information" msgstr "Meta-Informationen bearbeiten" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:109 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:259 +#: /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 "Meta-Informationen" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:112 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:264 +#: /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 "S&ortierung nach Autor: " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:113 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:265 +#: /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." @@ -1618,32 +1710,39 @@ msgstr "" "Geben Sie an, wie der Autor dieses Buches sortiert werden soll. \"Charles " "Dickens\" zum Beispiel als \"Dickens, Charles\"." -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:114 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:266 +#: /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 "&Bewertung:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:115 -#: /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:267 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:268 +#: /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 "Bewertung dieses Buches: 0-5 Sterne" -#: /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:269 +#: /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 " Sterne" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:120 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:126 msgid "Add Ta&gs: " msgstr "&Etiketten hinzufügen: " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:122 +#: /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 "Etiketten-Editor öffnen" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:130 msgid "&Remove tags:" msgstr "Etiketten entfe&rnen:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:123 +#: /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 "" "Durch getrennte Liste der Etiketten, die von den Büchern entfernt werden. " @@ -1674,50 +1773,45 @@ msgstr "Kann kein Umschlagbild abrufen" msgid "You must specify the ISBN identifier for this book." msgstr "Sie müssen die ISBN für dieses Buch angeben." -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:258 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:256 msgid "Edit Meta Information" msgstr "Meta-Informationen bearbeiten" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:274 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:275 -msgid "Open Tag Editor" -msgstr "Etiketten-Editor öffnen" - -#: /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:277 msgid "Remove unused series (Series that have no books)" msgstr "Unbenutzte Serien entfernen (Serien ohne Bücher)" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:284 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:282 msgid "IS&BN:" msgstr "IS&BN:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:286 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:284 msgid "Fetch metadata from server" msgstr "Meta-Daten vom Server abrufen" -#: /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:285 msgid "Available Formats" msgstr "Verfügbare Formate" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:288 +#: /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 "Ein neues Format für dieses Buch zur Datenbank hinzufügen" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:290 +#: /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 "Markierte Formate dieses Buches aus der Datenbank löschen" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:296 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:294 msgid "Fetch cover image from server" msgstr "Umschlagbild vom Server abrufen" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:297 +#: /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 "" "Benutzername und/oder Passwort Ihres Kontos bei LibraryThing.com ändern" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:298 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:296 msgid "Change password" msgstr "Passwort ändern" @@ -1746,13 +1840,13 @@ msgid "Tag" msgstr "Etikett" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search.py:18 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:244 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:403 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:251 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:411 msgid "Series" msgstr "Serie" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search.py:19 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:681 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:689 msgid "Format" msgstr "Format" @@ -1870,96 +1964,96 @@ msgid "Recipe for " msgstr "Rezept für " #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:86 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:96 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:218 +#: /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 "In erweiterten Modus umschalten" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:91 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:99 +#: /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 "Zum Basis Modus wechseln" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:109 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:110 msgid "Feed must have a title" msgstr "Feed benötigt einen Titel" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:110 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:111 msgid "The feed must have a title" msgstr "Feed benötigt einen Titel" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:114 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:115 msgid "Feed must have a URL" msgstr "Feed benötigt eine URL" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:115 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:116 msgid "The feed %s must have a URL" msgstr "Feed %s benötigt eine URL" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:120 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:121 msgid "Already exists" msgstr "Gibts hier schon" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:121 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:122 msgid "This feed has already been added to the recipe" msgstr "Dieser Feed wurde schon zu diesem Rezept hinzugefügt" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:162 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:171 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:194 -msgid "Invalid input" -msgstr "Ungültige Eingabe" - #: /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 "Ungültige Eingabe" + +#: /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 "<p>Could not create recipe. Error:<br>%s" msgstr "<p>Konnte Rezept nicht erstellen. Fehler:<br>%s" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:178 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:200 +#: /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 "Rezept ersetzen?" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:179 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:201 +#: /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 "" "Es gibt schon ein erstelltes Rezept mit dem Namen %s. Soll es ersetzt werden?" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:187 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:188 msgid "Choose a recipe file" msgstr "Eine Rezept Datei auswählen" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:187 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:188 msgid "Recipes" msgstr "Rezepte" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:212 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:208 msgid "Add custom news source" msgstr "Eigene Nachrichtenquelle hinzufügen" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:213 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:209 msgid "Available user recipes" msgstr "Verfügbare Benutzer-Rezepte" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:214 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:210 msgid "Add/Update &recipe" -msgstr "&Rezept hinzufügen/aktualisieren" +msgstr "Rezept &hinzufügen/aktualisieren" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:215 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:211 msgid "&Remove recipe" msgstr "Rezept entfe&rnen" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:216 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:212 msgid "&Share recipe" msgstr "Rezept ver&teilen" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:217 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:213 msgid "&Load recipe from file" msgstr "Rezept aus Datei &laden" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:219 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:215 msgid "" "<html><head><meta name=\"qrichtext\" content=\"1\" /><style " "type=\"text/css\">\n" @@ -1984,56 +2078,56 @@ msgstr "" "Konfiguration bedarf. Dazu müssen Sie den \"Erweiterten Modus\" " "verwenden.</p></body></html>" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:223 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:219 msgid "Recipe &title:" msgstr "&Titel des Rezepts:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:224 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:220 msgid "&Oldest article:" msgstr "Ä<ester Artikel:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:225 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:221 msgid "The oldest article to download" msgstr "Ältester Artikel, der geladen wird" -#: /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:222 msgid " days" msgstr " Tage" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:227 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:223 msgid "&Max. number of articles per feed:" msgstr "&Maximale Anzahl der Artikel pro feed:" -#: /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:224 msgid "Maximum number of articles to download per feed." msgstr "Maximale Anzahl der zu ladenden Artikel pro feed." -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:229 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:225 msgid "Feeds in recipe" msgstr "Feeds des Rezepts" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:231 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:227 msgid "Remove feed from recipe" msgstr "Feed aus dem Rezept entfernen" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:234 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:237 +#: /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 "Feed zum Rezept hinzufügen" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:235 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:231 msgid "&Feed title:" msgstr "&Feed Titel:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:236 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:232 msgid "Feed &URL:" msgstr "Feed &URL:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:238 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:234 msgid "&Add feed" msgstr "Feed &anfügen" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:239 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:235 msgid "" "For help with writing advanced news recipes, please visit <a " "href=\"http://calibre.kovidgoyal.net/user_manual/news.html\">User Recipes</a>" @@ -2042,7 +2136,7 @@ msgstr "" "besuchen Sie die englischsprachige Seite <a " "href=\"http://calibre.kovidgoyal.net/user_manual/news.html\">User Recipes</a>" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:240 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:236 msgid "Recipe source code (python)" msgstr "Source Code (Python) des Rezepts" @@ -2127,45 +2221,44 @@ msgstr "Regulärer Ausdruck Gruppenname (?P<series_index>)" msgid "ISBN:" msgstr "ISBN:" -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:291 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:313 msgid "Job" msgstr "Auftrag" -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:292 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:314 msgid "Status" msgstr "Status" -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:293 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:315 msgid "Progress" msgstr "Fortschritt" -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:294 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:316 msgid "Running time" msgstr "Laufzeit" -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:322 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:344 msgid "Error" msgstr "Fehler" -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:322 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:344 msgid "Finished" msgstr "Fertig" -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:324 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:346 msgid "Waiting" msgstr "Abwarten und Tee trinken..." -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:324 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:346 msgid "Working" msgstr "Bei der Arbeit..." -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:354 -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:358 -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:362 +#: /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 "Kann Auftrag nicht abbrechen." +msgstr "Kann Auftrag nicht abbrechen" -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:355 +#: /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." @@ -2173,62 +2266,58 @@ msgstr "" "Kann Aufträge nicht abbrechen, die mit dem Gerät kommunizieren, da dies zu " "Datenverlust führen kann." -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:359 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:381 msgid "Cannot kill already completed jobs." msgstr "Kann schon fertiggestellte Aufträge nicht abbrechen." -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:363 -msgid "Cannot kill waiting jobs." -msgstr "Kann Aufträge in Warteliste nicht abbrechen." - -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:228 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:234 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:238 +#: /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 "Keine" -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:229 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:402 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:687 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:751 +#: /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 "Etiketten" -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:235 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:242 msgid "Formats" msgstr "Formate" -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:244 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:251 msgid "Book <font face=\"serif\">%s</font> of %s." msgstr "Buch <font face=\"serif\">%s</font> von %s." -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:388 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:396 msgid "Double click to <b>edit</b> me<br><br>" msgstr "Doppelklick ermöglicht <b>Bearbeitung</b><br><br>" -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:398 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:749 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:406 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:757 msgid "Size (MB)" msgstr "Größe (MB)" -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:399 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:750 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:407 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:758 msgid "Date" msgstr "Datum" -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:400 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:408 msgid "Rating" msgstr "Bewertung" -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:682 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:690 msgid "Path" msgstr "Pfad" -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:686 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:694 msgid "Timestamp" msgstr "Zeitstempel" -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:786 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:794 msgid "Search (For Advanced Search click the button to the left)" msgstr "Suche (Zur erweiterten Suche die Schaltfläche links klicken)" @@ -2248,15 +2337,15 @@ msgstr "Mit Trennstrich versehen" 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/main.py:64 +#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main.py:63 msgid " - LRF Viewer" msgstr " - LRF Vorschau" -#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main.py:155 +#: /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 "<b>Keine Treffer</b> für die Suchworte <i>%s</i> gefunden." -#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main.py:155 +#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main.py:154 msgid "No matches found" msgstr "Keine Treffer gefunden" @@ -2317,26 +2406,37 @@ 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: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: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:118 +#: /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 "und aus der Datenbank löschen" + +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:119 +msgid "Send to storage card by default" +msgstr "Auf die Speicherkarte senden (Voreinstellung)" + +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:131 msgid "Edit metadata individually" msgstr "Meta-Daten einzeln bearbeiten" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:119 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:132 msgid "Edit metadata in bulk" msgstr "Meta-Daten auf einmal bearbeiten" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:122 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:135 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:123 +#: /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)" @@ -2344,7 +2444,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:124 +#: /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)" @@ -2352,49 +2452,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:138 -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:274 +#: /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" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:139 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:153 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:142 -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:280 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:154 +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_ui.py:281 msgid "View" msgstr "Vorschau" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:143 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:158 msgid "View specific format" msgstr "Spezielles Format ansehen" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:158 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:174 msgid "Convert individually" msgstr "Einzeln konvertieren" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:159 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:175 msgid "Bulk convert" msgstr "Auf einmal konvertieren" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:303 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:309 msgid " detected." msgstr " gefunden." -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:303 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:309 msgid "Device: " msgstr "Gerät: " -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:328 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:334 msgid "Connected " msgstr "Angeschlossen: " -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:340 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:346 msgid "Device database corrupted" msgstr "Gerätedatenbank ist beschädigt" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:341 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:347 msgid "" "\n" " <p>The database of books on the reader is corrupted. Try the " @@ -2425,8 +2529,8 @@ msgstr "" " </ol>\n" " " -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:393 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:467 +#: /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>" @@ -2434,53 +2538,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:396 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:470 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:402 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:476 msgid "Duplicates found!" -msgstr "Duplikate gefunden" +msgstr "Duplikate gefunden!" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:429 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:442 +#: /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 "Lade Bücher auf das Gerät." -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:500 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:507 msgid "No space on device" msgstr "Gerätespeicher voll" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:501 +#: /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 "" "<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:536 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:546 msgid "Deleting books from device." msgstr "Lösche Bücher vom Gerät." -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:570 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:587 +#: /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 "Kann Metadaten nicht bearbeiten" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:570 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:587 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:675 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:736 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:797 +#: /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 "Keine Bücher ausgewählt" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:658 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:674 msgid "Sending books to device." msgstr "Sende Bücher an das Gerät." -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:661 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:677 msgid "No suitable formats" msgstr "Keine geeigneten Formate" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:662 +#: /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>" @@ -2488,68 +2592,80 @@ 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:675 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:694 msgid "Cannot save to disk" msgstr "Speichern auf Festplatte nicht möglich" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:714 +#: /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 "" +"<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 +msgid "Could not save some ebooks" +msgstr "Konnte einige eBooks nicht speichern" + +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:742 msgid "Fetch news from " msgstr "Nachrichten abrufen von " -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:716 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:744 msgid "Fetching news from " msgstr "Rufe Nachrichten ab von " -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:726 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:754 msgid "News fetched. Uploading to device." msgstr "Nachrichten abgerufen. Übertragung ans Gerät läuft." -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:736 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:797 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:764 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:834 msgid "Cannot convert" msgstr "Konvertierung nicht möglich" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:745 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:773 msgid "Starting Bulk conversion of %d books" msgstr "Starte Massenkonvertierung von %d Büchern" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:867 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:885 +#: /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 "Kein Buch ausgewählt" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:867 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:885 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:899 +#: /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 "Ansehen nicht möglich" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:873 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:904 +#: /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 "Format zur Vorschau wählen" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:900 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:938 msgid "%s has no available formats." msgstr "%s hat keine verfügbaren Formate." -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:938 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:976 msgid "Cannot configure" msgstr "Konfiguration nicht möglich" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:938 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:976 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:961 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:999 msgid "Copying database to " msgstr "Kopiere Datenbank nach " -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:976 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1014 msgid "Invalid database" msgstr "Ungültige Datenbank" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:977 +#: /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" @@ -2557,23 +2673,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:985 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1023 msgid "Could not move database" msgstr "Konnte Datenbank nicht verschieben" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1006 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1044 msgid "No detailed info available" msgstr "Es ist keine weitere Information verfügbar" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1007 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1045 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:1049 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1087 msgid "Error talking to device" msgstr "Fehler in der Kommunikation zum Gerät" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1050 +#: /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." @@ -2581,15 +2697,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:1076 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1139 msgid "Conversion Error" msgstr "Konvertierungsfehler" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1098 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1158 msgid "Database does not exist" msgstr "Datenbank existiert nicht" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1098 +#: /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." @@ -2597,7 +2713,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:1149 +#: /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>" @@ -2605,7 +2721,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:1155 +#: /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>. " @@ -2613,102 +2729,115 @@ msgid "" msgstr "" "%s wurde auf Version %s aktualisiert. Sehen Sie sich die <a " "href=\"http://calibre.kovidgoyal.net/wiki/Changelog\">neuen Features</a> an. " -"Download Seite besuchen?" +"Möchten Sie die Download Seite besuchen?" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1155 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1215 msgid "Update available" msgstr "Neue Version verfügbar" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:255 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:256 msgid "calibre" msgstr "calibre" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:256 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:257 msgid "Advanced search" msgstr "Erweiterte Suche" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:258 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:259 msgid "Alt+S" msgstr "Alt+S" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:259 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:260 msgid "&Search:" msgstr "&Suche:" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:260 +#: /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 "" "Liste der Bücher nach Titel oder Autor durchsuchen<br><br>Durch Leerzeichen " -"getrennte Wörter werden mit \"AND\" verknüpft" +"getrennte Wörter werden mit \"UND\" verknüpft" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:261 +#: /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 "" "Liste der Bücher nach Titel, Autor, Herausgeber, Etiketten und Bemerkungen " -"durchsuchen<br><br>Durch Leerzeichen getrennte Wörter werden mit \"AND\" " +"durchsuchen<br><br>Durch Leerzeichen getrennte Wörter werden mit \"UND\" " "verknüpft" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:262 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:263 msgid "Reset Quick Search" msgstr "Quick Search löschen" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:266 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:267 msgid "Add books" msgstr "Bücher hinzufügen" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:267 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:268 msgid "A" msgstr "A" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:268 #: /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 "Bücher entfernen" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:270 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:271 msgid "Del" msgstr "Löschen" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:271 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:272 msgid "Edit meta information" msgstr "Meta-Informationen editieren" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:272 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:273 msgid "E" msgstr "E" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:273 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:274 msgid "Send to device" msgstr "An Reader übertragen" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:275 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:276 msgid "S" msgstr "S" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:276 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:277 msgid "Fetch news" msgstr "Nachrichten abrufen" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:277 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:278 msgid "F" msgstr "F" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:278 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:279 msgid "Convert E-books" msgstr "In eBooks umwandeln" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:279 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:280 msgid "C" msgstr "C" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:281 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:282 msgid "V" msgstr "V" +#: /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 "" +"Output der Konsole auf ein Dialog-Fenster umleiten (sowohl stdout als auch " +"stderr). Hilfreich bei Fenstern in denen GUI Programme nicht über Output-" +"Streams verfügen." + +#: /home/kovid/work/calibre/src/calibre/gui2/main_window.py:52 +msgid "ERROR: Unhandled exception" +msgstr "FEHLER: Unbehandelte Ausnahme" + #: /home/kovid/work/calibre/src/calibre/gui2/news.py:32 msgid "Add a custom news source" msgstr "Neue individuelle Nachrichtenquelle hinzufügen" @@ -2758,11 +2887,11 @@ msgstr "Ungültiger regulärer Ausdruck" msgid "Invalid regular expression: %s" msgstr "Ungültiger regulärer Ausdruck: %s" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:166 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:169 msgid "Library" msgstr "Bibliothek" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:167 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:170 msgid "" "Reader\n" "%s available" @@ -2770,7 +2899,7 @@ msgstr "" "Reader\n" "%s verfügbar" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:168 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:171 msgid "" "Card\n" "%s available" @@ -2778,22 +2907,22 @@ msgstr "" "Karte\n" "%s verfügbar" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:172 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:175 msgid "Click to see the list of books available on your computer" msgstr "Ein Klick zeigt die Liste der auf dem Computer vorhandenen Bücher" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:173 +#: /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 "" "Ein Klick zeigt die Liste der im Hauptspeicher des Geräts vorhandenen Bücher" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:174 +#: /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 "" "Ein Klick zeigt die Liste der auf der Speicherkarte des Geräts vorhandenen " "Bücher" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:25 +#: /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." @@ -2801,7 +2930,7 @@ msgstr "" "Pfad zur Datenbank von calibre. Die Voreinstellung ist der in den " "Einstellungen gespeicherte Pfad." -#: /home/kovid/work/calibre/src/calibre/library/cli.py:80 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:82 msgid "" "%prog list [options]\n" "\n" @@ -2811,7 +2940,7 @@ msgstr "" "\n" "Listet die in der Datenbank von calibre verfügbaren Bücher auf. \n" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:88 +#: /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" @@ -2824,7 +2953,7 @@ msgstr "" "Verfügbare Felder: %s\n" "Voreinstellung: %%default" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:90 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:92 msgid "" "The field by which to sort the results.\n" "Available fields: %s\n" @@ -2834,11 +2963,11 @@ msgstr "" "Verfügbare Felder: %s\n" "Voreinstellung: %%default" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:92 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:94 msgid "Sort results in ascending order" msgstr "Sortiere Ergebnisse in aufsteigender Reihenfolge" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:94 +#: /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 " @@ -2848,15 +2977,15 @@ msgstr "" "sehen Sie sich bitte die Dokumentation, die die Suche betrifft, im " "Benutzerhandbuch an. Voreinstellung ist, keine Filterung durchzuführen." -#: /home/kovid/work/calibre/src/calibre/library/cli.py:101 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:103 msgid "Invalid fields. Available fields:" msgstr "Ungültige Felder. Verfügbare Felder:" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:108 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:110 msgid "Invalid sort field. Available fields:" msgstr "Ungültiges Sortierungs-Feld. Verfügbare Felder:" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:170 +#: /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):" @@ -2864,7 +2993,7 @@ msgstr "" "Die folgenden Bücher wurden nicht hinzugefügt, da sie schon in der Datenbank " "vorhanden sind (siehe --duplicates Option):" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:195 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:197 msgid "" "%prog add [options] file1 file2 file3 ...\n" "\n" @@ -2878,7 +3007,7 @@ msgstr "" "Verzeichnisse angeben, sehen Sie sich dazu die zu den Verzeichnissen " "gehörigen Optionen weiter unten an. \n" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:204 +#: /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" @@ -2887,11 +3016,11 @@ msgstr "" "und alle Dateien in diesem Verzeichnis sind verschiedene eBook Formate " "dieses einzelnen Buches" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:206 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:208 msgid "Process directories recursively" msgstr "Verzeichnisse rekursiv verarbeiten" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:208 +#: /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." @@ -2899,12 +3028,12 @@ msgstr "" "Füge Bücher zur Datenbank hinzu, auch wenn diese schon vorhanden sind. Der " "Abgleich erfolgt aufgrund des Titels der Bücher." -#: /home/kovid/work/calibre/src/calibre/library/cli.py:213 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:215 msgid "You must specify at least one file to add" msgstr "" "Sie müssen wenigstens eine Datei auswählen, die hinzugefügt werden soll" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:231 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:233 msgid "" "%prog remove ids\n" "\n" @@ -2919,11 +3048,11 @@ msgstr "" "(Sie erhalten die ID Zahlen durch die Benutzung des Befehls list). Zum " "Beispiel: 23,34,57-85\n" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:243 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:245 msgid "You must specify at least one book to remove" msgstr "Sie müssen wenigstens ein Buch auswählen, das entfernt werden soll" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:263 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:265 msgid "" "%prog add_format [options] id ebook_file\n" "\n" @@ -2937,15 +3066,15 @@ msgstr "" "gekennzeichneten logischen Buches hinzu. Sie erhalten die ID durch den list " "Befehl. Falls das Format schon vorhanden ist, wird es ersetzt.\n" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:274 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:276 msgid "You must specify an id and an ebook file" msgstr "Sie müssen eine ID und eine eBook Datei angeben" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:279 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:281 msgid "ebook file must have an extension" msgstr "eBook Datei muss eine Endung haben" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:287 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:289 msgid "" "\n" "%prog remove_format [options] id fmt\n" @@ -2962,11 +3091,101 @@ msgstr "" "eine Dateiendung wie LRF oder TXT oder EPUB sein. Falls das logische Buch im " "entsprechenden Format nicht vorliegt, passiert gar nichts.\n" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:300 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:302 msgid "You must specify an id and a format" msgstr "Sie müssen eine ID und ein Format (Dateiendung) angeben" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:310 +#: /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 "" +"\n" +"%prog show_metadata [options] id\n" +"\n" +"Zeige die in der calibre Datenbank gespeicherten Meta-Daten für das durch " +"die ID erkannte Buch. \n" +"\"id\" ist eine ID Nummer des Befehls \"list\". \n" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:328 +msgid "Print metadata in OPF form (XML)" +msgstr "Drucke Meta-Daten als OPF (XML)" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:333 +msgid "You must specify an id" +msgstr "Sie müssen eine ID angeben" + +#: /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 "" +"\n" +"%prog set_metadata [options] id /verzeichnis/zu/metadata.opf\n" +"\n" +"Übernehme die Meta-Daten, die in der calibre Datenbank für das durch die ID " +"erkannte Buch gespeichert werden,\n" +"aus der OPF Datei metadata.opf. \"id\" ist eine ID Nummer des Befehls " +"\"list\". Sie erhalten \n" +"einen Eindruck über das OPF Format, wenn Sie die --as-opf Option mit dem \n" +"Befehl show_metadata verwenden.\n" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:360 +msgid "You must specify an id and a metadata file" +msgstr "Geben Sie eine ID und eine Meta-Daten Datei an" + +#: /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 "" +"%prog export [options] ids \n" +"\n" +"Exportiert die durch IDs angegebenen Bücher (als durch Kommata getrennte " +"Liste) in das Dateisystem.\n" +"Der Export speichert alle Formate des Buches, sein Umschlagbild und die Meta-" +"Daten (in \n" +"einer OPF Datei). Sie erhalten ID Nummern mit dem Befehl \"list\". \n" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:380 +msgid "Export all books in database, ignoring the list of ids." +msgstr "" +"Exportiere alle Bücher der Datenbank, die Liste der IDs wird ignoriert." + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:382 +msgid "Export books to the specified directory. Default is" +msgstr "Exportiere Bücher in das angegebene Verzeichnis. Voreinstellung ist" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:384 +msgid "Export all books into a single directory" +msgstr "Exportiere alle Bücher in ein einziges Verzeichnis" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:386 +msgid "Create file names as author - title instead of title - author" +msgstr "" +"Erstelle Dateinamen mit \"Autor - Titel\" anstelle von \"Titel - Autor\"" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:391 +msgid "You must specify some ids or the %s option" +msgstr "Sie müssen IDs oder die %s Option angeben" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:401 msgid "" "%%prog command [options] [arguments]\n" "\n" @@ -2987,11 +3206,11 @@ msgstr "" " \n" "Für Hilfe zu einem bestimmten Befehl (command): %%prog command --help\n" -#: /home/kovid/work/calibre/src/calibre/parallel.py:131 -msgid "Job killed by user" -msgstr "Auftrag durch Benutzer abgebrochen" +#: /home/kovid/work/calibre/src/calibre/parallel.py:317 +msgid "Could not launch worker process." +msgstr "Konnte Arbeitsprozess nicht starten." -#: /home/kovid/work/calibre/src/calibre/utils/fontconfig.py:124 +#: /home/kovid/work/calibre/src/calibre/utils/fontconfig.py:146 msgid "Could not initialize the fontconfig library" msgstr "Konnte die fontconfig library nicht initialisieren" @@ -3017,7 +3236,7 @@ msgid "Unknown feed" msgstr "Feed unbekannt" #: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:95 -#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:115 +#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:117 msgid "Untitled article" msgstr "Artikel ohne Titel" @@ -3196,11 +3415,11 @@ msgstr "Konnte Umschlagbild nicht laden: %s" msgid "Downloading cover from %s" msgstr "Lade Umschlagbild von %s" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:699 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:698 msgid "Untitled Article" msgstr "Artikel ohne Titel" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:743 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:744 msgid "" "\n" "Downloaded article %s from %s\n" @@ -3210,19 +3429,19 @@ msgstr "" "Artikel %s von %s geladen\n" "%s" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:749 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:750 msgid "Article downloaded: %s" msgstr "Artikel geladen: %s" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:755 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:756 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:760 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:761 msgid "Article download failed: %s" msgstr "Laden der Artikel schlug fehl: %s" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:775 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:776 msgid "Fetching feed" msgstr "Rufe Feed ab" diff --git a/src/calibre/translations/nl.po b/src/calibre/translations/nl.po index e3ec255958..b25b4b9822 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-12 20:18+0000\n" -"PO-Revision-Date: 2008-06-02 08:40+0000\n" +"POT-Creation-Date: 2008-06-30 23:41+0000\n" +"PO-Revision-Date: 2008-06-29 05:48+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-06-15 22:20+0000\n" +"X-Launchpad-Export-Date: 2008-07-02 15:52+0000\n" "X-Generator: Launchpad (build Unknown)\n" #~ msgid "" @@ -26,6 +26,12 @@ msgstr "" #~ "herschikt. Deze functie neemt de plaats in van de --foont-delta optie, en " #~ "vervangt deze. Om toch --font-delta te gebruiken, zet deze optie als 0." +#~ msgid "" +#~ "Prevent the automatic insertion of page breaks before detected chapters." +#~ msgstr "" +#~ "Voorkom automatische toevoeging van nieuwe pagina's voor herkende " +#~ "hoofdstukken." + #~ 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 " @@ -41,6 +47,15 @@ msgstr "" #~ "Bijvoorbeeld: --serief-famile \"%s, Times new Roman\"\n" #~ " " +#~ msgid "&Access Key;" +#~ msgstr "&Toegangssleutel" + +#~ msgid "Cannot kill waiting jobs." +#~ msgstr "Wachtende opdrachten kunnen niet worden afgebroken." + +#~ msgid "Job killed by user" +#~ msgstr "Opdracht beëindigd door gebruiker" + #~ msgid "" #~ "Save the text below into a file named recipe.py and send the file to your " #~ "friends, to allow them to use this recipe." @@ -48,11 +63,34 @@ msgstr "" #~ "Schrijf de tekst hieronder in een bestand genaamd recipe.py en stuur deze " #~ "naar je vrieden, zodat zij dit recept ook kunnen gebruiken." -#: /home/kovid/work/calibre/src/calibre/__init__.py:96 +#~ msgid "" +#~ "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" " +#~ "\"http://www.w3.org/TR/REC-html40/strict.dtd\">\n" +#~ "<html><head><meta name=\"qrichtext\" content=\"1\" /><style " +#~ "type=\"text/css\">\n" +#~ "p, li { white-space: pre-wrap; }\n" +#~ "</style></head><body style=\" font-family:'DejaVu Sans'; font-size:10pt; " +#~ "font-weight:400; font-style:normal;\">\n" +#~ "<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; " +#~ "margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-" +#~ "family:'Sans Serif'; font-size:9pt;\"></p></body></html>" +#~ msgstr "" +#~ "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" " +#~ "\"http://www.w3.org/TR/REC-html40/strict.dtd\">\n" +#~ "<html><head><meta name=\"qrichtext\" content=\"1\" /><style " +#~ "type=\"text/css\">\n" +#~ "p, li { white-space: pre-wrap; }\n" +#~ "</style></head><body style=\" font-family:'DejaVu Sans'; font-size:10pt; " +#~ "font-weight:400; font-style:normal;\">\n" +#~ "<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; " +#~ "margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-" +#~ "family:'Sans Serif'; font-size:9pt;\"></p></body></html>" + +#: /home/kovid/work/calibre/src/calibre/__init__.py:133 msgid "%sUsage%s: %s\n" msgstr "%sGebruik%s: %s\n" -#: /home/kovid/work/calibre/src/calibre/__init__.py:133 +#: /home/kovid/work/calibre/src/calibre/__init__.py:170 msgid "Created by " msgstr "Gemaakt door " @@ -60,6 +98,10 @@ msgstr "Gemaakt door " #: /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 "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 "" #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:73 @@ -75,8 +117,14 @@ msgstr "" "worden. Standaard: %default" #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:76 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:271 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:677 +#: /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 "Onbekend" @@ -99,7 +147,7 @@ msgstr "Zoeksleutel voor de auteur" #: /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:401 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:409 msgid "Publisher" msgstr "Uitgeverij" @@ -205,7 +253,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:129 +#: /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 " @@ -215,23 +263,39 @@ 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:135 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:134 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:137 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:136 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:139 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:138 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:141 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:140 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:145 +#: /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 "" +"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 +msgid "" +"Multiply the size of text in rendered tables by this factor. Default is " +"%default" +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 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 " @@ -241,7 +305,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:149 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:153 msgid "" "A regular expression. <a> tags whose href matches will be ignored. Defaults " "to %default" @@ -249,18 +313,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:153 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:157 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:157 -msgid "" -"Prevent the automatic insertion of page breaks before detected chapters." -msgstr "" -"Voorkom automatische toevoeging van nieuwe pagina's voor herkende " -"hoofdstukken." - #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:161 +msgid "Prevent the automatic detection chapters." +msgstr "Vind niet automatisch nieuwe hoofdstukken." + +#: /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" @@ -268,7 +329,20 @@ 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:164 +#: /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 "" +"vind het begin van een hoofdstuk bij een element met het gespecificeerde " +"attribuut. Het formaat voor deze optie is tagnaam regexp, attribuut naam, " +"attribuut waarde regexp. Bijvoorbeeld, om alle kop tags te vinden met de " +"attribuut klasse \"hoofstuk\", gebruik \"h\\d\\klasse,hoofdstuk\". Standaard " +"is %default" + +#: /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 " @@ -287,14 +361,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:174 +#: /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 "" "Forceer een pagina scheiding voor tags wiens naam overeenkomen met deze " "reguliere expressie." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:176 +#: /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 " @@ -307,15 +381,15 @@ msgstr "" "class=\"chapter\" te vinden, gebruik: \"h\\d,class,chapter\". Standaard is " "%default" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:179 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:184 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:182 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:187 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:184 +#: /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." @@ -323,39 +397,44 @@ 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:186 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:191 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:189 +#: /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 "" +"Specificeer truetype font families voor serif, sans-serif en monospace " +"lettertypen. Deze fonts zullen worden bijgesloten in het LRF bestand. Het " +"gebruik van niet-standaard lettertypen leidt tot langzamere pagina " +"wisselingen. Bijvoorbeeld: --serif-famiy \"Times New Roman\"\n" +" " -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:197 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:202 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:200 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:205 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:203 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:208 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:207 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:212 msgid "Be verbose while processing" msgstr "Geef een uitgebreide omschrijving tijdens het verwerken" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:209 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:214 msgid "Convert to LRS" msgstr "Converteer naar LRS" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:211 +#: /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." @@ -364,7 +443,7 @@ msgstr "" "verwerkingstijd. Gebruik deze optie als je een machine met weinig geheugen " "gebruikt." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:213 +#: /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 " @@ -439,56 +518,56 @@ msgstr "Opties om het gedrag van html2lrf te beïnvloeden." msgid "Fetching of recipe failed: " msgstr "Ophalen van recept mislukt: " -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:309 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:315 msgid "\tBook Designer file detected." msgstr "\tBook Designer bestand herkend." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:311 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:317 msgid "\tParsing HTML..." msgstr "\tLezen HTML" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:333 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:339 msgid "\tBaen file detected. Re-parsing..." msgstr "\tBaen bestand herkend. Her-lezen..." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:349 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:355 msgid "Written preprocessed HTML to " msgstr "Schrijf pre-info HTML naar " -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:366 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:372 msgid "Processing %s" msgstr "Verwerking %s" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:380 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:386 msgid "\tConverting to BBeB..." msgstr "\tConveteer naar BBEB..." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:518 -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:531 +#: /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 "Kan bestand niet parseren: %s" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:523 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:534 msgid "%s is an empty file" msgstr "%s is een leeg bestand" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:543 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:554 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:587 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:598 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:929 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:943 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:967 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:981 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:982 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:996 msgid "" "Could not process image: %s\n" "%s" @@ -496,14 +575,14 @@ msgstr "" "Niet mogelijk om afbeelding %s te verwerken\n" "%s" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1687 +#: /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 "" "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:1689 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1745 msgid "" "Bad table:\n" "%s" @@ -511,11 +590,11 @@ msgstr "" "Foutieve tabel:\n" "%s" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1711 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1767 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:1741 +#: /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." @@ -523,19 +602,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:1781 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1839 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:1784 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1842 msgid "Cannot read from: %s" msgstr "Kan niet lezen van: %s" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1913 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1976 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:1919 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1982 msgid "" "Usage: %prog [options] mybook.html\n" "\n" @@ -614,11 +693,11 @@ msgstr "uitgebreide verwerking" msgid "Convert LRS to LRS, useful for debugging." msgstr "converteer LRS naar LRF, handig om fouten op te sporen." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:454 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:455 msgid "Invalid LRF file. Could not set metadata." msgstr "Foutief LRF bestand. Metadata kan niet worden ingesteld." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:579 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:580 msgid "" "%prog [options] mybook.lrf\n" "\n" @@ -632,46 +711,46 @@ msgstr "" "Weergave/wijzig de metadata in een LRF bestand\n" "\n" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:586 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:18 +#: /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 "Geef boek titel" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:588 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:589 msgid "Set sort key for the title" msgstr "Geef sorteer sleutel voor de titel" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:590 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:591 msgid "Set the author" msgstr "Geef de auteur" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:592 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:593 msgid "Set sort key for the author" msgstr "Geef sorteer sleuter voor de auteur" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:594 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:22 +#: /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 "De categorie waarin die boek behoord, bv: Geschiedenis" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:597 +#: /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 "" "Pad naar de afbeelding die zal worden gebruikt als pictogram voor dit " "bestand." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:600 +#: /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 "" "Pad naar een TXT bestand met daarin de opmerking die zal worden opgeslagen " "in het LRF bestand." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:604 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:605 msgid "Extract thumbnail from LRF file" msgstr "Lees pictogram uit LRF bestand" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:606 +#: /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." @@ -679,11 +758,11 @@ msgstr "" "Lees de omslag uit LRF bestand. Het LRF bestands formaat heeft geen " "gedefinieerde omslag, dus moeten we proberen deze te raden." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:608 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:609 msgid "Set book ID" msgstr "Geef boek ID" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:610 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:611 msgid "Don't know what this is for" msgstr "Weet niet waar dit voor is" @@ -767,11 +846,11 @@ msgstr "" "\n" "%prog converteert mijnboek.txt naar mijnboek.lrf" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:20 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:23 msgid "Set the authors" msgstr "Geef de auteur" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:24 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:27 msgid "Set the comment" msgstr "Geef de omschrijving" @@ -854,11 +933,11 @@ msgstr "" "Download een omslag afbeelding voor het boek geidentificeerd door ISBN via " "LibraryThing.com\n" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/lit.py:747 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/lit.py:751 msgid "Usage: %s file.lit" msgstr "Gebruik: %s bestand.lit" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/lit.py:754 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/lit.py:758 msgid "Cover saved to" msgstr "omslag weggeschreven naar" @@ -870,19 +949,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:304 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:341 msgid "%prog [options] myebook.mobi" msgstr "%prog [opties] mijnboek.mobi" -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:306 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:343 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:325 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:362 msgid "Raw MOBI HTML saved in" msgstr "RAW MOBI HTML bewaard in" -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:327 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:364 msgid "OEB ebook created in" msgstr "OEB boek bemaakt in" @@ -890,18 +969,18 @@ msgstr "OEB boek bemaakt in" #: /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:268 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:396 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:747 +#: /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 "Titel" #: /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:512 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:285 +#: /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:239 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:246 msgid "Comments" msgstr "Opmerkingen" @@ -920,82 +999,90 @@ msgstr "TekstLabel" msgid "Choose Format" msgstr "Kies Formaat" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:22 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:23 msgid "Basic" msgstr "Eenvoudig" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:23 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:24 msgid "Advanced" msgstr "Geavanceerd" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:97 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:102 msgid "<br>Must be a directory." msgstr "<br>Moet een folder zijn." -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:97 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:102 msgid "Invalid database location " msgstr "Foutieve database locatie " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:97 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:100 +#: /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 "Foutieve database locatie" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:100 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:105 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:112 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:117 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:112 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:117 msgid "Compacting..." msgstr "Comprimeren..." -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:198 -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:264 +#: /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 "Configuratie" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:199 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:203 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:200 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:204 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:201 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:209 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:211 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:494 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:280 +#: /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:291 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:295 +#: /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:230 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:232 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:233 -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:257 -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:263 -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:265 +#: /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:202 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:206 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:203 +#: /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 "&Prioriteit van conversie batch" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:209 msgid "Default network &timeout:" msgstr "Standaard netwerk &timeout:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:204 +#: /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)" @@ -1003,63 +1090,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:205 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:211 msgid " seconds" msgstr " seconden" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:206 -msgid "&Priority for conversion jobs:" -msgstr "&Prioriteit van conversie batch" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:207 -msgid "Frequently used directories" -msgstr "Vaak gebruikte folders" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:208 -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:210 -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:212 -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:213 msgid "Toolbar" msgstr "Werkbalk" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:214 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:213 msgid "Large" msgstr "Groot" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:215 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:214 msgid "Medium" msgstr "Middel" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:216 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:215 msgid "Small" msgstr "Klein" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:217 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:216 msgid "&Button size in toolbar" msgstr "&Knop grootte in werkbalk" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:218 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:217 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 +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 +msgid "Frequently used directories" +msgstr "Vaak gebruikte folders" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:220 +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 +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 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:220 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:225 msgid "&Compact database" msgstr "&Comprimeer database" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:221 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:226 msgid "&Metadata from file name" msgstr "&Metadata van bestands naam" @@ -1068,9 +1151,9 @@ msgid "ERROR" msgstr "FOUT" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:37 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:273 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:397 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:748 +#: /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 "Auteur(s)" @@ -1082,19 +1165,23 @@ msgstr "Auteur sortering" msgid "ISBN" msgstr "ISBN" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:105 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:104 msgid "Cannot connect" msgstr "Kan geen verbinding maken" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:106 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:105 msgid "You must specify a valid access key for isbndb.com" msgstr "Een geldige toegangssleutel is nodig voor isbndb.com" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:141 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:139 +msgid "Error fetching metadata" +msgstr "Fout bij ophalen metadata" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:144 msgid "No metadata found" msgstr "Geen metadata gevonden" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:141 +#: /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 "" @@ -1118,8 +1205,8 @@ msgstr "" "krijgen." #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata_ui.py:80 -msgid "&Access Key;" -msgstr "&Toegangssleutel" +msgid "&Access Key:" +msgstr "&Toegangs Sleutel:" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata_ui.py:81 msgid "Fetch" @@ -1136,7 +1223,7 @@ msgstr "" "Selecteer het boek dat het meest overeenkomt met dat van jou uit de lijst " "hieronder" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/job_view_ui.py:30 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/job_view_ui.py:31 msgid "Details of job" msgstr "Opdracht details" @@ -1144,6 +1231,10 @@ msgstr "Opdracht details" msgid "Unavailable" msgstr "Niet beschikbaar" +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/jobs.py:38 +msgid " - Jobs" +msgstr " - Taken" + #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/jobs_ui.py:38 msgid "Active Jobs" msgstr "Actieve opdrachten" @@ -1152,73 +1243,73 @@ msgstr "Actieve opdrachten" msgid "&Stop selected job" msgstr "%Stop de geselecteerde opdracht" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:57 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:289 +#: /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 "Metadata" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:59 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:290 +#: /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 "Uiterlijk & gedrag" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:61 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:291 +#: /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 "Pagina Instellingen" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:63 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:292 +#: /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 "Hoofdstuk Detectie" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:89 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:92 msgid "No available formats" msgstr "Geen beschikbare formaten" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:90 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:93 msgid "Cannot convert %s as this book has no supported formats" msgstr "" "Kan %s niet converteren aangezien dit boek geen ondersteunde formaten bevat" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:94 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:97 msgid "Choose the format to convert into LRF" msgstr "Kies het formaat om naar LRF te converteren" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:102 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:105 msgid "Convert %s to LRF" msgstr "Converteer %s naar LRF" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:105 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:161 +#: /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 "Zet conversie standaarden" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:171 +#: /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 "Kan niet lezen" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:172 +#: /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 "Je hebt geen permissie om het bestand te lezen: " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:180 +#: /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 "Fout bij het lezen van bestand" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:181 +#: /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 "<p>There was an error reading from file: <br /><b>" msgstr "<p>Er is een fout opgetreden bij het lezen van bestand: <br></b>" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:187 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:189 msgid " is not a valid picture" msgstr " is geen geldige afbeelding" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:253 +#: /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:" @@ -1227,11 +1318,11 @@ msgstr "" "je weet dat het bestand van een specifieke bron afkomstig is. Bekende " "bronnen:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:254 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:256 msgid "<ol><li><b>baen</b> - Books from BAEN Publishers</li>" msgstr "<ol><li><b>baen</b> - Boeken van BAEN Uitgeverijen</li>" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:255 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:257 msgid "" "<li><b>pdftohtml</b> - HTML files that are the output of the program " "pdftohtml</li>" @@ -1239,11 +1330,11 @@ msgstr "" "<li><b>pdftohtml</b> - HTML bestanden die zijn gegenereerd door " "pdftohtml</li>" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:256 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:258 msgid "<li><b>book-designer</b> - HTML0 files from Book Designer</li>" msgstr "<li><b>book-designer</b> - HTML0 bestanden van Book Designer</li>" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:289 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:291 msgid "" "Specify metadata such as title and author for the book.<p>Metadata will be " "updated in the database as well as the generated LRF file." @@ -1251,7 +1342,7 @@ msgstr "" "Geef metadata zoals de titel en auteur van het boek. <p>Metadata zal worden " "geupload in de database, evenals in het gegenereerde LRF bestand." -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:290 +#: /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." @@ -1259,7 +1350,7 @@ msgstr "" "Verander de weergave van het gegenereerde LRF bestand door de lettertype " "grootte en spatiëring tussen woorden aan te passen." -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:291 +#: /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." @@ -1267,69 +1358,69 @@ msgstr "" "Specificeer de pagina indeling zoals kantlijnen en de scherm grootte van het " "doel aparaat." -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:292 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:294 msgid "Fine tune the detection of chapter and section headings." msgstr "stel de detectie van hoofdstuk en sectie koppen in" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:300 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:303 msgid "<font color=\"gray\">No help available</font>" msgstr "<font color=\"gray\">Help is niet beschikbaar</font>" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:400 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:404 msgid "Bulk convert ebooks to LRF" msgstr "Converteer meerdere eboeken naar LRF" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:488 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:507 msgid "Convert to LRF" msgstr "Converteer naar LRF" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:489 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:508 msgid "Category" msgstr "Categorie" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:490 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:509 msgid "Options" msgstr "Opties" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:491 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:292 +#: /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 "Boek Omslag" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:492 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:293 +#: /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 "Verander &Omslag Afbeelding" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:493 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:294 +#: /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 "Zoek een afbeelding om als omslag voor dit boek te gebruiken." -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:495 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:514 msgid "Use cover from &source file" msgstr "Gebruik omslag van &bron bestand" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:496 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:260 +#: /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 "&Titel: " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:497 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:261 +#: /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 "Verander de titel van dit boek" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:498 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:110 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:262 +#: /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 "&Auteur(s) " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:499 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:501 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:111 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:263 +#: /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" @@ -1337,30 +1428,30 @@ msgstr "" "Verander de auteur(s) van dit boek. Meerdere auteurs moeten met een komma " "van elkaar worden gescheiden." -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:500 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:519 msgid "Author So&rt:" msgstr "Auteur So&rteer" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:502 -#: /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:270 +#: /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 "&Uitgeverij " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:503 -#: /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:271 +#: /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 "Verander de uitgever van dit boek" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:504 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:272 +#: /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 "Ta&gs " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:505 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:121 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:273 +#: /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. " "<br><br>They can be any words or phrases, separated by commas." @@ -1369,183 +1460,197 @@ msgstr "" "zoeken. <br><br>Ze kunnen woorden of zinsdelen bevatten, gescheiden door " "komma's." -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:506 -#: /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:276 +#: /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 "%Series:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:507 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:508 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:125 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:126 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:277 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:278 +#: /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 "Lijst van bekende series. Je kunt nieuwe series toevoegen." -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:509 -#: /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:281 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:282 +#: /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 "Series Index." -#: /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:283 +#: /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 "Boek " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:513 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:532 msgid "Base &font size:" msgstr "Basis &Letter grootte" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:514 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:521 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:523 +#: /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 " pts" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:515 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:534 msgid "Embedded Fonts" msgstr "Toegevoegde Lettertypen" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:516 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:535 msgid "&Serif:" msgstr "%Serif:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:517 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:536 msgid "S&ans-serif:" msgstr "S&ans-serif:" -#: /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:537 msgid "&Monospace:" msgstr "&Monospace:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:519 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:538 msgid "Source en&coding:" msgstr "Bron &Codering" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:520 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:539 msgid "Minimum &indent:" msgstr "Minimum &indentie:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:522 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:541 msgid "&Word spacing:" msgstr "&Woord spatiëring" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:524 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:543 msgid "Enable auto &rotation of images" msgstr "Activeer auto &rotatie van afbeeldingen" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:525 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:544 msgid "Insert &blank lines between paragraphs" msgstr "Voeg &blanco regels to tussen paragrafen" -#: /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:545 msgid "Ignore &tables" msgstr "Negeer &tabellen" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:527 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:546 msgid "Ignore &colors" msgstr "Negeer &kleuren" -#: /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:547 msgid "&Preprocess:" msgstr "&Verwerk" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:529 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:548 msgid "Header" msgstr "Koptekst" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:530 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:549 msgid "&Show header" msgstr "Laat koptekst &zien" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:531 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:550 msgid "&Header format:" msgstr "&Koptekst Formaat:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:532 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:551 msgid "Override<br>CSS" msgstr "Negeer<br>CSS" -#: /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:552 msgid "&Profile:" msgstr "&Profiel" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:534 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:553 msgid "&Left Margin:" msgstr "&Linker Kantlijn:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:535 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:537 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:539 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:541 +#: /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 " px" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:536 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:555 msgid "&Right Margin:" msgstr "&Rechter Kantlijn:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:538 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:557 msgid "&Top Margin:" msgstr "&Boven Marge:" -#: /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:559 msgid "&Bottom Margin:" msgstr "&Onder Marge:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:542 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:561 +msgid "&Convert tables to images (good for large/complex tables)" +msgstr "" +"&Converteer tabellen naar afbeeldingen (Goed voor grote/gecompliceerde " +"tabellen)" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:562 +msgid "&Multiplier for text size in rendered tables:" +msgstr "&Multiplier van tekst grootte in gegenereerde tabellen:" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:563 msgid "Title based detection" msgstr "Detectie gebaseerd op Titel" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:543 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:564 msgid "&Disable chapter detection" msgstr "&Deactiveer hoofdstuk detectie" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:544 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:565 msgid "&Regular expression:" msgstr "&Reguliere expressie:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:545 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:566 msgid "Add &chapters to table of contents" msgstr "Voeg hoofdstukken toe aan de &inhoudsopgave" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:546 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:567 msgid "Don't add &links to the table of contents" msgstr "Voeg geen &links toe aan de inhoudsopgave" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:547 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:568 msgid "Tag based detection" msgstr "Tag-gebaseerde detectie" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:548 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:569 msgid "&Page break before tag:" msgstr "Nieuwe &Pagina voor tag:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:549 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:570 msgid "&Force page break before tag:" msgstr "&Forceer nieuwe pagina voor tag:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:550 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:571 msgid "Force page break before &attribute:" msgstr "Forceer nieuwe pagina voor &attribuut:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:551 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:572 +msgid "Detect chapter &at tag:" +msgstr "Detecteer hoofdstuk bij t&ag:" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:573 msgid "Help on item" msgstr "Help voor onderdeel" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:552 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:574 msgid "" "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" " "\"http://www.w3.org/TR/REC-html40/strict.dtd\">\n" "<html><head><meta name=\"qrichtext\" content=\"1\" /><style " "type=\"text/css\">\n" "p, li { white-space: pre-wrap; }\n" -"</style></head><body style=\" font-family:'DejaVu Sans'; font-size:10pt; " -"font-weight:400; font-style:normal;\">\n" +"</style></head><body style=\" font-family:'Candara'; font-size:11pt; font-" +"weight:400; font-style:normal;\">\n" "<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; " "margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-" "family:'Sans Serif'; font-size:9pt;\"></p></body></html>" @@ -1555,28 +1660,28 @@ msgstr "" "<html><head><meta name=\"qrichtext\" content=\"1\" /><style " "type=\"text/css\">\n" "p, li { white-space: pre-wrap; }\n" -"</style></head><body style=\" font-family:'DejaVu Sans'; font-size:10pt; " -"font-weight:400; font-style:normal;\">\n" +"</style></head><body style=\" font-family:'Candara'; font-size:11pt; font-" +"weight:400; font-style:normal;\">\n" "<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; " "margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-" "family:'Sans Serif'; font-size:9pt;\"></p></body></html>" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:108 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:114 msgid "Edit Meta information" msgstr "Verander Meta informatie" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:109 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:259 +#: /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 "Meta informatie" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:112 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:264 +#: /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 "Auteur S&ortering: " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:113 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:265 +#: /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." @@ -1584,32 +1689,39 @@ msgstr "" "Geef aan hoe de auteur(s) van dit boeken dienen te worden gesorteerd. " "Bijvoorbeeld: Charles Dickens moet worden gesorteerd als: Dickens, Charles" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:114 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:266 +#: /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 "&Rangschikking" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:115 -#: /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:267 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:268 +#: /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 "Rangschikking van dit boek. 0-5 sterren" -#: /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:269 +#: /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 " sterren" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:120 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:126 msgid "Add Ta&gs: " msgstr "Voeg Ta&gs Toe: " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:122 +#: /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 "Open Tag Editor" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:130 msgid "&Remove tags:" msgstr "&Verwijder tags:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:123 +#: /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 "" "Lijst van tags die moeten worden verwijderd, gescheiden met komma's. " @@ -1640,51 +1752,46 @@ msgstr "Kan omslag niet downloaden" msgid "You must specify the ISBN identifier for this book." msgstr "Het ISBN nummer voor dit boek moet worden opgegeven." -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:258 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:256 msgid "Edit Meta Information" msgstr "Verander Meta Informatie" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:274 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:275 -msgid "Open Tag Editor" -msgstr "Open Tag Editor" - -#: /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:277 msgid "Remove unused series (Series that have no books)" msgstr "Verwijder ongebruikte series (Series die geen boeken bevatten)" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:284 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:282 msgid "IS&BN:" msgstr "IS&BN:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:286 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:284 msgid "Fetch metadata from server" msgstr "Download metadata van server" -#: /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:285 msgid "Available Formats" msgstr "Beschikbare Formaten" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:288 +#: /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 "Voeg een nieuw formaat voor dit boek toe aan de database" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:290 +#: /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 "Verwijder de geselecteerde formaten voor dit boek van de database." -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:296 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:294 msgid "Fetch cover image from server" msgstr "Download omslag afbeelding van de server" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:297 +#: /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 "" "Verander de gebruikernaam en/of wachtwoord voor je account met " "LibraryThing.com" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:298 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:296 msgid "Change password" msgstr "Wachtwoord wijzigen" @@ -1713,13 +1820,13 @@ msgid "Tag" msgstr "Tag" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search.py:18 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:244 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:403 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:251 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:411 msgid "Series" msgstr "Serie" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search.py:19 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:681 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:689 msgid "Format" msgstr "Formaat" @@ -1833,98 +1940,98 @@ msgstr "Het bijgevoegde bestand: %s is een recept om %s te downloaden." #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:70 msgid "Recipe for " -msgstr "" +msgstr "Recept voor " #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:86 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:96 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:218 +#: /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 "Schakel over naar geavanceerde modus" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:91 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:99 +#: /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 "Schakel over naar simpele modus" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:109 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:110 msgid "Feed must have a title" msgstr "Feed heeft een titel nodig" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:110 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:111 msgid "The feed must have a title" msgstr "De feed heeft een titel nodig" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:114 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:115 msgid "Feed must have a URL" msgstr "Feed heeft een URL nodig" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:115 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:116 msgid "The feed %s must have a URL" msgstr "De feed %s heeft een URL nodig" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:120 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:121 msgid "Already exists" msgstr "Bestaat al" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:121 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:122 msgid "This feed has already been added to the recipe" msgstr "Deze feed is al aan een recept toegevoegd" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:162 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:171 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:194 -msgid "Invalid input" -msgstr "Ongeldige invoer" - #: /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 "Ongeldige invoer" + +#: /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 "<p>Could not create recipe. Error:<br>%s" msgstr "<p>Een recept kon niet worden aangemaakt. Foutmelding:<br>%s" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:178 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:200 +#: /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 "Recept vervangen?" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:179 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:201 +#: /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 "Een persoonlijk recept genaat %s bestaat al. Wilt u deze vervangen?" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:187 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:188 msgid "Choose a recipe file" msgstr "Kies een recept" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:187 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:188 msgid "Recipes" msgstr "Recepten" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:212 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:208 msgid "Add custom news source" msgstr "Voeg een persoonlijke nieuws bron toe" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:213 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:209 msgid "Available user recipes" msgstr "Beschikbare gebruikers recepten" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:214 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:210 msgid "Add/Update &recipe" msgstr "Voeg toe/Update &recept" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:215 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:211 msgid "&Remove recipe" msgstr "&Verwijder recept" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:216 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:212 msgid "&Share recipe" msgstr "&Deel recept" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:217 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:213 msgid "&Load recipe from file" msgstr "&Laad bestand met recept" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:219 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:215 msgid "" "<html><head><meta name=\"qrichtext\" content=\"1\" /><style " "type=\"text/css\">\n" @@ -1948,56 +2055,56 @@ msgstr "" "daarna de \"geavanceerde modus\" moeten gebruiken om het download process in " "te kunnen stellen.</p></body></html>" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:223 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:219 msgid "Recipe &title:" msgstr "Recept &title:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:224 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:220 msgid "&Oldest article:" msgstr "&Oudste artikel:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:225 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:221 msgid "The oldest article to download" msgstr "Het oudste artikel om te downloaden" -#: /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:222 msgid " days" msgstr " dagen" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:227 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:223 msgid "&Max. number of articles per feed:" msgstr "&Max. aantal artikelen per feed:" -#: /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:224 msgid "Maximum number of articles to download per feed." msgstr "Maximum aantal artikelen te downloaden per feed:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:229 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:225 msgid "Feeds in recipe" msgstr "Feeds in recept" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:231 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:227 msgid "Remove feed from recipe" msgstr "Verwijder van recept" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:234 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:237 +#: /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 "Voeg feed toe aan recept" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:235 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:231 msgid "&Feed title:" msgstr "&Feed titel:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:236 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:232 msgid "Feed &URL:" msgstr "Feed &URL:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:238 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:234 msgid "&Add feed" msgstr "V&oeg feed toe" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:239 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:235 msgid "" "For help with writing advanced news recipes, please visit <a " "href=\"http://calibre.kovidgoyal.net/user_manual/news.html\">User Recipes</a>" @@ -2007,7 +2114,7 @@ msgstr "" "href=\"http://calibre.kovidgoyal.net/user_manual/news.html\">Gebruikers Recep" "ten</a>" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:240 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:236 msgid "Recipe source code (python)" msgstr "Recept bron code (python)" @@ -2090,47 +2197,46 @@ msgstr "Reguliere expressie groep naam (?<serie_index>)" #: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:114 msgid "ISBN:" -msgstr "" +msgstr "ISBN:" -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:291 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:313 msgid "Job" msgstr "Opdracht" -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:292 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:314 msgid "Status" msgstr "Status" -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:293 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:315 msgid "Progress" msgstr "Voortgang" -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:294 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:316 msgid "Running time" msgstr "Werktijd" -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:322 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:344 msgid "Error" msgstr "Fout" -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:322 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:344 msgid "Finished" msgstr "Voltooid" -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:324 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:346 msgid "Waiting" msgstr "Wachten" -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:324 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:346 msgid "Working" msgstr "Bezig" -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:354 -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:358 -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:362 +#: /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 "Opdracht kan niet worden afgebroken" -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:355 +#: /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." @@ -2138,62 +2244,58 @@ msgstr "" "Opdrachten die communiceren met de lezer kunnen niet worden afgebroken omdat " "dit data corruptie kan veroorzaken." -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:359 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:381 msgid "Cannot kill already completed jobs." msgstr "Opdrachten die al zijn voltooid kunnen niet worden afgebroken." -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:363 -msgid "Cannot kill waiting jobs." -msgstr "Wachtende opdrachten kunnen niet worden afgebroken." - -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:228 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:234 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:238 +#: /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 "Geen" -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:229 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:402 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:687 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:751 +#: /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 "Tags" -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:235 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:242 msgid "Formats" msgstr "Formaten" -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:244 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:251 msgid "Book <font face=\"serif\">%s</font> of %s." msgstr "Boek <font face=\"serif\">%s</font> van %s." -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:388 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:396 msgid "Double click to <b>edit</b> me<br><br>" msgstr "Dubbel-klik om me te <b>wijzigen</b><br><br>" -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:398 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:749 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:406 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:757 msgid "Size (MB)" msgstr "Grootte (MB)" -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:399 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:750 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:407 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:758 msgid "Date" msgstr "Datum" -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:400 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:408 msgid "Rating" msgstr "Waardering" -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:682 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:690 msgid "Path" msgstr "Pad" -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:686 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:694 msgid "Timestamp" msgstr "Tijdsaanduiding" -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:786 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:794 msgid "Search (For Advanced Search click the button to the left)" msgstr "Zoeken (Voor geavanceerd zoeken klik op de knop links)" @@ -2213,15 +2315,15 @@ msgstr "Afbreken" 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/main.py:64 +#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main.py:63 msgid " - LRF Viewer" msgstr " - LRF Viewer" -#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main.py:155 +#: /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 "<b>Geen Resultaten</b> voor de zoekterm <i>%s</i> gevonden." -#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main.py:155 +#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main.py:154 msgid "No matches found" msgstr "Geen resultaten gevonden" @@ -2283,26 +2385,37 @@ 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: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: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:118 +#: /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 "Bewerk metadata individueel" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:119 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:132 msgid "Edit metadata in bulk" msgstr "Bewerk metadata in groep" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:122 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:135 msgid "Add books from a single directory" msgstr "Voeg boeken toe uit een enkele folder" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:123 +#: /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)" @@ -2310,7 +2423,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:124 +#: /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)" @@ -2318,49 +2431,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:138 -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:274 +#: /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 "Opslaan op schijf" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:139 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:153 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:142 -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:280 +#: /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 "Bekijk" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:143 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:158 msgid "View specific format" msgstr "Bekijk specifiek formaat" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:158 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:174 msgid "Convert individually" msgstr "Converteer Individueel" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:159 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:175 msgid "Bulk convert" msgstr "Converteer Groep" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:303 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:309 msgid " detected." msgstr " gedetecteerd" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:303 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:309 msgid "Device: " msgstr "Apparaat: " -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:328 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:334 msgid "Connected " -msgstr "" +msgstr "Verbonden " -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:340 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:346 msgid "Device database corrupted" msgstr "Apparaat Database Beschadigd" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:341 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:347 msgid "" "\n" " <p>The database of books on the reader is corrupted. Try the " @@ -2389,8 +2506,8 @@ msgstr "" " </ol>\n" " " -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:393 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:467 +#: /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>" @@ -2398,53 +2515,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:396 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:470 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:402 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:476 msgid "Duplicates found!" msgstr "Duplicaten gevonden!" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:429 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:442 +#: /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 "Boeken worden geupload naar de lezer." -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:500 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:507 msgid "No space on device" msgstr "Geen schijfruimte op de lezer." -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:501 +#: /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 "" "<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:536 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:546 msgid "Deleting books from device." msgstr "Boeken worden verwijderd van de lezer." -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:570 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:587 +#: /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 "Metedata kan niet worden gewijzigd" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:570 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:587 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:675 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:736 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:797 +#: /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 "Geen boeken geselecteerd" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:658 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:674 msgid "Sending books to device." msgstr "Boeken worden naar de lezer verzonden." -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:661 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:677 msgid "No suitable formats" msgstr "Geen geschikte formaten" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:662 +#: /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>" @@ -2452,68 +2569,78 @@ 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:675 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:694 msgid "Cannot save to disk" msgstr "Kan niet naar schijf worden opgeslagen" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:714 +#: /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 "Download nieuws van " -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:716 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:744 msgid "Fetching news from " msgstr "Downloading nieuws van " -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:726 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:754 msgid "News fetched. Uploading to device." msgstr "Nieuws gedownload, uploading naar lezer." -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:736 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:797 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:764 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:834 msgid "Cannot convert" msgstr "Kan niet converteren" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:745 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:773 msgid "Starting Bulk conversion of %d books" msgstr "Begin groep convertering van %d boeken" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:867 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:885 +#: /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 "Geen boek geselecteerd" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:867 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:885 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:899 +#: /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 "Kan niet bekijken" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:873 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:904 +#: /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 "Kies het te bekijken formaat" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:900 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:938 msgid "%s has no available formats." msgstr "%s heeft geen beschikbare formaten" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:938 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:976 msgid "Cannot configure" msgstr "Kan niet configureren" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:938 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:976 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:961 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:999 msgid "Copying database to " msgstr "copieer database naar " -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:976 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1014 msgid "Invalid database" msgstr "ongeldige database" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:977 +#: /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" @@ -2521,23 +2648,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:985 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1023 msgid "Could not move database" msgstr "Database kon niet worden verplaatst" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1006 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1044 msgid "No detailed info available" msgstr "Geen details beschikbaar" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1007 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1045 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:1049 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1087 msgid "Error talking to device" msgstr "Fout bij communicatie met lezer" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1050 +#: /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." @@ -2545,15 +2672,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:1076 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1139 msgid "Conversion Error" -msgstr "" +msgstr "Converteer Fout" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1098 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1158 msgid "Database does not exist" msgstr "database bestaat niet" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1098 +#: /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." @@ -2561,7 +2688,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:1149 +#: /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>" @@ -2569,34 +2696,37 @@ 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:1155 +#: /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 "" +"%s is geupdate naar versie %s. Zie die <a " +"href=\"http://calibre.kovidgoyal.net/wiki/Changelog\">nieuwe functies</a> " +"Bezoek download pagina?" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1155 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1215 msgid "Update available" -msgstr "" +msgstr "Update beschikbaar" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:255 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:256 msgid "calibre" msgstr "Calibre" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:256 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:257 msgid "Advanced search" msgstr "Geavanceerde Zoekopdracht" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:258 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:259 msgid "Alt+S" msgstr "Alt+S" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:259 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:260 msgid "&Search:" msgstr "&Zoeken:" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:260 +#: /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" @@ -2604,7 +2734,7 @@ msgstr "" "Zoek de boekenlijst op titel of auteur<br><br>Meerdere woorden met spaties " "worden allen gebruikt." -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:261 +#: /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" @@ -2612,62 +2742,74 @@ msgstr "" "Zoek de boekenlijst op titel, auteur, uitgeverij, tags of " "opmerkingen.<br><br>Meerdere woorden met spaties worden allen gebruikt." -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:262 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:263 msgid "Reset Quick Search" msgstr "Snelzoeken wissen" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:266 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:267 msgid "Add books" msgstr "Voeg boeken toe" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:267 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:268 msgid "A" msgstr "A" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:268 #: /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 "Verwijder boeken" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:270 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:271 msgid "Del" msgstr "Del" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:271 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:272 msgid "Edit meta information" msgstr "Wijzig meta informatie" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:272 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:273 msgid "E" msgstr "E" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:273 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:274 msgid "Send to device" msgstr "Zend naar lezer" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:275 -msgid "S" -msgstr "" - #: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:276 +msgid "S" +msgstr "S" + +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:277 msgid "Fetch news" msgstr "Download niews" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:277 -msgid "F" -msgstr "" - #: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:278 +msgid "F" +msgstr "F" + +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:279 msgid "Convert E-books" msgstr "Converteer E-boeken" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:279 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:280 msgid "C" -msgstr "" +msgstr "C" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:281 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:282 msgid "V" +msgstr "V" + +#: /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 "" +"Verwijs console output naar een dialoog venster (zowel stdout als stderr). " +"Handig onder Windows waar GUI applicatie geen output stream hebben." + +#: /home/kovid/work/calibre/src/calibre/gui2/main_window.py:52 +msgid "ERROR: Unhandled exception" +msgstr "FOUT: Niet-verwerkte uitzondering" #: /home/kovid/work/calibre/src/calibre/gui2/news.py:32 msgid "Add a custom news source" @@ -2718,11 +2860,11 @@ msgstr "Ongeldige reguliere expressie" msgid "Invalid regular expression: %s" msgstr "Ongeldige reguliere expressie: %s" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:166 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:169 msgid "Library" msgstr "Bibliotheek" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:167 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:170 msgid "" "Reader\n" "%s available" @@ -2730,7 +2872,7 @@ msgstr "" "Lezer\n" "%s beschikbaar" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:168 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:171 msgid "" "Card\n" "%s available" @@ -2738,20 +2880,20 @@ msgstr "" "Kaart\n" "%s beschikbaar" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:172 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:175 msgid "Click to see the list of books available on your computer" msgstr "Klik om een de lijst met boeken op uw computer te zien" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:173 +#: /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 "" "Klik om de lijst met boeken in het hoofdgeheugen van uw lezer te zien" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:174 +#: /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 "Klik om de lijst met boeken op de opslag kaart van uw lezer te zien" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:25 +#: /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." @@ -2759,7 +2901,7 @@ msgstr "" "Pad naad de Calibre database. Standaard word het pad gebruikt dat is " "opgeslagen in de instellingen." -#: /home/kovid/work/calibre/src/calibre/library/cli.py:80 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:82 msgid "" "%prog list [options]\n" "\n" @@ -2769,7 +2911,7 @@ msgstr "" "\n" "Laat de boeken zien die beschikbaar zijn in de Calibre database. \n" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:88 +#: /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" @@ -2781,7 +2923,7 @@ msgstr "" "Beschikbare velden: %s\n" "Standaard: %%default" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:90 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:92 msgid "" "The field by which to sort the results.\n" "Available fields: %s\n" @@ -2791,11 +2933,11 @@ msgstr "" "Beschikbare velden: %s\n" "Standaard: %%default" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:92 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:94 msgid "Sort results in ascending order" msgstr "Sorteer resultaten in oplopende volgorde" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:94 +#: /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 " @@ -2805,15 +2947,15 @@ msgstr "" "kijk naar de zoek-gerelateerde documentatie in de gebruikershandleiding. " "Standaard word er niet gefilterd." -#: /home/kovid/work/calibre/src/calibre/library/cli.py:101 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:103 msgid "Invalid fields. Available fields:" msgstr "Ongeldig veld. Beschikbare velden:" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:108 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:110 msgid "Invalid sort field. Available fields:" msgstr "Ongeldig sorteer veld. Beschikbare velden:" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:170 +#: /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):" @@ -2821,7 +2963,7 @@ msgstr "" "De volgende boeken zijn niet toegevoegd omdat ze al bestaan in de database. " "(Zie de --duplicates optie):" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:195 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:197 msgid "" "%prog add [options] file1 file2 file3 ...\n" "\n" @@ -2834,7 +2976,7 @@ msgstr "" "Voeg de gespecificeerde bestanden als boeken toe aan de database. Je kunt " "ook folders opgeven, zie de folder-gerelateerde opties hieronder. \n" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:204 +#: /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" @@ -2843,11 +2985,11 @@ msgstr "" "bestanden in de folder verschillende bestandsformaten zin voor dat enkele " "boek." -#: /home/kovid/work/calibre/src/calibre/library/cli.py:206 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:208 msgid "Process directories recursively" msgstr "Bewerk folders recursief" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:208 +#: /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." @@ -2855,11 +2997,11 @@ msgstr "" "Voeg boeken toe aan de database zelfs als deze al bestaan. Vergelijking is " "gebaseerd op de boek titels." -#: /home/kovid/work/calibre/src/calibre/library/cli.py:213 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:215 msgid "You must specify at least one file to add" msgstr "Ten minste een boek moet worden opgegeven om toe te voegen" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:231 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:233 msgid "" "%prog remove ids\n" "\n" @@ -2873,11 +3015,11 @@ msgstr "" "moeten een lijst zijn die is gescheiden door komma's. (Je kan de id nummers " "zien door het list commando te gebruiken). Bijvoorbeeld, 23,34,57-85\n" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:243 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:245 msgid "You must specify at least one book to remove" msgstr "Ten minste een boek moet worden opgegeven om te verwijderen" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:263 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:265 msgid "" "%prog add_format [options] id ebook_file\n" "\n" @@ -2892,15 +3034,15 @@ msgstr "" "door het list commando te gebruiken. Als het formaat al bestaat, dan zal het " "worden vervangen.\n" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:274 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:276 msgid "You must specify an id and an ebook file" msgstr "zowel een id als een eboek bestand moeten worden gespecificeerd" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:279 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:281 msgid "ebook file must have an extension" msgstr "eboek bestand heeft een extensie nodig" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:287 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:289 msgid "" "\n" "%prog remove_format [options] id fmt\n" @@ -2917,11 +3059,98 @@ msgstr "" "bestands extensie zoals LRF, TXT of EPUB. Als het logische boek niet in dit " "formaat bestaat, dan zal er niets gebeuren.\n" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:300 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:302 msgid "You must specify an id and a format" msgstr "Een id en een formaat moeten worden opgegeven" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:310 +#: /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 "" +"\n" +"%prog show_metadata [opties] id\n" +"\n" +"Laat de metadata uit de Calibre database zien voor het boek geidentificeerd " +"met het id. \n" +"id is een id nummer van het list commando \n" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:328 +msgid "Print metadata in OPF form (XML)" +msgstr "Print metadata in OPF formaat (XML)" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:333 +msgid "You must specify an id" +msgstr "Je moet een id opgeven" + +#: /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 "" +"\n" +"%prog set_metadata [opties] id /pad/naar/metadata.opf\n" +"\n" +"Definieer de metadata die is opgeslagen in de Calibre database voor het " +"boek\n" +"geidenticeerd met id uit het OPF bestand metadata.opf. id is een id nummer " +"uit\n" +"het list commando. Je kunt meer informatie voor het OPF formaat zien door\n" +"--as-opf parameter op te geven bij het show_metadata commando.\n" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:360 +msgid "You must specify an id and a metadata file" +msgstr "Je moet een id en metadata bestand opgeven" + +#: /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 "" +"%prog export [opties] ids \n" +"\n" +"Exporteer de boeken opgegeven als ids (een lijst gescheiden met komma's)\n" +"naar het bestandssysteem. De exporteer operatie bewaard alle formaten van\n" +"het boek, de cover en metadata (in een opf bestand) Je kunt id nummers zien\n" +"via het list commando. \n" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:380 +msgid "Export all books in database, ignoring the list of ids." +msgstr "Exporteer alle boeken in de database, negeer de lijst met ids." + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:382 +msgid "Export books to the specified directory. Default is" +msgstr "Exporteer boeken naar de opgegeven folder. Standaard is" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:384 +msgid "Export all books into a single directory" +msgstr "exporteer alle boeken naar een enkele folder" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:386 +msgid "Create file names as author - title instead of title - author" +msgstr "Maak bestands namen als auteur - titel in plaats van titel - auteur" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:391 +msgid "You must specify some ids or the %s option" +msgstr "Je moet ids opgeven of de %s optie gebruiken" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:401 msgid "" "%%prog command [options] [arguments]\n" "\n" @@ -2939,13 +3168,13 @@ msgstr "" "commando is een van de volgende:\n" " %s\n" -#: /home/kovid/work/calibre/src/calibre/parallel.py:131 -msgid "Job killed by user" -msgstr "Opdracht beëindigd door gebruiker" +#: /home/kovid/work/calibre/src/calibre/parallel.py:317 +msgid "Could not launch worker process." +msgstr "Werker sessie kan niet worden gestart." -#: /home/kovid/work/calibre/src/calibre/utils/fontconfig.py:124 +#: /home/kovid/work/calibre/src/calibre/utils/fontconfig.py:146 msgid "Could not initialize the fontconfig library" -msgstr "" +msgstr "De fontconfig bibliotheek kon niet worden geinitialiseerd." #: /home/kovid/work/calibre/src/calibre/utils/sftp.py:53 msgid "URL must have the scheme sftp" @@ -2969,7 +3198,7 @@ msgid "Unknown feed" msgstr "Onbekende feed" #: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:95 -#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:115 +#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:117 msgid "Untitled article" msgstr "Artikel zonder naam" @@ -3145,11 +3374,11 @@ msgstr "Kon omslag niet downloaden: %s" msgid "Downloading cover from %s" msgstr "Download omslag van %s" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:699 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:698 msgid "Untitled Article" msgstr "Artikel zonder Naam" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:743 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:744 msgid "" "\n" "Downloaded article %s from %s\n" @@ -3159,19 +3388,19 @@ msgstr "" "Artikel %s van %s gedownload\n" "%s" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:749 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:750 msgid "Article downloaded: %s" msgstr "Artikel gedownload: %s" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:755 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:756 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:760 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:761 msgid "Article download failed: %s" msgstr "Artikel download mislukt: %s" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:775 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:776 msgid "Fetching feed" msgstr "Downloading feed" diff --git a/src/calibre/translations/ru.po b/src/calibre/translations/ru.po index 9701545c99..d071b3e847 100644 --- a/src/calibre/translations/ru.po +++ b/src/calibre/translations/ru.po @@ -6,89 +6,109 @@ msgid "" msgstr "" "Project-Id-Version: calibre 0.4.55\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2008-06-12 20:18+0000\n" -"PO-Revision-Date: 2008-05-24 06:25+0000\n" -"Last-Translator: Kovid Goyal <Unknown>\n" +"POT-Creation-Date: 2008-06-30 23:41+0000\n" +"PO-Revision-Date: 2008-07-02 08:05+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-06-15 22:20+0000\n" +"X-Launchpad-Export-Date: 2008-07-02 15:52+0000\n" "X-Generator: Launchpad (build Unknown)\n" "Generated-By: pygettext.py 1.5\n" -#: /home/kovid/work/calibre/src/calibre/__init__.py:96 -msgid "%sUsage%s: %s\n" -msgstr "" - #: /home/kovid/work/calibre/src/calibre/__init__.py:133 +#, fuzzy +msgid "%sUsage%s: %s\n" +msgstr "%sИспользовано%s: %s\n" + +#: /home/kovid/work/calibre/src/calibre/__init__.py:170 msgid "Created by " -msgstr "" +msgstr "Сделано " #: /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 "" +msgstr "Не удалось определить диск %s. Попробуйте перезагрузиться." + +#: /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 "" +msgstr "Укажите заголовок. По умолчанию: имя файла." #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:75 +#, fuzzy msgid "" "Set the author(s). Multiple authors should be set as a comma separated list. " "Default: %default" msgstr "" +"Укажите автора(ов). Несколько авторов должны быть отделены запятыми. По " +"умолчанию: %default" #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:76 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:271 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:677 +#: /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 "" +msgstr "Неизвестно" #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:78 msgid "Set the comment." -msgstr "" +msgstr "Укажите комментарий." #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:80 +#, fuzzy msgid "Set the category" -msgstr "" +msgstr "Укажите жанр" #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:82 msgid "Sort key for the title" -msgstr "" +msgstr "Значение для сортировки по заголовку" #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:84 msgid "Sort key for the author" -msgstr "" +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:401 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:409 msgid "Publisher" -msgstr "" +msgstr "Издатель" #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:88 msgid "Path to file containing image to be used as cover" -msgstr "" +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 "" +"Отображать HTML-таблицы как блоки текста, а не как таблицы. Можно это " +"использовать, если HTML содержит слишком большие таблицы." #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:98 msgid "" @@ -96,34 +116,44 @@ msgid "" "option obsoletes the --font-delta option and takes precedence over it. To " "use --font-delta, set this to 0. Default: %defaultpt" msgstr "" +"Укажите основной размер шрифта в пунктах. Все шрифты будут отмасштабированы " +"по нему. Эта опция делает устаревшей опцию --font-delta и имеет приоритет " +"над ней. Установите ее в 0, чтобы использовать --font-delta. По умолчанию: " +"%default пунктов" #: /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 "" +msgstr "Укажите отступ между словами в пунктах. По умолчанию: %default" #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:105 msgid "Separate paragraphs by blank lines." -msgstr "" +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 "" +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 "" +"Указать формат верхнего колонтитула. %a будет заменено на автора и %t на " +"заголовок. По умолчанию: %default" #: /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 "" +"Переопределить CSS. Можно указать путь к файлу стилей CSS или строку. Строка " +"будет интерпретирована как CSS-стиль." #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:113 msgid "" @@ -131,12 +161,17 @@ msgid "" "the HTML files are appended to the LRF. The .opf file must be in the same " "directory as the base HTML file." msgstr "" +"Использовать элемент <spine> из файла OPF, чтобы определить порядок, в " +"котором HTML-файлы будут следовать в LRF. Файл .opf должен быть в той же " +"директории, что и основной HTML-файл." #: /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 "" +"Минимальный отступ абзаца (отступ первой строки абзаца) в пунктах. По " +"умолчанию: %default" #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:117 msgid "" @@ -144,65 +179,109 @@ msgid "" "FONT_DELTA pts. FONT_DELTA can be a fraction.If FONT_DELTA is negative, the " "font size is decreased." msgstr "" +"Увеличить размер шрифта на 2 * FONT_DELTA пунктов и межстрочный интервал на " +"FONT_DELTA пунктов. Значение FONT_DELTA может быть дробным. Если FONT_DELTA " +"указано отрицательным, то размер шрифта будет уменьшен." #: /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 "" +"Отображать текст черным цветом на белом фоне, игнорируя цвета, указанные в " +"HTML или CSS." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:129 +#: /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 "" +"Профиль целевого устройства, для которого будет сгенерирован LRF. Профиль " +"определяет такие вещи, как разрешение и размер экрана на целевом устройстве. " +"По умолчанию: %s Поддерживаемые профили: " -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:135 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:134 msgid "Left margin of page. Default is %default px." -msgstr "" +msgstr "Отступ слева на странице. По умолчанию: %default пикселей." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:137 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:136 msgid "Right margin of page. Default is %default px." -msgstr "" +msgstr "Отступ справа на странице. По умолчанию: %default пикселей." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:139 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:138 msgid "Top margin of page. Default is %default px." -msgstr "" +msgstr "Отступ сверху на странице. По умолчанию: %default пикселей." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:141 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:140 msgid "Bottom margin of page. Default is %default px." -msgstr "" +msgstr "Отступ снизу на странице. По умолчанию: %default пикселей." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:145 +#: /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 "" +"Представлять таблицы в HTML как изображения (может быть полезным, если в " +"документе содержатся большие или сложные таблицы)" + +#: /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 "" +"Умножить значение размера текста в отображаемых таблицах на это значение. По " +"умолчанию: %default" + +#: /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 <a> tags are " "ignored." msgstr "" +"Максимальное количество уровней рекурсивной обработки ссылок. Значение 0 " +"означает, что ссылки не поддерживаются. Отрицательное значение означает, что " +"теги <a> будут проигнорированы." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:149 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:153 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:153 -msgid "Don't add links to the table of contents." -msgstr "" +"Регулярное выражение. Теги <a>, чьи значения href совпадут с ним, будут " +"проигнорированы. По умолчанию: %default" #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:157 -msgid "" -"Prevent the automatic insertion of page breaks before detected chapters." -msgstr "" +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 "" +"Регулярное выражение, которое будет использовано для определения заголовков " +"глав. Иначе будут использованы теги заголовков (h1-h6). По умолчанию: " +"%default" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:164 +#: /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 "" +"Определить главу, начинающуюся с элемента, имеющего определенный атрибут. " +"Эта опция должна быть задана в формате: рег. выраж. имени тега,название " +"атрибута,рег. выраж. значения атрибута. Например, для соответствия всем " +"тегами заголовков с атрибутом class=\"chapter\" необходим использовать \"h\\" +"d,class,chapter\". По умолчанию: %default" + +#: /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 " @@ -213,12 +292,12 @@ msgid "" "has only a few elements." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:174 +#: /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:176 +#: /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 " @@ -226,25 +305,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:179 +#: /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:182 +#: /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:184 +#: /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:186 +#: /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:189 +#: /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 " @@ -252,33 +331,33 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:197 +#: /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:200 +#: /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:203 +#: /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:207 +#: /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:209 +#: /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:211 +#: /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:213 +#: /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 " @@ -334,95 +413,95 @@ msgstr "" msgid "Fetching of recipe failed: " msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:309 +#: /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:311 +#: /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:333 +#: /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:349 +#: /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:366 +#: /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:380 +#: /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:518 -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:531 +#: /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:523 +#: /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:543 +#: /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:587 +#: /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:929 +#: /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:967 +#: /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:982 +#: /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:1687 +#: /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:1689 +#: /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:1711 +#: /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:1741 +#: /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:1781 +#: /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:1784 +#: /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:1913 +#: /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:1919 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1982 msgid "" "Usage: %prog [options] mybook.html\n" "\n" @@ -486,11 +565,11 @@ msgstr "" msgid "Convert LRS to LRS, useful for debugging." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:454 +#: /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:579 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:580 msgid "" "%prog [options] mybook.lrf\n" "\n" @@ -499,52 +578,52 @@ msgid "" "\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:586 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:18 +#: /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:588 +#: /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:590 +#: /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:592 +#: /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:594 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:22 +#: /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:597 +#: /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:600 +#: /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:604 +#: /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:606 +#: /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:608 +#: /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:610 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:611 msgid "Don't know what this is for" msgstr "" @@ -607,11 +686,11 @@ msgid "" "%prog converts mybook.txt to mybook.lrf" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:20 +#: /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:24 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:27 msgid "Set the comment" msgstr "" @@ -677,11 +756,11 @@ msgid "" "Fetch a cover image for the book identified by ISBN from LibraryThing.com\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/lit.py:747 +#: /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:754 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/lit.py:758 msgid "Cover saved to" msgstr "" @@ -693,19 +772,19 @@ msgstr "" msgid "No filename specified." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:304 +#: /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:306 +#: /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:325 +#: /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:327 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:364 msgid "OEB ebook created in" msgstr "" @@ -713,18 +792,18 @@ msgstr "" #: /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:268 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:396 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:747 +#: /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:512 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:285 +#: /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:239 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:246 msgid "Comments" msgstr "" @@ -743,144 +822,148 @@ msgstr "" msgid "Choose Format" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:22 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:23 msgid "Basic" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:23 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:24 msgid "Advanced" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:97 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:102 msgid "<br>Must be a directory." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:97 +#: /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:97 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:100 +#: /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:100 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:105 msgid "Invalid database location.<br>Cannot write to " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:112 +#: /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:112 +#: /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:198 -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:264 +#: /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:199 +#: /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:200 +#: /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:201 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:209 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:211 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:494 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:280 +#: /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:291 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:295 +#: /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:230 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:232 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:233 -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:257 -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:263 -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:265 +#: /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:202 +#: /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:203 +#: /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:204 +#: /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:205 +#: /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:206 -msgid "&Priority for conversion jobs:" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:207 -msgid "Frequently used directories" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:208 -msgid "Add a directory to the frequently used directories list" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:210 -msgid "Remove a directory from the frequently used directories list" -msgstr "" - #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:212 -msgid "Select visible &columns in library view" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:213 msgid "Toolbar" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:214 +#: /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:215 +#: /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:216 +#: /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:217 +#: /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:218 +#: /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 "Free unused diskspace from the database" +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:221 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:226 msgid "&Metadata from file name" msgstr "" @@ -889,9 +972,9 @@ msgid "ERROR" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:37 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:273 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:397 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:748 +#: /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 "" @@ -903,19 +986,23 @@ msgstr "" msgid "ISBN" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:105 +#: /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:106 +#: /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:141 +#: /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:141 +#: /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 "" @@ -935,7 +1022,7 @@ msgid "" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata_ui.py:80 -msgid "&Access Key;" +msgid "&Access Key:" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata_ui.py:81 @@ -951,7 +1038,7 @@ 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:30 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/job_view_ui.py:31 msgid "Details of job" msgstr "" @@ -959,6 +1046,10 @@ msgstr "" 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 "" @@ -967,435 +1058,454 @@ msgstr "" msgid "&Stop selected job" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:57 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:289 +#: /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:59 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:290 +#: /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:61 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:291 +#: /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:63 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:292 +#: /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:89 +#: /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:90 +#: /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:94 +#: /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:102 +#: /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:105 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:161 +#: /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:171 +#: /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:172 +#: /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:180 +#: /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:181 +#: /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 "<p>There was an error reading from file: <br /><b>" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:187 +#: /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:253 +#: /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:254 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:256 msgid "<ol><li><b>baen</b> - Books from BAEN Publishers</li>" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:255 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:257 msgid "" "<li><b>pdftohtml</b> - HTML files that are the output of the program " "pdftohtml</li>" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:256 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:258 msgid "<li><b>book-designer</b> - HTML0 files from Book Designer</li>" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:289 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:291 msgid "" "Specify metadata such as title and author for the book.<p>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:290 +#: /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:291 +#: /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:292 +#: /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:300 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:303 msgid "<font color=\"gray\">No help available</font>" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:400 +#: /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:488 +#: /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:489 +#: /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:490 +#: /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:491 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:292 +#: /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:492 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:293 +#: /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:493 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:294 +#: /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:495 +#: /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:496 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:260 +#: /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:497 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:261 +#: /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:498 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:110 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:262 +#: /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:499 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:501 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:111 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:263 +#: /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:500 +#: /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:502 -#: /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:270 +#: /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:503 -#: /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:271 +#: /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:504 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:272 +#: /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:505 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:121 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:273 +#: /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. " "<br><br>They can be any words or phrases, separated by commas." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:506 -#: /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:276 +#: /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:507 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:508 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:125 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:126 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:277 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:278 +#: /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:509 -#: /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:281 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:282 +#: /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:511 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:283 +#: /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:513 +#: /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:514 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:521 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:523 +#: /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:515 +#: /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:516 +#: /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:517 +#: /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:518 +#: /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:519 +#: /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:520 +#: /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:522 +#: /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:524 +#: /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:525 +#: /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:526 +#: /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:527 +#: /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:528 +#: /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:529 +#: /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:530 +#: /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:531 +#: /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:532 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:551 msgid "Override<br>CSS" 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:552 msgid "&Profile:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:534 +#: /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:535 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:537 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:539 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:541 +#: /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:536 +#: /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:538 +#: /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:540 +#: /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:542 +#: /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:543 +#: /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:544 +#: /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:545 +#: /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:546 +#: /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:547 +#: /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:548 +#: /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:549 +#: /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:550 +#: /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:551 +#: /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:552 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:574 msgid "" "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" " "\"http://www.w3.org/TR/REC-html40/strict.dtd\">\n" "<html><head><meta name=\"qrichtext\" content=\"1\" /><style " "type=\"text/css\">\n" "p, li { white-space: pre-wrap; }\n" -"</style></head><body style=\" font-family:'DejaVu Sans'; font-size:10pt; " -"font-weight:400; font-style:normal;\">\n" +"</style></head><body style=\" font-family:'Candara'; font-size:11pt; font-" +"weight:400; font-style:normal;\">\n" "<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; " "margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-" "family:'Sans Serif'; font-size:9pt;\"></p></body></html>" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:108 +#: /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:109 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:259 +#: /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:112 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:264 +#: /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:113 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:265 +#: /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:114 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:266 +#: /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:115 -#: /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:267 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:268 +#: /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:117 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:269 +#: /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:120 +#: /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:122 +#: /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:123 +#: /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 "" @@ -1422,49 +1532,44 @@ msgstr "" msgid "You must specify the ISBN identifier for this book." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:258 +#: /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:274 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:275 -msgid "Open Tag Editor" -msgstr "" - -#: /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:277 msgid "Remove unused series (Series that have no books)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:284 +#: /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:286 +#: /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:287 +#: /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:288 +#: /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:290 +#: /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:296 +#: /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:297 +#: /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:298 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:296 msgid "Change password" msgstr "" @@ -1493,13 +1598,13 @@ msgid "Tag" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search.py:18 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:244 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:403 +#: /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:681 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:689 msgid "Format" msgstr "" @@ -1607,95 +1712,95 @@ 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:96 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:218 +#: /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:91 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:99 +#: /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:109 +#: /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:110 +#: /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:114 +#: /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:115 +#: /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:120 +#: /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:121 +#: /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:162 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:171 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:194 -msgid "Invalid input" -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 "<p>Could not create recipe. Error:<br>%s" +msgid "Invalid input" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:178 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:200 -msgid "Replace recipe?" +#: /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 "<p>Could not create recipe. Error:<br>%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:187 +#: /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:187 +#: /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:212 +#: /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:213 +#: /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:214 +#: /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:215 +#: /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:216 +#: /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:217 +#: /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:219 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:215 msgid "" "<html><head><meta name=\"qrichtext\" content=\"1\" /><style " "type=\"text/css\">\n" @@ -1709,62 +1814,62 @@ msgid "" "process.</p></body></html>" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:223 +#: /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:224 +#: /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:225 +#: /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:226 +#: /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:227 +#: /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:228 +#: /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:229 +#: /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:231 +#: /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:234 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:237 +#: /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:235 +#: /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:236 +#: /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:238 +#: /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:239 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:235 msgid "" "For help with writing advanced news recipes, please visit <a " "href=\"http://calibre.kovidgoyal.net/user_manual/news.html\">User Recipes</a>" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:240 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:236 msgid "Recipe source code (python)" msgstr "" @@ -1843,106 +1948,101 @@ msgstr "" msgid "ISBN:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:291 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:313 msgid "Job" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:292 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:314 msgid "Status" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:293 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:315 msgid "Progress" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:294 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:316 msgid "Running time" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:322 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:344 msgid "Error" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:322 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:344 msgid "Finished" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:324 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:346 msgid "Waiting" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:324 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:346 msgid "Working" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:354 -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:358 -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:362 +#: /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:355 +#: /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:359 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:381 msgid "Cannot kill already completed jobs." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:363 -msgid "Cannot kill waiting jobs." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:228 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:234 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:238 +#: /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:229 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:402 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:687 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:751 +#: /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:235 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:242 msgid "Formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:244 +#: /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:388 +#: /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:398 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:749 +#: /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:399 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:750 +#: /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:400 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:408 msgid "Rating" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:682 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:690 msgid "Path" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:686 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:694 msgid "Timestamp" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:786 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:794 msgid "Search (For Advanced Search click the button to the left)" msgstr "" @@ -1962,15 +2062,15 @@ msgstr "" msgid "<b>Changes will only take affect after a restart." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main.py:64 +#: /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:155 +#: /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:155 +#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main.py:154 msgid "No matches found" msgstr "" @@ -2029,80 +2129,95 @@ 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:118 -msgid "Edit metadata individually" +#: /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:122 +#: /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:123 +#: /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:124 +#: /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:138 -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:274 +#: /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:139 +#: /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:142 -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:280 +#: /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:143 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:158 msgid "View specific format" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:158 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:174 msgid "Convert individually" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:159 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:175 msgid "Bulk convert" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:303 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:309 msgid " detected." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:303 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:309 msgid "Device: " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:328 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:334 msgid "Connected " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:340 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:346 msgid "Device database corrupted" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:341 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:347 msgid "" "\n" " <p>The database of books on the reader is corrupted. Try the " @@ -2118,268 +2233,288 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:393 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:467 +#: /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:396 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:470 +#: /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:429 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:442 +#: /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:500 +#: /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:501 +#: /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:536 +#: /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:570 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:587 +#: /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:570 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:587 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:675 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:736 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:797 +#: /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:658 +#: /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:661 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:677 msgid "No suitable formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:662 +#: /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:675 +#: /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:714 +#: /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:716 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:744 msgid "Fetching news from " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:726 +#: /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:736 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:797 +#: /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:745 +#: /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:867 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:885 +#: /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:867 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:885 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:899 +#: /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:873 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:904 +#: /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:900 +#: /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:938 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:976 msgid "Cannot configure" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:938 +#: /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:961 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:999 msgid "Copying database to " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:976 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1014 msgid "Invalid database" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:977 +#: /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:985 +#: /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:1006 +#: /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:1007 +#: /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:1049 +#: /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:1050 +#: /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:1076 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1139 msgid "Conversion Error" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1098 +#: /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:1098 +#: /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:1149 +#: /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:1155 +#: /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:1155 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1215 msgid "Update available" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:255 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:256 msgid "calibre" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:256 +#: /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:258 +#: /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:259 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:260 msgid "&Search:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:260 +#: /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:261 +#: /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:262 +#: /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:266 +#: /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:267 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:268 msgid "A" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:268 #: /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:270 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:271 msgid "Del" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:271 +#: /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:272 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:273 msgid "E" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:273 +#: /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:275 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:276 msgid "S" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:276 +#: /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:277 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:278 msgid "F" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:278 +#: /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:279 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:280 msgid "C" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:281 +#: /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 "" @@ -2424,48 +2559,48 @@ msgstr "" msgid "Invalid regular expression: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:166 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:169 msgid "Library" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:167 +#: /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:168 +#: /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:172 +#: /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:173 +#: /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:174 +#: /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:25 +#: /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:80 +#: /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:88 +#: /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" @@ -2473,39 +2608,39 @@ msgid "" "Default: %%default" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:90 +#: /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:92 +#: /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:94 +#: /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:101 +#: /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:108 +#: /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:170 +#: /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:195 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:197 msgid "" "%prog add [options] file1 file2 file3 ...\n" "\n" @@ -2514,27 +2649,27 @@ msgid "" "the directory related options below. \n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:204 +#: /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:206 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:208 msgid "Process directories recursively" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:208 +#: /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:213 +#: /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:231 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:233 msgid "" "%prog remove ids\n" "\n" @@ -2543,11 +2678,11 @@ msgid "" "command). For example, 23,34,57-85\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:243 +#: /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:263 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:265 msgid "" "%prog add_format [options] id ebook_file\n" "\n" @@ -2556,15 +2691,15 @@ msgid "" "already exists, it is replaced.\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:274 +#: /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:279 +#: /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:287 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:289 msgid "" "\n" "%prog remove_format [options] id fmt\n" @@ -2574,11 +2709,77 @@ msgid "" "EPUB. If the logical book does not have fmt available, do nothing.\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:300 +#: /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:310 +#: /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" @@ -2590,11 +2791,11 @@ msgid "" "For help on an individual command: %%prog command --help\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/parallel.py:131 -msgid "Job killed by user" +#: /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:124 +#: /home/kovid/work/calibre/src/calibre/utils/fontconfig.py:146 msgid "Could not initialize the fontconfig library" msgstr "" @@ -2620,7 +2821,7 @@ 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:115 +#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:117 msgid "Untitled article" msgstr "" @@ -2762,30 +2963,30 @@ msgstr "" msgid "Downloading cover from %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:699 +#: /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:743 +#: /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:749 +#: /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:755 +#: /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:760 +#: /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:775 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:776 msgid "Fetching feed" msgstr "" @@ -2799,36 +3000,46 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:385 msgid "Base directory into which URL is saved. Default is %default" msgstr "" +"Каталог, в который будет сохранен файл по URL. По умолчанию: %default" #: /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 "" +"Максимальное время ожидания ответа от сервера. По умолчанию: %default с" #: /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 "" +"Максимально число уровней рекурсии, т.е. глубина вложенности ссылок. По " +"умолчанию: %default" #: /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 "" +"Максимальное количество файлов для скачивания. Применимо только к файлам из " +"тегов <a href>. По умолчанию: %default" #: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:396 msgid "" "Minimum interval in seconds between consecutive fetches. Default is %default " "s" msgstr "" +"Минимальный интервал в секундах между последовательными скачками. По " +"умолчанию: %default с" #: /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 "" @@ -2836,6 +3047,10 @@ msgid "" "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 "" @@ -2845,11 +3060,16 @@ msgid "" "filter-regexp and --match-regexp are specified, then --filter-regexp is " "applied first." msgstr "" +"Все ссылки, которые соответствуют этому регулярному выражению, будут " +"пропущены. Эту опцию можно указать несколько раз, в этом случае ссылка будет " +"прощена тогда, когда она совпадет хотя бы с одним из регулярных выражений. " +"По умолчанию, никакие ссылки не пропускаются. Если указаны обе опции --" +"filter-regexp и --match-regexp, то вначале будет учитываться --filter-regexp." #: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:404 msgid "Do not download CSS stylesheets." -msgstr "" +msgstr "Не скачивать файлы стилей CSS." #: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:405 msgid "Show detailed output information. Useful for debugging" -msgstr "" +msgstr "Показывать детальную информацию. Полезно при отладке" diff --git a/src/calibre/translations/sl.po b/src/calibre/translations/sl.po index 43ea54d181..3fb01e25ce 100644 --- a/src/calibre/translations/sl.po +++ b/src/calibre/translations/sl.po @@ -6,22 +6,22 @@ msgid "" msgstr "" "Project-Id-Version: calibre 0.4.17\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2008-06-12 20:18+0000\n" +"POT-Creation-Date: 2008-06-30 23:41+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-06-15 22:20+0000\n" +"X-Launchpad-Export-Date: 2008-07-02 15:52+0000\n" "X-Generator: Launchpad (build Unknown)\n" "Generated-By: pygettext.py 1.5\n" -#: /home/kovid/work/calibre/src/calibre/__init__.py:96 +#: /home/kovid/work/calibre/src/calibre/__init__.py:133 msgid "%sUsage%s: %s\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/__init__.py:133 +#: /home/kovid/work/calibre/src/calibre/__init__.py:170 msgid "Created by " msgstr "" @@ -31,6 +31,10 @@ msgstr "" 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 "" @@ -42,8 +46,14 @@ msgid "" msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:76 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:271 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:677 +#: /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 "" @@ -66,7 +76,7 @@ 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:401 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:409 msgid "Publisher" msgstr "" @@ -151,58 +161,77 @@ msgid "" "HTML or CSS." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:129 +#: /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:135 +#: /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:137 +#: /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:139 +#: /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:141 +#: /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:145 +#: /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 <a> tags are " "ignored." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:149 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:153 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:153 +#: /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:157 -msgid "" -"Prevent the automatic insertion of page breaks before detected chapters." +#: /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:161 +#: /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:164 +#: /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 " @@ -213,12 +242,12 @@ msgid "" "has only a few elements." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:174 +#: /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:176 +#: /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 " @@ -226,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:179 +#: /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:182 +#: /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:184 +#: /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:186 +#: /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:189 +#: /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 " @@ -252,33 +281,33 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:197 +#: /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:200 +#: /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:203 +#: /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:207 +#: /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:209 +#: /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:211 +#: /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:213 +#: /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 " @@ -334,95 +363,95 @@ msgstr "" msgid "Fetching of recipe failed: " msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:309 +#: /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:311 +#: /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:333 +#: /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:349 +#: /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:366 +#: /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:380 +#: /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:518 -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:531 +#: /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:523 +#: /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:543 +#: /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:587 +#: /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:929 +#: /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:967 +#: /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:982 +#: /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:1687 +#: /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:1689 +#: /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:1711 +#: /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:1741 +#: /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:1781 +#: /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:1784 +#: /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:1913 +#: /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:1919 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1982 msgid "" "Usage: %prog [options] mybook.html\n" "\n" @@ -486,11 +515,11 @@ msgstr "" msgid "Convert LRS to LRS, useful for debugging." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:454 +#: /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:579 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:580 msgid "" "%prog [options] mybook.lrf\n" "\n" @@ -499,52 +528,52 @@ msgid "" "\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:586 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:18 +#: /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:588 +#: /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:590 +#: /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:592 +#: /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:594 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:22 +#: /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:597 +#: /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:600 +#: /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:604 +#: /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:606 +#: /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:608 +#: /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:610 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:611 msgid "Don't know what this is for" msgstr "" @@ -607,11 +636,11 @@ msgid "" "%prog converts mybook.txt to mybook.lrf" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:20 +#: /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:24 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:27 msgid "Set the comment" msgstr "" @@ -677,11 +706,11 @@ msgid "" "Fetch a cover image for the book identified by ISBN from LibraryThing.com\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/lit.py:747 +#: /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:754 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/lit.py:758 msgid "Cover saved to" msgstr "" @@ -693,19 +722,19 @@ msgstr "" msgid "No filename specified." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:304 +#: /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:306 +#: /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:325 +#: /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:327 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:364 msgid "OEB ebook created in" msgstr "" @@ -713,18 +742,18 @@ msgstr "" #: /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:268 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:396 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:747 +#: /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:512 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:285 +#: /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:239 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:246 msgid "Comments" msgstr "" @@ -743,144 +772,148 @@ msgstr "" msgid "Choose Format" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:22 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:23 msgid "Basic" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:23 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:24 msgid "Advanced" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:97 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:102 msgid "<br>Must be a directory." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:97 +#: /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:97 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:100 +#: /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:100 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:105 msgid "Invalid database location.<br>Cannot write to " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:112 +#: /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:112 +#: /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:198 -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:264 +#: /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:199 +#: /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:200 +#: /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:201 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:209 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:211 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:494 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:280 +#: /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:291 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:295 +#: /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:230 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:232 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:233 -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:257 -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:263 -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:265 +#: /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:202 +#: /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:203 +#: /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:204 +#: /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:205 +#: /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:206 -msgid "&Priority for conversion jobs:" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:207 -msgid "Frequently used directories" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:208 -msgid "Add a directory to the frequently used directories list" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:210 -msgid "Remove a directory from the frequently used directories list" -msgstr "" - #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:212 -msgid "Select visible &columns in library view" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:213 msgid "Toolbar" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:214 +#: /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:215 +#: /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:216 +#: /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:217 +#: /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:218 +#: /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 "Free unused diskspace from the database" +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:221 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:226 msgid "&Metadata from file name" msgstr "" @@ -889,9 +922,9 @@ msgid "ERROR" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:37 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:273 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:397 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:748 +#: /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 "" @@ -903,19 +936,23 @@ msgstr "" msgid "ISBN" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:105 +#: /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:106 +#: /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:141 +#: /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:141 +#: /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 "" @@ -935,7 +972,7 @@ msgid "" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata_ui.py:80 -msgid "&Access Key;" +msgid "&Access Key:" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata_ui.py:81 @@ -951,7 +988,7 @@ 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:30 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/job_view_ui.py:31 msgid "Details of job" msgstr "" @@ -959,6 +996,10 @@ msgstr "" 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 "" @@ -967,435 +1008,454 @@ msgstr "" msgid "&Stop selected job" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:57 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:289 +#: /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:59 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:290 +#: /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:61 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:291 +#: /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:63 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:292 +#: /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:89 +#: /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:90 +#: /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:94 +#: /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:102 +#: /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:105 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:161 +#: /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:171 +#: /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:172 +#: /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:180 +#: /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:181 +#: /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 "<p>There was an error reading from file: <br /><b>" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:187 +#: /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:253 +#: /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:254 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:256 msgid "<ol><li><b>baen</b> - Books from BAEN Publishers</li>" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:255 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:257 msgid "" "<li><b>pdftohtml</b> - HTML files that are the output of the program " "pdftohtml</li>" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:256 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:258 msgid "<li><b>book-designer</b> - HTML0 files from Book Designer</li>" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:289 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:291 msgid "" "Specify metadata such as title and author for the book.<p>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:290 +#: /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:291 +#: /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:292 +#: /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:300 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:303 msgid "<font color=\"gray\">No help available</font>" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:400 +#: /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:488 +#: /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:489 +#: /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:490 +#: /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:491 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:292 +#: /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:492 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:293 +#: /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:493 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:294 +#: /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:495 +#: /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:496 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:260 +#: /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:497 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:261 +#: /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:498 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:110 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:262 +#: /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:499 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:501 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:111 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:263 +#: /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:500 +#: /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:502 -#: /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:270 +#: /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:503 -#: /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:271 +#: /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:504 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:272 +#: /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:505 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:121 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:273 +#: /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. " "<br><br>They can be any words or phrases, separated by commas." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:506 -#: /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:276 +#: /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:507 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:508 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:125 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:126 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:277 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:278 +#: /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:509 -#: /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:281 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:282 +#: /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:511 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:283 +#: /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:513 +#: /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:514 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:521 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:523 +#: /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:515 +#: /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:516 +#: /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:517 +#: /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:518 +#: /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:519 +#: /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:520 +#: /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:522 +#: /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:524 +#: /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:525 +#: /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:526 +#: /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:527 +#: /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:528 +#: /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:529 +#: /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:530 +#: /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:531 +#: /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:532 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:551 msgid "Override<br>CSS" 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:552 msgid "&Profile:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:534 +#: /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:535 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:537 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:539 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:541 +#: /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:536 +#: /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:538 +#: /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:540 +#: /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:542 +#: /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:543 +#: /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:544 +#: /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:545 +#: /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:546 +#: /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:547 +#: /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:548 +#: /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:549 +#: /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:550 +#: /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:551 +#: /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:552 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:574 msgid "" "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" " "\"http://www.w3.org/TR/REC-html40/strict.dtd\">\n" "<html><head><meta name=\"qrichtext\" content=\"1\" /><style " "type=\"text/css\">\n" "p, li { white-space: pre-wrap; }\n" -"</style></head><body style=\" font-family:'DejaVu Sans'; font-size:10pt; " -"font-weight:400; font-style:normal;\">\n" +"</style></head><body style=\" font-family:'Candara'; font-size:11pt; font-" +"weight:400; font-style:normal;\">\n" "<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; " "margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-" "family:'Sans Serif'; font-size:9pt;\"></p></body></html>" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:108 +#: /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:109 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:259 +#: /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:112 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:264 +#: /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:113 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:265 +#: /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:114 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:266 +#: /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:115 -#: /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:267 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:268 +#: /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:117 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:269 +#: /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:120 +#: /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:122 +#: /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:123 +#: /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 "" @@ -1422,49 +1482,44 @@ msgstr "" msgid "You must specify the ISBN identifier for this book." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:258 +#: /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:274 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:275 -msgid "Open Tag Editor" -msgstr "" - -#: /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:277 msgid "Remove unused series (Series that have no books)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:284 +#: /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:286 +#: /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:287 +#: /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:288 +#: /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:290 +#: /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:296 +#: /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:297 +#: /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:298 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:296 msgid "Change password" msgstr "" @@ -1493,13 +1548,13 @@ msgid "Tag" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search.py:18 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:244 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:403 +#: /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:681 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:689 msgid "Format" msgstr "" @@ -1607,95 +1662,95 @@ 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:96 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:218 +#: /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:91 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:99 +#: /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:109 +#: /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:110 +#: /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:114 +#: /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:115 +#: /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:120 +#: /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:121 +#: /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:162 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:171 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:194 -msgid "Invalid input" -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 "<p>Could not create recipe. Error:<br>%s" +msgid "Invalid input" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:178 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:200 -msgid "Replace recipe?" +#: /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 "<p>Could not create recipe. Error:<br>%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:187 +#: /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:187 +#: /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:212 +#: /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:213 +#: /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:214 +#: /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:215 +#: /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:216 +#: /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:217 +#: /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:219 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:215 msgid "" "<html><head><meta name=\"qrichtext\" content=\"1\" /><style " "type=\"text/css\">\n" @@ -1709,62 +1764,62 @@ msgid "" "process.</p></body></html>" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:223 +#: /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:224 +#: /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:225 +#: /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:226 +#: /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:227 +#: /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:228 +#: /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:229 +#: /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:231 +#: /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:234 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:237 +#: /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:235 +#: /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:236 +#: /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:238 +#: /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:239 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:235 msgid "" "For help with writing advanced news recipes, please visit <a " "href=\"http://calibre.kovidgoyal.net/user_manual/news.html\">User Recipes</a>" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:240 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:236 msgid "Recipe source code (python)" msgstr "" @@ -1843,106 +1898,101 @@ msgstr "" msgid "ISBN:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:291 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:313 msgid "Job" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:292 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:314 msgid "Status" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:293 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:315 msgid "Progress" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:294 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:316 msgid "Running time" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:322 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:344 msgid "Error" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:322 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:344 msgid "Finished" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:324 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:346 msgid "Waiting" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:324 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:346 msgid "Working" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:354 -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:358 -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:362 +#: /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:355 +#: /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:359 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:381 msgid "Cannot kill already completed jobs." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:363 -msgid "Cannot kill waiting jobs." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:228 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:234 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:238 +#: /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:229 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:402 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:687 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:751 +#: /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:235 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:242 msgid "Formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:244 +#: /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:388 +#: /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:398 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:749 +#: /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:399 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:750 +#: /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:400 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:408 msgid "Rating" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:682 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:690 msgid "Path" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:686 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:694 msgid "Timestamp" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:786 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:794 msgid "Search (For Advanced Search click the button to the left)" msgstr "" @@ -1962,15 +2012,15 @@ msgstr "" msgid "<b>Changes will only take affect after a restart." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main.py:64 +#: /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:155 +#: /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:155 +#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main.py:154 msgid "No matches found" msgstr "" @@ -2029,80 +2079,95 @@ 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:118 -msgid "Edit metadata individually" +#: /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:122 +#: /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:123 +#: /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:124 +#: /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:138 -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:274 +#: /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:139 +#: /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:142 -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:280 +#: /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:143 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:158 msgid "View specific format" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:158 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:174 msgid "Convert individually" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:159 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:175 msgid "Bulk convert" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:303 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:309 msgid " detected." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:303 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:309 msgid "Device: " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:328 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:334 msgid "Connected " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:340 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:346 msgid "Device database corrupted" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:341 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:347 msgid "" "\n" " <p>The database of books on the reader is corrupted. Try the " @@ -2118,268 +2183,288 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:393 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:467 +#: /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:396 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:470 +#: /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:429 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:442 +#: /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:500 +#: /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:501 +#: /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:536 +#: /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:570 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:587 +#: /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:570 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:587 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:675 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:736 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:797 +#: /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:658 +#: /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:661 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:677 msgid "No suitable formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:662 +#: /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:675 +#: /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:714 +#: /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:716 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:744 msgid "Fetching news from " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:726 +#: /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:736 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:797 +#: /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:745 +#: /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:867 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:885 +#: /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:867 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:885 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:899 +#: /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:873 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:904 +#: /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:900 +#: /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:938 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:976 msgid "Cannot configure" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:938 +#: /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:961 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:999 msgid "Copying database to " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:976 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1014 msgid "Invalid database" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:977 +#: /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:985 +#: /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:1006 +#: /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:1007 +#: /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:1049 +#: /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:1050 +#: /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:1076 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1139 msgid "Conversion Error" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1098 +#: /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:1098 +#: /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:1149 +#: /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:1155 +#: /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:1155 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1215 msgid "Update available" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:255 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:256 msgid "calibre" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:256 +#: /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:258 +#: /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:259 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:260 msgid "&Search:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:260 +#: /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:261 +#: /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:262 +#: /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:266 +#: /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:267 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:268 msgid "A" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:268 #: /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:270 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:271 msgid "Del" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:271 +#: /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:272 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:273 msgid "E" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:273 +#: /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:275 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:276 msgid "S" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:276 +#: /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:277 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:278 msgid "F" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:278 +#: /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:279 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:280 msgid "C" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:281 +#: /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 "" @@ -2424,48 +2509,48 @@ msgstr "" msgid "Invalid regular expression: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:166 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:169 msgid "Library" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:167 +#: /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:168 +#: /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:172 +#: /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:173 +#: /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:174 +#: /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:25 +#: /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:80 +#: /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:88 +#: /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" @@ -2473,39 +2558,39 @@ msgid "" "Default: %%default" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:90 +#: /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:92 +#: /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:94 +#: /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:101 +#: /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:108 +#: /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:170 +#: /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:195 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:197 msgid "" "%prog add [options] file1 file2 file3 ...\n" "\n" @@ -2514,27 +2599,27 @@ msgid "" "the directory related options below. \n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:204 +#: /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:206 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:208 msgid "Process directories recursively" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:208 +#: /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:213 +#: /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:231 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:233 msgid "" "%prog remove ids\n" "\n" @@ -2543,11 +2628,11 @@ msgid "" "command). For example, 23,34,57-85\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:243 +#: /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:263 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:265 msgid "" "%prog add_format [options] id ebook_file\n" "\n" @@ -2556,15 +2641,15 @@ msgid "" "already exists, it is replaced.\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:274 +#: /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:279 +#: /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:287 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:289 msgid "" "\n" "%prog remove_format [options] id fmt\n" @@ -2574,11 +2659,77 @@ msgid "" "EPUB. If the logical book does not have fmt available, do nothing.\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:300 +#: /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:310 +#: /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" @@ -2590,11 +2741,11 @@ msgid "" "For help on an individual command: %%prog command --help\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/parallel.py:131 -msgid "Job killed by user" +#: /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:124 +#: /home/kovid/work/calibre/src/calibre/utils/fontconfig.py:146 msgid "Could not initialize the fontconfig library" msgstr "" @@ -2620,7 +2771,7 @@ 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:115 +#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:117 msgid "Untitled article" msgstr "" @@ -2762,30 +2913,30 @@ msgstr "" msgid "Downloading cover from %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:699 +#: /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:743 +#: /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:749 +#: /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:755 +#: /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:760 +#: /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:775 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:776 msgid "Fetching feed" msgstr "" diff --git a/src/calibre/translations/te.po b/src/calibre/translations/te.po new file mode 100644 index 0000000000..36f665befd --- /dev/null +++ b/src/calibre/translations/te.po @@ -0,0 +1,3006 @@ +# Telugu 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 <EMAIL@ADDRESS>, 2008. +# +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-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-02 15:52+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 "" + +#: /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 <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 +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 <a> tags are " +"ignored." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:153 +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 +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 "<br>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.<br>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 <b>%1</b>" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata_ui.py:79 +msgid "" +"Sign up for a free account from <a " +"href=\"http://www.isbndb.com\">ISBNdb.com</a> 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 "<p>There was an error reading from file: <br /><b>" +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 "<ol><li><b>baen</b> - Books from BAEN Publishers</li>" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:257 +msgid "" +"<li><b>pdftohtml</b> - HTML files that are the output of the program " +"pdftohtml</li>" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:258 +msgid "<li><b>book-designer</b> - HTML0 files from Book Designer</li>" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:291 +msgid "" +"Specify metadata such as title and author for the book.<p>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 "<font color=\"gray\">No help available</font>" +msgstr "<font color=\"gray\">సహాయమేమీ అందుబాటులో లేదు</font>" + +#: /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. " +"<br><br>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<br>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 "" +"<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" " +"\"http://www.w3.org/TR/REC-html40/strict.dtd\">\n" +"<html><head><meta name=\"qrichtext\" content=\"1\" /><style " +"type=\"text/css\">\n" +"p, li { white-space: pre-wrap; }\n" +"</style></head><body style=\" font-family:'Candara'; font-size:11pt; font-" +"weight:400; font-style:normal;\">\n" +"<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; " +"margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-" +"family:'Sans Serif'; font-size:9pt;\"></p></body></html>" +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 "" +"<p>Enter your username and password for <b>LibraryThing.com</b>. <br/>If you " +"do not have one, you can <a href='http://www.librarything.com'>register</a> " +"for free!.</p>" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:265 +msgid "<b>Could not fetch cover.</b><br/>" +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 "" +"<p>Negate this match. That is, only return results that <b>do not</b> 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 "<p>Could not create recipe. Error:<br>%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 "" +"<html><head><meta name=\"qrichtext\" content=\"1\" /><style " +"type=\"text/css\">\n" +"p, li { white-space: pre-wrap; }\n" +"</style></head><body style=\" font-family:'DejaVu Sans'; font-size:10pt; " +"font-weight:400; font-style:normal;\">\n" +"<p style=\" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-" +"right:0px; -qt-block-indent:0; text-indent:0px;\">Create a basic news " +"recipe, by adding RSS feeds to it. <br />For most feeds, you will have to " +"use the \"Advanced mode\" to further customize the fetch " +"process.</p></body></html>" +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 <a " +"href=\"http://calibre.kovidgoyal.net/user_manual/news.html\">User Recipes</a>" +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 "" +"<p>Set a regular expression pattern to use when trying to guess ebook " +"metadata from filenames. <p>A <a href=\"http://docs.python.org/lib/re-" +"syntax.html\">reference</a> on the syntax of regular expressions is " +"available.<p>Use the <b>Test</b> 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<title>)" +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/utils/fontconfig.py b/src/calibre/utils/fontconfig.py index 9d96de0a76..fe2261d853 100644 --- a/src/calibre/utils/fontconfig.py +++ b/src/calibre/utils/fontconfig.py @@ -23,7 +23,7 @@ match to a given font specification. The main functions in this module are: ''' import sys, os, locale, codecs -from ctypes import cdll, c_void_p, Structure, c_int, POINTER, c_ubyte, c_char, \ +from ctypes import cdll, c_void_p, Structure, c_int, POINTER, c_ubyte, c_char, util, \ pointer, byref, create_string_buffer, Union, c_char_p, c_double try: @@ -36,18 +36,20 @@ iswindows = 'win32' in sys.platform or 'win64' in sys.platform isosx = 'darwin' in sys.platform def load_library(): - if isosx: - lib = 'libfontconfig.1.dylib' - if hasattr(sys, 'frameworks_dir'): - lib = os.path.join(getattr(sys, 'frameworks_dir'), lib) + if isosx: + lib = os.path.join(getattr(sys, 'frameworks_dir'), 'libfontconfig.1.dylib') \ + if hasattr(sys, 'frameworks_dir') else util.find_library('fontconfig') return cdll.LoadLibrary(lib) elif iswindows: return cdll.LoadLibrary('libfontconfig-1') else: try: - return cdll.LoadLibrary('libfontconfig.so') + return cdll.LoadLibrary(util.find_library('fontconfig')) except: - return cdll.LoadLibrary('libfontconfig.so.1') + try: + return cdll.LoadLibrary('libfontconfig.so') + except: + return cdll.LoadLibrary('libfontconfig.so.1') class FcPattern(Structure): _fields_ = [ @@ -118,9 +120,29 @@ lib.FcFontSort.argtypes = [c_void_p, POINTER(FcPattern), c_int, c_void_p, POINTE lib.FcFontSort.restype = POINTER(FcFontSet) lib.FcFontRenderPrepare.argtypes = [c_void_p, POINTER(FcPattern), POINTER(FcPattern)] lib.FcFontRenderPrepare.restype = POINTER(FcPattern) +lib.FcConfigCreate.restype = c_void_p +lib.FcConfigSetCurrent.argtypes = [c_void_p] +lib.FcConfigSetCurrent.restype = c_int +lib.FcConfigParseAndLoad.argtypes = [c_void_p, POINTER(c_char), c_int] +lib.FcConfigParseAndLoad.restype = c_int +lib.FcConfigBuildFonts.argtypes = [c_void_p] +lib.FcConfigBuildFonts.restype = c_int -if not lib.FcInit(): +# Initialize the fontconfig library. This has to be done manually +# for the OS X bundle as it has 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 find_font_families(allowed_extensions=['ttf']): @@ -151,11 +173,10 @@ def find_font_families(allowed_extensions=['ttf']): ext = os.path.splitext(path)[1] if ext: ext = ext[1:].lower() - if allowed_extensions and ext in allowed_extensions: + if (not allowed_extensions) or (allowed_extensions and ext in allowed_extensions): if lib.FcPatternGetString(pat, 'family', 0, byref(family)) != FcResultMatch.value: raise RuntimeError('Error processing pattern') font_families.append(str(family.contents.value)) - lib.FcObjectSetDestroy(oset) lib.FcPatternDestroy(empty_pattern) diff --git a/src/calibre/utils/genshi/__init__.py b/src/calibre/utils/genshi/__init__.py new file mode 100644 index 0000000000..51843d2b69 --- /dev/null +++ b/src/calibre/utils/genshi/__init__.py @@ -0,0 +1,29 @@ +# -*- coding: utf-8 -*- +# +# Copyright (C) 2006-2007 Edgewall Software +# All rights reserved. +# +# This software is licensed as described in the file COPYING, which +# you should have received as part of this distribution. The terms +# are also available at http://genshi.edgewall.org/wiki/License. +# +# This software consists of voluntary contributions made by many +# individuals. For the exact contribution history, see the revision +# history and logs, available at http://genshi.edgewall.org/log/. + +"""This package provides various means for generating and processing web markup +(XML or HTML). + +The design is centered around the concept of streams of markup events (similar +in concept to SAX parsing events) which can be processed in a uniform manner +independently of where or how they are produced. +""" + +__docformat__ = 'restructuredtext en' +try: + __version__ = __import__('pkg_resources').get_distribution('Genshi').version +except: + pass + +from calibre.utils.genshi.core import * +from calibre.utils.genshi.input import ParseError, XML, HTML diff --git a/src/calibre/utils/genshi/builder.py b/src/calibre/utils/genshi/builder.py new file mode 100644 index 0000000000..fac6185f0a --- /dev/null +++ b/src/calibre/utils/genshi/builder.py @@ -0,0 +1,362 @@ +# -*- coding: utf-8 -*- +# +# Copyright (C) 2006-2008 Edgewall Software +# All rights reserved. +# +# This software is licensed as described in the file COPYING, which +# you should have received as part of this distribution. The terms +# are also available at http://genshi.edgewall.org/wiki/License. +# +# This software consists of voluntary contributions made by many +# individuals. For the exact contribution history, see the revision +# history and logs, available at http://genshi.edgewall.org/log/. + +"""Support for programmatically generating markup streams from Python code using +a very simple syntax. The main entry point to this module is the `tag` object +(which is actually an instance of the ``ElementFactory`` class). You should +rarely (if ever) need to directly import and use any of the other classes in +this module. + +Elements can be created using the `tag` object using attribute access. For +example: + +>>> doc = tag.p('Some text and ', tag.a('a link', href='http://example.org/'), '.') +>>> doc +<Element "p"> + +This produces an `Element` instance which can be further modified to add child +nodes and attributes. This is done by "calling" the element: positional +arguments are added as child nodes (alternatively, the `Element.append` method +can be used for that purpose), whereas keywords arguments are added as +attributes: + +>>> doc(tag.br) +<Element "p"> +>>> print doc +<p>Some text and <a href="http://example.org/">a link</a>.<br/></p> + +If an attribute name collides with a Python keyword, simply append an underscore +to the name: + +>>> doc(class_='intro') +<Element "p"> +>>> print doc +<p class="intro">Some text and <a href="http://example.org/">a link</a>.<br/></p> + +As shown above, an `Element` can easily be directly rendered to XML text by +printing it or using the Python ``str()`` function. This is basically a +shortcut for converting the `Element` to a stream and serializing that +stream: + +>>> stream = doc.generate() +>>> stream #doctest: +ELLIPSIS +<genshi.core.Stream object at ...> +>>> print stream +<p class="intro">Some text and <a href="http://example.org/">a link</a>.<br/></p> + + +The `tag` object also allows creating "fragments", which are basically lists +of nodes (elements or text) that don't have a parent element. This can be useful +for creating snippets of markup that are attached to a parent element later (for +example in a template). Fragments are created by calling the `tag` object, which +returns an object of type `Fragment`: + +>>> fragment = tag('Hello, ', tag.em('world'), '!') +>>> fragment +<Fragment> +>>> print fragment +Hello, <em>world</em>! +""" + +try: + set +except NameError: + from sets import Set as set + +from calibre.utils.genshi.core import Attrs, Markup, Namespace, QName, Stream, \ + START, END, TEXT + +__all__ = ['Fragment', 'Element', 'ElementFactory', 'tag'] +__docformat__ = 'restructuredtext en' + + +class Fragment(object): + """Represents a markup fragment, which is basically just a list of element + or text nodes. + """ + __slots__ = ['children'] + + def __init__(self): + """Create a new fragment.""" + self.children = [] + + def __add__(self, other): + return Fragment()(self, other) + + def __call__(self, *args): + """Append any positional arguments as child nodes. + + :see: `append` + """ + map(self.append, args) + return self + + def __iter__(self): + return self._generate() + + def __repr__(self): + return '<%s>' % self.__class__.__name__ + + def __str__(self): + return str(self.generate()) + + def __unicode__(self): + return unicode(self.generate()) + + def __html__(self): + return Markup(self.generate()) + + def append(self, node): + """Append an element or string as child node. + + :param node: the node to append; can be an `Element`, `Fragment`, or a + `Stream`, or a Python string or number + """ + if isinstance(node, (Stream, Element, basestring, int, float, long)): + # For objects of a known/primitive type, we avoid the check for + # whether it is iterable for better performance + self.children.append(node) + elif isinstance(node, Fragment): + self.children.extend(node.children) + elif node is not None: + try: + map(self.append, iter(node)) + except TypeError: + self.children.append(node) + + def _generate(self): + for child in self.children: + if isinstance(child, Fragment): + for event in child._generate(): + yield event + elif isinstance(child, Stream): + for event in child: + yield event + else: + if not isinstance(child, basestring): + child = unicode(child) + yield TEXT, child, (None, -1, -1) + + def generate(self): + """Return a markup event stream for the fragment. + + :rtype: `Stream` + """ + return Stream(self._generate()) + + +def _kwargs_to_attrs(kwargs): + attrs = [] + names = set() + for name, value in kwargs.items(): + name = name.rstrip('_').replace('_', '-') + if value is not None and name not in names: + attrs.append((QName(name), unicode(value))) + names.add(name) + return Attrs(attrs) + + +class Element(Fragment): + """Simple XML output generator based on the builder pattern. + + Construct XML elements by passing the tag name to the constructor: + + >>> print Element('strong') + <strong/> + + Attributes can be specified using keyword arguments. The values of the + arguments will be converted to strings and any special XML characters + escaped: + + >>> print Element('textarea', rows=10, cols=60) + <textarea rows="10" cols="60"/> + >>> print Element('span', title='1 < 2') + <span title="1 < 2"/> + >>> print Element('span', title='"baz"') + <span title=""baz""/> + + The " character is escaped using a numerical entity. + The order in which attributes are rendered is undefined. + + If an attribute value evaluates to `None`, that attribute is not included + in the output: + + >>> print Element('a', name=None) + <a/> + + Attribute names that conflict with Python keywords can be specified by + appending an underscore: + + >>> print Element('div', class_='warning') + <div class="warning"/> + + Nested elements can be added to an element using item access notation. + The call notation can also be used for this and for adding attributes + using keyword arguments, as one would do in the constructor. + + >>> print Element('ul')(Element('li'), Element('li')) + <ul><li/><li/></ul> + >>> print Element('a')('Label') + <a>Label</a> + >>> print Element('a')('Label', href="target") + <a href="target">Label</a> + + Text nodes can be nested in an element by adding strings instead of + elements. Any special characters in the strings are escaped automatically: + + >>> print Element('em')('Hello world') + <em>Hello world</em> + >>> print Element('em')(42) + <em>42</em> + >>> print Element('em')('1 < 2') + <em>1 < 2</em> + + This technique also allows mixed content: + + >>> print Element('p')('Hello ', Element('b')('world')) + <p>Hello <b>world</b></p> + + Quotes are not escaped inside text nodes: + >>> print Element('p')('"Hello"') + <p>"Hello"</p> + + Elements can also be combined with other elements or strings using the + addition operator, which results in a `Fragment` object that contains the + operands: + + >>> print Element('br') + 'some text' + Element('br') + <br/>some text<br/> + + Elements with a namespace can be generated using the `Namespace` and/or + `QName` classes: + + >>> from genshi.core import Namespace + >>> xhtml = Namespace('http://www.w3.org/1999/xhtml') + >>> print Element(xhtml.html, lang='en') + <html xmlns="http://www.w3.org/1999/xhtml" lang="en"/> + """ + __slots__ = ['tag', 'attrib'] + + def __init__(self, tag_, **attrib): + Fragment.__init__(self) + self.tag = QName(tag_) + self.attrib = _kwargs_to_attrs(attrib) + + def __call__(self, *args, **kwargs): + """Append any positional arguments as child nodes, and keyword arguments + as attributes. + + :return: the element itself so that calls can be chained + :rtype: `Element` + :see: `Fragment.append` + """ + self.attrib |= _kwargs_to_attrs(kwargs) + Fragment.__call__(self, *args) + return self + + def __repr__(self): + return '<%s "%s">' % (self.__class__.__name__, self.tag) + + def _generate(self): + yield START, (self.tag, self.attrib), (None, -1, -1) + for kind, data, pos in Fragment._generate(self): + yield kind, data, pos + yield END, self.tag, (None, -1, -1) + + def generate(self): + """Return a markup event stream for the fragment. + + :rtype: `Stream` + """ + return Stream(self._generate()) + + +class ElementFactory(object): + """Factory for `Element` objects. + + A new element is created simply by accessing a correspondingly named + attribute of the factory object: + + >>> factory = ElementFactory() + >>> print factory.foo + <foo/> + >>> print factory.foo(id=2) + <foo id="2"/> + + Markup fragments (lists of nodes without a parent element) can be created + by calling the factory: + + >>> print factory('Hello, ', factory.em('world'), '!') + Hello, <em>world</em>! + + A factory can also be bound to a specific namespace: + + >>> factory = ElementFactory('http://www.w3.org/1999/xhtml') + >>> print factory.html(lang="en") + <html xmlns="http://www.w3.org/1999/xhtml" lang="en"/> + + The namespace for a specific element can be altered on an existing factory + by specifying the new namespace using item access: + + >>> factory = ElementFactory() + >>> print factory.html(factory['http://www.w3.org/2000/svg'].g(id=3)) + <html><g xmlns="http://www.w3.org/2000/svg" id="3"/></html> + + Usually, the `ElementFactory` class is not be used directly. Rather, the + `tag` instance should be used to create elements. + """ + + def __init__(self, namespace=None): + """Create the factory, optionally bound to the given namespace. + + :param namespace: the namespace URI for any created elements, or `None` + for no namespace + """ + if namespace and not isinstance(namespace, Namespace): + namespace = Namespace(namespace) + self.namespace = namespace + + def __call__(self, *args): + """Create a fragment that has the given positional arguments as child + nodes. + + :return: the created `Fragment` + :rtype: `Fragment` + """ + return Fragment()(*args) + + def __getitem__(self, namespace): + """Return a new factory that is bound to the specified namespace. + + :param namespace: the namespace URI or `Namespace` object + :return: an `ElementFactory` that produces elements bound to the given + namespace + :rtype: `ElementFactory` + """ + return ElementFactory(namespace) + + def __getattr__(self, name): + """Create an `Element` with the given name. + + :param name: the tag name of the element to create + :return: an `Element` with the specified name + :rtype: `Element` + """ + return Element(self.namespace and self.namespace[name] or name) + + +tag = ElementFactory() +"""Global `ElementFactory` bound to the default namespace. + +:type: `ElementFactory` +""" diff --git a/src/calibre/utils/genshi/core.py b/src/calibre/utils/genshi/core.py new file mode 100644 index 0000000000..aaa10edc82 --- /dev/null +++ b/src/calibre/utils/genshi/core.py @@ -0,0 +1,705 @@ +# -*- coding: utf-8 -*- +# +# Copyright (C) 2006-2008 Edgewall Software +# All rights reserved. +# +# This software is licensed as described in the file COPYING, which +# you should have received as part of this distribution. The terms +# are also available at http://genshi.edgewall.org/wiki/License. +# +# This software consists of voluntary contributions made by many +# individuals. For the exact contribution history, see the revision +# history and logs, available at http://genshi.edgewall.org/log/. + +"""Core classes for markup processing.""" + +from itertools import chain +import operator + +from calibre.utils.genshi.util import plaintext, stripentities, striptags + +__all__ = ['Stream', 'Markup', 'escape', 'unescape', 'Attrs', 'Namespace', + 'QName'] +__docformat__ = 'restructuredtext en' + + +class StreamEventKind(str): + """A kind of event on a markup stream.""" + __slots__ = [] + _instances = {} + + def __new__(cls, val): + return cls._instances.setdefault(val, str.__new__(cls, val)) + + +class Stream(object): + """Represents a stream of markup events. + + This class is basically an iterator over the events. + + Stream events are tuples of the form:: + + (kind, data, position) + + where ``kind`` is the event kind (such as `START`, `END`, `TEXT`, etc), + ``data`` depends on the kind of event, and ``position`` is a + ``(filename, line, offset)`` tuple that contains the location of the + original element or text in the input. If the original location is unknown, + ``position`` is ``(None, -1, -1)``. + + Also provided are ways to serialize the stream to text. The `serialize()` + method will return an iterator over generated strings, while `render()` + returns the complete generated text at once. Both accept various parameters + that impact the way the stream is serialized. + """ + __slots__ = ['events', 'serializer'] + + START = StreamEventKind('START') #: a start tag + END = StreamEventKind('END') #: an end tag + TEXT = StreamEventKind('TEXT') #: literal text + XML_DECL = StreamEventKind('XML_DECL') #: XML declaration + DOCTYPE = StreamEventKind('DOCTYPE') #: doctype declaration + START_NS = StreamEventKind('START_NS') #: start namespace mapping + END_NS = StreamEventKind('END_NS') #: end namespace mapping + START_CDATA = StreamEventKind('START_CDATA') #: start CDATA section + END_CDATA = StreamEventKind('END_CDATA') #: end CDATA section + PI = StreamEventKind('PI') #: processing instruction + COMMENT = StreamEventKind('COMMENT') #: comment + + def __init__(self, events, serializer=None): + """Initialize the stream with a sequence of markup events. + + :param events: a sequence or iterable providing the events + :param serializer: the default serialization method to use for this + stream + + :note: Changed in 0.5: added the `serializer` argument + """ + self.events = events #: The underlying iterable producing the events + self.serializer = serializer #: The default serializion method + + def __iter__(self): + return iter(self.events) + + def __or__(self, function): + """Override the "bitwise or" operator to apply filters or serializers + to the stream, providing a syntax similar to pipes on Unix shells. + + Assume the following stream produced by the `HTML` function: + + >>> from genshi.input import HTML + >>> html = HTML('''<p onclick="alert('Whoa')">Hello, world!</p>''') + >>> print html + <p onclick="alert('Whoa')">Hello, world!</p> + + A filter such as the HTML sanitizer can be applied to that stream using + the pipe notation as follows: + + >>> from genshi.filters import HTMLSanitizer + >>> sanitizer = HTMLSanitizer() + >>> print html | sanitizer + <p>Hello, world!</p> + + Filters can be any function that accepts and produces a stream (where + a stream is anything that iterates over events): + + >>> def uppercase(stream): + ... for kind, data, pos in stream: + ... if kind is TEXT: + ... data = data.upper() + ... yield kind, data, pos + >>> print html | sanitizer | uppercase + <p>HELLO, WORLD!</p> + + Serializers can also be used with this notation: + + >>> from genshi.output import TextSerializer + >>> output = TextSerializer() + >>> print html | sanitizer | uppercase | output + HELLO, WORLD! + + Commonly, serializers should be used at the end of the "pipeline"; + using them somewhere in the middle may produce unexpected results. + + :param function: the callable object that should be applied as a filter + :return: the filtered stream + :rtype: `Stream` + """ + return Stream(_ensure(function(self)), serializer=self.serializer) + + def filter(self, *filters): + """Apply filters to the stream. + + This method returns a new stream with the given filters applied. The + filters must be callables that accept the stream object as parameter, + and return the filtered stream. + + The call:: + + stream.filter(filter1, filter2) + + is equivalent to:: + + stream | filter1 | filter2 + + :param filters: one or more callable objects that should be applied as + filters + :return: the filtered stream + :rtype: `Stream` + """ + return reduce(operator.or_, (self,) + filters) + + def render(self, method=None, encoding='utf-8', out=None, **kwargs): + """Return a string representation of the stream. + + Any additional keyword arguments are passed to the serializer, and thus + depend on the `method` parameter value. + + :param method: determines how the stream is serialized; can be either + "xml", "xhtml", "html", "text", or a custom serializer + class; if `None`, the default serialization method of + the stream is used + :param encoding: how the output string should be encoded; if set to + `None`, this method returns a `unicode` object + :param out: a file-like object that the output should be written to + instead of being returned as one big string; note that if + this is a file or socket (or similar), the `encoding` must + not be `None` (that is, the output must be encoded) + :return: a `str` or `unicode` object (depending on the `encoding` + parameter), or `None` if the `out` parameter is provided + :rtype: `basestring` + + :see: XMLSerializer, XHTMLSerializer, HTMLSerializer, TextSerializer + :note: Changed in 0.5: added the `out` parameter + """ + from calibre.utils.genshi.output import encode + if method is None: + method = self.serializer or 'xml' + generator = self.serialize(method=method, **kwargs) + return encode(generator, method=method, encoding=encoding, out=out) + + def select(self, path, namespaces=None, variables=None): + """Return a new stream that contains the events matching the given + XPath expression. + + >>> from genshi import HTML + >>> stream = HTML('<doc><elem>foo</elem><elem>bar</elem></doc>') + >>> print stream.select('elem') + <elem>foo</elem><elem>bar</elem> + >>> print stream.select('elem/text()') + foobar + + Note that the outermost element of the stream becomes the *context + node* for the XPath test. That means that the expression "doc" would + not match anything in the example above, because it only tests against + child elements of the outermost element: + + >>> print stream.select('doc') + <BLANKLINE> + + You can use the "." expression to match the context node itself + (although that usually makes little sense): + + >>> print stream.select('.') + <doc><elem>foo</elem><elem>bar</elem></doc> + + :param path: a string containing the XPath expression + :param namespaces: mapping of namespace prefixes used in the path + :param variables: mapping of variable names to values + :return: the selected substream + :rtype: `Stream` + :raises PathSyntaxError: if the given path expression is invalid or not + supported + """ + from genshi.path import Path + return Path(path).select(self, namespaces, variables) + + def serialize(self, method='xml', **kwargs): + """Generate strings corresponding to a specific serialization of the + stream. + + Unlike the `render()` method, this method is a generator that returns + the serialized output incrementally, as opposed to returning a single + string. + + Any additional keyword arguments are passed to the serializer, and thus + depend on the `method` parameter value. + + :param method: determines how the stream is serialized; can be either + "xml", "xhtml", "html", "text", or a custom serializer + class; if `None`, the default serialization method of + the stream is used + :return: an iterator over the serialization results (`Markup` or + `unicode` objects, depending on the serialization method) + :rtype: ``iterator`` + :see: XMLSerializer, XHTMLSerializer, HTMLSerializer, TextSerializer + """ + from calibre.utils.genshi.output import get_serializer + if method is None: + method = self.serializer or 'xml' + return get_serializer(method, **kwargs)(_ensure(self)) + + def __str__(self): + return self.render() + + def __unicode__(self): + return self.render(encoding=None) + + def __html__(self): + return self + + +START = Stream.START +END = Stream.END +TEXT = Stream.TEXT +XML_DECL = Stream.XML_DECL +DOCTYPE = Stream.DOCTYPE +START_NS = Stream.START_NS +END_NS = Stream.END_NS +START_CDATA = Stream.START_CDATA +END_CDATA = Stream.END_CDATA +PI = Stream.PI +COMMENT = Stream.COMMENT + +def _ensure(stream): + """Ensure that every item on the stream is actually a markup event.""" + stream = iter(stream) + event = stream.next() + + # Check whether the iterable is a real markup event stream by examining the + # first item it yields; if it's not we'll need to do some conversion + if type(event) is not tuple or len(event) != 3: + for event in chain([event], stream): + if hasattr(event, 'totuple'): + event = event.totuple() + else: + event = TEXT, unicode(event), (None, -1, -1) + yield event + return + + # This looks like a markup event stream, so we'll just pass it through + # unchanged + yield event + for event in stream: + yield event + + +class Attrs(tuple): + """Immutable sequence type that stores the attributes of an element. + + Ordering of the attributes is preserved, while access by name is also + supported. + + >>> attrs = Attrs([('href', '#'), ('title', 'Foo')]) + >>> attrs + Attrs([('href', '#'), ('title', 'Foo')]) + + >>> 'href' in attrs + True + >>> 'tabindex' in attrs + False + >>> attrs.get('title') + 'Foo' + + Instances may not be manipulated directly. Instead, the operators ``|`` and + ``-`` can be used to produce new instances that have specific attributes + added, replaced or removed. + + To remove an attribute, use the ``-`` operator. The right hand side can be + either a string or a set/sequence of strings, identifying the name(s) of + the attribute(s) to remove: + + >>> attrs - 'title' + Attrs([('href', '#')]) + >>> attrs - ('title', 'href') + Attrs() + + The original instance is not modified, but the operator can of course be + used with an assignment: + + >>> attrs + Attrs([('href', '#'), ('title', 'Foo')]) + >>> attrs -= 'title' + >>> attrs + Attrs([('href', '#')]) + + To add a new attribute, use the ``|`` operator, where the right hand value + is a sequence of ``(name, value)`` tuples (which includes `Attrs` + instances): + + >>> attrs | [('title', 'Bar')] + Attrs([('href', '#'), ('title', 'Bar')]) + + If the attributes already contain an attribute with a given name, the value + of that attribute is replaced: + + >>> attrs | [('href', 'http://example.org/')] + Attrs([('href', 'http://example.org/')]) + """ + __slots__ = [] + + def __contains__(self, name): + """Return whether the list includes an attribute with the specified + name. + + :return: `True` if the list includes the attribute + :rtype: `bool` + """ + for attr, _ in self: + if attr == name: + return True + + def __getslice__(self, i, j): + """Return a slice of the attributes list. + + >>> attrs = Attrs([('href', '#'), ('title', 'Foo')]) + >>> attrs[1:] + Attrs([('title', 'Foo')]) + """ + return Attrs(tuple.__getslice__(self, i, j)) + + def __or__(self, attrs): + """Return a new instance that contains the attributes in `attrs` in + addition to any already existing attributes. + + :return: a new instance with the merged attributes + :rtype: `Attrs` + """ + repl = dict([(an, av) for an, av in attrs if an in self]) + return Attrs([(sn, repl.get(sn, sv)) for sn, sv in self] + + [(an, av) for an, av in attrs if an not in self]) + + def __repr__(self): + if not self: + return 'Attrs()' + return 'Attrs([%s])' % ', '.join([repr(item) for item in self]) + + def __sub__(self, names): + """Return a new instance with all attributes with a name in `names` are + removed. + + :param names: the names of the attributes to remove + :return: a new instance with the attribute removed + :rtype: `Attrs` + """ + if isinstance(names, basestring): + names = (names,) + return Attrs([(name, val) for name, val in self if name not in names]) + + def get(self, name, default=None): + """Return the value of the attribute with the specified name, or the + value of the `default` parameter if no such attribute is found. + + :param name: the name of the attribute + :param default: the value to return when the attribute does not exist + :return: the attribute value, or the `default` value if that attribute + does not exist + :rtype: `object` + """ + for attr, value in self: + if attr == name: + return value + return default + + def totuple(self): + """Return the attributes as a markup event. + + The returned event is a `TEXT` event, the data is the value of all + attributes joined together. + + >>> Attrs([('href', '#'), ('title', 'Foo')]).totuple() + ('TEXT', u'#Foo', (None, -1, -1)) + + :return: a `TEXT` event + :rtype: `tuple` + """ + return TEXT, u''.join([x[1] for x in self]), (None, -1, -1) + + +class Markup(unicode): + """Marks a string as being safe for inclusion in HTML/XML output without + needing to be escaped. + """ + __slots__ = [] + + def __add__(self, other): + return Markup(unicode(self) + unicode(escape(other))) + + def __radd__(self, other): + return Markup(unicode(escape(other)) + unicode(self)) + + def __mod__(self, args): + if isinstance(args, dict): + args = dict(zip(args.keys(), map(escape, args.values()))) + elif isinstance(args, (list, tuple)): + args = tuple(map(escape, args)) + else: + args = escape(args) + return Markup(unicode.__mod__(self, args)) + + def __mul__(self, num): + return Markup(unicode(self) * num) + + def __rmul__(self, num): + return Markup(num * unicode(self)) + + def __repr__(self): + return '<%s %r>' % (self.__class__.__name__, unicode(self)) + + def join(self, seq, escape_quotes=True): + """Return a `Markup` object which is the concatenation of the strings + in the given sequence, where this `Markup` object is the separator + between the joined elements. + + Any element in the sequence that is not a `Markup` instance is + automatically escaped. + + :param seq: the sequence of strings to join + :param escape_quotes: whether double quote characters in the elements + should be escaped + :return: the joined `Markup` object + :rtype: `Markup` + :see: `escape` + """ + return Markup(unicode(self).join([escape(item, quotes=escape_quotes) + for item in seq])) + + def escape(cls, text, quotes=True): + """Create a Markup instance from a string and escape special characters + it may contain (<, >, & and \"). + + >>> escape('"1 < 2"') + <Markup u'"1 < 2"'> + + If the `quotes` parameter is set to `False`, the \" character is left + as is. Escaping quotes is generally only required for strings that are + to be used in attribute values. + + >>> escape('"1 < 2"', quotes=False) + <Markup u'"1 < 2"'> + + :param text: the text to escape + :param quotes: if ``True``, double quote characters are escaped in + addition to the other special characters + :return: the escaped `Markup` string + :rtype: `Markup` + """ + if not text: + return cls() + if type(text) is cls: + return text + if hasattr(text, '__html__'): + return Markup(text.__html__()) + + text = unicode(text).replace('&', '&') \ + .replace('<', '<') \ + .replace('>', '>') + if quotes: + text = text.replace('"', '"') + return cls(text) + escape = classmethod(escape) + + def unescape(self): + """Reverse-escapes &, <, >, and \" and returns a `unicode` object. + + >>> Markup('1 < 2').unescape() + u'1 < 2' + + :return: the unescaped string + :rtype: `unicode` + :see: `genshi.core.unescape` + """ + if not self: + return u'' + return unicode(self).replace('"', '"') \ + .replace('>', '>') \ + .replace('<', '<') \ + .replace('&', '&') + + def stripentities(self, keepxmlentities=False): + """Return a copy of the text with any character or numeric entities + replaced by the equivalent UTF-8 characters. + + If the `keepxmlentities` parameter is provided and evaluates to `True`, + the core XML entities (``&``, ``'``, ``>``, ``<`` and + ``"``) are not stripped. + + :return: a `Markup` instance with entities removed + :rtype: `Markup` + :see: `genshi.util.stripentities` + """ + return Markup(stripentities(self, keepxmlentities=keepxmlentities)) + + def striptags(self): + """Return a copy of the text with all XML/HTML tags removed. + + :return: a `Markup` instance with all tags removed + :rtype: `Markup` + :see: `genshi.util.striptags` + """ + return Markup(striptags(self)) + + +try: + from calibre.utils.genshi._speedups import Markup +except ImportError: + pass # just use the Python implementation + +escape = Markup.escape + +def unescape(text): + """Reverse-escapes &, <, >, and \" and returns a `unicode` object. + + >>> unescape(Markup('1 < 2')) + u'1 < 2' + + If the provided `text` object is not a `Markup` instance, it is returned + unchanged. + + >>> unescape('1 < 2') + '1 < 2' + + :param text: the text to unescape + :return: the unescsaped string + :rtype: `unicode` + """ + if not isinstance(text, Markup): + return text + return text.unescape() + + +class Namespace(object): + """Utility class creating and testing elements with a namespace. + + Internally, namespace URIs are encoded in the `QName` of any element or + attribute, the namespace URI being enclosed in curly braces. This class + helps create and test these strings. + + A `Namespace` object is instantiated with the namespace URI. + + >>> html = Namespace('http://www.w3.org/1999/xhtml') + >>> html + <Namespace "http://www.w3.org/1999/xhtml"> + >>> html.uri + u'http://www.w3.org/1999/xhtml' + + The `Namespace` object can than be used to generate `QName` objects with + that namespace: + + >>> html.body + QName(u'http://www.w3.org/1999/xhtml}body') + >>> html.body.localname + u'body' + >>> html.body.namespace + u'http://www.w3.org/1999/xhtml' + + The same works using item access notation, which is useful for element or + attribute names that are not valid Python identifiers: + + >>> html['body'] + QName(u'http://www.w3.org/1999/xhtml}body') + + A `Namespace` object can also be used to test whether a specific `QName` + belongs to that namespace using the ``in`` operator: + + >>> qname = html.body + >>> qname in html + True + >>> qname in Namespace('http://www.w3.org/2002/06/xhtml2') + False + """ + def __new__(cls, uri): + if type(uri) is cls: + return uri + return object.__new__(cls) + + def __getnewargs__(self): + return (self.uri,) + + def __getstate__(self): + return self.uri + + def __setstate__(self, uri): + self.uri = uri + + def __init__(self, uri): + self.uri = unicode(uri) + + def __contains__(self, qname): + return qname.namespace == self.uri + + def __ne__(self, other): + return not self == other + + def __eq__(self, other): + if isinstance(other, Namespace): + return self.uri == other.uri + return self.uri == other + + def __getitem__(self, name): + return QName(self.uri + u'}' + name) + __getattr__ = __getitem__ + + def __repr__(self): + return '<Namespace "%s">' % self.uri + + def __str__(self): + return self.uri.encode('utf-8') + + def __unicode__(self): + return self.uri + + +# The namespace used by attributes such as xml:lang and xml:space +XML_NAMESPACE = Namespace('http://www.w3.org/XML/1998/namespace') + + +class QName(unicode): + """A qualified element or attribute name. + + The unicode value of instances of this class contains the qualified name of + the element or attribute, in the form ``{namespace-uri}local-name``. The + namespace URI can be obtained through the additional `namespace` attribute, + while the local name can be accessed through the `localname` attribute. + + >>> qname = QName('foo') + >>> qname + QName(u'foo') + >>> qname.localname + u'foo' + >>> qname.namespace + + >>> qname = QName('http://www.w3.org/1999/xhtml}body') + >>> qname + QName(u'http://www.w3.org/1999/xhtml}body') + >>> qname.localname + u'body' + >>> qname.namespace + u'http://www.w3.org/1999/xhtml' + """ + __slots__ = ['namespace', 'localname'] + + def __new__(cls, qname): + """Create the `QName` instance. + + :param qname: the qualified name as a string of the form + ``{namespace-uri}local-name``, where the leading curly + brace is optional + """ + if type(qname) is cls: + return qname + + parts = qname.lstrip(u'{').split(u'}', 1) + if len(parts) > 1: + self = unicode.__new__(cls, u'{%s' % qname) + self.namespace, self.localname = map(unicode, parts) + else: + self = unicode.__new__(cls, qname) + self.namespace, self.localname = None, unicode(qname) + return self + + def __getnewargs__(self): + return (self.lstrip('{'),) + + def __repr__(self): + return 'QName(%s)' % unicode.__repr__(self.lstrip('{')) diff --git a/src/calibre/utils/genshi/filters/__init__.py b/src/calibre/utils/genshi/filters/__init__.py new file mode 100644 index 0000000000..828a348bdb --- /dev/null +++ b/src/calibre/utils/genshi/filters/__init__.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# +# Copyright (C) 2007 Edgewall Software +# All rights reserved. +# +# This software is licensed as described in the file COPYING, which +# you should have received as part of this distribution. The terms +# are also available at http://genshi.edgewall.org/wiki/License. +# +# This software consists of voluntary contributions made by many +# individuals. For the exact contribution history, see the revision +# history and logs, available at http://genshi.edgewall.org/log/. + +"""Implementation of a number of stream filters.""" + +from calibre.utils.genshi.filters.html import HTMLFormFiller, HTMLSanitizer +from calibre.utils.genshi.filters.i18n import Translator +from calibre.utils.genshi.filters.transform import Transformer + +__docformat__ = 'restructuredtext en' diff --git a/src/calibre/utils/genshi/filters/html.py b/src/calibre/utils/genshi/filters/html.py new file mode 100644 index 0000000000..59eafda919 --- /dev/null +++ b/src/calibre/utils/genshi/filters/html.py @@ -0,0 +1,397 @@ +# -*- coding: utf-8 -*- +# +# Copyright (C) 2006-2008 Edgewall Software +# All rights reserved. +# +# This software is licensed as described in the file COPYING, which +# you should have received as part of this distribution. The terms +# are also available at http://genshi.edgewall.org/wiki/License. +# +# This software consists of voluntary contributions made by many +# individuals. For the exact contribution history, see the revision +# history and logs, available at http://genshi.edgewall.org/log/. + +"""Implementation of a number of stream filters.""" + +try: + set +except NameError: + from sets import ImmutableSet as frozenset + from sets import Set as set +import re + +from calibre.utils.genshi.core import Attrs, QName, stripentities +from calibre.utils.genshi.core import END, START, TEXT, COMMENT + +__all__ = ['HTMLFormFiller', 'HTMLSanitizer'] +__docformat__ = 'restructuredtext en' + + +class HTMLFormFiller(object): + """A stream filter that can populate HTML forms from a dictionary of values. + + >>> from genshi.input import HTML + >>> html = HTML('''<form> + ... <p><input type="text" name="foo" /></p> + ... </form>''') + >>> filler = HTMLFormFiller(data={'foo': 'bar'}) + >>> print html | filler + <form> + <p><input type="text" name="foo" value="bar"/></p> + </form> + """ + # TODO: only select the first radio button, and the first select option + # (if not in a multiple-select) + # TODO: only apply to elements in the XHTML namespace (or no namespace)? + + def __init__(self, name=None, id=None, data=None): + """Create the filter. + + :param name: The name of the form that should be populated. If this + parameter is given, only forms where the ``name`` attribute + value matches the parameter are processed. + :param id: The ID of the form that should be populated. If this + parameter is given, only forms where the ``id`` attribute + value matches the parameter are processed. + :param data: The dictionary of form values, where the keys are the names + of the form fields, and the values are the values to fill + in. + """ + self.name = name + self.id = id + if data is None: + data = {} + self.data = data + + def __call__(self, stream): + """Apply the filter to the given stream. + + :param stream: the markup event stream to filter + """ + in_form = in_select = in_option = in_textarea = False + select_value = option_value = textarea_value = None + option_start = None + option_text = [] + no_option_value = False + + for kind, data, pos in stream: + + if kind is START: + tag, attrs = data + tagname = tag.localname + + if tagname == 'form' and ( + self.name and attrs.get('name') == self.name or + self.id and attrs.get('id') == self.id or + not (self.id or self.name)): + in_form = True + + elif in_form: + if tagname == 'input': + type = attrs.get('type') + if type in ('checkbox', 'radio'): + name = attrs.get('name') + if name and name in self.data: + value = self.data[name] + declval = attrs.get('value') + checked = False + if isinstance(value, (list, tuple)): + if declval: + checked = declval in [unicode(v) for v + in value] + else: + checked = bool(filter(None, value)) + else: + if declval: + checked = declval == unicode(value) + elif type == 'checkbox': + checked = bool(value) + if checked: + attrs |= [(QName('checked'), 'checked')] + elif 'checked' in attrs: + attrs -= 'checked' + elif type in (None, 'hidden', 'text'): + name = attrs.get('name') + if name and name in self.data: + value = self.data[name] + if isinstance(value, (list, tuple)): + value = value[0] + if value is not None: + attrs |= [(QName('value'), unicode(value))] + elif tagname == 'select': + name = attrs.get('name') + if name in self.data: + select_value = self.data[name] + in_select = True + elif tagname == 'textarea': + name = attrs.get('name') + if name in self.data: + textarea_value = self.data.get(name) + if isinstance(textarea_value, (list, tuple)): + textarea_value = textarea_value[0] + in_textarea = True + elif in_select and tagname == 'option': + option_start = kind, data, pos + option_value = attrs.get('value') + if option_value is None: + no_option_value = True + option_value = '' + in_option = True + continue + yield kind, (tag, attrs), pos + + elif in_form and kind is TEXT: + if in_select and in_option: + if no_option_value: + option_value += data + option_text.append((kind, data, pos)) + continue + elif in_textarea: + continue + yield kind, data, pos + + elif in_form and kind is END: + tagname = data.localname + if tagname == 'form': + in_form = False + elif tagname == 'select': + in_select = False + select_value = None + elif in_select and tagname == 'option': + if isinstance(select_value, (tuple, list)): + selected = option_value in [unicode(v) for v + in select_value] + else: + selected = option_value == unicode(select_value) + okind, (tag, attrs), opos = option_start + if selected: + attrs |= [(QName('selected'), 'selected')] + elif 'selected' in attrs: + attrs -= 'selected' + yield okind, (tag, attrs), opos + if option_text: + for event in option_text: + yield event + in_option = False + no_option_value = False + option_start = option_value = None + option_text = [] + elif tagname == 'textarea': + if textarea_value: + yield TEXT, unicode(textarea_value), pos + in_textarea = False + yield kind, data, pos + + else: + yield kind, data, pos + + +class HTMLSanitizer(object): + """A filter that removes potentially dangerous HTML tags and attributes + from the stream. + + >>> from genshi import HTML + >>> html = HTML('<div><script>alert(document.cookie)</script></div>') + >>> print html | HTMLSanitizer() + <div/> + + The default set of safe tags and attributes can be modified when the filter + is instantiated. For example, to allow inline ``style`` attributes, the + following instantation would work: + + >>> html = HTML('<div style="background: #000"></div>') + >>> sanitizer = HTMLSanitizer(safe_attrs=HTMLSanitizer.SAFE_ATTRS | set(['style'])) + >>> print html | sanitizer + <div style="background: #000"/> + + Note that even in this case, the filter *does* attempt to remove dangerous + constructs from style attributes: + + >>> html = HTML('<div style="background: url(javascript:void); color: #000"></div>') + >>> print html | sanitizer + <div style="color: #000"/> + + This handles HTML entities, unicode escapes in CSS and Javascript text, as + well as a lot of other things. However, the style tag is still excluded by + default because it is very hard for such sanitizing to be completely safe, + especially considering how much error recovery current web browsers perform. + + :warn: Note that this special processing of CSS is currently only applied to + style attributes, **not** style elements. + """ + + SAFE_TAGS = frozenset(['a', 'abbr', 'acronym', 'address', 'area', 'b', + 'big', 'blockquote', 'br', 'button', 'caption', 'center', 'cite', + 'code', 'col', 'colgroup', 'dd', 'del', 'dfn', 'dir', 'div', 'dl', 'dt', + 'em', 'fieldset', 'font', 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', + 'hr', 'i', 'img', 'input', 'ins', 'kbd', 'label', 'legend', 'li', 'map', + 'menu', 'ol', 'optgroup', 'option', 'p', 'pre', 'q', 's', 'samp', + 'select', 'small', 'span', 'strike', 'strong', 'sub', 'sup', 'table', + 'tbody', 'td', 'textarea', 'tfoot', 'th', 'thead', 'tr', 'tt', 'u', + 'ul', 'var']) + + SAFE_ATTRS = frozenset(['abbr', 'accept', 'accept-charset', 'accesskey', + 'action', 'align', 'alt', 'axis', 'bgcolor', 'border', 'cellpadding', + 'cellspacing', 'char', 'charoff', 'charset', 'checked', 'cite', 'class', + 'clear', 'cols', 'colspan', 'color', 'compact', 'coords', 'datetime', + 'dir', 'disabled', 'enctype', 'for', 'frame', 'headers', 'height', + 'href', 'hreflang', 'hspace', 'id', 'ismap', 'label', 'lang', + 'longdesc', 'maxlength', 'media', 'method', 'multiple', 'name', + 'nohref', 'noshade', 'nowrap', 'prompt', 'readonly', 'rel', 'rev', + 'rows', 'rowspan', 'rules', 'scope', 'selected', 'shape', 'size', + 'span', 'src', 'start', 'summary', 'tabindex', 'target', 'title', + 'type', 'usemap', 'valign', 'value', 'vspace', 'width']) + + SAFE_SCHEMES = frozenset(['file', 'ftp', 'http', 'https', 'mailto', None]) + + URI_ATTRS = frozenset(['action', 'background', 'dynsrc', 'href', 'lowsrc', + 'src']) + + def __init__(self, safe_tags=SAFE_TAGS, safe_attrs=SAFE_ATTRS, + safe_schemes=SAFE_SCHEMES, uri_attrs=URI_ATTRS): + """Create the sanitizer. + + The exact set of allowed elements and attributes can be configured. + + :param safe_tags: a set of tag names that are considered safe + :param safe_attrs: a set of attribute names that are considered safe + :param safe_schemes: a set of URI schemes that are considered safe + :param uri_attrs: a set of names of attributes that contain URIs + """ + self.safe_tags = safe_tags + "The set of tag names that are considered safe." + self.safe_attrs = safe_attrs + "The set of attribute names that are considered safe." + self.uri_attrs = uri_attrs + "The set of names of attributes that may contain URIs." + self.safe_schemes = safe_schemes + "The set of URI schemes that are considered safe." + + def __call__(self, stream): + """Apply the filter to the given stream. + + :param stream: the markup event stream to filter + """ + waiting_for = None + + for kind, data, pos in stream: + if kind is START: + if waiting_for: + continue + tag, attrs = data + if tag not in self.safe_tags: + waiting_for = tag + continue + + new_attrs = [] + for attr, value in attrs: + value = stripentities(value) + if attr not in self.safe_attrs: + continue + elif attr in self.uri_attrs: + # Don't allow URI schemes such as "javascript:" + if not self.is_safe_uri(value): + continue + elif attr == 'style': + # Remove dangerous CSS declarations from inline styles + decls = self.sanitize_css(value) + if not decls: + continue + value = '; '.join(decls) + new_attrs.append((attr, value)) + + yield kind, (tag, Attrs(new_attrs)), pos + + elif kind is END: + tag = data + if waiting_for: + if waiting_for == tag: + waiting_for = None + else: + yield kind, data, pos + + elif kind is not COMMENT: + if not waiting_for: + yield kind, data, pos + + def is_safe_uri(self, uri): + """Determine whether the given URI is to be considered safe for + inclusion in the output. + + The default implementation checks whether the scheme of the URI is in + the set of allowed URIs (`safe_schemes`). + + >>> sanitizer = HTMLSanitizer() + >>> sanitizer.is_safe_uri('http://example.org/') + True + >>> sanitizer.is_safe_uri('javascript:alert(document.cookie)') + False + + :param uri: the URI to check + :return: `True` if the URI can be considered safe, `False` otherwise + :rtype: `bool` + :since: version 0.4.3 + """ + if ':' not in uri: + return True # This is a relative URI + chars = [char for char in uri.split(':', 1)[0] if char.isalnum()] + return ''.join(chars).lower() in self.safe_schemes + + def sanitize_css(self, text): + """Remove potentially dangerous property declarations from CSS code. + + In particular, properties using the CSS ``url()`` function with a scheme + that is not considered safe are removed: + + >>> sanitizer = HTMLSanitizer() + >>> sanitizer.sanitize_css(u''' + ... background: url(javascript:alert("foo")); + ... color: #000; + ... ''') + [u'color: #000'] + + Also, the proprietary Internet Explorer function ``expression()`` is + always stripped: + + >>> sanitizer.sanitize_css(u''' + ... background: #fff; + ... color: #000; + ... width: e/**/xpression(alert("foo")); + ... ''') + [u'background: #fff', u'color: #000'] + + :param text: the CSS text; this is expected to be `unicode` and to not + contain any character or numeric references + :return: a list of declarations that are considered safe + :rtype: `list` + :since: version 0.4.3 + """ + decls = [] + text = self._strip_css_comments(self._replace_unicode_escapes(text)) + for decl in filter(None, text.split(';')): + decl = decl.strip() + if not decl: + continue + is_evil = False + if 'expression' in decl: + is_evil = True + for match in re.finditer(r'url\s*\(([^)]+)', decl): + if not self.is_safe_uri(match.group(1)): + is_evil = True + break + if not is_evil: + decls.append(decl.strip()) + return decls + + _NORMALIZE_NEWLINES = re.compile(r'\r\n').sub + _UNICODE_ESCAPE = re.compile(r'\\([0-9a-fA-F]{1,6})\s?').sub + + def _replace_unicode_escapes(self, text): + def _repl(match): + return unichr(int(match.group(1), 16)) + return self._UNICODE_ESCAPE(_repl, self._NORMALIZE_NEWLINES('\n', text)) + + _CSS_COMMENTS = re.compile(r'/\*.*?\*/').sub + + def _strip_css_comments(self, text): + return self._CSS_COMMENTS('', text) diff --git a/src/calibre/utils/genshi/filters/i18n.py b/src/calibre/utils/genshi/filters/i18n.py new file mode 100644 index 0000000000..b0d919aa21 --- /dev/null +++ b/src/calibre/utils/genshi/filters/i18n.py @@ -0,0 +1,528 @@ +# -*- coding: utf-8 -*- +# +# Copyright (C) 2007 Edgewall Software +# All rights reserved. +# +# This software is licensed as described in the file COPYING, which +# you should have received as part of this distribution. The terms +# are also available at http://genshi.edgewall.org/wiki/License. +# +# This software consists of voluntary contributions made by many +# individuals. For the exact contribution history, see the revision +# history and logs, available at http://genshi.edgewall.org/log/. + +"""Utilities for internationalization and localization of templates. + +:since: version 0.4 +""" + +from compiler import ast +try: + frozenset +except NameError: + from sets import ImmutableSet as frozenset +from gettext import gettext +import re + +from calibre.utils.genshi.core import Attrs, Namespace, QName, START, END, TEXT, START_NS, \ + END_NS, XML_NAMESPACE, _ensure +from calibre.utils.genshi.template.base import Template, EXPR, SUB +from calibre.utils.genshi.template.markup import MarkupTemplate, EXEC + +__all__ = ['Translator', 'extract'] +__docformat__ = 'restructuredtext en' + +I18N_NAMESPACE = Namespace('http://genshi.edgewall.org/i18n') + + +class Translator(object): + """Can extract and translate localizable strings from markup streams and + templates. + + For example, assume the followng template: + + >>> from genshi.template import MarkupTemplate + >>> + >>> tmpl = MarkupTemplate('''<html xmlns:py="http://genshi.edgewall.org/"> + ... <head> + ... <title>Example + ... + ... + ...

          Example

          + ...

          ${_("Hello, %(name)s") % dict(name=username)}

          + ... + ... ''', filename='example.html') + + For demonstration, we define a dummy ``gettext``-style function with a + hard-coded translation table, and pass that to the `Translator` initializer: + + >>> def pseudo_gettext(string): + ... return { + ... 'Example': 'Beispiel', + ... 'Hello, %(name)s': 'Hallo, %(name)s' + ... }[string] + >>> + >>> translator = Translator(pseudo_gettext) + + Next, the translator needs to be prepended to any already defined filters + on the template: + + >>> tmpl.filters.insert(0, translator) + + When generating the template output, our hard-coded translations should be + applied as expected: + + >>> print tmpl.generate(username='Hans', _=pseudo_gettext) + + + Beispiel + + +

          Beispiel

          +

          Hallo, Hans

          + + + + Note that elements defining ``xml:lang`` attributes that do not contain + variable expressions are ignored by this filter. That can be used to + exclude specific parts of a template from being extracted and translated. + """ + + IGNORE_TAGS = frozenset([ + QName('script'), QName('http://www.w3.org/1999/xhtml}script'), + QName('style'), QName('http://www.w3.org/1999/xhtml}style') + ]) + INCLUDE_ATTRS = frozenset(['abbr', 'alt', 'label', 'prompt', 'standby', + 'summary', 'title']) + + def __init__(self, translate=gettext, ignore_tags=IGNORE_TAGS, + include_attrs=INCLUDE_ATTRS, extract_text=True): + """Initialize the translator. + + :param translate: the translation function, for example ``gettext`` or + ``ugettext``. + :param ignore_tags: a set of tag names that should not be localized + :param include_attrs: a set of attribute names should be localized + :param extract_text: whether the content of text nodes should be + extracted, or only text in explicit ``gettext`` + function calls + """ + self.translate = translate + self.ignore_tags = ignore_tags + self.include_attrs = include_attrs + self.extract_text = extract_text + + def __call__(self, stream, ctxt=None, search_text=True, msgbuf=None): + """Translate any localizable strings in the given stream. + + This function shouldn't be called directly. Instead, an instance of + the `Translator` class should be registered as a filter with the + `Template` or the `TemplateLoader`, or applied as a regular stream + filter. If used as a template filter, it should be inserted in front of + all the default filters. + + :param stream: the markup event stream + :param ctxt: the template context (not used) + :param search_text: whether text nodes should be translated (used + internally) + :param msgbuf: a `MessageBuffer` object or `None` (used internally) + :return: the localized stream + """ + ignore_tags = self.ignore_tags + include_attrs = self.include_attrs + translate = self.translate + if not self.extract_text: + search_text = False + skip = 0 + i18n_msg = I18N_NAMESPACE['msg'] + ns_prefixes = [] + xml_lang = XML_NAMESPACE['lang'] + + for kind, data, pos in stream: + + # skip chunks that should not be localized + if skip: + if kind is START: + skip += 1 + elif kind is END: + skip -= 1 + yield kind, data, pos + continue + + # handle different events that can be localized + if kind is START: + tag, attrs = data + if tag in self.ignore_tags or \ + isinstance(attrs.get(xml_lang), basestring): + skip += 1 + yield kind, data, pos + continue + + new_attrs = [] + changed = False + for name, value in attrs: + newval = value + if search_text and isinstance(value, basestring): + if name in include_attrs: + newval = self.translate(value) + else: + newval = list(self(_ensure(value), ctxt, + search_text=False, msgbuf=msgbuf) + ) + if newval != value: + value = newval + changed = True + new_attrs.append((name, value)) + if changed: + attrs = Attrs(new_attrs) + + if msgbuf: + msgbuf.append(kind, data, pos) + continue + elif i18n_msg in attrs: + msgbuf = MessageBuffer() + attrs -= i18n_msg + + yield kind, (tag, attrs), pos + + elif search_text and kind is TEXT: + if not msgbuf: + text = data.strip() + if text: + data = data.replace(text, translate(text)) + yield kind, data, pos + else: + msgbuf.append(kind, data, pos) + + elif not skip and msgbuf and kind is END: + msgbuf.append(kind, data, pos) + if not msgbuf.depth: + for event in msgbuf.translate(translate(msgbuf.format())): + yield event + msgbuf = None + yield kind, data, pos + + elif kind is SUB: + subkind, substream = data + new_substream = list(self(substream, ctxt, msgbuf=msgbuf)) + yield kind, (subkind, new_substream), pos + + elif kind is START_NS and data[1] == I18N_NAMESPACE: + ns_prefixes.append(data[0]) + + elif kind is END_NS and data in ns_prefixes: + ns_prefixes.remove(data) + + else: + yield kind, data, pos + + GETTEXT_FUNCTIONS = ('_', 'gettext', 'ngettext', 'dgettext', 'dngettext', + 'ugettext', 'ungettext') + + def extract(self, stream, gettext_functions=GETTEXT_FUNCTIONS, + search_text=True, msgbuf=None): + """Extract localizable strings from the given template stream. + + For every string found, this function yields a ``(lineno, function, + message)`` tuple, where: + + * ``lineno`` is the number of the line on which the string was found, + * ``function`` is the name of the ``gettext`` function used (if the + string was extracted from embedded Python code), and + * ``message`` is the string itself (a ``unicode`` object, or a tuple + of ``unicode`` objects for functions with multiple string arguments). + + >>> from genshi.template import MarkupTemplate + >>> + >>> tmpl = MarkupTemplate(''' + ... + ... Example + ... + ... + ...

          Example

          + ...

          ${_("Hello, %(name)s") % dict(name=username)}

          + ...

          ${ngettext("You have %d item", "You have %d items", num)}

          + ... + ... ''', filename='example.html') + >>> + >>> for lineno, funcname, message in Translator().extract(tmpl.stream): + ... print "%d, %r, %r" % (lineno, funcname, message) + 3, None, u'Example' + 6, None, u'Example' + 7, '_', u'Hello, %(name)s' + 8, 'ngettext', (u'You have %d item', u'You have %d items', None) + + :param stream: the event stream to extract strings from; can be a + regular stream or a template stream + :param gettext_functions: a sequence of function names that should be + treated as gettext-style localization + functions + :param search_text: whether the content of text nodes should be + extracted (used internally) + + :note: Changed in 0.4.1: For a function with multiple string arguments + (such as ``ngettext``), a single item with a tuple of strings is + yielded, instead an item for each string argument. + """ + if not self.extract_text: + search_text = False + skip = 0 + i18n_msg = I18N_NAMESPACE['msg'] + xml_lang = XML_NAMESPACE['lang'] + + for kind, data, pos in stream: + + if skip: + if kind is START: + skip += 1 + if kind is END: + skip -= 1 + + if kind is START and not skip: + tag, attrs = data + + if tag in self.ignore_tags or \ + isinstance(attrs.get(xml_lang), basestring): + skip += 1 + continue + + for name, value in attrs: + if search_text and isinstance(value, basestring): + if name in self.include_attrs: + text = value.strip() + if text: + yield pos[1], None, text + else: + for lineno, funcname, text in self.extract( + _ensure(value), gettext_functions, + search_text=False): + yield lineno, funcname, text + + if msgbuf: + msgbuf.append(kind, data, pos) + elif i18n_msg in attrs: + msgbuf = MessageBuffer(pos[1]) + + elif not skip and search_text and kind is TEXT: + if not msgbuf: + text = data.strip() + if text and filter(None, [ch.isalpha() for ch in text]): + yield pos[1], None, text + else: + msgbuf.append(kind, data, pos) + + elif not skip and msgbuf and kind is END: + msgbuf.append(kind, data, pos) + if not msgbuf.depth: + yield msgbuf.lineno, None, msgbuf.format() + msgbuf = None + + elif kind is EXPR or kind is EXEC: + for funcname, strings in extract_from_code(data, + gettext_functions): + yield pos[1], funcname, strings + + elif kind is SUB: + subkind, substream = data + messages = self.extract(substream, gettext_functions, + search_text=search_text and not skip, + msgbuf=msgbuf) + for lineno, funcname, text in messages: + yield lineno, funcname, text + + +class MessageBuffer(object): + """Helper class for managing internationalized mixed content. + + :since: version 0.5 + """ + + def __init__(self, lineno=-1): + """Initialize the message buffer. + + :param lineno: the line number on which the first stream event + belonging to the message was found + """ + self.lineno = lineno + self.string = [] + self.events = {} + self.depth = 1 + self.order = 1 + self.stack = [0] + + def append(self, kind, data, pos): + """Append a stream event to the buffer. + + :param kind: the stream event kind + :param data: the event data + :param pos: the position of the event in the source + """ + if kind is TEXT: + self.string.append(data) + self.events.setdefault(self.stack[-1], []).append(None) + else: + if kind is START: + self.string.append(u'[%d:' % self.order) + self.events.setdefault(self.order, []).append((kind, data, pos)) + self.stack.append(self.order) + self.depth += 1 + self.order += 1 + elif kind is END: + self.depth -= 1 + if self.depth: + self.events[self.stack[-1]].append((kind, data, pos)) + self.string.append(u']') + self.stack.pop() + + def format(self): + """Return a message identifier representing the content in the + buffer. + """ + return u''.join(self.string).strip() + + def translate(self, string): + """Interpolate the given message translation with the events in the + buffer and return the translated stream. + + :param string: the translated message string + """ + parts = parse_msg(string) + for order, string in parts: + events = self.events[order] + while events: + event = self.events[order].pop(0) + if not event: + if not string: + break + yield TEXT, string, (None, -1, -1) + if not self.events[order] or not self.events[order][0]: + break + else: + yield event + + +def parse_msg(string, regex=re.compile(r'(?:\[(\d+)\:)|\]')): + """Parse a translated message using Genshi mixed content message + formatting. + + >>> parse_msg("See [1:Help].") + [(0, 'See '), (1, 'Help'), (0, '.')] + + >>> parse_msg("See [1:our [2:Help] page] for details.") + [(0, 'See '), (1, 'our '), (2, 'Help'), (1, ' page'), (0, ' for details.')] + + >>> parse_msg("[2:Details] finden Sie in [1:Hilfe].") + [(2, 'Details'), (0, ' finden Sie in '), (1, 'Hilfe'), (0, '.')] + + >>> parse_msg("[1:] Bilder pro Seite anzeigen.") + [(1, ''), (0, ' Bilder pro Seite anzeigen.')] + + :param string: the translated message string + :return: a list of ``(order, string)`` tuples + :rtype: `list` + """ + parts = [] + stack = [0] + while True: + mo = regex.search(string) + if not mo: + break + + if mo.start() or stack[-1]: + parts.append((stack[-1], string[:mo.start()])) + string = string[mo.end():] + + orderno = mo.group(1) + if orderno is not None: + stack.append(int(orderno)) + else: + stack.pop() + if not stack: + break + + if string: + parts.append((stack[-1], string)) + + return parts + +def extract_from_code(code, gettext_functions): + """Extract strings from Python bytecode. + + >>> from genshi.template.eval import Expression + + >>> expr = Expression('_("Hello")') + >>> list(extract_from_code(expr, Translator.GETTEXT_FUNCTIONS)) + [('_', u'Hello')] + + >>> expr = Expression('ngettext("You have %(num)s item", ' + ... '"You have %(num)s items", num)') + >>> list(extract_from_code(expr, Translator.GETTEXT_FUNCTIONS)) + [('ngettext', (u'You have %(num)s item', u'You have %(num)s items', None))] + + :param code: the `Code` object + :type code: `genshi.template.eval.Code` + :param gettext_functions: a sequence of function names + :since: version 0.5 + """ + def _walk(node): + if isinstance(node, ast.CallFunc) and isinstance(node.node, ast.Name) \ + and node.node.name in gettext_functions: + strings = [] + def _add(arg): + if isinstance(arg, ast.Const) \ + and isinstance(arg.value, basestring): + strings.append(unicode(arg.value, 'utf-8')) + elif arg and not isinstance(arg, ast.Keyword): + strings.append(None) + [_add(arg) for arg in node.args] + _add(node.star_args) + _add(node.dstar_args) + if len(strings) == 1: + strings = strings[0] + else: + strings = tuple(strings) + yield node.node.name, strings + else: + for child in node.getChildNodes(): + for funcname, strings in _walk(child): + yield funcname, strings + return _walk(code.ast) + +def extract(fileobj, keywords, comment_tags, options): + """Babel extraction method for Genshi templates. + + :param fileobj: the file-like object the messages should be extracted from + :param keywords: a list of keywords (i.e. function names) that should be + recognized as translation functions + :param comment_tags: a list of translator tags to search for and include + in the results + :param options: a dictionary of additional options (optional) + :return: an iterator over ``(lineno, funcname, message, comments)`` tuples + :rtype: ``iterator`` + """ + template_class = options.get('template_class', MarkupTemplate) + if isinstance(template_class, basestring): + module, clsname = template_class.split(':', 1) + template_class = getattr(__import__(module, {}, {}, [clsname]), clsname) + encoding = options.get('encoding', None) + + extract_text = options.get('extract_text', True) + if isinstance(extract_text, basestring): + extract_text = extract_text.lower() in ('1', 'on', 'yes', 'true') + + ignore_tags = options.get('ignore_tags', Translator.IGNORE_TAGS) + if isinstance(ignore_tags, basestring): + ignore_tags = ignore_tags.split() + ignore_tags = [QName(tag) for tag in ignore_tags] + + include_attrs = options.get('include_attrs', Translator.INCLUDE_ATTRS) + if isinstance(include_attrs, basestring): + include_attrs = include_attrs.split() + include_attrs = [QName(attr) for attr in include_attrs] + + tmpl = template_class(fileobj, filename=getattr(fileobj, 'name', None), + encoding=encoding) + translator = Translator(None, ignore_tags, include_attrs, extract_text) + for lineno, func, message in translator.extract(tmpl.stream, + gettext_functions=keywords): + yield lineno, func, message, [] diff --git a/src/calibre/utils/genshi/filters/transform.py b/src/calibre/utils/genshi/filters/transform.py new file mode 100644 index 0000000000..5320f01cba --- /dev/null +++ b/src/calibre/utils/genshi/filters/transform.py @@ -0,0 +1,1309 @@ +# -*- coding: utf-8 -*- +# +# Copyright (C) 2007 Edgewall Software +# All rights reserved. +# +# This software is licensed as described in the file COPYING, which +# you should have received as part of this distribution. The terms +# are also available at http://genshi.edgewall.org/wiki/License. +# +# This software consists of voluntary contributions made by many +# individuals. For the exact contribution history, see the revision +# history and logs, available at http://genshi.edgewall.org/log/. + +"""A filter for functional-style transformations of markup streams. + +The `Transformer` filter provides a variety of transformations that can be +applied to parts of streams that match given XPath expressions. These +transformations can be chained to achieve results that would be comparitively +tedious to achieve by writing stream filters by hand. The approach of chaining +node selection and transformation has been inspired by the `jQuery`_ Javascript +library. + + .. _`jQuery`: http://jquery.com/ + +For example, the following transformation removes the ```` element from +the ``<head>`` of the input document: + +>>> from genshi.builder import tag +>>> html = HTML('''<html> +... <head><title>Some Title +... +... Some body text. +... +... ''') +>>> print html | Transformer('body/em').map(unicode.upper, TEXT) \\ +... .unwrap().wrap(tag.u) + + Some Title + + Some BODY text. + + + +The ``Transformer`` support a large number of useful transformations out of the +box, but custom transformations can be added easily. + +:since: version 0.5 +""" + +import re +import sys + +from calibre.utils.genshi.builder import Element +from calibre.utils.genshi.core import Stream, Attrs, QName, TEXT, START, END, _ensure, Markup +from calibre.utils.genshi.path import Path + +__all__ = ['Transformer', 'StreamBuffer', 'InjectorTransformation', 'ENTER', + 'EXIT', 'INSIDE', 'OUTSIDE', 'BREAK'] + + +class TransformMark(str): + """A mark on a transformation stream.""" + __slots__ = [] + _instances = {} + + def __new__(cls, val): + return cls._instances.setdefault(val, str.__new__(cls, val)) + + +ENTER = TransformMark('ENTER') +"""Stream augmentation mark indicating that a selected element is being +entered.""" + +INSIDE = TransformMark('INSIDE') +"""Stream augmentation mark indicating that processing is currently inside a +selected element.""" + +OUTSIDE = TransformMark('OUTSIDE') +"""Stream augmentation mark indicating that a match occurred outside a selected +element.""" + +ATTR = TransformMark('ATTR') +"""Stream augmentation mark indicating a selected element attribute.""" + +EXIT = TransformMark('EXIT') +"""Stream augmentation mark indicating that a selected element is being +exited.""" + +BREAK = TransformMark('BREAK') +"""Stream augmentation mark indicating a break between two otherwise contiguous +blocks of marked events. + +This is used primarily by the cut() transform to provide later transforms with +an opportunity to operate on the cut buffer. +""" + + +class PushBackStream(object): + """Allows a single event to be pushed back onto the stream and re-consumed. + """ + def __init__(self, stream): + self.stream = iter(stream) + self.peek = None + + def push(self, event): + assert self.peek is None + self.peek = event + + def __iter__(self): + while True: + if self.peek is not None: + peek = self.peek + self.peek = None + yield peek + else: + try: + event = self.stream.next() + yield event + except StopIteration: + if self.peek is None: + raise + + +class Transformer(object): + """Stream filter that can apply a variety of different transformations to + a stream. + + This is achieved by selecting the events to be transformed using XPath, + then applying the transformations to the events matched by the path + expression. Each marked event is in the form (mark, (kind, data, pos)), + where mark can be any of `ENTER`, `INSIDE`, `EXIT`, `OUTSIDE`, or `None`. + + The first three marks match `START` and `END` events, and any events + contained `INSIDE` any selected XML/HTML element. A non-element match + outside a `START`/`END` container (e.g. ``text()``) will yield an `OUTSIDE` + mark. + + >>> html = HTML('Some Title' + ... 'Some body text.') + + Transformations act on selected stream events matching an XPath expression. + Here's an example of removing some markup (the title, in this case) + selected by an expression: + + >>> print html | Transformer('head/title').remove() + Some body text. + + Inserted content can be passed in the form of a string, or a markup event + stream, which includes streams generated programmatically via the + `builder` module: + + >>> from genshi.builder import tag + >>> print html | Transformer('body').prepend(tag.h1('Document Title')) + Some Title

          Document + Title

          Some body text. + + Each XPath expression determines the set of tags that will be acted upon by + subsequent transformations. In this example we select the ```` text, + copy it into a buffer, then select the ``<body>`` element and paste the + copied text into the body as ``<h1>`` enclosed text: + + >>> buffer = StreamBuffer() + >>> print html | Transformer('head/title/text()').copy(buffer) \\ + ... .end().select('body').prepend(tag.h1(buffer)) + <html><head><title>Some Title

          Some Title

          Some + body text. + + Transformations can also be assigned and reused, although care must be + taken when using buffers, to ensure that buffers are cleared between + transforms: + + >>> emphasis = Transformer('body//em').attr('class', 'emphasis') + >>> print html | emphasis + Some TitleSome body text. + """ + + __slots__ = ['transforms'] + + def __init__(self, path='.'): + """Construct a new transformation filter. + + :param path: an XPath expression (as string) or a `Path` instance + """ + self.transforms = [SelectTransformation(path)] + + def __call__(self, stream, keep_marks=False): + """Apply the transform filter to the marked stream. + + :param stream: the marked event stream to filter + :param keep_marks: Do not strip transformer selection marks from the + stream. Useful for testing. + :return: the transformed stream + :rtype: `Stream` + """ + transforms = self._mark(stream) + for link in self.transforms: + transforms = link(transforms) + if not keep_marks: + transforms = self._unmark(transforms) + return Stream(transforms, + serializer=getattr(stream, 'serializer', None)) + + def apply(self, function): + """Apply a transformation to the stream. + + Transformations can be chained, similar to stream filters. Any callable + accepting a marked stream can be used as a transform. + + As an example, here is a simple `TEXT` event upper-casing transform: + + >>> def upper(stream): + ... for mark, (kind, data, pos) in stream: + ... if mark and kind is TEXT: + ... yield mark, (kind, data.upper(), pos) + ... else: + ... yield mark, (kind, data, pos) + >>> short_stream = HTML('Some test text') + >>> print short_stream | Transformer('.//em/text()').apply(upper) + Some TEST text + """ + transformer = Transformer() + transformer.transforms = self.transforms[:] + if isinstance(function, Transformer): + transformer.transforms.extend(function.transforms) + else: + transformer.transforms.append(function) + return transformer + + #{ Selection operations + + def select(self, path): + """Mark events matching the given XPath expression, within the current + selection. + + >>> html = HTML('Some test text') + >>> print html | Transformer().select('.//em').trace() + (None, ('START', (QName(u'body'), Attrs()), (None, 1, 0))) + (None, ('TEXT', u'Some ', (None, 1, 6))) + ('ENTER', ('START', (QName(u'em'), Attrs()), (None, 1, 11))) + ('INSIDE', ('TEXT', u'test', (None, 1, 15))) + ('EXIT', ('END', QName(u'em'), (None, 1, 19))) + (None, ('TEXT', u' text', (None, 1, 24))) + (None, ('END', QName(u'body'), (None, 1, 29))) + Some test text + + :param path: an XPath expression (as string) or a `Path` instance + :return: the stream augmented by transformation marks + :rtype: `Transformer` + """ + return self.apply(SelectTransformation(path)) + + def invert(self): + """Invert selection so that marked events become unmarked, and vice + versa. + + Specificaly, all marks are converted to null marks, and all null marks + are converted to OUTSIDE marks. + + >>> html = HTML('Some test text') + >>> print html | Transformer('//em').invert().trace() + ('OUTSIDE', ('START', (QName(u'body'), Attrs()), (None, 1, 0))) + ('OUTSIDE', ('TEXT', u'Some ', (None, 1, 6))) + (None, ('START', (QName(u'em'), Attrs()), (None, 1, 11))) + (None, ('TEXT', u'test', (None, 1, 15))) + (None, ('END', QName(u'em'), (None, 1, 19))) + ('OUTSIDE', ('TEXT', u' text', (None, 1, 24))) + ('OUTSIDE', ('END', QName(u'body'), (None, 1, 29))) + Some test text + + :rtype: `Transformer` + """ + return self.apply(InvertTransformation()) + + def end(self): + """End current selection, allowing all events to be selected. + + Example: + + >>> html = HTML('Some test text') + >>> print html | Transformer('//em').end().trace() + ('OUTSIDE', ('START', (QName(u'body'), Attrs()), (None, 1, 0))) + ('OUTSIDE', ('TEXT', u'Some ', (None, 1, 6))) + ('OUTSIDE', ('START', (QName(u'em'), Attrs()), (None, 1, 11))) + ('OUTSIDE', ('TEXT', u'test', (None, 1, 15))) + ('OUTSIDE', ('END', QName(u'em'), (None, 1, 19))) + ('OUTSIDE', ('TEXT', u' text', (None, 1, 24))) + ('OUTSIDE', ('END', QName(u'body'), (None, 1, 29))) + Some test text + + :return: the stream augmented by transformation marks + :rtype: `Transformer` + """ + return self.apply(EndTransformation()) + + #{ Deletion operations + + def empty(self): + """Empty selected elements of all content. + + Example: + + >>> html = HTML('Some Title' + ... 'Some body text.') + >>> print html | Transformer('.//em').empty() + Some TitleSome + text. + + :rtype: `Transformer` + """ + return self.apply(EmptyTransformation()) + + def remove(self): + """Remove selection from the stream. + + Example: + + >>> html = HTML('Some Title' + ... 'Some body text.') + >>> print html | Transformer('.//em').remove() + Some TitleSome + text. + + :rtype: `Transformer` + """ + return self.apply(RemoveTransformation()) + + #{ Direct element operations + + def unwrap(self): + """Remove outermost enclosing elements from selection. + + Example: + + >>> html = HTML('Some Title' + ... 'Some body text.') + >>> print html | Transformer('.//em').unwrap() + Some TitleSome body + text. + + :rtype: `Transformer` + """ + return self.apply(UnwrapTransformation()) + + def wrap(self, element): + """Wrap selection in an element. + + >>> html = HTML('Some Title' + ... 'Some body text.') + >>> print html | Transformer('.//em').wrap('strong') + Some TitleSome + body text. + + :param element: either a tag name (as string) or an `Element` object + :rtype: `Transformer` + """ + return self.apply(WrapTransformation(element)) + + #{ Content insertion operations + + def replace(self, content): + """Replace selection with content. + + >>> html = HTML('Some Title' + ... 'Some body text.') + >>> print html | Transformer('.//title/text()').replace('New Title') + New TitleSome body + text. + + :param content: Either a callable, an iterable of events, or a string + to insert. + :rtype: `Transformer` + """ + return self.apply(ReplaceTransformation(content)) + + def before(self, content): + """Insert content before selection. + + In this example we insert the word 'emphasised' before the opening + tag: + + >>> html = HTML('Some Title' + ... 'Some body text.') + >>> print html | Transformer('.//em').before('emphasised ') + Some TitleSome emphasised + body text. + + :param content: Either a callable, an iterable of events, or a string + to insert. + :rtype: `Transformer` + """ + return self.apply(BeforeTransformation(content)) + + def after(self, content): + """Insert content after selection. + + Here, we insert some text after the closing tag: + + >>> html = HTML('Some Title' + ... 'Some body text.') + >>> print html | Transformer('.//em').after(' rock') + Some TitleSome body + rock text. + + :param content: Either a callable, an iterable of events, or a string + to insert. + :rtype: `Transformer` + """ + return self.apply(AfterTransformation(content)) + + def prepend(self, content): + """Insert content after the ENTER event of the selection. + + Inserting some new text at the start of the : + + >>> html = HTML('Some Title' + ... 'Some body text.') + >>> print html | Transformer('.//body').prepend('Some new body text. ') + Some TitleSome new body text. + Some body text. + + :param content: Either a callable, an iterable of events, or a string + to insert. + :rtype: `Transformer` + """ + return self.apply(PrependTransformation(content)) + + def append(self, content): + """Insert content before the END event of the selection. + + >>> html = HTML('Some Title' + ... 'Some body text.') + >>> print html | Transformer('.//body').append(' Some new body text.') + Some TitleSome body + text. Some new body text. + + :param content: Either a callable, an iterable of events, or a string + to insert. + :rtype: `Transformer` + """ + return self.apply(AppendTransformation(content)) + + #{ Attribute manipulation + + def attr(self, name, value): + """Add, replace or delete an attribute on selected elements. + + If `value` evaulates to `None` the attribute will be deleted from the + element: + + >>> html = HTML('Some Title' + ... 'Some body text.' + ... '') + >>> print html | Transformer('body/em').attr('class', None) + Some TitleSome body + text. + + Otherwise the attribute will be set to `value`: + + >>> print html | Transformer('body/em').attr('class', 'emphasis') + Some TitleSome body text. + + If `value` is a callable it will be called with the attribute name and + the `START` event for the matching element. Its return value will then + be used to set the attribute: + + >>> def print_attr(name, event): + ... attrs = event[1][1] + ... print attrs + ... return attrs.get(name) + >>> print html | Transformer('body/em').attr('class', print_attr) + Attrs([(QName(u'class'), u'before')]) + Attrs() + Some TitleSome body text. + + :param name: the name of the attribute + :param value: the value that should be set for the attribute. + :rtype: `Transformer` + """ + return self.apply(AttrTransformation(name, value)) + + #{ Buffer operations + + def copy(self, buffer, accumulate=False): + """Copy selection into buffer. + + The buffer is replaced by each *contiguous* selection before being passed + to the next transformation. If accumulate=True, further selections will + be appended to the buffer rather than replacing it. + + >>> from calibre.utils.genshi.builder import tag + >>> buffer = StreamBuffer() + >>> html = HTML('Some Title' + ... 'Some body text.') + >>> print html | Transformer('title/text()').copy(buffer) \\ + ... .end().select('body').prepend(tag.h1(buffer)) + Some Title

          Some + Title

          Some body text. + + This example illustrates that only a single contiguous selection will + be buffered: + + >>> print html | Transformer('head/title/text()').copy(buffer) \\ + ... .end().select('body/em').copy(buffer).end().select('body') \\ + ... .prepend(tag.h1(buffer)) + Some Title

          Some + Title

          Some body text. + >>> print buffer + body + + Element attributes can also be copied for later use: + + >>> html = HTML('Some Title' + ... 'Some body' + ... 'text.') + >>> buffer = StreamBuffer() + >>> def apply_attr(name, entry): + ... return list(buffer)[0][1][1].get('class') + >>> print html | Transformer('body/em[@class]/@class').copy(buffer) \\ + ... .end().buffer().select('body/em[not(@class)]') \\ + ... .attr('class', apply_attr) + Some TitleSome bodytext. + + + :param buffer: the `StreamBuffer` in which the selection should be + stored + :rtype: `Transformer` + note: Copy (and cut) copy each individual selected object into the + buffer before passing to the next transform. For example, the + XPath ``*|text()`` will select all elements and text, each + instance of which will be copied to the buffer individually + before passing to the next transform. This has implications for + how ``StreamBuffer`` objects can be used, so some + experimentation may be required. + + """ + return self.apply(CopyTransformation(buffer, accumulate)) + + def cut(self, buffer, accumulate=False): + """Copy selection into buffer and remove the selection from the stream. + + >>> from calibre.utils.genshi.builder import tag + >>> buffer = StreamBuffer() + >>> html = HTML('Some Title' + ... 'Some body text.') + >>> print html | Transformer('.//em/text()').cut(buffer) \\ + ... .end().select('.//em').after(tag.h1(buffer)) + Some TitleSome +

          body

          text. + + Specifying accumulate=True, appends all selected intervals onto the + buffer. Combining this with the .buffer() operation allows us operate + on all copied events rather than per-segment. See the documentation on + buffer() for more information. + + :param buffer: the `StreamBuffer` in which the selection should be + stored + :rtype: `Transformer` + :note: this transformation will buffer the entire input stream + """ + return self.apply(CutTransformation(buffer, accumulate)) + + def buffer(self): + """Buffer the entire stream (can consume a considerable amount of + memory). + + Useful in conjunction with copy(accumulate=True) and + cut(accumulate=True) to ensure that all marked events in the entire + stream are copied to the buffer before further transformations are + applied. + + For example, to move all elements inside a tag at the + top of the document: + + >>> doc = HTML('Some one ' + ... 'text two.') + >>> buffer = StreamBuffer() + >>> print doc | Transformer('body/note').cut(buffer, accumulate=True) \\ + ... .end().buffer().select('notes').prepend(buffer) + onetwoSome text + . + + """ + return self.apply(list) + + #{ Miscellaneous operations + + def filter(self, filter): + """Apply a normal stream filter to the selection. The filter is called + once for each contiguous block of marked events. + + >>> from genshi.filters.html import HTMLSanitizer + >>> html = HTML('Some text and some more text') + >>> print html | Transformer('body/*').filter(HTMLSanitizer()) + Some text and some more text + + :param filter: The stream filter to apply. + :rtype: `Transformer` + """ + return self.apply(FilterTransformation(filter)) + + def map(self, function, kind): + """Applies a function to the ``data`` element of events of ``kind`` in + the selection. + + >>> html = HTML('Some Title' + ... 'Some body text.') + >>> print html | Transformer('head/title').map(unicode.upper, TEXT) + SOME TITLESome body + text. + + :param function: the function to apply + :param kind: the kind of event the function should be applied to + :rtype: `Transformer` + """ + return self.apply(MapTransformation(function, kind)) + + def substitute(self, pattern, replace, count=1): + """Replace text matching a regular expression. + + Refer to the documentation for ``re.sub()`` for details. + + >>> html = HTML('Some text, some more text and ' + ... 'some bold text\\n' + ... 'some italicised text') + >>> print html | Transformer('body/b').substitute('(?i)some', 'SOME') + Some text, some more text and SOME bold text + some italicised text + >>> tags = tag.html(tag.body('Some text, some more text and\\n', + ... Markup('some bold text'))) + >>> print tags.generate() | Transformer('body').substitute( + ... '(?i)some', 'SOME') + SOME text, some more text and + SOME bold text + + :param pattern: A regular expression object or string. + :param replace: Replacement pattern. + :param count: Number of replacements to make in each text fragment. + :rtype: `Transformer` + """ + return self.apply(SubstituteTransformation(pattern, replace, count)) + + def rename(self, name): + """Rename matching elements. + + >>> html = HTML('Some text, some more text and ' + ... 'some bold text') + >>> print html | Transformer('body/b').rename('strong') + Some text, some more text and some bold text + """ + return self.apply(RenameTransformation(name)) + + def trace(self, prefix='', fileobj=None): + """Print events as they pass through the transform. + + >>> html = HTML('Some test text') + >>> print html | Transformer('em').trace() + (None, ('START', (QName(u'body'), Attrs()), (None, 1, 0))) + (None, ('TEXT', u'Some ', (None, 1, 6))) + ('ENTER', ('START', (QName(u'em'), Attrs()), (None, 1, 11))) + ('INSIDE', ('TEXT', u'test', (None, 1, 15))) + ('EXIT', ('END', QName(u'em'), (None, 1, 19))) + (None, ('TEXT', u' text', (None, 1, 24))) + (None, ('END', QName(u'body'), (None, 1, 29))) + Some test text + + :param prefix: a string to prefix each event with in the output + :param fileobj: the writable file-like object to write to; defaults to + the standard output stream + :rtype: `Transformer` + """ + return self.apply(TraceTransformation(prefix, fileobj=fileobj)) + + # Internal methods + + def _mark(self, stream): + for event in stream: + yield OUTSIDE, event + + def _unmark(self, stream): + for mark, event in stream: + kind = event[0] + if not (kind is None or kind is ATTR or kind is BREAK): + yield event + + +class SelectTransformation(object): + """Select and mark events that match an XPath expression.""" + + def __init__(self, path): + """Create selection. + + :param path: an XPath expression (as string) or a `Path` object + """ + if not isinstance(path, Path): + path = Path(path) + self.path = path + + def __call__(self, stream): + """Apply the transform filter to the marked stream. + + :param stream: the marked event stream to filter + """ + namespaces = {} + variables = {} + test = self.path.test() + stream = iter(stream) + for mark, event in stream: + if mark is None: + yield mark, event + continue + result = test(event, {}, {}) + # XXX This is effectively genshi.core._ensure() for transform + # streams. + if result is True: + if event[0] is START: + yield ENTER, event + depth = 1 + while depth > 0: + mark, subevent = stream.next() + if subevent[0] is START: + depth += 1 + elif subevent[0] is END: + depth -= 1 + if depth == 0: + yield EXIT, subevent + else: + yield INSIDE, subevent + test(subevent, {}, {}, updateonly=True) + else: + yield OUTSIDE, event + elif isinstance(result, Attrs): + # XXX Selected *attributes* are given a "kind" of None to + # indicate they are not really part of the stream. + yield ATTR, (ATTR, (QName(event[1][0] + '@*'), result), event[2]) + yield None, event + elif isinstance(result, tuple): + yield OUTSIDE, result + elif result: + # XXX Assume everything else is "text"? + yield None, (TEXT, unicode(result), (None, -1, -1)) + else: + yield None, event + + +class InvertTransformation(object): + """Invert selection so that marked events become unmarked, and vice versa. + + Specificaly, all input marks are converted to null marks, and all input + null marks are converted to OUTSIDE marks. + """ + + def __call__(self, stream): + """Apply the transform filter to the marked stream. + + :param stream: the marked event stream to filter + """ + for mark, event in stream: + if mark: + yield None, event + else: + yield OUTSIDE, event + + +class EndTransformation(object): + """End the current selection.""" + + def __call__(self, stream): + """Apply the transform filter to the marked stream. + + :param stream: the marked event stream to filter + """ + for mark, event in stream: + yield OUTSIDE, event + + +class EmptyTransformation(object): + """Empty selected elements of all content.""" + + def __call__(self, stream): + """Apply the transform filter to the marked stream. + + :param stream: the marked event stream to filter + """ + for mark, event in stream: + yield mark, event + if mark is ENTER: + for mark, event in stream: + if mark is EXIT: + yield mark, event + break + + +class RemoveTransformation(object): + """Remove selection from the stream.""" + + def __call__(self, stream): + """Apply the transform filter to the marked stream. + + :param stream: the marked event stream to filter + """ + for mark, event in stream: + if mark is None: + yield mark, event + + +class UnwrapTransformation(object): + """Remove outtermost enclosing elements from selection.""" + + def __call__(self, stream): + """Apply the transform filter to the marked stream. + + :param stream: the marked event stream to filter + """ + for mark, event in stream: + if mark not in (ENTER, EXIT): + yield mark, event + + +class WrapTransformation(object): + """Wrap selection in an element.""" + + def __init__(self, element): + if isinstance(element, Element): + self.element = element + else: + self.element = Element(element) + + def __call__(self, stream): + for mark, event in stream: + if mark: + element = list(self.element.generate()) + for prefix in element[:-1]: + yield None, prefix + yield mark, event + start = mark + stopped = False + for mark, event in stream: + if start is ENTER and mark is EXIT: + yield mark, event + stopped = True + break + if not mark: + break + yield mark, event + else: + stopped = True + yield None, element[-1] + if not stopped: + yield mark, event + else: + yield mark, event + + +class TraceTransformation(object): + """Print events as they pass through the transform.""" + + def __init__(self, prefix='', fileobj=None): + """Trace constructor. + + :param prefix: text to prefix each traced line with. + :param fileobj: the writable file-like object to write to + """ + self.prefix = prefix + self.fileobj = fileobj or sys.stdout + + def __call__(self, stream): + """Apply the transform filter to the marked stream. + + :param stream: the marked event stream to filter + """ + for event in stream: + print>>self.fileobj, self.prefix + str(event) + yield event + + +class FilterTransformation(object): + """Apply a normal stream filter to the selection. The filter is called once + for each selection.""" + + def __init__(self, filter): + """Create the transform. + + :param filter: The stream filter to apply. + """ + self.filter = filter + + def __call__(self, stream): + """Apply the transform filter to the marked stream. + + :param stream: The marked event stream to filter + """ + def flush(queue): + if queue: + for event in self.filter(queue): + yield OUTSIDE, event + del queue[:] + + queue = [] + for mark, event in stream: + if mark is ENTER: + queue.append(event) + for mark, event in stream: + queue.append(event) + if mark is EXIT: + break + for queue_event in flush(queue): + yield queue_event + elif mark is OUTSIDE: + stopped = True + queue.append(event) + for mark, event in stream: + if mark is not OUTSIDE: + break + queue.append(event) + else: + stopped = True + for queue_event in flush(queue): + yield queue_event + if not stopped: + yield None, event + else: + yield mark, event + for queue_event in flush(queue): + yield queue_event + + +class MapTransformation(object): + """Apply a function to the `data` element of events of ``kind`` in the + selection. + """ + + def __init__(self, function, kind): + """Create the transform. + + :param function: the function to apply; the function must take one + argument, the `data` element of each selected event + :param kind: the stream event ``kind`` to apply the `function` to + """ + self.function = function + self.kind = kind + + def __call__(self, stream): + """Apply the transform filter to the marked stream. + + :param stream: The marked event stream to filter + """ + for mark, (kind, data, pos) in stream: + if mark and self.kind in (None, kind): + yield mark, (kind, self.function(data), pos) + else: + yield mark, (kind, data, pos) + + +class SubstituteTransformation(object): + """Replace text matching a regular expression. + + Refer to the documentation for ``re.sub()`` for details. + """ + def __init__(self, pattern, replace, count=0): + """Create the transform. + + :param pattern: A regular expression object, or string. + :param replace: Replacement pattern. + :param count: Number of replacements to make in each text fragment. + """ + if isinstance(pattern, basestring): + self.pattern = re.compile(pattern) + else: + self.pattern = pattern + self.count = count + self.replace = replace + + def __call__(self, stream): + """Apply the transform filter to the marked stream. + + :param stream: The marked event stream to filter + """ + for mark, (kind, data, pos) in stream: + if mark is not None and kind is TEXT: + new_data = self.pattern.sub(self.replace, data, self.count) + if isinstance(data, Markup): + data = Markup(new_data) + else: + data = new_data + yield mark, (kind, data, pos) + + +class RenameTransformation(object): + """Rename matching elements.""" + def __init__(self, name): + """Create the transform. + + :param name: New element name. + """ + self.name = QName(name) + + def __call__(self, stream): + """Apply the transform filter to the marked stream. + + :param stream: The marked event stream to filter + """ + for mark, (kind, data, pos) in stream: + if mark is ENTER: + data = self.name, data[1] + elif mark is EXIT: + data = self.name + yield mark, (kind, data, pos) + + +class InjectorTransformation(object): + """Abstract base class for transformations that inject content into a + stream. + + >>> class Top(InjectorTransformation): + ... def __call__(self, stream): + ... for event in self._inject(): + ... yield event + ... for event in stream: + ... yield event + >>> html = HTML('Some test text') + >>> print html | Transformer('.//em').apply(Top('Prefix ')) + Prefix Some test text + """ + def __init__(self, content): + """Create a new injector. + + :param content: An iterable of Genshi stream events, or a string to be + injected. + """ + self.content = content + + def _inject(self): + content = self.content + if callable(content): + content = content() + for event in _ensure(content): + yield None, event + + +class ReplaceTransformation(InjectorTransformation): + """Replace selection with content.""" + + def __call__(self, stream): + """Apply the transform filter to the marked stream. + + :param stream: The marked event stream to filter + """ + stream = PushBackStream(stream) + for mark, event in stream: + if mark is not None: + start = mark + for subevent in self._inject(): + yield subevent + for mark, event in stream: + if start is ENTER: + if mark is EXIT: + break + elif mark != start: + stream.push((mark, event)) + break + else: + yield mark, event + + +class BeforeTransformation(InjectorTransformation): + """Insert content before selection.""" + + def __call__(self, stream): + """Apply the transform filter to the marked stream. + + :param stream: The marked event stream to filter + """ + stream = PushBackStream(stream) + for mark, event in stream: + if mark is not None: + start = mark + for subevent in self._inject(): + yield subevent + yield mark, event + for mark, event in stream: + if mark != start and start is not ENTER: + stream.push((mark, event)) + break + yield mark, event + if start is ENTER and mark is EXIT: + break + else: + yield mark, event + + +class AfterTransformation(InjectorTransformation): + """Insert content after selection.""" + + def __call__(self, stream): + """Apply the transform filter to the marked stream. + + :param stream: The marked event stream to filter + """ + stream = PushBackStream(stream) + for mark, event in stream: + yield mark, event + if mark: + start = mark + for mark, event in stream: + if start is not ENTER and mark != start: + stream.push((mark, event)) + break + yield mark, event + if start is ENTER and mark is EXIT: + break + for subevent in self._inject(): + yield subevent + + +class PrependTransformation(InjectorTransformation): + """Prepend content to the inside of selected elements.""" + + def __call__(self, stream): + """Apply the transform filter to the marked stream. + + :param stream: The marked event stream to filter + """ + for mark, event in stream: + yield mark, event + if mark is ENTER: + for subevent in self._inject(): + yield subevent + + +class AppendTransformation(InjectorTransformation): + """Append content after the content of selected elements.""" + + def __call__(self, stream): + """Apply the transform filter to the marked stream. + + :param stream: The marked event stream to filter + """ + for mark, event in stream: + yield mark, event + if mark is ENTER: + for mark, event in stream: + if mark is EXIT: + break + yield mark, event + for subevent in self._inject(): + yield subevent + yield mark, event + + +class AttrTransformation(object): + """Set an attribute on selected elements.""" + + def __init__(self, name, value): + """Construct transform. + + :param name: name of the attribute that should be set + :param value: the value to set + """ + self.name = name + self.value = value + + def __call__(self, stream): + """Apply the transform filter to the marked stream. + + :param stream: The marked event stream to filter + """ + callable_value = callable(self.value) + for mark, (kind, data, pos) in stream: + if mark is ENTER: + if callable_value: + value = self.value(self.name, (kind, data, pos)) + else: + value = self.value + if value is None: + attrs = data[1] - [QName(self.name)] + else: + attrs = data[1] | [(QName(self.name), value)] + data = (data[0], attrs) + yield mark, (kind, data, pos) + + + +class StreamBuffer(Stream): + """Stream event buffer used for cut and copy transformations.""" + + def __init__(self): + """Create the buffer.""" + Stream.__init__(self, []) + + def append(self, event): + """Add an event to the buffer. + + :param event: the markup event to add + """ + self.events.append(event) + + def reset(self): + """Empty the buffer of events.""" + del self.events[:] + + +class CopyTransformation(object): + """Copy selected events into a buffer for later insertion.""" + + def __init__(self, buffer, accumulate=False): + """Create the copy transformation. + + :param buffer: the `StreamBuffer` in which the selection should be + stored + """ + if not accumulate: + buffer.reset() + self.buffer = buffer + self.accumulate = accumulate + + def __call__(self, stream): + """Apply the transformation to the marked stream. + + :param stream: the marked event stream to filter + """ + stream = PushBackStream(stream) + + for mark, event in stream: + if mark: + if not self.accumulate: + self.buffer.reset() + events = [(mark, event)] + self.buffer.append(event) + start = mark + for mark, event in stream: + if start is not ENTER and mark != start: + stream.push((mark, event)) + break + events.append((mark, event)) + self.buffer.append(event) + if start is ENTER and mark is EXIT: + break + for i in events: + yield i + else: + yield mark, event + + +class CutTransformation(object): + """Cut selected events into a buffer for later insertion and remove the + selection. + """ + + def __init__(self, buffer, accumulate=False): + """Create the cut transformation. + + :param buffer: the `StreamBuffer` in which the selection should be + stored + """ + self.buffer = buffer + self.accumulate = accumulate + + + def __call__(self, stream): + """Apply the transform filter to the marked stream. + + :param stream: the marked event stream to filter + """ + attributes = [] + stream = PushBackStream(stream) + broken = False + if not self.accumulate: + self.buffer.reset() + for mark, event in stream: + if mark: + # Send a BREAK event if there was no other event sent between + if not self.accumulate: + if not broken and self.buffer: + yield BREAK, (BREAK, None, None) + self.buffer.reset() + self.buffer.append(event) + start = mark + if mark is ATTR: + attributes.extend([name for name, _ in event[1][1]]) + for mark, event in stream: + if start is mark is ATTR: + attributes.extend([name for name, _ in event[1][1]]) + # Handle non-element contiguous selection + if start is not ENTER and mark != start: + # Operating on the attributes of a START event + if start is ATTR: + kind, data, pos = event + assert kind is START + data = (data[0], data[1] - attributes) + attributes = None + stream.push((mark, (kind, data, pos))) + else: + stream.push((mark, event)) + break + self.buffer.append(event) + if start is ENTER and mark is EXIT: + break + broken = False + else: + broken = True + yield mark, event + if not broken and self.buffer: + yield BREAK, (BREAK, None, None) diff --git a/src/calibre/utils/genshi/input.py b/src/calibre/utils/genshi/input.py new file mode 100644 index 0000000000..32ad50f690 --- /dev/null +++ b/src/calibre/utils/genshi/input.py @@ -0,0 +1,449 @@ +# -*- coding: utf-8 -*- +# +# Copyright (C) 2006-2007 Edgewall Software +# All rights reserved. +# +# This software is licensed as described in the file COPYING, which +# you should have received as part of this distribution. The terms +# are also available at http://genshi.edgewall.org/wiki/License. +# +# This software consists of voluntary contributions made by many +# individuals. For the exact contribution history, see the revision +# history and logs, available at http://genshi.edgewall.org/log/. + +"""Support for constructing markup streams from files, strings, or other +sources. +""" + +from itertools import chain +from xml.parsers import expat +try: + frozenset +except NameError: + from sets import ImmutableSet as frozenset +import HTMLParser as html +import htmlentitydefs +from StringIO import StringIO + +from calibre.utils.genshi.core import Attrs, QName, Stream, stripentities +from calibre.utils.genshi.core import START, END, XML_DECL, DOCTYPE, TEXT, START_NS, END_NS, \ + START_CDATA, END_CDATA, PI, COMMENT + +__all__ = ['ET', 'ParseError', 'XMLParser', 'XML', 'HTMLParser', 'HTML'] +__docformat__ = 'restructuredtext en' + +def ET(element): + """Convert a given ElementTree element to a markup stream. + + :param element: an ElementTree element + :return: a markup stream + """ + tag_name = QName(element.tag.lstrip('{')) + attrs = Attrs([(QName(attr.lstrip('{')), value) + for attr, value in element.items()]) + + yield START, (tag_name, attrs), (None, -1, -1) + if element.text: + yield TEXT, element.text, (None, -1, -1) + for child in element.getchildren(): + for item in ET(child): + yield item + yield END, tag_name, (None, -1, -1) + if element.tail: + yield TEXT, element.tail, (None, -1, -1) + + +class ParseError(Exception): + """Exception raised when fatal syntax errors are found in the input being + parsed. + """ + + def __init__(self, message, filename=None, lineno=-1, offset=-1): + """Exception initializer. + + :param message: the error message from the parser + :param filename: the path to the file that was parsed + :param lineno: the number of the line on which the error was encountered + :param offset: the column number where the error was encountered + """ + self.msg = message + if filename: + message += ', in ' + filename + Exception.__init__(self, message) + self.filename = filename or '' + self.lineno = lineno + self.offset = offset + + +class XMLParser(object): + """Generator-based XML parser based on roughly equivalent code in + Kid/ElementTree. + + The parsing is initiated by iterating over the parser object: + + >>> parser = XMLParser(StringIO('Foo')) + >>> for kind, data, pos in parser: + ... print kind, data + START (QName(u'root'), Attrs([(QName(u'id'), u'2')])) + START (QName(u'child'), Attrs()) + TEXT Foo + END child + END root + """ + + _entitydefs = ['' % (name, value) for name, value in + htmlentitydefs.name2codepoint.items()] + _external_dtd = '\n'.join(_entitydefs) + + def __init__(self, source, filename=None, encoding=None): + """Initialize the parser for the given XML input. + + :param source: the XML text as a file-like object + :param filename: the name of the file, if appropriate + :param encoding: the encoding of the file; if not specified, the + encoding is assumed to be ASCII, UTF-8, or UTF-16, or + whatever the encoding specified in the XML declaration + (if any) + """ + self.source = source + self.filename = filename + + # Setup the Expat parser + parser = expat.ParserCreate(encoding, '}') + parser.buffer_text = True + parser.returns_unicode = True + parser.ordered_attributes = True + + parser.StartElementHandler = self._handle_start + parser.EndElementHandler = self._handle_end + parser.CharacterDataHandler = self._handle_data + parser.StartDoctypeDeclHandler = self._handle_doctype + parser.StartNamespaceDeclHandler = self._handle_start_ns + parser.EndNamespaceDeclHandler = self._handle_end_ns + parser.StartCdataSectionHandler = self._handle_start_cdata + parser.EndCdataSectionHandler = self._handle_end_cdata + parser.ProcessingInstructionHandler = self._handle_pi + parser.XmlDeclHandler = self._handle_xml_decl + parser.CommentHandler = self._handle_comment + + # Tell Expat that we'll handle non-XML entities ourselves + # (in _handle_other) + parser.DefaultHandler = self._handle_other + parser.SetParamEntityParsing(expat.XML_PARAM_ENTITY_PARSING_ALWAYS) + parser.UseForeignDTD() + parser.ExternalEntityRefHandler = self._build_foreign + + # Location reporting is only support in Python >= 2.4 + if not hasattr(parser, 'CurrentLineNumber'): + self._getpos = self._getpos_unknown + + self.expat = parser + self._queue = [] + + def parse(self): + """Generator that parses the XML source, yielding markup events. + + :return: a markup event stream + :raises ParseError: if the XML text is not well formed + """ + def _generate(): + try: + bufsize = 4 * 1024 # 4K + done = False + while 1: + while not done and len(self._queue) == 0: + data = self.source.read(bufsize) + if data == '': # end of data + if hasattr(self, 'expat'): + self.expat.Parse('', True) + del self.expat # get rid of circular references + done = True + else: + if isinstance(data, unicode): + data = data.encode('utf-8') + self.expat.Parse(data, False) + for event in self._queue: + yield event + self._queue = [] + if done: + break + except expat.ExpatError, e: + msg = str(e) + raise ParseError(msg, self.filename, e.lineno, e.offset) + return Stream(_generate()).filter(_coalesce) + + def __iter__(self): + return iter(self.parse()) + + def _build_foreign(self, context, base, sysid, pubid): + parser = self.expat.ExternalEntityParserCreate(context) + parser.ParseFile(StringIO(self._external_dtd)) + return 1 + + def _enqueue(self, kind, data=None, pos=None): + if pos is None: + pos = self._getpos() + if kind is TEXT: + # Expat reports the *end* of the text event as current position. We + # try to fix that up here as much as possible. Unfortunately, the + # offset is only valid for single-line text. For multi-line text, + # it is apparently not possible to determine at what offset it + # started + if '\n' in data: + lines = data.splitlines() + lineno = pos[1] - len(lines) + 1 + offset = -1 + else: + lineno = pos[1] + offset = pos[2] - len(data) + pos = (pos[0], lineno, offset) + self._queue.append((kind, data, pos)) + + def _getpos_unknown(self): + return (self.filename, -1, -1) + + def _getpos(self): + return (self.filename, self.expat.CurrentLineNumber, + self.expat.CurrentColumnNumber) + + def _handle_start(self, tag, attrib): + attrs = Attrs([(QName(name), value) for name, value in + zip(*[iter(attrib)] * 2)]) + self._enqueue(START, (QName(tag), attrs)) + + def _handle_end(self, tag): + self._enqueue(END, QName(tag)) + + def _handle_data(self, text): + self._enqueue(TEXT, text) + + def _handle_xml_decl(self, version, encoding, standalone): + self._enqueue(XML_DECL, (version, encoding, standalone)) + + def _handle_doctype(self, name, sysid, pubid, has_internal_subset): + self._enqueue(DOCTYPE, (name, pubid, sysid)) + + def _handle_start_ns(self, prefix, uri): + self._enqueue(START_NS, (prefix or '', uri)) + + def _handle_end_ns(self, prefix): + self._enqueue(END_NS, prefix or '') + + def _handle_start_cdata(self): + self._enqueue(START_CDATA) + + def _handle_end_cdata(self): + self._enqueue(END_CDATA) + + def _handle_pi(self, target, data): + self._enqueue(PI, (target, data)) + + def _handle_comment(self, text): + self._enqueue(COMMENT, text) + + def _handle_other(self, text): + if text.startswith('&'): + # deal with undefined entities + try: + text = unichr(htmlentitydefs.name2codepoint[text[1:-1]]) + self._enqueue(TEXT, text) + except KeyError: + filename, lineno, offset = self._getpos() + error = expat.error('undefined entity "%s": line %d, column %d' + % (text, lineno, offset)) + error.code = expat.errors.XML_ERROR_UNDEFINED_ENTITY + error.lineno = lineno + error.offset = offset + raise error + + +def XML(text): + """Parse the given XML source and return a markup stream. + + Unlike with `XMLParser`, the returned stream is reusable, meaning it can be + iterated over multiple times: + + >>> xml = XML('FooBar') + >>> print xml + FooBar + >>> print xml.select('elem') + FooBar + >>> print xml.select('elem/text()') + FooBar + + :param text: the XML source + :return: the parsed XML event stream + :raises ParseError: if the XML text is not well-formed + """ + return Stream(list(XMLParser(StringIO(text)))) + + +class HTMLParser(html.HTMLParser, object): + """Parser for HTML input based on the Python `HTMLParser` module. + + This class provides the same interface for generating stream events as + `XMLParser`, and attempts to automatically balance tags. + + The parsing is initiated by iterating over the parser object: + + >>> parser = HTMLParser(StringIO('
          • Foo
          ')) + >>> for kind, data, pos in parser: + ... print kind, data + START (QName(u'ul'), Attrs([(QName(u'compact'), u'compact')])) + START (QName(u'li'), Attrs()) + TEXT Foo + END li + END ul + """ + + _EMPTY_ELEMS = frozenset(['area', 'base', 'basefont', 'br', 'col', 'frame', + 'hr', 'img', 'input', 'isindex', 'link', 'meta', + 'param']) + + def __init__(self, source, filename=None, encoding='utf-8'): + """Initialize the parser for the given HTML input. + + :param source: the HTML text as a file-like object + :param filename: the name of the file, if known + :param filename: encoding of the file; ignored if the input is unicode + """ + html.HTMLParser.__init__(self) + self.source = source + self.filename = filename + self.encoding = encoding + self._queue = [] + self._open_tags = [] + + def parse(self): + """Generator that parses the HTML source, yielding markup events. + + :return: a markup event stream + :raises ParseError: if the HTML text is not well formed + """ + def _generate(): + try: + bufsize = 4 * 1024 # 4K + done = False + while 1: + while not done and len(self._queue) == 0: + data = self.source.read(bufsize) + if data == '': # end of data + self.close() + done = True + else: + self.feed(data) + for kind, data, pos in self._queue: + yield kind, data, pos + self._queue = [] + if done: + open_tags = self._open_tags + open_tags.reverse() + for tag in open_tags: + yield END, QName(tag), pos + break + except html.HTMLParseError, e: + msg = '%s: line %d, column %d' % (e.msg, e.lineno, e.offset) + raise ParseError(msg, self.filename, e.lineno, e.offset) + return Stream(_generate()).filter(_coalesce) + + def __iter__(self): + return iter(self.parse()) + + def _enqueue(self, kind, data, pos=None): + if pos is None: + pos = self._getpos() + self._queue.append((kind, data, pos)) + + def _getpos(self): + lineno, column = self.getpos() + return (self.filename, lineno, column) + + def handle_starttag(self, tag, attrib): + fixed_attrib = [] + for name, value in attrib: # Fixup minimized attributes + if value is None: + value = unicode(name) + elif not isinstance(value, unicode): + value = value.decode(self.encoding, 'replace') + fixed_attrib.append((QName(name), stripentities(value))) + + self._enqueue(START, (QName(tag), Attrs(fixed_attrib))) + if tag in self._EMPTY_ELEMS: + self._enqueue(END, QName(tag)) + else: + self._open_tags.append(tag) + + def handle_endtag(self, tag): + if tag not in self._EMPTY_ELEMS: + while self._open_tags: + open_tag = self._open_tags.pop() + self._enqueue(END, QName(open_tag)) + if open_tag.lower() == tag.lower(): + break + + def handle_data(self, text): + if not isinstance(text, unicode): + text = text.decode(self.encoding, 'replace') + self._enqueue(TEXT, text) + + def handle_charref(self, name): + if name.lower().startswith('x'): + text = unichr(int(name[1:], 16)) + else: + text = unichr(int(name)) + self._enqueue(TEXT, text) + + def handle_entityref(self, name): + try: + text = unichr(htmlentitydefs.name2codepoint[name]) + except KeyError: + text = '&%s;' % name + self._enqueue(TEXT, text) + + def handle_pi(self, data): + target, data = data.split(None, 1) + if data.endswith('?'): + data = data[:-1] + self._enqueue(PI, (target.strip(), data.strip())) + + def handle_comment(self, text): + self._enqueue(COMMENT, text) + + +def HTML(text, encoding='utf-8'): + """Parse the given HTML source and return a markup stream. + + Unlike with `HTMLParser`, the returned stream is reusable, meaning it can be + iterated over multiple times: + + >>> html = HTML('

          Foo

          ') + >>> print html +

          Foo

          + >>> print html.select('h1') +

          Foo

          + >>> print html.select('h1/text()') + Foo + + :param text: the HTML source + :return: the parsed XML event stream + :raises ParseError: if the HTML text is not well-formed, and error recovery + fails + """ + return Stream(list(HTMLParser(StringIO(text), encoding=encoding))) + +def _coalesce(stream): + """Coalesces adjacent TEXT events into a single event.""" + textbuf = [] + textpos = None + for kind, data, pos in chain(stream, [(None, None, None)]): + if kind is TEXT: + textbuf.append(data) + if textpos is None: + textpos = pos + else: + if textbuf: + yield TEXT, u''.join(textbuf), textpos + del textbuf[:] + textpos = None + if kind: + yield kind, data, pos diff --git a/src/calibre/utils/genshi/output.py b/src/calibre/utils/genshi/output.py new file mode 100644 index 0000000000..d07d3f72b0 --- /dev/null +++ b/src/calibre/utils/genshi/output.py @@ -0,0 +1,765 @@ +# -*- coding: utf-8 -*- +# +# Copyright (C) 2006-2008 Edgewall Software +# All rights reserved. +# +# This software is licensed as described in the file COPYING, which +# you should have received as part of this distribution. The terms +# are also available at http://genshi.edgewall.org/wiki/License. +# +# This software consists of voluntary contributions made by many +# individuals. For the exact contribution history, see the revision +# history and logs, available at http://genshi.edgewall.org/log/. + +"""This module provides different kinds of serialization methods for XML event +streams. +""" + +from itertools import chain +try: + frozenset +except NameError: + from sets import ImmutableSet as frozenset +import re + +from calibre.utils.genshi.core import escape, Attrs, Markup, Namespace, QName, StreamEventKind +from calibre.utils.genshi.core import START, END, TEXT, XML_DECL, DOCTYPE, START_NS, END_NS, \ + START_CDATA, END_CDATA, PI, COMMENT, XML_NAMESPACE + +__all__ = ['encode', 'get_serializer', 'DocType', 'XMLSerializer', + 'XHTMLSerializer', 'HTMLSerializer', 'TextSerializer'] +__docformat__ = 'restructuredtext en' + +def encode(iterator, method='xml', encoding='utf-8', out=None): + """Encode serializer output into a string. + + :param iterator: the iterator returned from serializing a stream (basically + any iterator that yields unicode objects) + :param method: the serialization method; determines how characters not + representable in the specified encoding are treated + :param encoding: how the output string should be encoded; if set to `None`, + this method returns a `unicode` object + :param out: a file-like object that the output should be written to + instead of being returned as one big string; note that if + this is a file or socket (or similar), the `encoding` must + not be `None` (that is, the output must be encoded) + :return: a `str` or `unicode` object (depending on the `encoding` + parameter), or `None` if the `out` parameter is provided + + :since: version 0.4.1 + :note: Changed in 0.5: added the `out` parameter + """ + if encoding is not None: + errors = 'replace' + if method != 'text' and not isinstance(method, TextSerializer): + errors = 'xmlcharrefreplace' + _encode = lambda string: string.encode(encoding, errors) + else: + _encode = lambda string: string + if out is None: + return _encode(u''.join(list(iterator))) + for chunk in iterator: + out.write(_encode(chunk)) + +def get_serializer(method='xml', **kwargs): + """Return a serializer object for the given method. + + :param method: the serialization method; can be either "xml", "xhtml", + "html", "text", or a custom serializer class + + Any additional keyword arguments are passed to the serializer, and thus + depend on the `method` parameter value. + + :see: `XMLSerializer`, `XHTMLSerializer`, `HTMLSerializer`, `TextSerializer` + :since: version 0.4.1 + """ + if isinstance(method, basestring): + method = {'xml': XMLSerializer, + 'xhtml': XHTMLSerializer, + 'html': HTMLSerializer, + 'text': TextSerializer}[method.lower()] + return method(**kwargs) + + +class DocType(object): + """Defines a number of commonly used DOCTYPE declarations as constants.""" + + HTML_STRICT = ( + 'html', '-//W3C//DTD HTML 4.01//EN', + 'http://www.w3.org/TR/html4/strict.dtd' + ) + HTML_TRANSITIONAL = ( + 'html', '-//W3C//DTD HTML 4.01 Transitional//EN', + 'http://www.w3.org/TR/html4/loose.dtd' + ) + HTML_FRAMESET = ( + 'html', '-//W3C//DTD HTML 4.01 Frameset//EN', + 'http://www.w3.org/TR/html4/frameset.dtd' + ) + HTML = HTML_STRICT + + HTML5 = ('html', None, None) + + XHTML_STRICT = ( + 'html', '-//W3C//DTD XHTML 1.0 Strict//EN', + 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd' + ) + XHTML_TRANSITIONAL = ( + 'html', '-//W3C//DTD XHTML 1.0 Transitional//EN', + 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd' + ) + XHTML_FRAMESET = ( + 'html', '-//W3C//DTD XHTML 1.0 Frameset//EN', + 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd' + ) + XHTML = XHTML_STRICT + + XHTML11 = ( + 'html', '-//W3C//DTD XHTML 1.1//EN', + 'http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd' + ) + + SVG_FULL = ( + 'svg', '-//W3C//DTD SVG 1.1//EN', + 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd' + ) + SVG_BASIC = ( + 'svg', '-//W3C//DTD SVG Basic 1.1//EN', + 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-basic.dtd' + ) + SVG_TINY = ( + 'svg', '-//W3C//DTD SVG Tiny 1.1//EN', + 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd' + ) + SVG = SVG_FULL + + def get(cls, name): + """Return the ``(name, pubid, sysid)`` tuple of the ``DOCTYPE`` + declaration for the specified name. + + The following names are recognized in this version: + * "html" or "html-strict" for the HTML 4.01 strict DTD + * "html-transitional" for the HTML 4.01 transitional DTD + * "html-frameset" for the HTML 4.01 frameset DTD + * "html5" for the ``DOCTYPE`` proposed for HTML5 + * "xhtml" or "xhtml-strict" for the XHTML 1.0 strict DTD + * "xhtml-transitional" for the XHTML 1.0 transitional DTD + * "xhtml-frameset" for the XHTML 1.0 frameset DTD + * "xhtml11" for the XHTML 1.1 DTD + * "svg" or "svg-full" for the SVG 1.1 DTD + * "svg-basic" for the SVG Basic 1.1 DTD + * "svg-tiny" for the SVG Tiny 1.1 DTD + + :param name: the name of the ``DOCTYPE`` + :return: the ``(name, pubid, sysid)`` tuple for the requested + ``DOCTYPE``, or ``None`` if the name is not recognized + :since: version 0.4.1 + """ + return { + 'html': cls.HTML, 'html-strict': cls.HTML_STRICT, + 'html-transitional': DocType.HTML_TRANSITIONAL, + 'html-frameset': DocType.HTML_FRAMESET, + 'html5': cls.HTML5, + 'xhtml': cls.XHTML, 'xhtml-strict': cls.XHTML_STRICT, + 'xhtml-transitional': cls.XHTML_TRANSITIONAL, + 'xhtml-frameset': cls.XHTML_FRAMESET, + 'xhtml11': cls.XHTML11, + 'svg': cls.SVG, 'svg-full': cls.SVG_FULL, + 'svg-basic': cls.SVG_BASIC, + 'svg-tiny': cls.SVG_TINY + }.get(name.lower()) + get = classmethod(get) + + +class XMLSerializer(object): + """Produces XML text from an event stream. + + >>> from genshi.builder import tag + >>> elem = tag.div(tag.a(href='foo'), tag.br, tag.hr(noshade=True)) + >>> print ''.join(XMLSerializer()(elem.generate())) +


          + """ + + _PRESERVE_SPACE = frozenset() + + def __init__(self, doctype=None, strip_whitespace=True, + namespace_prefixes=None): + """Initialize the XML serializer. + + :param doctype: a ``(name, pubid, sysid)`` tuple that represents the + DOCTYPE declaration that should be included at the top + of the generated output, or the name of a DOCTYPE as + defined in `DocType.get` + :param strip_whitespace: whether extraneous whitespace should be + stripped from the output + :note: Changed in 0.4.2: The `doctype` parameter can now be a string. + """ + self.filters = [EmptyTagFilter()] + if strip_whitespace: + self.filters.append(WhitespaceFilter(self._PRESERVE_SPACE)) + self.filters.append(NamespaceFlattener(prefixes=namespace_prefixes)) + if doctype: + self.filters.append(DocTypeInserter(doctype)) + + def __call__(self, stream): + have_decl = have_doctype = False + in_cdata = False + + for filter_ in self.filters: + stream = filter_(stream) + for kind, data, pos in stream: + + if kind is START or kind is EMPTY: + tag, attrib = data + buf = ['<', tag] + for attr, value in attrib: + buf += [' ', attr, '="', escape(value), '"'] + buf.append(kind is EMPTY and '/>' or '>') + yield Markup(u''.join(buf)) + + elif kind is END: + yield Markup('' % data) + + elif kind is TEXT: + if in_cdata: + yield data + else: + yield escape(data, quotes=False) + + elif kind is COMMENT: + yield Markup('' % data) + + elif kind is XML_DECL and not have_decl: + version, encoding, standalone = data + buf = ['\n') + yield Markup(u''.join(buf)) + have_decl = True + + elif kind is DOCTYPE and not have_doctype: + name, pubid, sysid = data + buf = ['\n') + yield Markup(u''.join(buf)) % filter(None, data) + have_doctype = True + + elif kind is START_CDATA: + yield Markup('') + in_cdata = False + + elif kind is PI: + yield Markup('' % data) + + +class XHTMLSerializer(XMLSerializer): + """Produces XHTML text from an event stream. + + >>> from genshi.builder import tag + >>> elem = tag.div(tag.a(href='foo'), tag.br, tag.hr(noshade=True)) + >>> print ''.join(XHTMLSerializer()(elem.generate())) +


          + """ + + _EMPTY_ELEMS = frozenset(['area', 'base', 'basefont', 'br', 'col', 'frame', + 'hr', 'img', 'input', 'isindex', 'link', 'meta', + 'param']) + _BOOLEAN_ATTRS = frozenset(['selected', 'checked', 'compact', 'declare', + 'defer', 'disabled', 'ismap', 'multiple', + 'nohref', 'noresize', 'noshade', 'nowrap']) + _PRESERVE_SPACE = frozenset([ + QName('pre'), QName('http://www.w3.org/1999/xhtml}pre'), + QName('textarea'), QName('http://www.w3.org/1999/xhtml}textarea') + ]) + + def __init__(self, doctype=None, strip_whitespace=True, + namespace_prefixes=None, drop_xml_decl=True): + super(XHTMLSerializer, self).__init__(doctype, False) + self.filters = [EmptyTagFilter()] + if strip_whitespace: + self.filters.append(WhitespaceFilter(self._PRESERVE_SPACE)) + namespace_prefixes = namespace_prefixes or {} + namespace_prefixes['http://www.w3.org/1999/xhtml'] = '' + self.filters.append(NamespaceFlattener(prefixes=namespace_prefixes)) + if doctype: + self.filters.append(DocTypeInserter(doctype)) + self.drop_xml_decl = drop_xml_decl + + def __call__(self, stream): + boolean_attrs = self._BOOLEAN_ATTRS + empty_elems = self._EMPTY_ELEMS + drop_xml_decl = self.drop_xml_decl + have_decl = have_doctype = False + in_cdata = False + + for filter_ in self.filters: + stream = filter_(stream) + for kind, data, pos in stream: + + if kind is START or kind is EMPTY: + tag, attrib = data + buf = ['<', tag] + for attr, value in attrib: + if attr in boolean_attrs: + value = attr + elif attr == u'xml:lang' and u'lang' not in attrib: + buf += [' lang="', escape(value), '"'] + elif attr == u'xml:space': + continue + buf += [' ', attr, '="', escape(value), '"'] + if kind is EMPTY: + if tag in empty_elems: + buf.append(' />') + else: + buf.append('>' % tag) + else: + buf.append('>') + yield Markup(u''.join(buf)) + + elif kind is END: + yield Markup('' % data) + + elif kind is TEXT: + if in_cdata: + yield data + else: + yield escape(data, quotes=False) + + elif kind is COMMENT: + yield Markup('' % data) + + elif kind is DOCTYPE and not have_doctype: + name, pubid, sysid = data + buf = ['\n') + yield Markup(u''.join(buf)) % filter(None, data) + have_doctype = True + + elif kind is XML_DECL and not have_decl and not drop_xml_decl: + version, encoding, standalone = data + buf = ['\n') + yield Markup(u''.join(buf)) + have_decl = True + + elif kind is START_CDATA: + yield Markup('') + in_cdata = False + + elif kind is PI: + yield Markup('' % data) + + +class HTMLSerializer(XHTMLSerializer): + """Produces HTML text from an event stream. + + >>> from genshi.builder import tag + >>> elem = tag.div(tag.a(href='foo'), tag.br, tag.hr(noshade=True)) + >>> print ''.join(HTMLSerializer()(elem.generate())) +


          + """ + + _NOESCAPE_ELEMS = frozenset([ + QName('script'), QName('http://www.w3.org/1999/xhtml}script'), + QName('style'), QName('http://www.w3.org/1999/xhtml}style') + ]) + + def __init__(self, doctype=None, strip_whitespace=True): + """Initialize the HTML serializer. + + :param doctype: a ``(name, pubid, sysid)`` tuple that represents the + DOCTYPE declaration that should be included at the top + of the generated output + :param strip_whitespace: whether extraneous whitespace should be + stripped from the output + """ + super(HTMLSerializer, self).__init__(doctype, False) + self.filters = [EmptyTagFilter()] + if strip_whitespace: + self.filters.append(WhitespaceFilter(self._PRESERVE_SPACE, + self._NOESCAPE_ELEMS)) + self.filters.append(NamespaceFlattener(prefixes={ + 'http://www.w3.org/1999/xhtml': '' + })) + if doctype: + self.filters.append(DocTypeInserter(doctype)) + + def __call__(self, stream): + boolean_attrs = self._BOOLEAN_ATTRS + empty_elems = self._EMPTY_ELEMS + noescape_elems = self._NOESCAPE_ELEMS + have_doctype = False + noescape = False + + for filter_ in self.filters: + stream = filter_(stream) + for kind, data, pos in stream: + + if kind is START or kind is EMPTY: + tag, attrib = data + buf = ['<', tag] + for attr, value in attrib: + if attr in boolean_attrs: + if value: + buf += [' ', attr] + elif ':' in attr: + if attr == 'xml:lang' and u'lang' not in attrib: + buf += [' lang="', escape(value), '"'] + elif attr != 'xmlns': + buf += [' ', attr, '="', escape(value), '"'] + buf.append('>') + if kind is EMPTY: + if tag not in empty_elems: + buf.append('' % tag) + yield Markup(u''.join(buf)) + if tag in noescape_elems: + noescape = True + + elif kind is END: + yield Markup('' % data) + noescape = False + + elif kind is TEXT: + if noescape: + yield data + else: + yield escape(data, quotes=False) + + elif kind is COMMENT: + yield Markup('' % data) + + elif kind is DOCTYPE and not have_doctype: + name, pubid, sysid = data + buf = ['\n') + yield Markup(u''.join(buf)) % filter(None, data) + have_doctype = True + + elif kind is PI: + yield Markup('' % data) + + +class TextSerializer(object): + """Produces plain text from an event stream. + + Only text events are included in the output. Unlike the other serializer, + special XML characters are not escaped: + + >>> from genshi.builder import tag + >>> elem = tag.div(tag.a('', href='foo'), tag.br) + >>> print elem + + >>> print ''.join(TextSerializer()(elem.generate())) + + + If text events contain literal markup (instances of the `Markup` class), + that markup is by default passed through unchanged: + + >>> elem = tag.div(Markup('Hello & Bye!
          ')) + >>> print elem.generate().render(TextSerializer) + Hello & Bye!
          + + You can use the ``strip_markup`` to change this behavior, so that tags and + entities are stripped from the output (or in the case of entities, + replaced with the equivalent character): + + >>> print elem.generate().render(TextSerializer, strip_markup=True) + Hello & Bye! + """ + + def __init__(self, strip_markup=False): + """Create the serializer. + + :param strip_markup: whether markup (tags and encoded characters) found + in the text should be removed + """ + self.strip_markup = strip_markup + + def __call__(self, stream): + strip_markup = self.strip_markup + for event in stream: + if event[0] is TEXT: + data = event[1] + if strip_markup and type(data) is Markup: + data = data.striptags().stripentities() + yield unicode(data) + + +class EmptyTagFilter(object): + """Combines `START` and `STOP` events into `EMPTY` events for elements that + have no contents. + """ + + EMPTY = StreamEventKind('EMPTY') + + def __call__(self, stream): + prev = (None, None, None) + for ev in stream: + if prev[0] is START: + if ev[0] is END: + prev = EMPTY, prev[1], prev[2] + yield prev + continue + else: + yield prev + if ev[0] is not START: + yield ev + prev = ev + + +EMPTY = EmptyTagFilter.EMPTY + + +class NamespaceFlattener(object): + r"""Output stream filter that removes namespace information from the stream, + instead adding namespace attributes and prefixes as needed. + + :param prefixes: optional mapping of namespace URIs to prefixes + + >>> from genshi.input import XML + >>> xml = XML(''' + ... + ... ''') + >>> for kind, data, pos in NamespaceFlattener()(xml): + ... print kind, repr(data) + START (u'doc', Attrs([(u'xmlns', u'NS1'), (u'xmlns:two', u'NS2')])) + TEXT u'\n ' + START (u'two:item', Attrs()) + END u'two:item' + TEXT u'\n' + END u'doc' + """ + + def __init__(self, prefixes=None): + self.prefixes = {XML_NAMESPACE.uri: 'xml'} + if prefixes is not None: + self.prefixes.update(prefixes) + + def __call__(self, stream): + prefixes = dict([(v, [k]) for k, v in self.prefixes.items()]) + namespaces = {XML_NAMESPACE.uri: ['xml']} + def _push_ns(prefix, uri): + namespaces.setdefault(uri, []).append(prefix) + prefixes.setdefault(prefix, []).append(uri) + + ns_attrs = [] + _push_ns_attr = ns_attrs.append + def _make_ns_attr(prefix, uri): + return u'xmlns%s' % (prefix and ':%s' % prefix or ''), uri + + def _gen_prefix(): + val = 0 + while 1: + val += 1 + yield 'ns%d' % val + _gen_prefix = _gen_prefix().next + + for kind, data, pos in stream: + + if kind is START or kind is EMPTY: + tag, attrs = data + + tagname = tag.localname + tagns = tag.namespace + if tagns: + if tagns in namespaces: + prefix = namespaces[tagns][-1] + if prefix: + tagname = u'%s:%s' % (prefix, tagname) + else: + _push_ns_attr((u'xmlns', tagns)) + _push_ns('', tagns) + + new_attrs = [] + for attr, value in attrs: + attrname = attr.localname + attrns = attr.namespace + if attrns: + if attrns not in namespaces: + prefix = _gen_prefix() + _push_ns(prefix, attrns) + _push_ns_attr(('xmlns:%s' % prefix, attrns)) + else: + prefix = namespaces[attrns][-1] + if prefix: + attrname = u'%s:%s' % (prefix, attrname) + new_attrs.append((attrname, value)) + + yield kind, (tagname, Attrs(ns_attrs + new_attrs)), pos + del ns_attrs[:] + + elif kind is END: + tagname = data.localname + tagns = data.namespace + if tagns: + prefix = namespaces[tagns][-1] + if prefix: + tagname = u'%s:%s' % (prefix, tagname) + yield kind, tagname, pos + + elif kind is START_NS: + prefix, uri = data + if uri not in namespaces: + prefix = prefixes.get(uri, [prefix])[-1] + _push_ns_attr(_make_ns_attr(prefix, uri)) + _push_ns(prefix, uri) + + elif kind is END_NS: + if data in prefixes: + uris = prefixes.get(data) + uri = uris.pop() + if not uris: + del prefixes[data] + if uri not in uris or uri != uris[-1]: + uri_prefixes = namespaces[uri] + uri_prefixes.pop() + if not uri_prefixes: + del namespaces[uri] + if ns_attrs: + attr = _make_ns_attr(data, uri) + if attr in ns_attrs: + ns_attrs.remove(attr) + + else: + yield kind, data, pos + + +class WhitespaceFilter(object): + """A filter that removes extraneous ignorable white space from the + stream. + """ + + def __init__(self, preserve=None, noescape=None): + """Initialize the filter. + + :param preserve: a set or sequence of tag names for which white-space + should be preserved + :param noescape: a set or sequence of tag names for which text content + should not be escaped + + The `noescape` set is expected to refer to elements that cannot contain + further child elements (such as ``