From ac6594b79e93707959cb6cc1b999c02aeb745ee1 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Sun, 10 Jul 2011 11:41:15 -0600 Subject: [PATCH] Switch to using xgettext to generate .pot file --- setup/pygettext.py | 646 ---------------------- setup/translations.py | 60 ++- src/calibre/translations/calibre.pot | 768 ++++++++++++++------------- 3 files changed, 440 insertions(+), 1034 deletions(-) delete mode 100644 setup/pygettext.py diff --git a/setup/pygettext.py b/setup/pygettext.py deleted file mode 100644 index 882dab05e6..0000000000 --- a/setup/pygettext.py +++ /dev/null @@ -1,646 +0,0 @@ -#! /usr/bin/env python -# Originally written by Barry Warsaw -# -# Minimally patched to make it even more xgettext compatible -# by Peter Funk -# -# 2002-11-22 Jrgen Hermann -# Added checks that _() only contains string literals, and -# command line args are resolved to module lists, i.e. you -# can now pass a filename, a module or package name, or a -# directory (including globbing chars, important for Win32). -# Made docstring fit in 80 chars wide displays using pydoc. -# - -__doc__ = """pygettext -- Python equivalent of xgettext(1) - -Many systems (Solaris, Linux, Gnu) provide extensive tools that ease the -internationalization of C programs. Most of these tools are independent of -the programming language and can be used from within Python programs. -Martin von Loewis' work[1] helps considerably in this regard. - -There's one problem though; xgettext is the program that scans source code -looking for message strings, but it groks only C (or C++). Python -introduces a few wrinkles, such as dual quoting characters, triple quoted -strings, and raw strings. xgettext understands none of this. - -Enter pygettext, which uses Python's standard tokenize module to scan -Python source code, generating .pot files identical to what GNU xgettext[2] -generates for C and C++ code. From there, the standard GNU tools can be -used. - -A word about marking Python strings as candidates for translation. GNU -xgettext recognizes the following keywords: gettext, dgettext, dcgettext, -and gettext_noop. But those can be a lot of text to include all over your -code. C and C++ have a trick: they use the C preprocessor. Most -internationalized C source includes a #define for gettext() to _() so that -what has to be written in the source is much less. Thus these are both -translatable strings: - - gettext("Translatable String") - _("Translatable String") - -Python of course has no preprocessor so this doesn't work so well. Thus, -pygettext searches only for _() by default, but see the -k/--keyword flag -below for how to augment this. - - [1] http://www.python.org/workshops/1997-10/proceedings/loewis.html - [2] http://www.gnu.org/software/gettext/gettext.html - -NOTE: pygettext attempts to be option and feature compatible with GNU -xgettext where ever possible. However some options are still missing or are -not fully implemented. Also, xgettext's use of command line switches with -option arguments is broken, and in these cases, pygettext just defines -additional switches. - -Usage: pygettext [options] inputfile ... - -Options: - - -a - --extract-all - Extract all strings. - - -d name - --default-domain=name - Rename the default output file from messages.pot to name.pot. - - -E - --escape - Replace non-ASCII characters with octal escape sequences. - - -D - --docstrings - Extract module, class, method, and function docstrings. These do - not need to be wrapped in _() markers, and in fact cannot be for - Python to consider them docstrings. (See also the -X option). - - -h - --help - Print this help message and exit. - - -k word - --keyword=word - Keywords to look for in addition to the default set, which are: - %(DEFAULTKEYWORDS)s - - You can have multiple -k flags on the command line. - - -K - --no-default-keywords - Disable the default set of keywords (see above). Any keywords - explicitly added with the -k/--keyword option are still recognized. - - --no-location - Do not write filename/lineno location comments. - - -n - --add-location - Write filename/lineno location comments indicating where each - extracted string is found in the source. These lines appear before - each msgid. The style of comments is controlled by the -S/--style - option. This is the default. - - -o filename - --output=filename - Rename the default output file from messages.pot to filename. If - filename is `-' then the output is sent to standard out. - - -p dir - --output-dir=dir - Output files will be placed in directory dir. - - -S stylename - --style stylename - Specify which style to use for location comments. Two styles are - supported: - - Solaris # File: filename, line: line-number - GNU #: filename:line - - The style name is case insensitive. GNU style is the default. - - -v - --verbose - Print the names of the files being processed. - - -V - --version - Print the version of pygettext and exit. - - -w columns - --width=columns - Set width of output to columns. - - -x filename - --exclude-file=filename - Specify a file that contains a list of strings that are not be - extracted from the input files. Each string to be excluded must - appear on a line by itself in the file. - - -X filename - --no-docstrings=filename - Specify a file that contains a list of files (one per line) that - should not have their docstrings extracted. This is only useful in - conjunction with the -D option above. - -If `inputfile' is -, standard input is read. -""" - -import os -import imp -import sys -import glob -import time -import getopt -import token -import tokenize -import operator - -__version__ = '1.5' - -default_keywords = ['_'] -DEFAULTKEYWORDS = ', '.join(default_keywords) - -EMPTYSTRING = '' - -from setup import __appname__, __version__ as version - -# The normal pot-file header. msgmerge and Emacs's po-mode work better if it's -# there. -pot_header = '''\ -# Translation template file.. -# Copyright (C) %(year)s Kovid Goyal -# Kovid Goyal , %(year)s. -# -msgid "" -msgstr "" -"Project-Id-Version: %(appname)s %(version)s\\n" -"POT-Creation-Date: %%(time)s\\n" -"PO-Revision-Date: %%(time)s\\n" -"Last-Translator: Automatically generated\\n" -"Language-Team: LANGUAGE\\n" -"MIME-Version: 1.0\\n" -"Content-Type: text/plain; charset=UTF-8\\n" -"Content-Transfer-Encoding: 8bit\\n" -"Generated-By: pygettext.py %%(version)s\\n" - -'''%dict(appname=__appname__, version=version, year=time.strftime('%Y')) - -def usage(code, msg=''): - print >> sys.stderr, __doc__ % globals() - if msg: - print >> sys.stderr, msg - sys.exit(code) - - - -escapes = [] - -def make_escapes(pass_iso8859): - global escapes - if pass_iso8859: - # Allow iso-8859 characters to pass through so that e.g. 'msgid - # would result not result in 'msgid "H\366he"'. Otherwise we - # escape any character outside the 32..126 range. - mod = 128 - else: - mod = 256 - for i in range(256): - if 32 <= (i % mod) <= 126: - escapes.append(chr(i)) - else: - escapes.append("\\%03o" % i) - escapes[ord('\\')] = '\\\\' - escapes[ord('\t')] = '\\t' - escapes[ord('\r')] = '\\r' - escapes[ord('\n')] = '\\n' - escapes[ord('\"')] = '\\"' - - -def escape(s): - global escapes - s = list(s) - for i in range(len(s)): - s[i] = escapes[ord(s[i])] - return EMPTYSTRING.join(s) - - -def safe_eval(s): - # unwrap quotes, safely - return eval(s, {'__builtins__':{}}, {}) - - -def normalize(s): - # This converts the various Python string types into a format that is - # appropriate for .po files, namely much closer to C style. - lines = s.split('\n') - if len(lines) == 1: - s = '"' + escape(s) + '"' - else: - if not lines[-1]: - del lines[-1] - lines[-1] = lines[-1] + '\n' - for i in range(len(lines)): - lines[i] = escape(lines[i]) - lineterm = '\\n"\n"' - s = '""\n"' + lineterm.join(lines) + '"' - return s - - -def containsAny(str, set): - """Check whether 'str' contains ANY of the chars in 'set'""" - return 1 in [c in str for c in set] - - -def _visit_pyfiles(list, dirname, names): - """Helper for getFilesForName().""" - # get extension for python source files - if not globals().has_key('_py_ext'): - global _py_ext - _py_ext = [triple[0] for triple in imp.get_suffixes() - if triple[2] == imp.PY_SOURCE][0] - - # don't recurse into CVS directories - if 'CVS' in names: - names.remove('CVS') - - # add all *.py files to list - list.extend( - [os.path.join(dirname, file) for file in names - if os.path.splitext(file)[1] == _py_ext] - ) - - -def _get_modpkg_path(dotted_name, pathlist=None): - """Get the filesystem path for a module or a package. - - Return the file system path to a file for a module, and to a directory for - a package. Return None if the name is not found, or is a builtin or - extension module. - """ - # split off top-most name - parts = dotted_name.split('.', 1) - - if len(parts) > 1: - # we have a dotted path, import top-level package - try: - file, pathname, description = imp.find_module(parts[0], pathlist) - if file: file.close() - except ImportError: - return None - - # check if it's indeed a package - if description[2] == imp.PKG_DIRECTORY: - # recursively handle the remaining name parts - pathname = _get_modpkg_path(parts[1], [pathname]) - else: - pathname = None - else: - # plain name - try: - file, pathname, description = imp.find_module( - dotted_name, pathlist) - if file: - file.close() - if description[2] not in [imp.PY_SOURCE, imp.PKG_DIRECTORY]: - pathname = None - except ImportError: - pathname = None - - return pathname - - -def getFilesForName(name): - """Get a list of module files for a filename, a module or package name, - or a directory. - """ - if not os.path.exists(name): - # check for glob chars - if containsAny(name, "*?[]"): - files = glob.glob(name) - list = [] - for file in files: - list.extend(getFilesForName(file)) - return list - - # try to find module or package - name = _get_modpkg_path(name) - if not name: - return [] - - if os.path.isdir(name): - # find all python files in directory - list = [] - os.path.walk(name, _visit_pyfiles, list) - return list - elif os.path.exists(name): - # a single file - return [name] - - return [] - - -class TokenEater: - def __init__(self, options): - self.__options = options - self.__messages = {} - self.__state = self.__waiting - self.__data = [] - self.__lineno = -1 - self.__freshmodule = 1 - self.__curfile = None - - def __call__(self, ttype, tstring, stup, etup, line): - # dispatch -## import token -## print >> sys.stderr, 'ttype:', token.tok_name[ttype], \ -## 'tstring:', tstring - self.__state(ttype, tstring, stup[0]) - - def __waiting(self, ttype, tstring, lineno): - opts = self.__options - # Do docstring extractions, if enabled - if opts.docstrings and not opts.nodocstrings.get(self.__curfile): - # module docstring? - if self.__freshmodule: - if ttype == tokenize.STRING: - self.__addentry(safe_eval(tstring), lineno, isdocstring=1) - self.__freshmodule = 0 - elif ttype not in (tokenize.COMMENT, tokenize.NL): - self.__freshmodule = 0 - return - # class docstring? - if ttype == tokenize.NAME and tstring in ('class', 'def'): - self.__state = self.__suiteseen - return - if ttype == tokenize.NAME and tstring in opts.keywords: - self.__state = self.__keywordseen - - def __suiteseen(self, ttype, tstring, lineno): - # ignore anything until we see the colon - if ttype == tokenize.OP and tstring == ':': - self.__state = self.__suitedocstring - - def __suitedocstring(self, ttype, tstring, lineno): - # ignore any intervening noise - if ttype == tokenize.STRING: - self.__addentry(safe_eval(tstring), lineno, isdocstring=1) - self.__state = self.__waiting - elif ttype not in (tokenize.NEWLINE, tokenize.INDENT, - tokenize.COMMENT): - # there was no class docstring - self.__state = self.__waiting - - def __keywordseen(self, ttype, tstring, lineno): - if ttype == tokenize.OP and tstring == '(': - self.__data = [] - self.__lineno = lineno - self.__state = self.__openseen - else: - self.__state = self.__waiting - - def __openseen(self, ttype, tstring, lineno): - if ttype == tokenize.OP and tstring == ')': - # We've seen the last of the translatable strings. Record the - # line number of the first line of the strings and update the list - # of messages seen. Reset state for the next batch. If there - # were no strings inside _(), then just ignore this entry. - if self.__data: - self.__addentry(EMPTYSTRING.join(self.__data)) - self.__state = self.__waiting - elif ttype == tokenize.STRING: - self.__data.append(safe_eval(tstring)) - elif ttype not in [tokenize.COMMENT, token.INDENT, token.DEDENT, - token.NEWLINE, tokenize.NL]: - # warn if we see anything else than STRING or whitespace - print >> sys.stderr, \ - '*** %(file)s:%(lineno)s: Seen unexpected token "%(token)s"'\ - % { - 'token': tstring, - 'file': self.__curfile, - 'lineno': self.__lineno - } - self.__state = self.__waiting - - def __addentry(self, msg, lineno=None, isdocstring=0): - if lineno is None: - lineno = self.__lineno - if not msg in self.__options.toexclude: - entry = (self.__curfile, lineno) - self.__messages.setdefault(msg, {})[entry] = isdocstring - - def set_filename(self, filename): - self.__curfile = filename - self.__freshmodule = 1 - - def write(self, fp): - options = self.__options - timestamp = time.strftime('%Y-%m-%d %H:%M+%Z') - # The time stamp in the header doesn't have the same format as that - # generated by xgettext... - print >> fp, pot_header % {'time': timestamp, 'version': __version__} - # Sort the entries. First sort each particular entry's keys, then - # sort all the entries by their first item. - reverse = {} - for k, v in self.__messages.items(): - keys = v.keys() - keys.sort() - reverse.setdefault(tuple(keys), []).append((k, v)) - rkeys = reverse.keys() - rkeys.sort() - for rkey in rkeys: - rentries = reverse[rkey] - rentries.sort() - for k, v in rentries: - isdocstring = 0 - # If the entry was gleaned out of a docstring, then add a - # comment stating so. This is to aid translators who may wish - # to skip translating some unimportant docstrings. - if reduce(operator.__add__, v.values()): - isdocstring = 1 - # k is the message string, v is a dictionary-set of (filename, - # lineno) tuples. We want to sort the entries in v first by - # file name and then by line number. - v = v.keys() - v.sort() - if not options.writelocations: - pass - # location comments are different b/w Solaris and GNU: - elif options.locationstyle == options.SOLARIS: - for filename, lineno in v: - d = {'filename': filename, 'lineno': lineno} - print >>fp, \ - '# File: %(filename)s, line: %(lineno)d' % d - elif options.locationstyle == options.GNU: - # fit as many locations on one line, as long as the - # resulting line length doesn't exceeds 'options.width' - locline = '#:' - for filename, lineno in v: - d = {'filename': filename, 'lineno': lineno} - s = ' %(filename)s:%(lineno)d' % d - if len(locline) + len(s) <= options.width: - locline = locline + s - else: - print >> fp, locline - locline = "#:" + s - if len(locline) > 2: - print >> fp, locline - if isdocstring: - print >> fp, '#, docstring' - print >> fp, 'msgid', normalize(k) - print >> fp, 'msgstr ""\n' - - - -def main(outfile, args=sys.argv[1:]): - global default_keywords - try: - opts, args = getopt.getopt( - args, - 'ad:DEhk:Kno:p:S:Vvw:x:X:', - ['extract-all', 'default-domain=', 'escape', 'help', - 'keyword=', 'no-default-keywords', - 'add-location', 'no-location', 'output=', 'output-dir=', - 'style=', 'verbose', 'version', 'width=', 'exclude-file=', - 'docstrings', 'no-docstrings', - ]) - except getopt.error, msg: - usage(1, msg) - - # for holding option values - class Options: - # constants - GNU = 1 - SOLARIS = 2 - # defaults - extractall = 0 # FIXME: currently this option has no effect at all. - escape = 0 - keywords = [] - outpath = '' - outfile = 'messages.pot' - writelocations = 1 - locationstyle = GNU - verbose = 0 - width = 78 - excludefilename = '' - docstrings = 0 - nodocstrings = {} - - options = Options() - locations = {'gnu' : options.GNU, - 'solaris' : options.SOLARIS, - } - - # parse options - for opt, arg in opts: - if opt in ('-h', '--help'): - usage(0) - elif opt in ('-a', '--extract-all'): - options.extractall = 1 - elif opt in ('-d', '--default-domain'): - options.outfile = arg + '.pot' - elif opt in ('-E', '--escape'): - options.escape = 1 - elif opt in ('-D', '--docstrings'): - options.docstrings = 1 - elif opt in ('-k', '--keyword'): - options.keywords.append(arg) - elif opt in ('-K', '--no-default-keywords'): - default_keywords = [] - elif opt in ('-n', '--add-location'): - options.writelocations = 1 - elif opt in ('--no-location',): - options.writelocations = 0 - elif opt in ('-S', '--style'): - options.locationstyle = locations.get(arg.lower()) - if options.locationstyle is None: - usage(1, ('Invalid value for --style: %s') % arg) - elif opt in ('-o', '--output'): - options.outfile = arg - elif opt in ('-p', '--output-dir'): - options.outpath = arg - elif opt in ('-v', '--verbose'): - options.verbose = 1 - elif opt in ('-V', '--version'): - print ('pygettext.py (xgettext for Python) %s') % __version__ - sys.exit(0) - elif opt in ('-w', '--width'): - try: - options.width = int(arg) - except ValueError: - usage(1, ('--width argument must be an integer: %s') % arg) - elif opt in ('-x', '--exclude-file'): - options.excludefilename = arg - elif opt in ('-X', '--no-docstrings'): - fp = open(arg) - try: - while 1: - line = fp.readline() - if not line: - break - options.nodocstrings[line[:-1]] = 1 - finally: - fp.close() - - # calculate escapes - make_escapes(options.escape) - - # calculate all keywords - options.keywords.extend(default_keywords) - - # initialize list of strings to exclude - if options.excludefilename: - try: - fp = open(options.excludefilename) - options.toexclude = fp.readlines() - fp.close() - except IOError: - print >> sys.stderr, ( - "Can't read --exclude-file: %s") % options.excludefilename - sys.exit(1) - else: - options.toexclude = [] - - # resolve args to module lists - expanded = [] - for arg in args: - if arg == '-': - expanded.append(arg) - else: - expanded.extend(getFilesForName(arg)) - args = expanded - - # slurp through all the files - eater = TokenEater(options) - for filename in args: - if filename == '-': - if options.verbose: - print ('Reading standard input') - fp = sys.stdin - closep = 0 - else: - if options.verbose: - print ('Working on %s') % filename - fp = open(filename) - closep = 1 - try: - eater.set_filename(filename) - try: - tokenize.tokenize(fp.readline, eater) - except tokenize.TokenError, e: - print >> sys.stderr, '%s: %s, line %d, column %d' % ( - e[0], filename, e[1][0], e[1][1]) - except IndentationError, e: - print >> sys.stderr, '%s: %s, line %s, column %s' % ( - e[0], filename, e.lineno, e[1][1]) - - finally: - if closep: - fp.close() - - # write the output - eater.write(outfile) - -if __name__ == '__main__': - main(sys.stdout) diff --git a/setup/translations.py b/setup/translations.py index 3a33b7bcc4..c94465a240 100644 --- a/setup/translations.py +++ b/setup/translations.py @@ -6,11 +6,10 @@ __license__ = 'GPL v3' __copyright__ = '2009, Kovid Goyal ' __docformat__ = 'restructuredtext en' -import os, cStringIO, tempfile, shutil, atexit, subprocess, glob, re +import os, tempfile, shutil, subprocess, glob, re, time, textwrap from distutils import sysconfig -from setup import Command, __appname__ -from setup.pygettext import main as pygettext +from setup import Command, __appname__, __version__ from setup.build_environment import pyqt class POT(Command): @@ -60,19 +59,50 @@ class POT(Command): def run(self, opts): + pot_header = textwrap.dedent('''\ + # Translation template file.. + # Copyright (C) %(year)s Kovid Goyal + # Kovid Goyal , %(year)s. + # + msgid "" + msgstr "" + "Project-Id-Version: %(appname)s %(version)s\\n" + "POT-Creation-Date: %(time)s\\n" + "PO-Revision-Date: %(time)s\\n" + "Last-Translator: Automatically generated\\n" + "Language-Team: LANGUAGE\\n" + "MIME-Version: 1.0\\n" + "Report-Msgid-Bugs-To: https://bugs.launchpad.net/calibre\\n" + "Content-Type: text/plain; charset=UTF-8\\n" + "Content-Transfer-Encoding: 8bit\\n" + "Generated-By: xgettext\\n" + + ''')%dict(appname=__appname__, version=__version__, + year=time.strftime('%Y'), + time=time.strftime('%Y-%m-%d %H:%M+%Z')) + files = self.source_files() - buf = cStringIO.StringIO() - self.info('Creating translations template...') - tempdir = tempfile.mkdtemp() - atexit.register(shutil.rmtree, tempdir) - pygettext(buf, ['-k', '__', '-p', tempdir]+files) - src = buf.getvalue() - src += '\n\n' + self.get_tweaks_docs() - pot = os.path.join(self.PATH, __appname__+'.pot') - with open(pot, 'wb') as f: - f.write(src) - self.info('Translations template:', os.path.abspath(pot)) - return pot + with tempfile.NamedTemporaryFile() as fl: + fl.write('\n'.join(files)) + fl.flush() + out = tempfile.NamedTemporaryFile(suffix='.pot', delete=False) + out.close() + self.info('Creating translations template...') + subprocess.check_call(['xgettext', '-f', fl.name, + '--default-domain=calibre', '-o', out.name, '-L', 'Python', + '--from-code=UTF-8', '--omit-header', '--sort-by-file', + '--no-wrap', '-k__', + ]) + with open(out.name, 'rb') as f: + src = f.read() + os.remove(out.name) + src = pot_header + '\n' + src + src += '\n\n' + self.get_tweaks_docs() + pot = os.path.join(self.PATH, __appname__+'.pot') + with open(pot, 'wb') as f: + f.write(src) + self.info('Translations template:', os.path.abspath(pot)) + return pot class Translations(POT): diff --git a/src/calibre/translations/calibre.pot b/src/calibre/translations/calibre.pot index 3989ef6ff1..f121d4cfbc 100644 --- a/src/calibre/translations/calibre.pot +++ b/src/calibre/translations/calibre.pot @@ -5,14 +5,15 @@ msgid "" msgstr "" "Project-Id-Version: calibre 0.8.9\n" -"POT-Creation-Date: 2011-07-10 10:21+MDT\n" -"PO-Revision-Date: 2011-07-10 10:21+MDT\n" +"POT-Creation-Date: 2011-07-10 11:39+MDT\n" +"PO-Revision-Date: 2011-07-10 11:39+MDT\n" "Last-Translator: Automatically generated\n" "Language-Team: LANGUAGE\n" "MIME-Version: 1.0\n" +"Report-Msgid-Bugs-To: https://bugs.launchpad.net/calibre\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Generated-By: pygettext.py 1.5\n" +"Generated-By: xgettext\n" #: /home/kovid/work/calibre/src/calibre/customize/__init__.py:56 @@ -274,6 +275,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/customize/builtins.py:365 #: /home/kovid/work/calibre/src/calibre/customize/builtins.py:375 #: /home/kovid/work/calibre/src/calibre/customize/builtins.py:386 +#, python-format msgid "Read metadata from %s files" msgstr "" @@ -291,12 +293,14 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/customize/builtins.py:463 #: /home/kovid/work/calibre/src/calibre/customize/builtins.py:474 #: /home/kovid/work/calibre/src/calibre/customize/builtins.py:484 +#, python-format msgid "Set metadata in %s files" msgstr "" #: /home/kovid/work/calibre/src/calibre/customize/builtins.py:420 #: /home/kovid/work/calibre/src/calibre/customize/builtins.py:452 #: /home/kovid/work/calibre/src/calibre/customize/builtins.py:495 +#, python-format msgid "Set metadata from %s files" msgstr "" @@ -610,6 +614,7 @@ msgid "If specified, the output plugin will try to create output that is as huma msgstr "" #: /home/kovid/work/calibre/src/calibre/customize/conversion.py:264 +#, python-format msgid "Convert ebooks to the %s format" msgstr "" @@ -767,6 +772,7 @@ msgid "Enabled plugins" msgstr "" #: /home/kovid/work/calibre/src/calibre/customize/ui.py:493 +#, python-format msgid "Initialization of plugin %s failed with traceback:" msgstr "" @@ -802,13 +808,14 @@ msgstr "" msgid "Disable the named plugin" msgstr "" -#: /home/kovid/work/calibre/src/calibre/db/backend.py:267 -#: /home/kovid/work/calibre/src/calibre/db/backend.py:276 +#: /home/kovid/work/calibre/src/calibre/db/backend.py:268 +#: /home/kovid/work/calibre/src/calibre/db/backend.py:277 #: /home/kovid/work/calibre/src/calibre/gui2/actions/choose_library.py:236 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library.py:71 #: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:662 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:128 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:137 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:129 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:138 +#, python-format msgid "Path to library too long. Must be less than %d characters." msgstr "" @@ -828,7 +835,7 @@ msgstr "" msgid "Communicate with S60 phones." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:46 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:47 msgid "

If you do not want calibre to recognize your Apple iDevice when it is connected to your computer, click Disable Apple Driver.

To transfer books to your iDevice, click Disable Apple Driver, then use the 'Connect to iTunes' method recommended in the Calibre + iDevices FAQ, using the Connect/Share|Connect to iTunes menu item.

Enabling the Apple driver for direct connection to iDevices is an unsupported advanced user mode.

" msgstr "" @@ -857,6 +864,7 @@ msgid "Enable to cache and display covers from iTunes/iBooks" msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:124 +#, python-format msgid "\"Copy files to iTunes Media folder %s\" is enabled in iTunes Preferences|Advanced" msgstr "" @@ -872,11 +880,11 @@ msgstr "" msgid "Communicate with iTunes/iBooks." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:205 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:206 msgid "Apple device detected, launching iTunes, please wait ..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:207 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:208 msgid "Cannot copy books directly from iDevice. Drag from iTunes Library to desktop, then add to calibre's Library window." msgstr "" @@ -891,6 +899,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1121 #: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3110 #: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3150 +#, python-format msgid "%d of %d" msgstr "" @@ -956,7 +965,7 @@ msgstr "" msgid "Device IP Address (restart calibre after changing)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:47 +#: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:48 msgid "Unable to add book to library directly from Bambook. Please save the book to disk and add the file to library from disk." msgstr "" @@ -1195,6 +1204,7 @@ msgid "Communicate with the JetBook Mini reader." msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/kindle/apnx.py:28 +#, python-format msgid "Not a valid MOBI file. Reports identity of %s" msgstr "" @@ -1349,6 +1359,7 @@ msgid "Comma separated list of metadata fields to turn into collections on the d msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:70 +#, python-format msgid ". Two special collections are available: %s:%s and %s:%s. Add these values to the list to enable them. The collections will be given the name provided after the \":\" character." msgstr "" @@ -1430,14 +1441,17 @@ msgid "Communicate with the Wexler reader." msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:285 +#, python-format msgid "Unable to detect the %s disk drive. Try rebooting." msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:466 +#, python-format msgid "Unable to detect the %s mount point. Try rebooting." msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:531 +#, python-format msgid "Unable to detect the %s disk drive." msgstr "" @@ -1446,18 +1460,22 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:822 #: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:832 #: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:842 +#, python-format msgid "Could not find mount helper: %s." msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:636 +#, python-format msgid "Unable to detect the %s disk drive. Either the device has already been ejected, or your kernel is exporting a deprecated version of SYSFS." msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:645 +#, python-format msgid "Unable to mount main memory (Error code: %d)" msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:696 +#, python-format msgid "The main memory of %s is read only. This usually happens because of file system errors." msgstr "" @@ -1467,6 +1485,7 @@ msgid "The reader has no storage card in this slot." msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:1010 +#, python-format msgid "Selected slot: %s is not supported." msgstr "" @@ -1582,14 +1601,17 @@ msgid "Card A folder" msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:207 +#, python-format msgid "Rendered %s" msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:210 +#, python-format msgid "Failed %s" msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:264 +#, python-format msgid "" "Failed to process comic: \n" "\n" @@ -1597,6 +1619,7 @@ msgid "" msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:283 +#, python-format msgid "Number of colors for grayscale image conversion. Default: %default. Values of less than 256 may result in blurred text on your device if you are creating your comics in EPUB format." msgstr "" @@ -1681,6 +1704,7 @@ msgid "INPUT OPTIONS" msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/conversion/cli.py:110 +#, python-format msgid "Options to control the processing of the input %s file" msgstr "" @@ -1689,6 +1713,7 @@ msgid "OUTPUT OPTIONS" msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/conversion/cli.py:117 +#, python-format msgid "Options to control the processing of the output %s" msgstr "" @@ -1697,6 +1722,7 @@ msgid "Options to control the look and feel of the output" msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/conversion/cli.py:146 +#, python-format msgid "Modify the document text and structure using common patterns. Disabled by default. Use %s to enable. Individual actions can be disabled with the %s options." msgstr "" @@ -1757,11 +1783,11 @@ msgstr "" msgid "Disable all rescaling of font sizes." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:171 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:172 msgid "The minimum line height, as a percentage of the element's calculated font size. calibre will ensure that every element has a line height of at least this setting, irrespective of what the input document specifies. Set to zero to disable. Default is 120%. Use this setting in preference to the direct line height specification, unless you know what you are doing. For example, you can achieve \"double spaced\" text by setting this to 240." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:186 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:187 msgid "The line height in pts. Controls spacing between consecutive lines of text. Only applies to elements that do not define their own line height. In most cases, the minimum line height option is more useful. By default no line height manipulation is performed." msgstr "" @@ -1789,11 +1815,13 @@ msgstr "" msgid "Don't add auto-detected chapters to the Table of Contents." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:247 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:248 +#, python-format msgid "If fewer than this number of chapters is detected, then links are added to the Table of Contents. Default: %default" msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:254 +#, python-format msgid "Maximum number of links to insert into the TOC. Set to 0 to disable. Default is: %default. Links are only added to the TOC if less than the threshold number of chapters were detected." msgstr "" @@ -1826,18 +1854,22 @@ msgid "Some documents specify page margins by specifying a left and right margin msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:331 +#, python-format msgid "Set the top margin in pts. Default is %default. Note: 72 pts equals 1 inch" msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:336 +#, python-format msgid "Set the bottom margin in pts. Default is %default. Note: 72 pts equals 1 inch" msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:341 +#, python-format msgid "Set the left margin in pts. Default is %default. Note: 72 pts equals 1 inch" msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:346 +#, python-format msgid "Set the right margin in pts. Default is %default. Note: 72 pts equals 1 inch" msgstr "" @@ -1878,6 +1910,7 @@ msgid "Read metadata from the specified OPF file. Metadata read from this file w msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:421 +#, python-format msgid "Transliterate unicode characters to an ASCII representation. Use with care because this will replace unicode characters with ASCII. For instance it will replace \"%s\" with \"Mikhail Gorbachiov\". Also, note that in cases where there are multiple representations of a character (characters shared by Chinese and Japanese for instance) the representation based on the current calibre interface language will be used." msgstr "" @@ -2052,6 +2085,7 @@ msgid "Creating" msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/epub/fix/__init__.py:20 +#, python-format msgid "Failed to parse: %s with error: %s" msgstr "" @@ -2067,7 +2101,7 @@ msgstr "" msgid "Workarounds for bugs in the latest release of epubcheck. epubcheck reports many things as errors that are not actually errors. epub-fix will try to detect these and replace them with constructs that epubcheck likes. This may cause significant changes to your epub, complain to the epubcheck project." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/fix/main.py:21 +#: /home/kovid/work/calibre/src/calibre/ebooks/epub/fix/main.py:22 msgid "" "%prog [options] file.epub\n" "\n" @@ -2101,6 +2135,7 @@ msgid "Turn off splitting at page breaks. Normally, input files are automaticall msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/epub/output.py:73 +#, python-format msgid "Split all HTML files larger than this size (in KB). This is necessary as most EPUB readers cannot handle large file sizes. The default of %defaultKB is the size required for Adobe Digital Editions." msgstr "" @@ -2112,7 +2147,7 @@ msgstr "" msgid "Do not use SVG for the book cover. Use this option if your EPUB is going to be used on a device that does not support SVG, like the iPhone or the JetBook Lite. Without this option, such devices will display the cover as a blank page." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/output.py:94 +#: /home/kovid/work/calibre/src/calibre/ebooks/epub/output.py:95 msgid "When using an SVG cover, this option will cause the cover to scale to cover the available screen area, but still preserve its aspect ratio (ratio of width to height). That means there may be white borders at the sides or top and bottom of the image, but the image will never be distorted. Without this option the image may be slightly distorted, but there will be no borders." msgstr "" @@ -2134,6 +2169,7 @@ msgid "Specify the sectionization of elements. A value of \"nothing\" turns the msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/fb2/output.py:158 +#, python-format msgid "" "Genre for the book. Choices: %s\n" "\n" @@ -2149,6 +2185,7 @@ msgid "Traverse links in HTML files breadth first. Normally, they are traversed msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/html/input.py:255 +#, python-format msgid "Maximum levels of recursion when following links in HTML files. Must be non-negative. 0 implies that no links in the root HTML file are followed. Default is %default." msgstr "" @@ -2225,6 +2262,7 @@ msgid "Written preprocessed HTML to " msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:379 +#, python-format msgid "Processing %s" msgstr "" @@ -2234,40 +2272,49 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:539 #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:552 +#, python-format msgid "Could not parse file: %s" msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:544 +#, python-format msgid "%s is an empty file" msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:564 +#, python-format msgid "Failed to parse link %s %s" msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:608 +#, python-format msgid "Cannot add link %s to TOC" msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:957 +#, python-format msgid "Unable to process image %s. Error: %s" msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1002 +#, python-format msgid "Unable to process interlaced PNG %s" msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1017 +#, python-format msgid "" "Could not process image: %s\n" "%s" msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1772 +#, python-format msgid "An error occurred while processing a table: %s. Ignoring table markup." msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1774 +#, python-format msgid "" "Bad table:\n" "%s" @@ -2278,10 +2325,12 @@ msgid "Table has cell that is too large" msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1862 +#, python-format msgid "Could not read cover image: %s" msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1865 +#, python-format msgid "Cannot read from: %s" msgstr "" @@ -2411,6 +2460,7 @@ msgid "Enable autorotation of images that are wider than the screen width." msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/output.py:94 +#, python-format msgid "Set the space between words in pts. Default is %default" msgstr "" @@ -2423,10 +2473,12 @@ msgid "Set the format of the header. %a is replaced by the author and %t by the msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/output.py:104 +#, python-format msgid "Add extra spacing below the header. Default is %default pt." msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/output.py:107 +#, python-format msgid "Minimum paragraph indent (the indent of the first line of a paragraph) in pts. Default: %default" msgstr "" @@ -2435,6 +2487,7 @@ msgid "Render tables in the HTML as images (useful if the document has large or msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/output.py:117 +#, python-format msgid "Multiply the size of text in rendered tables by this factor. Default is %default" msgstr "" @@ -2569,6 +2622,7 @@ msgid "options" msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:21 +#, python-format msgid "" "\n" "Read/Write metadata from/to ebook files.\n" @@ -2725,27 +2779,22 @@ msgstr "" msgid "To use metadata from isbndb.com you must sign up for a free account and get an isbndb key and enter it below. Instructions to get the key are here." msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/openlibrary.py:15 msgid "Downloads covers from The Open Library" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/overdrive.py:33 msgid "Downloads metadata and covers from Overdrive's Content Reserve" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/overdrive.py:45 msgid "Download all metadata (slow)" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/overdrive.py:46 msgid "Enable this option to gather all metadata available from Overdrive." msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/overdrive.py:49 msgid "Additional metadata can be taken from Overdrive's book detail page. This includes a limited set of tags used by libraries, comments, language, and the ebook ISBN. Collecting this data is disabled by default due to the extra time required. Check the download all metadata option below to enable downloading this data." msgstr "" @@ -2855,12 +2904,14 @@ msgid "Main Text" msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/iterator.py:41 +#, python-format msgid "%s format books are not supported" msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/cover.py:98 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:176 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:881 +#, python-format msgid "Book %s of %s" msgstr "" @@ -2877,6 +2928,7 @@ msgid "Rating" msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/split.py:34 +#, python-format msgid "Could not find reasonable point at which to split: %s Sub-tree size: %d KB" msgstr "" @@ -2885,6 +2937,7 @@ msgid "OPF/NCX/etc. generation options." msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/writer.py:35 +#, python-format msgid "OPF version to generate. Default is %default." msgstr "" @@ -2957,18 +3010,22 @@ msgid "Path to output file. By default a file is created in the current director msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/crop.py:41 +#, python-format msgid "Number of pixels to crop from the left most x (default is %s)" msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/crop.py:44 +#, python-format msgid "Number of pixels to crop from the left most y (default is %s)" msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/crop.py:47 +#, python-format msgid "Number of pixels to crop from the right most x (default is %s)" msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/crop.py:50 +#, python-format msgid "Number of pixels to crop from the right most y (default is %s)" msgstr "" @@ -3102,10 +3159,12 @@ msgid "Split Options:" msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/pdf/output.py:31 +#, python-format msgid "The unit of measure. Default is inch. Choices are %s Note: This does not override the unit for margins!" msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/pdf/output.py:36 +#, python-format msgid "The size of the paper. This size will be overridden when an output profile is used. Default is letter. Choices are %s" msgstr "" @@ -3114,6 +3173,7 @@ msgid "Custom size of the document. Use the form widthxheight EG. `123x321` to s msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/pdf/output.py:45 +#, python-format msgid "The orientation of the page. Default is portrait. Choices are %s" msgstr "" @@ -3139,6 +3199,7 @@ msgid "Table of Contents:" msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/rtf/input.py:272 +#, python-format msgid "" "This RTF file has a feature calibre does not support. Convert it to HTML first and then try it.\n" "%s" @@ -3223,6 +3284,7 @@ msgid "Do not insert a Table of Contents into the output text." msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/txt/output.py:30 +#, python-format msgid "Type of newline to use. Options are %s. Default is 'system'. Use 'old_mac' for compatibility with Mac OS 9 and earlier. For Mac OS X use 'unix'. 'system' will default to the newline type used by this OS." msgstr "" @@ -3338,7 +3400,7 @@ msgstr "" msgid "When searching, show all books with search results highlighted instead of showing only the matches. You can use the N or F3 keys to go to the next match." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:175 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:176 msgid "Maximum number of simultaneous conversion/news download jobs. This number is twice the actual value for historical reasons." msgstr "" @@ -3476,6 +3538,7 @@ msgid "Are you sure" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:91 +#, python-format msgid "Are you sure you want to add the same files to all %d books? If the formatalready exists for a book, it will be replaced." msgstr "" @@ -3597,22 +3660,27 @@ msgid "Merging user annotations into database" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/annotate.py:123 +#, python-format msgid "%s
Last Page Read: %d (%d%%)" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/annotate.py:129 +#, python-format msgid "%s
Last Page Read: Location %d (%d%%)" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/annotate.py:148 +#, python-format msgid "Location %d • %s
%s
" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/annotate.py:157 +#, python-format msgid "Page %d • %s
" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/annotate.py:162 +#, python-format msgid "Location %d • %s
" msgstr "" @@ -3626,6 +3694,7 @@ msgid "No books selected for catalog generation" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/catalog.py:57 +#, python-format msgid "Generating %s catalog..." msgstr "" @@ -3638,6 +3707,7 @@ msgid "Export Catalog Directory" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/catalog.py:85 +#, python-format msgid "Select destination for %s.%s" msgstr "" @@ -3645,6 +3715,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/preferences/toolbar.py:57 #: /home/kovid/work/calibre/src/calibre/library/server/browse.py:170 #: /home/kovid/work/calibre/src/calibre/library/server/opds.py:125 +#, python-format msgid "%d books" msgstr "" @@ -3699,6 +3770,7 @@ msgid "Rename" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/choose_library.py:222 +#, python-format msgid "Choose a new name for the library %s. " msgstr "" @@ -3714,6 +3786,7 @@ msgid "Already exists" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/choose_library.py:231 +#, python-format msgid "The folder %s already exists. Delete it first." msgstr "" @@ -3729,6 +3802,7 @@ msgid "Rename failed" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/choose_library.py:244 +#, python-format msgid "Failed to rename the library at %s. The most common cause for this is if one of the files in the library is open in another program." msgstr "" @@ -3737,6 +3811,7 @@ msgid "Library removed" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/choose_library.py:259 +#, python-format msgid "The library %s has been removed from calibre. The files remain on your computer, if you want to delete them, you will have to do so manually." msgstr "" @@ -3749,6 +3824,7 @@ msgid "Backup status" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/choose_library.py:274 +#, python-format msgid "Book metadata files remaining to be written: %s" msgstr "" @@ -3761,6 +3837,7 @@ msgid "Metadata will be backed up while calibre is running, at the rate of appro msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/choose_library.py:290 +#, python-format msgid "Path to library too long. Must be less than %d characters. Move your library to a location with a shorter path using Windows Explorer, then point calibre to the new location and try again." msgstr "" @@ -3804,6 +3881,7 @@ msgid "No library found" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/choose_library.py:348 +#, python-format msgid "No existing calibre library was found at %s. It will be removed from the list of known libraries." msgstr "" @@ -3845,6 +3923,7 @@ msgid "Cannot convert" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/convert.py:115 +#, python-format msgid "Starting conversion of %d book(s)" msgstr "" @@ -3873,6 +3952,7 @@ msgid "No library" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:142 +#, python-format msgid "No library found at %s" msgstr "" @@ -3886,6 +3966,7 @@ msgid "Could not copy books: " msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:163 +#, python-format msgid "Copied %d books to %s" msgstr "" @@ -3908,6 +3989,7 @@ msgid "Are you sure?" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:31 +#, python-format msgid "You are trying to delete %d books. Sending so many files to the Recycle Bin can be slow. Should calibre skip the Recycle Bin? If you click Yes the files will be permanently deleted." msgstr "" @@ -4148,6 +4230,7 @@ msgid "Download failed" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:89 +#, python-format msgid "Failed to download metadata or covers for any of the %d book(s)." msgstr "" @@ -4156,10 +4239,12 @@ msgid "Metadata download completed" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:94 +#, python-format msgid "Finished downloading metadata for %d book(s). Proceed with updating the metadata in your library?" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:101 +#, python-format msgid "Could not download metadata and/or covers for %d of the books. Click \"Show details\" to see which books." msgstr "" @@ -4198,15 +4283,18 @@ msgstr "" msgid "You are about to merge more than 5 books. Are you sure you want to proceed?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:272 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:273 +#, python-format msgid "Book formats and metadata from the selected books will be added to the first selected book (%s). ISBN will not be merged.

The second and subsequently selected books will not be deleted or changed.

Please confirm you want to proceed." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:284 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:285 +#, python-format msgid "Book formats from the selected books will be merged into the first selected book (%s). Metadata in the first selected book will not be changed. Author, Title, ISBN and all other metadata will not be merged.

After merger the second and subsequently selected books, with any metadata they have will be deleted.

All book formats of the first selected book will be kept and any duplicate formats in the second and subsequently selected books will be permanently deleted from your calibre library.

Are you sure you want to proceed?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:300 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:301 +#, python-format msgid "Book formats and metadata from the selected books will be merged into the first selected book (%s). ISBN will not be merged.

After merger the second and subsequently selected books will be deleted.

All book formats of the first selected book will be kept and any duplicate formats in the second and subsequently selected books will be permanently deleted from your calibre library.

Are you sure you want to proceed?" msgstr "" @@ -4251,6 +4339,11 @@ msgstr "" msgid "Move to next match" msgstr "" +#: /home/kovid/work/calibre/src/calibre/gui2/actions/next_match.py:13 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:204 +msgid "F3" +msgstr "" + #: /home/kovid/work/calibre/src/calibre/gui2/actions/next_match.py:13 msgid "Move to next highlighted match" msgstr "" @@ -4260,11 +4353,6 @@ msgstr "" msgid "N" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/next_match.py:13 -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:204 -msgid "F3" -msgstr "" - #: /home/kovid/work/calibre/src/calibre/gui2/actions/next_match.py:25 msgid "Move to previous item" msgstr "" @@ -4351,11 +4439,13 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/save_to_disk.py:49 #: /home/kovid/work/calibre/src/calibre/gui2/actions/save_to_disk.py:68 +#, python-format msgid "Save only %s format to disk" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/save_to_disk.py:53 #: /home/kovid/work/calibre/src/calibre/gui2/actions/save_to_disk.py:71 +#, python-format msgid "Save only %s format to disk in a single directory" msgstr "" @@ -4578,6 +4668,7 @@ msgid "Choose the format to view" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/view.py:167 +#, python-format msgid "Not all the selected books were available in the %s format. You should convert them first." msgstr "" @@ -4586,6 +4677,7 @@ msgid "Multiple Books Selected" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/view.py:175 +#, python-format msgid "You are attempting to open %d books. Opening too many books at once can be slow and have a negative effect on the responsiveness of your computer. Once started the process cannot be stopped until complete. Do you wish to continue?" msgstr "" @@ -4598,6 +4690,7 @@ msgid "This book no longer exists in your library" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/view.py:227 +#, python-format msgid "%s has no available formats." msgstr "" @@ -4816,6 +4909,7 @@ msgid "Ids" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:162 +#, python-format msgid "Book %s of %s" msgstr "" @@ -4846,6 +4940,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:544 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:109 +#, python-format msgid "Cover size: %dx%d" msgstr "" @@ -5001,47 +5096,38 @@ msgstr "" msgid "E-book options" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:296 msgid "Sections to include in catalog." msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:297 msgid "Included sections" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:298 msgid "Books by &Genre" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:299 msgid "Recently &Added" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:300 msgid "&Descriptions" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:301 msgid "Books by &Series" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:302 msgid "Books by &Title" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:303 msgid "Books by Author" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:304 msgid "" "

Default pattern \n" @@ -5050,151 +5136,122 @@ msgid "" "e.g., [Project Gutenberg]

" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:308 msgid "Excluded genres" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:309 #: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:312 msgid "Tags to &exclude" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:310 msgid "Books matching either pattern will not be included in generated catalog. " msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:311 msgid "Excluded books" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:313 msgid "" "

Comma-separated list of tags to exclude.\n" "Default: ~,Catalog" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:315 #: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:320 msgid "&Column/value" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:316 msgid "Column containing additional exclusion criteria" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:317 msgid "Exclusion pattern" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:318 msgid "Matching books will be displayed with a check mark" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:319 msgid "Read books" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:321 msgid "Column containing 'read' status" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:322 msgid "'read book' pattern" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:323 msgid "Other options" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:324 msgid "&Wishlist tag" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:325 msgid "Books tagged as Wishlist items will be displayed with an X" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:326 msgid "&Thumbnail width" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:327 msgid "Size hint for Description cover thumbnails" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:328 msgid " inch" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:329 msgid "&Description note" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:330 msgid "Custom column source for note to include in Description header area" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:331 msgid "&Merge with Comments" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:332 msgid "Additional content merged with Comments during catalog generation" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:333 msgid "Merge additional content before Comments" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:334 msgid "&Before" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:335 msgid "Merge additional content after Comments" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:336 msgid "&After" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:337 msgid "Separate Comments and additional content with horizontal rule" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:338 msgid "&Separator" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_tab_template_ui.py:33 msgid "Tab template for catalog.ui" msgstr "" @@ -6158,32 +6215,28 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/convert/search_and_replace.py:74 #: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:103 +#, python-format msgid "Invalid regular expression: %s" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/convert/search_and_replace_ui.py:148 msgid "First expression" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/convert/search_and_replace_ui.py:149 #: /home/kovid/work/calibre/src/calibre/gui2/convert/search_and_replace_ui.py:151 #: /home/kovid/work/calibre/src/calibre/gui2/convert/search_and_replace_ui.py:153 msgid "&Replacement Text" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/convert/search_and_replace_ui.py:150 msgid "Second Expression" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/convert/search_and_replace_ui.py:152 msgid "Third expression" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/convert/search_and_replace_ui.py:154 msgid "

Search and replace uses regular expressions. See the regular expressions tutorial to get started with regular expressions. Also clicking the wizard buttons below will allow you to test your regular expression against the current input document." msgstr "" @@ -6260,30 +6313,26 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/convert/structure_detection.py:43 #: /home/kovid/work/calibre/src/calibre/gui2/convert/toc.py:40 +#, python-format msgid "The XPath expression %s is invalid." msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/convert/structure_detection_ui.py:60 msgid "Chapter &mark:" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/convert/structure_detection_ui.py:61 msgid "Remove first &image" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/convert/structure_detection_ui.py:62 msgid "Insert &metadata as page at start of book" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/convert/structure_detection_ui.py:63 msgid "The header and footer removal options have been replaced by the Search & Replace options. Click the Search & Replace category in the bar to the left to use these options. Leave the replace field blank and enter your header/footer removal regexps into the search field." msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/convert/structure_detection_ui.py:64 msgid "Remove &fake margins" msgstr "" @@ -6549,11 +6598,13 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:173 #: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:670 +#, python-format msgid "Set '%s' to today" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:175 #: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:672 +#, python-format msgid "Clear '%s'" msgstr "" @@ -6627,6 +6678,7 @@ msgid "Send collections to device" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/device.py:413 +#, python-format msgid "Upload %d books to device" msgstr "" @@ -6717,10 +6769,12 @@ msgid "selected to send" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/device.py:915 +#, python-format msgid "%i of %i Books" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/device.py:918 +#, python-format msgid "0 of %i Books" msgstr "" @@ -6776,17 +6830,14 @@ msgstr "" msgid "

Cannot upload books to device there is no more free space available " msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/configwidget.py:135 msgid "Unknown formats" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/configwidget.py:136 msgid "You have enabled the {0} formats for your {1}. The {1} may not support them. If you send these formats to your {1} they may not work. Are you sure?" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/configwidget.py:148 #: /home/kovid/work/calibre/src/calibre/gui2/library/delegates.py:439 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/plugboard.py:275 @@ -6794,35 +6845,30 @@ msgstr "" msgid "Invalid template" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/configwidget.py:149 #: /home/kovid/work/calibre/src/calibre/gui2/library/delegates.py:440 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/plugboard.py:276 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/save_template.py:62 +#, python-format msgid "The template %s is invalid:" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/configwidget_ui.py:78 msgid "Select available formats and their order for this device" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/configwidget_ui.py:82 msgid "If checked, books are placed into sub directories based on their metadata on the device. If unchecked, books are all put into the top level directory." msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/configwidget_ui.py:83 msgid "Use sub directories" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/configwidget_ui.py:84 msgid "Use author sort for author" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/configwidget_ui.py:85 msgid "Save &template:" msgstr "" @@ -6852,6 +6898,7 @@ msgid "&Paste from clipboard" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/add_from_isbn_ui.py:65 +#, python-format msgid "" "

Enter a list of ISBNs in the box to the left, one per line. calibre will automatically create entries for books based on the ISBN and download metadata and covers for them.

\n" "

Any invalid ISBNs in the list will be ignored.

\n" @@ -7013,10 +7060,6 @@ msgstr "" msgid "(fixable)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/check_library.py:337 -msgid "Path from library" -msgstr "" - #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/check_library.py:337 #: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/models.py:21 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/bookmarkmanager.py:89 @@ -7024,29 +7067,29 @@ msgstr "" msgid "Name" msgstr "" +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/check_library.py:337 +msgid "Path from library" +msgstr "" + #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/check_library.py:366 msgid "The marked files and folders will be permanently deleted. Are you sure?" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_format_device_ui.py:48 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_format_ui.py:45 msgid "Choose Format" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_format_device_ui.py:49 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/delete_matching_from_device.py:76 #: /home/kovid/work/calibre/src/calibre/gui2/store/stores/mobileread/models.py:23 msgid "Format" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_format_device_ui.py:50 msgid "Existing" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_format_device_ui.py:51 msgid "Convertible" msgstr "" @@ -7060,6 +7103,7 @@ msgid "Same as current" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library.py:52 +#, python-format msgid "The location %s contains the current calibre library" msgstr "" @@ -7068,6 +7112,7 @@ msgid "No existing library found" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library.py:58 +#, python-format msgid "There is no existing calibre library at %s" msgstr "" @@ -7076,6 +7121,7 @@ msgid "Not empty" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library.py:64 +#, python-format msgid "The folder %s is not empty. Please choose an empty folder" msgstr "" @@ -7093,6 +7139,7 @@ msgid "Bad location" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library.py:101 +#, python-format msgid "%s is not an existing folder" msgstr "" @@ -7130,17 +7177,16 @@ msgstr "" msgid "&Move current library to new location" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_plugin_toolbars.py:23 +#, python-format msgid "Add \"%s\" to toolbars or menus" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_plugin_toolbars.py:29 +#, python-format msgid "Select the toolbars and/or menus to add %s to:" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_plugin_toolbars.py:45 msgid "You can also customise the plugin locations using Preferences -> Customise the toolbar" msgstr "" @@ -7150,6 +7196,7 @@ msgid "Set defaults for conversion of comics (CBR/CBZ files)" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf.py:48 +#, python-format msgid "Set options for converting %s" msgstr "" @@ -7187,25 +7234,21 @@ msgstr "" msgid "Edit Comments" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/confirm_delete_location_ui.py:76 msgid "Where do you want to delete from?" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/confirm_delete_location_ui.py:77 #: /home/kovid/work/calibre/src/calibre/gui2/layout.py:68 #: /home/kovid/work/calibre/src/calibre/library/server/opds.py:232 msgid "Library" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/confirm_delete_location_ui.py:78 #: /home/kovid/work/calibre/src/calibre/gui2/layout.py:70 msgid "Device" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/confirm_delete_location_ui.py:79 msgid "Library and Device" msgstr "" @@ -7218,17 +7261,14 @@ msgstr "" msgid "ERROR" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/delete_matching_from_device.py:67 msgid "All checked books will be permanently deleted from your device. Please verify the list." msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/delete_matching_from_device.py:75 msgid "Location" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/delete_matching_from_device.py:76 #: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:60 #: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1018 @@ -7239,7 +7279,6 @@ msgstr "" msgid "Date" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/delete_matching_from_device_ui.py:55 msgid "Delete from device" msgstr "" @@ -7263,7 +7302,6 @@ msgstr "" msgid "Link" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog.py:122 #: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main.py:160 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:481 @@ -7271,97 +7309,81 @@ msgstr "" msgid "No matches found" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog.py:160 #: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:428 msgid "Change Case" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog.py:161 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:262 #: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:429 msgid "Upper Case" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog.py:162 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:261 #: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:430 msgid "Lower Case" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog.py:163 #: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:431 msgid "Swap Case" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog.py:164 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:263 #: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:432 msgid "Title Case" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog.py:165 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:264 #: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:433 msgid "Capitalize" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog.py:181 msgid "Copy to author sort" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog.py:184 msgid "Copy to author" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog.py:313 #: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:932 msgid "Invalid author name" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog.py:314 #: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:933 msgid "Author names cannot contain & characters." msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog_ui.py:88 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:120 msgid "Manage authors" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog_ui.py:89 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:597 msgid "&Search for:" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog_ui.py:90 #: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/ui.py:321 msgid "F&ind" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog_ui.py:91 msgid "Sort by author" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog_ui.py:92 msgid "Sort by author sort" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog_ui.py:93 msgid "" "Reset all the author sort values to a value automatically\n" @@ -7369,19 +7391,16 @@ msgid "" "generated can be controlled via Preferences->Advanced->Tweaks" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog_ui.py:96 msgid "Recalculate all author sort values" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog_ui.py:97 msgid "" "Copy author sort to author for every author. You typically use this button\n" "after changing Preferences->Advanced->Tweaks->Author sort name algorithm" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog_ui.py:99 msgid "Copy all author sort values to author" msgstr "" @@ -7483,14 +7502,16 @@ msgid "Append to field" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:283 +#, python-format msgid "Editing meta information for %d books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:324 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:325 msgid "Immediately make all changes without closing the dialog. This operation cannot be canceled or undone" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:383 +#, python-format msgid "Book %d:" msgstr "" @@ -7498,15 +7519,15 @@ msgstr "" msgid "Enter an identifier type" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:406 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:407 msgid "You can destroy your library using this feature. Changes are permanent. There is no undo function. You are strongly encouraged to back up your library before proceeding.

Search and replace in text fields using character matching or regular expressions. " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:414 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:415 msgid "In character mode, the field is searched for the entered search text. The text is replaced by the specified replacement text everywhere it is found in the specified field. After replacement is finished, the text can be changed to upper-case, lower-case, or title-case. If the case-sensitive check box is checked, the search text must match exactly. If it is unchecked, the search text will match both upper- and lower-case letters" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:425 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:426 msgid "In regular expression mode, the search text is an arbitrary python-compatible regular expression. The replacement text can contain backreferences to parenthesized expressions in the pattern. The search is not anchored, and can match and replace multiple times on the same string. The modification functions (lower-case etc) are applied to the matched text, not to the field as a whole. The destination box specifies the field where the result after matching and replacement is to be assigned. You can replace the text in the field, or prepend or append the matched text. See this reference for more information on python's regular expressions, and in particular the 'sub' function." msgstr "" @@ -7529,18 +7550,22 @@ msgid "Search/replace invalid" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:754 +#, python-format msgid "Authors cannot be set to the empty string. Book title %s not processed" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:773 +#, python-format msgid "Title cannot be set to the empty string. Book title %s not processed" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:900 +#, python-format msgid "Search pattern is invalid: %s" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:952 +#, python-format msgid "" "Applying changes to %d books.\n" "Phase {0} {1}%%." @@ -7926,11 +7951,15 @@ msgid "You must restart Calibre before using this plugin!" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/plugin_updater.py:164 +#, python-format msgid "Version History for %s" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/plugin_updater.py:184 -msgid "Update available" +#: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/chooser_widget_ui.py:82 +#: /home/kovid/work/calibre/src/calibre/gui2/store/search/search_ui.py:136 +#: /home/kovid/work/calibre/src/calibre/gui2/store/search_ui.py:111 +msgid "All" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/plugin_updater.py:184 @@ -7944,10 +7973,7 @@ msgid "Not installed" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/plugin_updater.py:184 -#: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/chooser_widget_ui.py:82 -#: /home/kovid/work/calibre/src/calibre/gui2/store/search/search_ui.py:136 -#: /home/kovid/work/calibre/src/calibre/gui2/store/search_ui.py:111 -msgid "All" +msgid "Update available" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/plugin_updater.py:302 @@ -8017,10 +8043,12 @@ msgid "Right-click to see more options" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/plugin_updater.py:430 +#, python-format msgid "This plugin can only be installed on: %s" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/plugin_updater.py:434 +#, python-format msgid "You must upgrade to at least Calibre %s before installing this plugin" msgstr "" @@ -8123,10 +8151,12 @@ msgid "&Customize plugin" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/plugin_updater.py:675 +#, python-format msgid "Are you sure you want to uninstall the %s plugin?" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/plugin_updater.py:687 +#, python-format msgid "Install %s" msgstr "" @@ -8136,6 +8166,7 @@ msgid "Installing plugins is a security risk. Plugins can contain a virus msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/plugin_updater.py:704 +#, python-format msgid "Locating zip file for %s: %s" msgstr "" @@ -8145,18 +8176,22 @@ msgid "Install Plugin Failed" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/plugin_updater.py:708 +#, python-format msgid "Unable to locate a plugin zip file for %s" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/plugin_updater.py:713 +#, python-format msgid "Downloading plugin zip attachment: %s" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/plugin_updater.py:718 +#, python-format msgid "Installing plugin: %s" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/plugin_updater.py:730 +#, python-format msgid "Plugin installed: %s" msgstr "" @@ -8174,6 +8209,7 @@ msgid "Version history missing" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/plugin_updater.py:771 +#, python-format msgid "Unable to find the version history for %s" msgstr "" @@ -8184,6 +8220,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/plugin_updater.py:779 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/plugins.py:334 +#, python-format msgid "Plugin: %s does not need customization" msgstr "" @@ -8194,6 +8231,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/plugin_updater.py:784 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/plugins.py:341 +#, python-format msgid "You must restart calibre before you can configure the %s plugin" msgstr "" @@ -8204,6 +8242,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/plugin_updater.py:793 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/plugins.py:323 +#, python-format msgid "The plugin: %s cannot be disabled" msgstr "" @@ -8289,6 +8328,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/saved_search_editor.py:49 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/saved_search_editor.py:76 +#, python-format msgid "The saved search %s already exists, perhaps with different case" msgstr "" @@ -8296,42 +8336,34 @@ msgstr "" msgid "The current saved search will be permanently deleted. Are you sure?" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/saved_search_editor_ui.py:94 msgid "Saved Search Editor" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/saved_search_editor_ui.py:95 msgid "Saved Search: " msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/saved_search_editor_ui.py:96 msgid "Select a saved search to edit" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/saved_search_editor_ui.py:97 msgid "Delete this selected saved search" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/saved_search_editor_ui.py:99 msgid "Enter a new saved search name." msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/saved_search_editor_ui.py:100 msgid "Add the new saved search" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/saved_search_editor_ui.py:102 msgid "Rename the current search to what is in the box" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/saved_search_editor_ui.py:104 msgid "Change the contents of the saved search" msgstr "" @@ -8398,6 +8430,7 @@ msgid "Note: You can set intervals of less than a day, by typing the value manua msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:196 +#, python-format msgid "%s news sources" msgstr "" @@ -8434,6 +8467,7 @@ msgid "never" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:384 +#, python-format msgid "%d days, %d hours and %d minutes ago" msgstr "" @@ -8859,6 +8893,7 @@ msgid "Add tag to available tags and apply it to current book" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor.py:21 +#, python-format msgid "%s (was %s)" msgstr "" @@ -8967,17 +9002,14 @@ msgstr "" msgid "Python &code:" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_line_editor.py:30 msgid "Remove any template from the box" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_line_editor.py:32 msgid "Open Template Editor" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_line_editor.py:41 #: /home/kovid/work/calibre/src/calibre/gui2/library/delegates.py:426 msgid "Edit template" @@ -8988,6 +9020,7 @@ msgid "Test email settings" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/test_email_ui.py:57 +#, python-format msgid "Send test mail from %s to:" msgstr "" @@ -9037,6 +9070,7 @@ msgid "No recipe selected" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:146 +#, python-format msgid "The attached file: %s is a recipe to download %s." msgstr "" @@ -9068,6 +9102,7 @@ msgid "Feed must have a URL" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:194 +#, python-format msgid "The feed %s must have a URL" msgstr "" @@ -9084,6 +9119,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:242 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:251 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:338 +#, python-format msgid "

Could not create recipe. Error:
%s" msgstr "" @@ -9096,6 +9132,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:256 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:315 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:342 +#, python-format msgid "A custom recipe named %s already exists. Do you want to replace it?" msgstr "" @@ -9209,14 +9246,17 @@ msgid "Recipe source code (python)" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dnd.py:51 +#, python-format msgid "Download %s" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dnd.py:54 +#, python-format msgid "Downloading %s from %s" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dnd.py:85 +#, python-format msgid "Failed to download from %r with error: %s" msgstr "" @@ -9229,6 +9269,7 @@ msgid "Not a support ebook format." msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/ebook_download.py:87 +#, python-format msgid "Downloading %s" msgstr "" @@ -9241,6 +9282,7 @@ msgid "Failed to download ebook" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/email.py:123 +#, python-format msgid "Email %s to %s" msgstr "" @@ -9249,6 +9291,7 @@ msgid "News:" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/email.py:144 +#, python-format msgid "Attached is the %s periodical downloaded by calibre." msgstr "" @@ -9266,6 +9309,7 @@ msgid "by" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/email.py:203 +#, python-format msgid "in the %s format." msgstr "" @@ -9440,6 +9484,7 @@ msgid "Running time" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:77 +#, python-format msgid "There are %d running jobs:" msgstr "" @@ -9450,6 +9495,7 @@ msgid "Unknown job" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:84 +#, python-format msgid "There are %d waiting jobs:" msgstr "" @@ -9612,10 +9658,12 @@ msgid "Double click to edit me

" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:167 +#, python-format msgid "Hide column %s" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:172 +#, python-format msgid "Sort on %s" msgstr "" @@ -9628,6 +9676,7 @@ msgid "Descending" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:188 +#, python-format msgid "Change text alignment for %s" msgstr "" @@ -9680,6 +9729,7 @@ msgid " - LRF Viewer" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main.py:160 +#, python-format msgid "No matches for the search phrase %s were found." msgstr "" @@ -9767,6 +9817,7 @@ msgid "Failed to create library" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/main.py:106 +#, python-format msgid "Failed to create calibre library at: %r." msgstr "" @@ -9793,6 +9844,7 @@ msgid "Bad database location" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/main.py:205 +#, python-format msgid "Bad database location %r. calibre will now quit." msgstr "" @@ -9809,10 +9861,12 @@ msgid "Repairing database. This can take a very long time for a large collection msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/main.py:237 +#, python-format msgid "Bad database location %r. Will start with a new, empty calibre library" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/main.py:247 +#, python-format msgid "Starting %s: Loading books..." msgstr "" @@ -9846,6 +9900,7 @@ msgid "Cannot Start " msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/main.py:343 +#, python-format msgid "%s is already running." msgstr "" @@ -9874,6 +9929,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:103 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:267 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:406 +#, python-format msgid "Could not open %s. Is it being used by another program?" msgstr "" @@ -9924,6 +9980,7 @@ msgid "&Number:" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:587 +#, python-format msgid "" "Last modified: %s\n" "\n" @@ -9968,6 +10025,7 @@ msgid "Could not read metadata" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:769 +#, python-format msgid "Could not read metadata from %s format" msgstr "" @@ -10016,6 +10074,7 @@ msgid "This book has no cover" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:924 +#, python-format msgid "Cover size: %dx%d pixels" msgstr "" @@ -10036,6 +10095,7 @@ msgid "I&ds:" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1077 +#, python-format msgid "" "Edit the identifiers for this book. For example: \n" "\n" @@ -10082,6 +10142,7 @@ msgid "Schedule download?" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/metadata/bulk_download.py:46 +#, python-format msgid "The download of metadata for the %d selected book(s) will run in the background. Proceed?" msgstr "" @@ -10110,6 +10171,7 @@ msgid "Download &both" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/metadata/bulk_download.py:100 +#, python-format msgid "Download metadata for %d books" msgstr "" @@ -10126,6 +10188,7 @@ msgid "(Failed cover)" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/metadata/bulk_download.py:199 +#, python-format msgid "Downloaded %d of %d" msgstr "" @@ -10172,11 +10235,11 @@ msgstr "" msgid "Set author from author sort" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:129 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:130 msgid "Swap the author and title" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:135 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:136 msgid "Manage authors. Use to rename authors and correct individual author's sort values" msgstr "" @@ -10206,15 +10269,18 @@ msgid "Could not read cover" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:307 +#, python-format msgid "Could not read cover from %s format" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:314 +#, python-format msgid "The cover in the %s format is invalid" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:458 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:463 +#, python-format msgid "Save changes and edit the metadata of %s" msgstr "" @@ -10297,6 +10363,7 @@ msgid "Searching..." msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:691 +#, python-format msgid "Downloading covers for %s, please wait..." msgstr "" @@ -10305,10 +10372,12 @@ msgid "Failed to download any covers, click \"Show details\" for details." msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:727 +#, python-format msgid "Could not find any covers for %s" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:729 +#, python-format msgid "Found %d covers of %s. Pick the one you like best." msgstr "" @@ -10396,14 +10465,14 @@ msgid "&Configure metadata from file name" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/preferences/behavior.py:34 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/behavior.py:36 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/behavior_ui.py:160 -msgid "Low" +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/behavior_ui.py:159 +msgid "High" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/preferences/behavior.py:34 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/behavior_ui.py:159 -msgid "High" +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/behavior.py:36 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/behavior_ui.py:160 +msgid "Low" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/preferences/behavior.py:36 @@ -10597,6 +10666,7 @@ msgid "Enter a regular expression" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:224 +#, python-format msgid "You can match multiple values by separating them with %s" msgstr "" @@ -10629,6 +10699,7 @@ msgid "Invalid condition" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:353 +#, python-format msgid "One of the conditions for this rule is invalid: %s" msgstr "" @@ -10641,6 +10712,7 @@ msgid "You must specify at least one non-empty condition for this rule" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:447 +#, python-format msgid "" "\n" "

Advanced Rule for column %s:\n" @@ -10649,6 +10721,7 @@ msgid "" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:452 +#, python-format msgid "" "

Set the color of %s to %s if the following\n" " conditions are met:

\n" @@ -10657,10 +10730,11 @@ msgid "" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:467 +#, python-format msgid "
  • If the %s column %s value: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:482 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:483 msgid "You can control the color of columns in the book list by creating \"rules\" that tell calibre what color to use. Click the Add Rule button below to get started.

    You can change an existing rule by double clicking it." msgstr "" @@ -10689,6 +10763,7 @@ msgid "No rule selected" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:573 +#, python-format msgid "No rule selected for %s." msgstr "" @@ -10705,6 +10780,7 @@ msgid "The selected column is not a custom column" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/preferences/columns.py:103 +#, python-format msgid "Do you really want to delete column %s and all its data?" msgstr "" @@ -10745,47 +10821,38 @@ msgstr "" msgid "Restore settings to default values. Only settings for the currently selected section are restored." msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:21 msgid "Text, column shown in the tag browser" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:24 msgid "Comma separated text, like tags, shown in the tag browser" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:27 msgid "Long text, like comments, not shown in the tag browser" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:30 msgid "Text column for keeping series-like information" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:33 msgid "Text, but with a fixed set of permitted values" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:37 msgid "Floating point numbers" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:39 msgid "Integers" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:41 msgid "Ratings, shown with stars" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:44 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:69 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:76 @@ -10793,33 +10860,23 @@ msgstr "" msgid "Yes/No" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:46 msgid "Column built from other columns" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:48 msgid "Column built from other columns, behaves like tags" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:55 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:56 msgid "Create a custom column" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:67 msgid "Quick create:" msgstr "" -#: -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:68 -msgid "ISBN" -msgstr "" - -#: #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:68 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:175 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/emailp.py:27 @@ -10828,168 +10885,141 @@ msgstr "" msgid "Formats" msgstr "" -#: +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:68 +msgid "ISBN" +msgstr "" + #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:71 msgid "People's names" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:76 msgid "Number" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:76 msgid "Text" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:91 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:92 msgid "Edit a custom column" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:96 msgid "No column selected" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:97 msgid "No column has been selected" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:101 msgid "Selected column is not a user-defined column" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:148 msgid "If checked, this column will be displayed as HTML in book details and the content server. This can be used to construct links with the template language. For example, the template

    <big><b>{title}</b></big>{series:| [|}{series_index:| [|]]}
    will create a field displaying the title in bold large characters, along with the series, for example
    \"An Oblique Approach [Belisarius [1]]\". The template
    <a href=\"http://www.beam-ebooks.de/ebook/{identifiers:select(beam)}\">Beam book</a>
    will generate a link to the book on the Beam ebooks site." msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:177 msgid "My Tags" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:178 msgid "My Series" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:179 msgid "My Rating" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:180 msgid "People" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:207 msgid "Examples: The format {0:0>4d} gives a 4-digit number with leading zeros. The format {0:d} days prints the number then the word \"days\"" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:212 msgid "Examples: The format {0:.1f} gives a floating point number with 1 digit after the decimal point. The format Price: $ {0:,.2f} prints \"Price $ \" then displays the number with 2 digits after the decimal point and thousands separated by commas." msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:221 msgid "No lookup name was provided" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:225 msgid "The lookup name must contain only lower case letters, digits and underscores, and start with a letter" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:228 msgid "Lookup names cannot end with _index, because these names are reserved for the index of a series column." msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:238 msgid "No column heading was provided" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:248 +#, python-format msgid "The lookup name %s is already used" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:260 +#, python-format msgid "The heading %s is already used" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:271 msgid "You must enter a template for composite columns" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:281 msgid "You must enter at least one value for enumeration columns" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:285 msgid "You cannot provide the empty value, as it is included by default" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:289 msgid "The value \"{0}\" is in the list more than once" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:297 msgid "The colors box must be empty or contain the same number of items as the value box" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:302 msgid "The color {0} is unknown" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column_ui.py:220 msgid "&Lookup name" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column_ui.py:221 msgid "Column &heading" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column_ui.py:222 msgid "Used for searching the column. Must contain only digits and lower case letters." msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column_ui.py:223 msgid "Column heading in the library view and category name in the tag browser" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column_ui.py:224 msgid "&Column type" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column_ui.py:225 msgid "What kind of information will be kept in the column." msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column_ui.py:226 msgid "" "Show check marks in the GUI. Values of 'yes', 'checked', and 'true'\n" @@ -10997,22 +11027,18 @@ msgid "" "Everything else will show nothing." msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column_ui.py:229 msgid "Show checkmarks" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column_ui.py:230 msgid "Check this box if this column contains names, like the authors column." msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column_ui.py:231 msgid "Contains names" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column_ui.py:232 msgid "" "

    Date format. Use 1-4 'd's for day, 1-4 'M's for month, and 2 or 4 'y's for year.

    \n" @@ -11023,17 +11049,14 @@ msgid "" " " msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column_ui.py:238 msgid "Use MMM yyyy for month + year, yyyy for year only" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column_ui.py:239 msgid "Default: dd MMM yyyy." msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column_ui.py:240 msgid "" "

    The format specifier must begin with {0:\n" @@ -11041,73 +11064,59 @@ msgid "" " " msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column_ui.py:243 msgid "

    Default: Not formatted. For format language details see the python documentation" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column_ui.py:244 msgid "Format for &dates" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column_ui.py:245 msgid "Format for &numbers" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column_ui.py:246 msgid "&Template" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column_ui.py:247 msgid "Field template. Uses the same syntax as save templates." msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column_ui.py:248 msgid "Similar to save templates. For example, {title} {isbn}" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column_ui.py:249 msgid "Default: (nothing)" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column_ui.py:250 msgid "&Sort/search column by" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column_ui.py:251 msgid "How this column should handled in the GUI when sorting and searching" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column_ui.py:252 msgid "If checked, this column will appear in the tags browser as a category" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column_ui.py:253 msgid "Show in tags browser" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column_ui.py:254 msgid "Show as HTML in book details" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column_ui.py:255 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column_ui.py:260 msgid "Values" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column_ui.py:256 msgid "" "A comma-separated list of permitted values. The empty value is always\n" @@ -11115,19 +11124,16 @@ msgid "" "four values, the first of them being the empty value." msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column_ui.py:259 msgid "The empty string is always the first value" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column_ui.py:261 msgid "" "A list of color names to use when displaying an item. The\n" "list must be empty or contain a color for each value." msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column_ui.py:263 msgid "Colors" msgstr "" @@ -11145,36 +11151,29 @@ msgstr "" msgid "Debug device detection" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_user_defined.py:31 msgid "Getting device information" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_user_defined.py:34 msgid "User-defined device information" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_user_defined.py:51 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_user_defined.py:57 msgid "Device Detection" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_user_defined.py:52 msgid "Ensure your device is disconnected, then press OK" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_user_defined.py:58 msgid "Ensure your device is connected, then press OK" msgstr "" -#: -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_user_defined.py:88 -msgid "" -"Copy these values to the clipboard, paste them into an editor, then enter them into the USER_DEVICE by customizing the device plugin in Preferences->Plugins. Remember to also enter the folders where you want the books to be put. You must restart calibre for your changes to take effect.\n" +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/device_user_defined.py:89 +msgid "Copy these values to the clipboard, paste them into an editor, then enter them into the USER_DEVICE by customizing the device plugin in Preferences->Plugins. Remember to also enter the folders where you want the books to be put. You must restart calibre for your changes to take effect.\n" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/preferences/email_ui.py:66 @@ -11441,147 +11440,119 @@ msgstr "" msgid "Restart needed" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:48 msgid "Source" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:50 msgid "Cover priority" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:77 msgid "This source is configured and ready to go" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:78 msgid "This source needs configuration" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:94 msgid "This plugin is useful only for Chinese language books. It can return incorrect results for books in English. Are you sure you want to enable it?" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:158 msgid "Published date" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:265 +#, python-format msgid "Configure %s
    %s" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:322 msgid "No source selected" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:323 msgid "No source selected, cannot configure." msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources_ui.py:116 msgid "Metadata sources" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources_ui.py:117 -msgid "" -"Disable any metadata sources you do not want by unchecking them. You can also set the cover priority. Covers from sources that have a higher (smaller) priority will be preferred when bulk downloading metadata.\n" +msgid "Disable any metadata sources you do not want by unchecking them. You can also set the cover priority. Covers from sources that have a higher (smaller) priority will be preferred when bulk downloading metadata.\n" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources_ui.py:119 msgid "Sources with a red X next to their names must be configured before they will be used. " msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources_ui.py:120 msgid "Configure selected source" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources_ui.py:122 msgid "If you uncheck any fields, metadata for those fields will not be downloaded" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources_ui.py:123 msgid "&Select all" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources_ui.py:124 msgid "&Clear all" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources_ui.py:125 msgid "&Select default" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources_ui.py:126 msgid "Restore your own subset of checked fields that you define using the 'Set as default' button" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources_ui.py:127 msgid "&Set as default" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources_ui.py:128 msgid "Store the currently checked fields as a default you can restore using the 'Select default' button" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources_ui.py:129 msgid "Convert all downloaded comments to plain &text" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources_ui.py:130 msgid "Swap author names from FN LN to LN, FN" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources_ui.py:131 msgid "Max. number of &tags to download:" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources_ui.py:132 msgid "Max. &time to wait after first match is found:" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources_ui.py:133 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources_ui.py:135 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:199 msgid " secs" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources_ui.py:134 msgid "Max. time to wait after first &cover is found:" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources_ui.py:136 msgid "" "

    Different metadata sources have different sets of tags for the same book. If this option is checked, then calibre will use the smaller tag sets. These tend to be more like genres, while the larger tag sets tend to describe the books content.\n" "

    Note that this option will only make a practical difference if one of the metadata sources has a genre like tag set for the book you are searching for. Most often, they all have large tag sets." msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources_ui.py:138 msgid "Prefer &fewer tags" msgstr "" @@ -11735,6 +11706,7 @@ msgid "Delete plugboard" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/preferences/plugins.py:182 +#, python-format msgid "%(plugin_type)s %(plugins)s" msgstr "" @@ -11770,10 +11742,12 @@ msgid "No valid plugin path" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/preferences/plugins.py:307 +#, python-format msgid "%s is not a valid plugin path" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/preferences/plugins.py:316 +#, python-format msgid "Select an actual plugin under %s to customize" msgstr "" @@ -11821,17 +11795,14 @@ msgstr "" msgid "The template contains no {fields}, so all books will have the same name. Is this OK?" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/preferences/save_template_ui.py:47 msgid "Save &template" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/preferences/save_template_ui.py:48 msgid "By adjusting the template below, you can control what folders the files are saved in and what filenames they are given. You can use the / character to indicate sub-folders. Available metadata variables are described below. If a particular book does not have some metadata, the variable will be replaced by the empty string." msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/preferences/save_template_ui.py:49 msgid "Available variables:" msgstr "" @@ -11873,7 +11844,7 @@ msgstr "" msgid "Save metadata in &OPF file" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/search.py:33 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/search.py:34 msgid "Grouped search terms are search names that permit a query to automatically search across more than one column. For example, if you create a grouped search term allseries with the value series, #myseries, #myseries2, then the query allseries:adhoc will find 'adhoc' in any of the columns series, #myseries, and #myseries2.

    Enter the name of the grouped search term in the drop-down box, enter the list of columns to search in the value box, then push the Save button.

    Note: Search terms are forced to lower case; MySearch and mysearch are the same term.

    You can have your grouped search term show up as user categories in the Tag Browser. Just add the grouped search term names to the Make user categories from box. You can add multiple terms separated by commas. The new user category will be automatically populated with all the items in the categories included in the grouped search term.

    Automatic user categories permit you to see easily all the category items that are in the columns contained in the grouped search term. Using the above allseries example, the automatically-generated user category will contain all the series mentioned in series, #myseries, and #myseries2. This can be useful to check for duplicates, to find which column contains a particular item, or to have hierarchical categories (categories that contain categories)." msgstr "" @@ -12090,7 +12061,6 @@ msgid "" "

    Stanza should see your calibre collection automatically. If not, try adding the URL http://myhostname:8080 as a new catalog in the Stanza reader on your iPhone. Here myhostname should be the fully qualified hostname or the IP address of the computer calibre is running on." msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/preferences/template_functions.py:25 msgid "" "\n" @@ -12145,7 +12115,6 @@ msgid "" " " msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/preferences/template_functions.py:136 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/template_functions.py:146 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/template_functions.py:153 @@ -12154,67 +12123,54 @@ msgstr "" msgid "Template functions" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/preferences/template_functions.py:137 msgid "You cannot delete a built-in function" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/preferences/template_functions.py:147 msgid "Function not defined" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/preferences/template_functions.py:158 msgid "Argument count should be -1 or greater than zero. Setting it to zero means that this function cannot be used in single function mode." msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/preferences/template_functions.py:174 msgid "Exception while compiling function" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/preferences/template_functions.py:202 msgid "function source code not available" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/preferences/template_functions_ui.py:96 msgid "&Function:" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/preferences/template_functions_ui.py:97 msgid "Enter the name of the function to create." msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/preferences/template_functions_ui.py:98 msgid "Arg &count:" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/preferences/template_functions_ui.py:99 msgid "Set this to -1 if the function takes a variable number of arguments" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/preferences/template_functions_ui.py:102 msgid "&Delete" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/preferences/template_functions_ui.py:103 msgid "&Replace" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/preferences/template_functions_ui.py:104 msgid "C&reate" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/preferences/template_functions_ui.py:105 msgid "&Program Code: (be sure to follow python indenting rules)" msgstr "" @@ -12268,6 +12224,7 @@ msgid "Cannot add" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/preferences/toolbar.py:263 +#, python-format msgid "Cannot add the actions %s to this location" msgstr "" @@ -12276,6 +12233,7 @@ msgid "Cannot remove" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/preferences/toolbar.py:282 +#, python-format msgid "Cannot remove the actions %s from this location" msgstr "" @@ -12498,42 +12456,34 @@ msgstr "" msgid "&Alternate shortcut:" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/store/basic_config_widget_ui.py:38 msgid "Added Tags:" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/store/basic_config_widget_ui.py:39 msgid "Open store in external web browswer" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/adv_search_builder_ui.py:219 msgid "&Name:" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/adv_search_builder_ui.py:221 msgid "&Description:" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/adv_search_builder_ui.py:222 msgid "&Headquarters:" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/adv_search_builder_ui.py:226 msgid "Enabled:" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/adv_search_builder_ui.py:227 msgid "DRM:" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/adv_search_builder_ui.py:228 #: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/adv_search_builder_ui.py:230 #: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/adv_search_builder_ui.py:233 @@ -12542,7 +12492,6 @@ msgstr "" msgid "true" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/adv_search_builder_ui.py:229 #: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/adv_search_builder_ui.py:231 #: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/adv_search_builder_ui.py:234 @@ -12551,36 +12500,36 @@ msgstr "" msgid "false" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/adv_search_builder_ui.py:232 #: /home/kovid/work/calibre/src/calibre/gui2/store/search/adv_search_builder_ui.py:216 msgid "Affiliate:" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/adv_search_builder_ui.py:235 msgid "Nam&e/Description ..." msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/chooser_widget_ui.py:78 #: /home/kovid/work/calibre/src/calibre/gui2/store/search/search_ui.py:132 #: /home/kovid/work/calibre/src/calibre/gui2/store/search_ui.py:108 msgid "Query:" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/chooser_widget_ui.py:81 msgid "Enable" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/chooser_widget_ui.py:84 #: /home/kovid/work/calibre/src/calibre/gui2/store/search/search_ui.py:137 #: /home/kovid/work/calibre/src/calibre/gui2/store/search_ui.py:112 msgid "Invert" msgstr "" +#: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/models.py:21 +#: /home/kovid/work/calibre/src/calibre/gui2/store/search/models.py:37 +msgid "Affiliate" +msgstr "" + #: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/models.py:21 msgid "Enabled" msgstr "" @@ -12593,151 +12542,122 @@ msgstr "" msgid "No DRM" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/models.py:21 -#: /home/kovid/work/calibre/src/calibre/gui2/store/search/models.py:37 -msgid "Affiliate" -msgstr "" - -#: #: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/models.py:129 msgid "This store is currently disabled and cannot be used in other parts of calibre." msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/models.py:131 msgid "This store is currently enabled and can be used in other parts of calibre." msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/models.py:136 msgid "This store only distributes ebooks without DRM." msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/models.py:138 msgid "This store distributes ebooks with DRM. It may have some titles without DRM, but you will need to check on a per title basis." msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/models.py:140 +#, python-format msgid "This store is headquartered in %s. This is a good indication of what market the store caters to. However, this does not necessarily mean that the store is limited to that market only." msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/models.py:143 #: /home/kovid/work/calibre/src/calibre/gui2/store/search/models.py:211 +#, python-format msgid "Buying from this store supports the calibre developer: %s." msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/models.py:145 +#, python-format msgid "This store distributes ebooks in the following formats: %s" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/results_view.py:47 msgid "Configure..." msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/store/config/search/search_widget_ui.py:99 #: /home/kovid/work/calibre/src/calibre/gui2/store/config/search_widget_ui.py:99 msgid "Time" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/store/config/search/search_widget_ui.py:100 #: /home/kovid/work/calibre/src/calibre/gui2/store/config/search_widget_ui.py:100 msgid "Number of seconds to wait for a store to respond" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/store/config/search/search_widget_ui.py:101 #: /home/kovid/work/calibre/src/calibre/gui2/store/config/search_widget_ui.py:101 msgid "Number of seconds to let a store process results" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/store/config/search/search_widget_ui.py:102 #: /home/kovid/work/calibre/src/calibre/gui2/store/config/search_widget_ui.py:102 msgid "Display" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/store/config/search/search_widget_ui.py:103 #: /home/kovid/work/calibre/src/calibre/gui2/store/config/search_widget_ui.py:103 msgid "Maximum number of results to show per store" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/store/config/search/search_widget_ui.py:104 #: /home/kovid/work/calibre/src/calibre/gui2/store/config/search_widget_ui.py:104 msgid "Open search result in system browser" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/store/config/search/search_widget_ui.py:105 msgid "Threads" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/store/config/search/search_widget_ui.py:106 msgid "Number of search threads to use" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/store/config/search/search_widget_ui.py:107 msgid "Number of cache update threads to use" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/store/config/search/search_widget_ui.py:108 msgid "Number of conver download threads to use" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/store/config/search/search_widget_ui.py:109 msgid "Number of details threads to use" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/store/config/search_widget_ui.py:105 msgid "Performance" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/store/config/search_widget_ui.py:106 msgid "Number of simultaneous searches" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/store/config/search_widget_ui.py:107 msgid "Number of simultaneous cache updates" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/store/config/search_widget_ui.py:108 msgid "Number of simultaneous cover downloads" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/store/config/search_widget_ui.py:109 msgid "Number of simultaneous details downloads" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/store/mobileread_store_dialog_ui.py:62 msgid "Search:" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/store/mobileread_store_dialog_ui.py:63 #: /home/kovid/work/calibre/src/calibre/gui2/store/search/search_ui.py:142 #: /home/kovid/work/calibre/src/calibre/gui2/store/stores/mobileread/store_dialog_ui.py:77 msgid "Books:" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/store/mobileread_store_dialog_ui.py:65 #: /home/kovid/work/calibre/src/calibre/gui2/store/search/search_ui.py:144 #: /home/kovid/work/calibre/src/calibre/gui2/store/search_ui.py:114 @@ -12746,17 +12666,14 @@ msgstr "" msgid "Close" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/store/search/adv_search_builder_ui.py:212 msgid "&Price:" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/store/search/adv_search_builder_ui.py:219 msgid "Download:" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/store/search/adv_search_builder_ui.py:222 #: /home/kovid/work/calibre/src/calibre/gui2/store/stores/mobileread/adv_search_builder_ui.py:187 msgid "Titl&e/Author/Price ..." @@ -12775,6 +12692,7 @@ msgid "Price" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/store/search/models.py:196 +#, python-format msgid "Detected price as: %s. Check with the store before making a purchase to verify this price is correct. This price often does not include promotions the store may be running." msgstr "" @@ -12791,6 +12709,7 @@ msgid "The DRM status of this book could not be determined. There is a very high msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/store/search/models.py:208 +#, python-format msgid "The following formats can be downloaded directly: %s." msgstr "" @@ -12803,6 +12722,7 @@ msgid "Goto in store..." msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/store/search/search.py:114 +#, python-format msgid "Buying from this store supports the calibre developer: %s

    " msgstr "" @@ -12835,47 +12755,39 @@ msgstr "" msgid "Open in &external browser" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/store/stores/ebooks_com_plugin.py:96 msgid "Not Available" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/store/stores/mobileread/adv_search_builder_ui.py:179 msgid "See the User Manual for more help" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/store/stores/mobileread/cache_progress_dialog_ui.py:51 msgid "Updating book cache" msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/store/stores/mobileread/cache_update_thread.py:42 msgid "Checking last download date." msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/store/stores/mobileread/cache_update_thread.py:48 msgid "Downloading book list from MobileRead." msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/store/stores/mobileread/cache_update_thread.py:61 msgid "Processing books." msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/store/stores/mobileread/cache_update_thread.py:70 +#, python-format msgid "%s of %s books processed." msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/store/stores/mobileread/mobileread_plugin.py:62 msgid "Updating MobileRead book cache..." msgstr "" -#: #: /home/kovid/work/calibre/src/calibre/gui2/store/stores/mobileread/store_dialog_ui.py:74 msgid "&Query:" msgstr "" @@ -12929,6 +12841,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:909 #: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:918 +#, python-format msgid "The name %s is already used" msgstr "" @@ -12937,6 +12850,7 @@ msgid "Duplicate search name" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:938 +#, python-format msgid "The saved search name %s is already used." msgstr "" @@ -12985,10 +12899,12 @@ msgid "Delete user category" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/ui.py:135 +#, python-format msgid "%s is not a user category" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/ui.py:138 +#, python-format msgid "%s contains items. Do you really want to delete it?" msgstr "" @@ -12997,6 +12913,7 @@ msgid "Remove category" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/ui.py:160 +#, python-format msgid "User category %s does not exist" msgstr "" @@ -13005,6 +12922,7 @@ msgid "Add to user category" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/ui.py:180 +#, python-format msgid "A user category %s does not exist" msgstr "" @@ -13012,7 +12930,7 @@ msgstr "" msgid "Find item in tag browser" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/ui.py:308 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/ui.py:309 msgid "" "Search for items. This is a \"contains\" search; items containing the\n" "text anywhere in the name will be found. You can limit the search\n" @@ -13077,50 +12995,62 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:345 #: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:378 #: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:407 +#, python-format msgid "Rename %s" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:349 +#, python-format msgid "Edit sort for %s" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:352 +#, python-format msgid "Edit link for %s" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:359 +#, python-format msgid "Add %s to user category" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:372 +#, python-format msgid "Children of %s" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:382 +#, python-format msgid "Delete search %s" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:387 +#, python-format msgid "Remove %s from category %s" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:394 +#, python-format msgid "Search for %s" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:399 +#, python-format msgid "Search for everything but %s" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:411 +#, python-format msgid "Add sub-category to %s" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:415 +#, python-format msgid "Delete user category %s" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:420 +#, python-format msgid "Hide category %s" msgstr "" @@ -13129,15 +13059,18 @@ msgid "Show category" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:434 +#, python-format msgid "Search for books in category %s" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:440 +#, python-format msgid "Search for books not in category %s" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:449 #: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/view.py:454 +#, python-format msgid "Manage %s" msgstr "" @@ -13154,6 +13087,7 @@ msgid "First letter is usable only when sorting by name" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/tools.py:68 +#, python-format msgid "Convert book %(num)d of %(total)d (%(title)s)" msgstr "" @@ -13164,6 +13098,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/tools.py:97 #: /home/kovid/work/calibre/src/calibre/gui2/tools.py:212 +#, python-format msgid "Could not convert %d of %d books, because no suitable source format was found." msgstr "" @@ -13176,6 +13111,7 @@ msgid "Queueing " msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/tools.py:190 +#, python-format msgid "Convert book %d of %d (%s)" msgstr "" @@ -13188,6 +13124,7 @@ msgid "Convert existing" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/tools.py:334 +#, python-format msgid "The following books have already been converted to %s format. Do you wish to reconvert them?" msgstr "" @@ -13208,6 +13145,7 @@ msgid "Debug mode" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:348 +#, python-format msgid "You have started calibre in debug mode. After you quit calibre, the debug log will be available in the file: %s

    The log will be displayed automatically." msgstr "" @@ -13243,6 +13181,7 @@ msgid "will keep running in the system tray. To close it, choose Quit in msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/update.py:73 +#, python-format msgid "%s has been updated to version %s. See the new features." msgstr "" @@ -13263,6 +13202,7 @@ msgid "Update &plugins" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/update.py:152 +#, python-format msgid " (%d plugin updates)" msgstr "" @@ -13280,6 +13220,7 @@ msgid "Plugin Updates" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/update.py:187 +#, python-format msgid "There are %d plugin updates available" msgstr "" @@ -13633,6 +13574,7 @@ msgid "Clear list of recently opened books" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:366 +#, python-format msgid "Connecting to dict.org to lookup: %s…" msgstr "" @@ -13645,6 +13587,7 @@ msgid "Ebooks" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:495 +#, python-format msgid "" "Make font size %s\n" "Current magnification: %.1f" @@ -13659,6 +13602,7 @@ msgid "smaller" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:515 +#, python-format msgid "No matches found for: %s" msgstr "" @@ -13667,10 +13611,12 @@ msgid "Loading flow..." msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:590 +#, python-format msgid "Laying out %s" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:621 +#, python-format msgid "Bookmark #%d" msgstr "" @@ -13798,6 +13744,7 @@ msgid "Toggle" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:438 +#, python-format msgid "Choose your e-book device. If your device is not in the list, choose a \"%s\" device." msgstr "" @@ -13815,6 +13762,7 @@ msgid "Invalid database" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:571 +#, python-format msgid "

    An invalid library already exists at %s, delete it before trying to move the existing library.
    Error: %s" msgstr "" @@ -13827,6 +13775,7 @@ msgid "Select location for books" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:678 +#, python-format msgid "You must choose an empty folder for the calibre library. %s is not empty." msgstr "" @@ -13860,6 +13809,7 @@ msgid "&Devices" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/wizard/finish_ui.py:49 +#, python-format msgid "

    Congratulations!

    You have successfully setup calibre. Press the %s button to apply your settings." msgstr "" @@ -13896,6 +13846,7 @@ msgid "If you have an existing calibre library, it will be copied to the new loc msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/wizard/send_email.py:34 +#, python-format msgid "Using: %s:%s@%s:%s and %s encryption" msgstr "" @@ -13916,18 +13867,22 @@ msgid "If you don't have an account, you can sign up for a free {name} email acc msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/wizard/send_email.py:68 +#, python-format msgid "Your %s &email address:" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/wizard/send_email.py:69 +#, python-format msgid "Your %s &username:" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/wizard/send_email.py:70 +#, python-format msgid "Your %s &password:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/wizard/send_email.py:88 +#: /home/kovid/work/calibre/src/calibre/gui2/wizard/send_email.py:89 +#, python-format msgid "If you plan to use email to send books to your Kindle, remember to add the your %s email address to the allowed email addresses in your Amazon.com Kindle management page." msgstr "" @@ -13940,6 +13895,7 @@ msgid "Incorrect username" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/wizard/send_email.py:103 +#, python-format msgid "%s needs the full email address as your username" msgstr "" @@ -14092,15 +14048,15 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/library/caches.py:567 #: /home/kovid/work/calibre/src/calibre/library/caches.py:579 #: /home/kovid/work/calibre/src/calibre/library/caches.py:589 -msgid "unchecked" +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:216 +msgid "no" msgstr "" #: /home/kovid/work/calibre/src/calibre/library/caches.py:163 #: /home/kovid/work/calibre/src/calibre/library/caches.py:567 #: /home/kovid/work/calibre/src/calibre/library/caches.py:579 #: /home/kovid/work/calibre/src/calibre/library/caches.py:589 -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:216 -msgid "no" +msgid "unchecked" msgstr "" #: /home/kovid/work/calibre/src/calibre/library/caches.py:361 @@ -14135,6 +14091,7 @@ msgid "Invalid boolean query \"{0}\"" msgstr "" #: /home/kovid/work/calibre/src/calibre/library/catalog.py:55 +#, python-format msgid "" "The fields to output when cataloging books in the database. Should be a comma-separated list of fields.\n" "Available fields: %s,\n" @@ -14145,6 +14102,7 @@ msgid "" msgstr "" #: /home/kovid/work/calibre/src/calibre/library/catalog.py:68 +#, python-format msgid "" "Output field to sort on.\n" "Available fields: author_sort, id, rating, size, timestamp, title_sort\n" @@ -14153,6 +14111,7 @@ msgid "" msgstr "" #: /home/kovid/work/calibre/src/calibre/library/catalog.py:251 +#, python-format msgid "" "The fields to output when cataloging books in the database. Should be a comma-separated list of fields.\n" "Available fields: %s.\n" @@ -14163,6 +14122,7 @@ msgid "" msgstr "" #: /home/kovid/work/calibre/src/calibre/library/catalog.py:264 +#, python-format msgid "" "Output field to sort on.\n" "Available fields: author_sort, id, rating, size, timestamp, title.\n" @@ -14171,6 +14131,7 @@ msgid "" msgstr "" #: /home/kovid/work/calibre/src/calibre/library/catalog.py:273 +#, python-format msgid "" "Create a citation for BibTeX entries.\n" "Boolean value: True, False\n" @@ -14179,6 +14140,7 @@ msgid "" msgstr "" #: /home/kovid/work/calibre/src/calibre/library/catalog.py:282 +#, python-format msgid "" "Create a file entry if formats is selected for BibTeX entries.\n" "Boolean value: True, False\n" @@ -14187,6 +14149,7 @@ msgid "" msgstr "" #: /home/kovid/work/calibre/src/calibre/library/catalog.py:291 +#, python-format msgid "" "The template for citation creation from database fields.\n" "Should be a template with {} enclosed fields.\n" @@ -14196,6 +14159,7 @@ msgid "" msgstr "" #: /home/kovid/work/calibre/src/calibre/library/catalog.py:301 +#, python-format msgid "" "BibTeX file encoding output.\n" "Available types: utf8, cp1252, ascii.\n" @@ -14204,6 +14168,7 @@ msgid "" msgstr "" #: /home/kovid/work/calibre/src/calibre/library/catalog.py:310 +#, python-format msgid "" "BibTeX file encoding flag.\n" "Available types: strict, replace, ignore, backslashreplace.\n" @@ -14212,6 +14177,7 @@ msgid "" msgstr "" #: /home/kovid/work/calibre/src/calibre/library/catalog.py:319 +#, python-format msgid "" "Entry type for BibTeX catalog.\n" "Available types: book, misc, mixed.\n" @@ -14220,6 +14186,7 @@ msgid "" msgstr "" #: /home/kovid/work/calibre/src/calibre/library/catalog.py:625 +#, python-format msgid "" "Title of generated catalog used as title in metadata.\n" "Default: '%default'\n" @@ -14227,6 +14194,7 @@ msgid "" msgstr "" #: /home/kovid/work/calibre/src/calibre/library/catalog.py:632 +#, python-format msgid "" "Save the output from different stages of the conversion pipeline to the specified directory. Useful if you are unsure at which stage of the conversion process a bug is occurring.\n" "Default: '%default'\n" @@ -14234,6 +14202,7 @@ msgid "" msgstr "" #: /home/kovid/work/calibre/src/calibre/library/catalog.py:642 +#, python-format msgid "" "field:pattern specifying custom field/contents indicating book should be excluded.\n" "Default: '%default'\n" @@ -14241,6 +14210,7 @@ msgid "" msgstr "" #: /home/kovid/work/calibre/src/calibre/library/catalog.py:649 +#, python-format msgid "" "Regex describing tags to exclude as genres.\n" "Default: '%default' excludes bracketed tags, e.g. '[]'\n" @@ -14248,12 +14218,14 @@ msgid "" msgstr "" #: /home/kovid/work/calibre/src/calibre/library/catalog.py:655 +#, python-format msgid "" "Comma-separated list of tag words indicating book should be excluded from output.For example: 'skip' will match 'skip this book' and 'Skip will like this'.Default: '%default'\n" "Applies to: ePub, MOBI output formats" msgstr "" #: /home/kovid/work/calibre/src/calibre/library/catalog.py:663 +#, python-format msgid "" "Include 'Authors' section in catalog.\n" "Default: '%default'\n" @@ -14261,6 +14233,7 @@ msgid "" msgstr "" #: /home/kovid/work/calibre/src/calibre/library/catalog.py:670 +#, python-format msgid "" "Include 'Descriptions' section in catalog.\n" "Default: '%default'\n" @@ -14268,6 +14241,7 @@ msgid "" msgstr "" #: /home/kovid/work/calibre/src/calibre/library/catalog.py:677 +#, python-format msgid "" "Include 'Genres' section in catalog.\n" "Default: '%default'\n" @@ -14275,6 +14249,7 @@ msgid "" msgstr "" #: /home/kovid/work/calibre/src/calibre/library/catalog.py:684 +#, python-format msgid "" "Include 'Titles' section in catalog.\n" "Default: '%default'\n" @@ -14282,6 +14257,7 @@ msgid "" msgstr "" #: /home/kovid/work/calibre/src/calibre/library/catalog.py:691 +#, python-format msgid "" "Include 'Series' section in catalog.\n" "Default: '%default'\n" @@ -14289,6 +14265,7 @@ msgid "" msgstr "" #: /home/kovid/work/calibre/src/calibre/library/catalog.py:698 +#, python-format msgid "" "Include 'Recently Added' section in catalog.\n" "Default: '%default'\n" @@ -14296,6 +14273,7 @@ msgid "" msgstr "" #: /home/kovid/work/calibre/src/calibre/library/catalog.py:705 +#, python-format msgid "" "Custom field containing note text to insert in Description header.\n" "Default: '%default'\n" @@ -14303,6 +14281,7 @@ msgid "" msgstr "" #: /home/kovid/work/calibre/src/calibre/library/catalog.py:712 +#, python-format msgid "" ":[before|after]:[True|False] specifying:\n" " Custom field containing notes to merge with Comments\n" @@ -14313,6 +14292,7 @@ msgid "" msgstr "" #: /home/kovid/work/calibre/src/calibre/library/catalog.py:722 +#, python-format msgid "" "Specifies the output profile. In some cases, an output profile is required to optimize the catalog for the device. For example, 'kindle' or 'kindle_dx' creates a structured Table of Contents with Sections and Articles.\n" "Default: '%default'\n" @@ -14320,6 +14300,7 @@ msgid "" msgstr "" #: /home/kovid/work/calibre/src/calibre/library/catalog.py:729 +#, python-format msgid "" "field:pattern indicating book has been read.\n" "Default: '%default'\n" @@ -14327,6 +14308,7 @@ msgid "" msgstr "" #: /home/kovid/work/calibre/src/calibre/library/catalog.py:735 +#, python-format msgid "" "Size hint (in inches) for book covers in catalog.\n" "Range: 1.0 - 2.0\n" @@ -14335,6 +14317,7 @@ msgid "" msgstr "" #: /home/kovid/work/calibre/src/calibre/library/catalog.py:743 +#, python-format msgid "" "Tag indicating book to be displayed as wishlist item.\n" "Default: '%default'\n" @@ -14342,15 +14325,14 @@ msgid "" msgstr "" #: /home/kovid/work/calibre/src/calibre/library/catalog.py:1427 -msgid "" -"No enabled genres found to catalog.\n" +msgid "No enabled genres found to catalog.\n" msgstr "" #: /home/kovid/work/calibre/src/calibre/library/catalog.py:1431 msgid "No books available to catalog" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalog.py:1506 +#: /home/kovid/work/calibre/src/calibre/library/catalog.py:1507 msgid "" "Inconsistent Author Sort values for\n" "Author '{0}':\n" @@ -14360,7 +14342,7 @@ msgid "" "Select all books by '{0}', apply correct Author Sort value in Edit Metadata dialog, then rebuild the catalog.\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalog.py:1523 +#: /home/kovid/work/calibre/src/calibre/library/catalog.py:1524 msgid "" "Warning: inconsistent Author Sort values for\n" "Author '{0}':\n" @@ -14427,7 +14409,7 @@ msgstr "" msgid "Path to the calibre library. Default is to use the path stored in the settings." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:124 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:125 msgid "" "%prog list [options]\n" "\n" @@ -14435,6 +14417,7 @@ msgid "" msgstr "" #: /home/kovid/work/calibre/src/calibre/library/cli.py:132 +#, python-format msgid "" "The fields to display when listing books in the database. Should be a comma separated list of fields.\n" "Available fields: %s\n" @@ -14442,6 +14425,7 @@ msgid "" msgstr "" #: /home/kovid/work/calibre/src/calibre/library/cli.py:139 +#, python-format msgid "" "The field by which to sort the results.\n" "Available fields: %s\n" @@ -14481,7 +14465,7 @@ msgstr "" 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:272 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:273 msgid "" "%prog add [options] file1 file2 file3 ...\n" "\n" @@ -14521,7 +14505,7 @@ msgstr "" msgid "You must specify at least one file to add" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:336 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:337 msgid "" "%prog remove ids\n" "\n" @@ -14532,7 +14516,7 @@ msgstr "" msgid "You must specify at least one book to remove" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:370 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:371 msgid "" "%prog add_format [options] id ebook_file\n" "\n" @@ -14547,7 +14531,7 @@ msgstr "" msgid "ebook file must have an extension" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:398 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:399 msgid "" "\n" "%prog remove_format [options] id fmt\n" @@ -14559,7 +14543,7 @@ msgstr "" msgid "You must specify an id and a format" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:433 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:434 msgid "" "\n" "%prog show_metadata [options] id\n" @@ -14576,7 +14560,7 @@ msgstr "" msgid "You must specify an id" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:465 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:466 msgid "" "\n" "%prog set_metadata [options] id /path/to/metadata.opf\n" @@ -14617,6 +14601,7 @@ msgid "Specifying this switch will turn this behavior off." msgstr "" #: /home/kovid/work/calibre/src/calibre/library/cli.py:543 +#, python-format msgid "You must specify some ids or the %s option" msgstr "" @@ -14641,7 +14626,7 @@ msgstr "" msgid "You must specify label, name and datatype" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:644 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:645 msgid "" "\n" " %prog catalog /path/to/destination.(CSV|EPUB|MOBI|XML ...) [options]\n" @@ -14673,7 +14658,7 @@ msgstr "" msgid "Error: You must specify a catalog output file" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:727 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:728 msgid "" "\n" " %prog set_custom [options] column id value\n" @@ -14693,7 +14678,7 @@ msgstr "" msgid "Error: You must specify a field name, id and value" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:768 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:769 msgid "" "\n" " %prog custom_columns [options]\n" @@ -14707,6 +14692,7 @@ msgid "Show details for each column." msgstr "" #: /home/kovid/work/calibre/src/calibre/library/cli.py:787 +#, python-format msgid "You will lose all data in the column: %r. Are you sure (y/n)? " msgstr "" @@ -14714,7 +14700,7 @@ msgstr "" msgid "y" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:795 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:796 msgid "" "\n" " %prog remove_custom_column [options] label\n" @@ -14732,7 +14718,7 @@ msgstr "" msgid "Error: You must specify a column label" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:823 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:824 msgid "" "\n" " %prog saved_searches [options] list\n" @@ -14774,6 +14760,7 @@ msgid "removed" msgstr "" #: /home/kovid/work/calibre/src/calibre/library/cli.py:871 +#, python-format msgid "Error: Action %s not recognized, must be one of: (add|remove|list)" msgstr "" @@ -14811,7 +14798,7 @@ msgstr "" msgid "Unknown report check" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:960 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:961 msgid "" "%prog restore_database [options]\n" "\n" @@ -14831,6 +14818,7 @@ msgid "Really do the recovery. The command will not run unless this option is sp msgstr "" #: /home/kovid/work/calibre/src/calibre/library/cli.py:988 +#, python-format msgid "You must provide the %s option to do a recovery" msgstr "" @@ -14864,7 +14852,8 @@ msgstr "" msgid "CATEGORY ITEMS" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:1157 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:1158 +#, python-format msgid "" "%%prog command [options] [arguments]\n" "\n" @@ -14885,6 +14874,7 @@ msgid "The label must contain only lower case letters, digits and underscores, a msgstr "" #: /home/kovid/work/calibre/src/calibre/library/database2.py:65 +#, python-format msgid "%sAverage rating is %3.1f" msgstr "" @@ -14893,10 +14883,12 @@ msgid "Main" msgstr "" #: /home/kovid/work/calibre/src/calibre/library/database2.py:3307 +#, python-format msgid "

    Migrating old database to ebook library in %s

    " msgstr "" #: /home/kovid/work/calibre/src/calibre/library/database2.py:3336 +#, python-format msgid "Copying %s" msgstr "" @@ -15001,10 +14993,12 @@ msgid "Comma separated list of formats to save for each book. By default all ava msgstr "" #: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:94 +#, python-format msgid "The template to control the filename and directory structure of the saved files. Default is \"%s\" which will save books into a per-author subdirectory with filenames containing title and author. Available controls are: {%s}" msgstr "" #: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:99 +#, python-format msgid "The template to control the filename and directory structure of files sent to the device. Default is \"%s\" which will save books into a per-author directory with filenames containing title and author. Available controls are: {%s}" msgstr "" @@ -15035,14 +15029,17 @@ msgid "Settings to control the calibre content server" msgstr "" #: /home/kovid/work/calibre/src/calibre/library/server/__init__.py:25 +#, python-format msgid "The port on which to listen. Default is %default" msgstr "" #: /home/kovid/work/calibre/src/calibre/library/server/__init__.py:27 +#, python-format msgid "The server timeout in seconds. Default is %default" msgstr "" #: /home/kovid/work/calibre/src/calibre/library/server/__init__.py:29 +#, python-format msgid "The max number of worker threads to use. Default is %default" msgstr "" @@ -15051,10 +15048,12 @@ msgid "Set a password to restrict access. By default access is unrestricted." msgstr "" #: /home/kovid/work/calibre/src/calibre/library/server/__init__.py:33 +#, python-format msgid "Username for access. By default, it is: %default" msgstr "" #: /home/kovid/work/calibre/src/calibre/library/server/__init__.py:37 +#, python-format msgid "The maximum size for displayed covers. Default is %default." msgstr "" @@ -15063,6 +15062,7 @@ msgid "The maximum number of matches to return per OPDS query. This affects Stan msgstr "" #: /home/kovid/work/calibre/src/calibre/library/server/__init__.py:43 +#, python-format msgid "Group items in categories such as author/tags by first letter when there are more than this number of items. Default: %default. Set to a large number to disable grouping." msgstr "" @@ -15089,6 +15089,7 @@ msgid "Last" msgstr "" #: /home/kovid/work/calibre/src/calibre/library/server/browse.py:109 +#, python-format msgid "Browsing %d books" msgstr "" @@ -15098,10 +15099,12 @@ msgid "Average rating" msgstr "" #: /home/kovid/work/calibre/src/calibre/library/server/browse.py:127 +#, python-format msgid "%s: %.1f stars" msgstr "" #: /home/kovid/work/calibre/src/calibre/library/server/browse.py:163 +#, python-format msgid "%d stars" msgstr "" @@ -15162,6 +15165,7 @@ msgid "Other formats" msgstr "" #: /home/kovid/work/calibre/src/calibre/library/server/browse.py:747 +#, python-format msgid "Read %(title)s in the %(fmt)s format" msgstr "" @@ -15193,7 +15197,7 @@ msgstr "" msgid "Matching books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server/main.py:39 +#: /home/kovid/work/calibre/src/calibre/library/server/main.py:40 msgid "" "[options]\n" "\n" @@ -15223,22 +15227,27 @@ msgid "Auto reload server when source code changes. May not work in all environm msgstr "" #: /home/kovid/work/calibre/src/calibre/library/server/opds.py:125 +#, python-format msgid "%d book" msgstr "" #: /home/kovid/work/calibre/src/calibre/library/server/opds.py:148 +#, python-format msgid "%d items" msgstr "" #: /home/kovid/work/calibre/src/calibre/library/server/opds.py:166 +#, python-format msgid "RATING: %s
    " msgstr "" #: /home/kovid/work/calibre/src/calibre/library/server/opds.py:169 +#, python-format msgid "TAGS: %s
    " msgstr "" #: /home/kovid/work/calibre/src/calibre/library/server/opds.py:174 +#, python-format msgid "SERIES: %s [%s]
    " msgstr "" @@ -15255,8 +15264,8 @@ msgid "Books sorted by " msgstr "" #: /home/kovid/work/calibre/src/calibre/utils/config.py:34 -msgid "" -"%sUsage%s: %s\n" +#, python-format +msgid "%sUsage%s: %s\n" msgstr "" #: /home/kovid/work/calibre/src/calibre/utils/config.py:85 @@ -15380,6 +15389,7 @@ msgid "format: type {0} requires a decimal (float) value, got {1}" msgstr "" #: /home/kovid/work/calibre/src/calibre/utils/formatter.py:299 +#, python-format msgid "%s: unknown function" msgstr "" @@ -15820,6 +15830,7 @@ msgid "Failed to negotiate SSH session: " msgstr "" #: /home/kovid/work/calibre/src/calibre/utils/sftp.py:71 +#, python-format msgid "Failed to authenticate with server: %s" msgstr "" @@ -15865,6 +15876,7 @@ msgid "Unknown News Source" msgstr "" #: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:630 +#, python-format msgid "The \"%s\" recipe needs a username and password." msgstr "" @@ -15917,18 +15929,22 @@ msgid "Generating masthead..." msgstr "" #: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:966 +#, python-format msgid "Starting download [%d thread(s)]..." msgstr "" #: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:982 +#, python-format msgid "Feeds downloaded to %s" msgstr "" #: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:991 +#, python-format msgid "Could not download cover: %s" msgstr "" #: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:1000 +#, python-format msgid "Downloading cover from %s" msgstr "" @@ -15941,10 +15957,12 @@ msgid "Untitled Article" msgstr "" #: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:1285 +#, python-format msgid "Article downloaded: %s" msgstr "" #: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:1296 +#, python-format msgid "Article download failed: %s" msgstr "" @@ -16012,22 +16030,27 @@ msgid "" msgstr "" #: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:479 +#, python-format msgid "Base directory into which URL is saved. Default is %default" msgstr "" #: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:482 +#, python-format 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:485 +#, python-format 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:488 +#, python-format msgid "The maximum number of files to download. This only applies to files from tags. Default is %default" msgstr "" #: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:490 +#, python-format msgid "Minimum interval in seconds between consecutive fetches. Default is %default s" msgstr "" @@ -16048,7 +16071,6 @@ msgid "Do not download CSS stylesheets." msgstr "" - #: /home/kovid/work/calibre/resources/default_tweaks.py:12 msgid "Auto increment series index" msgstr ""