diff --git a/.pydevproject b/.pydevproject index 416319d077..fba36e6fb7 100644 --- a/.pydevproject +++ b/.pydevproject @@ -5,9 +5,5 @@ python 2.5 /calibre/src -/calibre/devices -/calibre/libprs500.devices.prs500 -/calibre/prs500 -/calibre/gui2 diff --git a/installer/cx_Freeze/HISTORY.txt b/installer/cx_Freeze/HISTORY.txt new file mode 100644 index 0000000000..acf9ad0dfe --- /dev/null +++ b/installer/cx_Freeze/HISTORY.txt @@ -0,0 +1,244 @@ +Changes from 4.0 to 4.0.1 + 1) Added support for Python 2.6. On Windows a manifest file is now required + because of the switch to using the new Microsoft C runtime. + 2) Ensure that hooks are run for builtin modules. + +Changes from 4.0b1 to 4.0 + 1) Added support for copying files to the target directory. + 2) Added support for a hook that runs when a module is missing. + 3) Added support for binary path includes as well as excludes; use sequences + rather than dictionaries as a more convenient API; exclude the standard + locations for 32-bit and 64-bit libaries in multi-architecture systems. + 4) Added support for searching zip files (egg files) for modules. + 5) Added support for handling system exit exceptions similarly to what Python + does itself as requested by Sylvain. + 6) Added code to wait for threads to shut down like the normal Python + interpreter does. Thanks to Mariano Disanzo for discovering this + discrepancy. + 7) Hooks added or modified based on feedback from many people. + 8) Don't include the version name in the display name of the MSI. + 9) Use the OS dependent path normalization routines rather than simply use the + lowercase value as on Unix case is important; thanks to Artie Eoff for + pointing this out. +10) Include a version attribute in the cx_Freeze package and display it in the + output for the --version option to the script. +11) Include build instructions as requested by Norbert Sebok. +12) Add support for copying files when modules are included which require data + files to operate properly; add support for copying the necessary files for + the Tkinter and matplotlib modules. +13) Handle deferred imports recursively as needed; ensure that from lists do + not automatically indicate that they are part of the module or the deferred + import processing doesn't actually work! +14) Handle the situation where a module imports everything from a package and + the __all__ variable has been defined but the package has not actually + imported everything in the __all__ variable during initialization. +15) Modified license text to more closely match the Python Software Foundation + license as was intended. +16) Added sample script for freezing an application using matplotlib. +17) Renamed freeze to cxfreeze to avoid conflict with another package that uses + that executable as requested by Siegfried Gevatter. + +Changes from 3.0.3 to 4.0b1 + 1) Added support for placing modules in library.zip or in a separate zip file + for each executable that is produced. + 2) Added support for copying binary dependent files (DLLs and shared + libraries) + 3) Added support for including all submodules in a package + 4) Added support for including icons in Windows executables + 5) Added support for constants module which can be used for determining + certain build constants at runtime + 6) Added support for relative imports available in Python 2.5 and up + 7) Added support for building Windows installers (Python 2.5 and up) and + RPM packages + 8) Added support for distutils configuration scripts + 9) Added support for hooks which can force inclusion or exclusion of modules + when certain modules are included +10) Added documentation and samples +11) Added setup.py for building the cx_Freeze package instead of a script + used to build only the frozen bases +12) FreezePython renamed to a script called freeze in the Python distribution +13) On Linux and other platforms that support it set LD_RUN_PATH to include + the directory in which the executable is located + +Changes from 3.0.2 to 3.0.3 + 1) In Common.c, used MAXPATHLEN defined in the Python OS independent include + file rather than the PATH_MAX define which is OS dependent and is not + available on IRIX as noted by Andrew Jones. + 2) In the initscript ConsoleSetLibPath.py, added lines from initscript + Console.py that should have been there since the only difference between + that script and this one is the automatic re-execution of the executable. + 3) Added an explicit "import encodings" to the initscripts in order to handle + Unicode encodings a little better. Thanks to Ralf Schmitt for pointing out + the problem and its solution. + 4) Generated a meaningful name for the extension loader script so that it is + clear which particular extension module is being loaded when an exception + is being raised. + 5) In MakeFrozenBases.py, use distutils to figure out a few more + platform-dependent linker flags as suggested by Ralf Schmitt. + +Changes from 3.0.1 to 3.0.2 + 1) Add support for compressing the byte code in the zip files that are + produced. + 2) Add better support for the win32com package as requested by Barry Scott. + 3) Prevent deletion of target file if it happens to be identical to the + source file. + 4) Include additional flags for local modifications to a Python build as + suggested by Benjamin Rutt. + 5) Expanded instructions for building cx_Freeze from source based on a + suggestion from Gregg Lind. + 6) Fix typo in help string. + +Changes from 3.0 to 3.0.1 + 1) Added option --default-path which is used to specify the path used when + finding modules. This is particularly useful when performing cross + compilations (such as for building a frozen executable for Windows CE). + 2) Added option --shared-lib-name which can be used to specify the name of + the shared library (DLL) implementing the Python runtime that is required + for the frozen executable to work. This option is also particularly useful + when cross compiling since the normal method for determining this + information cannot be used. + 3) Added option --zip-include which allows for additional files to be added + to the zip file that contains the modules that implement the Python + script. Thanks to Barray Warsaw for providing the initial patch. + 4) Added support for handling read-only files properly. Thanks to Peter + Grayson for pointing out the problem and providing a solution. + 5) Added support for a frozen executable to be a symbolic link. Thanks to + Robert Kiendl for providing the initial patch. + 6) Enhanced the support for running a frozen executable that uses an existing + Python installation to locate modules it requires. This is primarily of + use for embedding Python where the interface is C but the ability to run + from source is still desired. + 7) Modified the documentation to indicate that building from source on + Windows currently requires the mingw compiler (http://www.mingw.org). + 8) Workaround the problem in Python 2.3 (fixed in Python 2.4) which causes a + broken module to be left in sys.modules if an ImportError takes place + during the execution of the code in that module. Thanks to Roger Binns + for pointing this out. + +Changes from 3.0 beta3 to 3.0 + 1) Ensure that ldd is only run on extension modules. + 2) Allow for using a compiler other than gcc for building the frozen base + executables by setting the environment variable CC. + 3) Ensure that the import lock is not held while executing the main script; + otherwise, attempts to import a module within a thread will hang that + thread as noted by Roger Binns. + 4) Added support for replacing the paths in all frozen modules with something + else (so that for example the path of the machine on which the freezing + was done is not displayed in tracebacks) + +Changes from 3.0 beta2 to 3.0 beta3 + 1) Explicitly include the warnings module so that at runtime warnings are + suppressed as when running Python normally. + 2) Improve the extension loader so that an ImportError is raised when the + dynamic module is not located; otherwise an error about missing attributes + is raised instead. + 3) Extension loaders are only created when copying dependencies since the + normal module should be loadable in the situation where a Python + installation is available. + 4) Added support for Python 2.4. + 5) Fixed the dependency checking for wxPython to be a little more + intelligent. + +Changes from 3.0 beta1 to 3.0 beta2 + 1) Fix issues with locating the initscripts and bases relative to the + directory in which the executable was started. + 2) Added new base executable ConsoleKeepPath which is used when an existing + Python installation is required (such as for FreezePython itself). + 3) Forced the existence of a Python installation to be ignored when using the + standard Console base executable. + 4) Remove the existing file when copying dependent files; otherwise, an error + is raised when attempting to overwrite read-only files. + 5) Added option -O (or -OO) to FreezePython to set the optimization used when + generating bytecode. + +Changes from 2.2 to 3.0 beta1 + 1) cx_Freeze now requires Python 2.3 or higher since it takes advantage of + the ability of Python 2.3 and higher to import modules from zip files. + This makes the freezing process considerably simpler and also allows for + the execution of multiple frozen packages (such as found in COM servers or + shared libraries) without requiring modification to the Python modules. + 2) All external dependencies have been removed. cx_Freeze now only requires + a standard Python distribution to do its work. + 3) Added the ability to define the initialization scripts that cx_Freeze uses + on startup of the frozen program. Previously, these scripts were written + in C and could not easily be changed; now they are written in Python and + can be found in the initscripts directory (and chosen with the + new --init-script option to FreezePython). + 4) The base executable ConsoleSetLibPath has been removed and replaced with + the initscript ConsoleSetLibPath. + 5) Removed base executables for Win32 services and Win32 COM servers. This + functionality will be restored in the future but it is not currently in a + state that is ready for release. If this functionality is required, please + use py2exe or contact me for my work in progress. + 6) The attribute sys.frozen is now set so that more recent pywin32 modules + work as expected when frozen. + 7) Added option --include-path to FreezePython to allow overriding of + sys.path without modifying the environment variable PYTHONPATH. + 8) Added option --target-dir/--install-dir to specify the directory in which + the frozen executable and its dependencies will be placed. + 9) Removed the option --shared-lib since it was used for building shared + libraries and can be managed with the initscript SharedLib.py. +10) MakeFrozenBases.py now checks the platform specific include directory as + requested by Michael Partridge. + + +Changes from 2.1 to 2.2 + 1) Add option (--ext-list-file) to FreezePython to write the list of + extensions copied to the installation directory to a file. This option is + useful in cases where multiple builds are performed into the same + installation directory. + 2) Pass the arguments on the command line through to Win32 GUI applications. + Thanks to Michael Porter for pointing this out. + 3) Link directly against the python DLL when building the frozen bases on + Windows, thus eliminating the need for building an import library. + 4) Force sys.path to include the directory in which the script to be frozen + is found. + 5) Make sure that the installation directory exists before attempting to + copy the target binary into it. + 6) The Win32GUI base has been modified to display fatal errors in message + boxes, rather than printing errors to stderr, since on Windows the + standard file IO handles are all closed. + +Changes from 2.0 to 2.1 + 1) Remove dependency on Python 2.2. Thanks to Paul Moore for not only + pointing it out but providing patches. + 2) Set up the list of frozen modules in advance, rather than doing it after + Python is initialized so that implicit imports done by Python can be + satisfied. The bug in Python 2.3 that demonstrated this issue has been + fixed in the first release candidate. Thanks to Thomas Heller for pointing + out the obvious in this instance! + 3) Added additional base executable (ConsoleSetLibPath) to support setting + the LD_LIBRARY_PATH variable on Unix platforms and restarting the + executable to put the new setting into effect. This is primarily of use + in distributing wxPython applications on Unix where the shared library + has an embedded RPATH value which can cause problems. + 4) Small improvements of documentation based on feedback from several people. + 5) Print information about the files written or copied during the freezing + process. + 6) Do not copy extensions when freezing if the path is being overridden since + it is expected that a full Python installation is available to the target + users of the frozen binary. + 7) Provide meaningful error message when the wxPython library cannot be + found during the freezing process. + +Changes from 1.1 to 2.0 + 1) Added support for in process (DLL) COM servers using PythonCOM. + 2) Ensured that the frozen flag is set prior to determining the full path for + the program in order to avoid warnings about Python not being found on + some platforms. + 3) Added include file and resource file to the source tree to avoid the + dependency on the Wine message compiler for Win32 builds. + 4) Dropped the option --copy-extensions; this now happens automatically since + the resulting binary is useless without them. + 5) Added a sample for building a Win32 service. + 6) Make use of improved modules from Python 2.3 (which function under 2.2) + +Changes from 1.0 to 1.1 + 1) Fixed import error with C extensions in packages; thanks to Thomas Heller + for pointing out the solution to this problem. + 2) Added options to FreezePython to allow for the inclusion of modules which + will not be found by the module finder (--include-modules) and the + exclusion of modules which will be found by the module finder but should + not be included (--exclude-modules). + 3) Fixed typo in README.txt. + diff --git a/installer/cx_Freeze/LICENSE.txt b/installer/cx_Freeze/LICENSE.txt new file mode 100644 index 0000000000..cb9ee05a8a --- /dev/null +++ b/installer/cx_Freeze/LICENSE.txt @@ -0,0 +1,53 @@ +Copyright 2007-2008, Colt Engineering, Edmonton, Alberta, Canada. +Copyright 2001-2006, Computronix (Canada) Ltd., Edmonton, Alberta, Canada. +All rights reserved. + +NOTE: this license is derived from the Python Software Foundation License +which can be found at http://www.python.org/psf/license + +License for cx_Freeze 4.0.1 +--------------------------- + +1. This LICENSE AGREEMENT is between the copyright holders and the Individual + or Organization ("Licensee") accessing and otherwise using cx_Freeze + software in source or binary form and its associated documentation. + +2. Subject to the terms and conditions of this License Agreement, the + copyright holders hereby grant Licensee a nonexclusive, royalty-free, + world-wide license to reproduce, analyze, test, perform and/or display + publicly, prepare derivative works, distribute, and otherwise use cx_Freeze + alone or in any derivative version, provided, however, that this License + Agreement and this notice of copyright are retained in cx_Freeze alone or in + any derivative version prepared by Licensee. + +3. In the event Licensee prepares a derivative work that is based on or + incorporates cx_Freeze or any part thereof, and wants to make the derivative + work available to others as provided herein, then Licensee hereby agrees to + include in any such work a brief summary of the changes made to cx_Freeze. + +4. The copyright holders are making cx_Freeze available to Licensee on an + "AS IS" basis. THE COPYRIGHT HOLDERS MAKE NO REPRESENTATIONS OR WARRANTIES, + EXPRESS OR IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, THE COPYRIGHT + HOLDERS MAKE NO AND DISCLAIM ANY REPRESENTATION OR WARRANTY OF + MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF + CX_FREEZE WILL NOT INFRINGE ANY THIRD PARTY RIGHTS. + +5. THE COPYRIGHT HOLDERS SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF + CX_FREEZE FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS + A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING CX_FREEZE, OR ANY + DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. + +6. This License Agreement will automatically terminate upon a material breach + of its terms and conditions. + +7. Nothing in this License Agreement shall be deemed to create any relationship + of agency, partnership, or joint venture between the copyright holders and + Licensee. This License Agreement does not grant permission to use + copyright holder's trademarks or trade name in a trademark sense to endorse + or promote products or services of Licensee, or any third party. + +8. By copying, installing or otherwise using cx_Freeze, Licensee agrees to be + bound by the terms and conditions of this License Agreement. + +Computronix is a registered trademark of Computronix (Canada) Ltd. + diff --git a/installer/cx_Freeze/MANIFEST.in b/installer/cx_Freeze/MANIFEST.in new file mode 100644 index 0000000000..2348a66973 --- /dev/null +++ b/installer/cx_Freeze/MANIFEST.in @@ -0,0 +1,6 @@ +include MANIFEST.in +include *.txt +recursive-include doc *.html +recursive-include initscripts *.py +recursive-include samples *.py +recursive-include source *.c *.rc diff --git a/installer/cx_Freeze/PKG-INFO b/installer/cx_Freeze/PKG-INFO new file mode 100644 index 0000000000..aa53b57914 --- /dev/null +++ b/installer/cx_Freeze/PKG-INFO @@ -0,0 +1,22 @@ +Metadata-Version: 1.0 +Name: cx_Freeze +Version: 4.0.1 +Summary: create standalone executables from Python scripts +Home-page: http://cx-freeze.sourceforge.net +Author: Anthony Tuininga +Author-email: anthony.tuininga@gmail.com +License: Python Software Foundation License +Description: create standalone executables from Python scripts +Keywords: freeze +Platform: UNKNOWN +Classifier: Development Status :: 5 - Production/Stable +Classifier: Intended Audience :: Developers +Classifier: License :: OSI Approved :: Python Software Foundation License +Classifier: Natural Language :: English +Classifier: Operating System :: OS Independent +Classifier: Programming Language :: C +Classifier: Programming Language :: Python +Classifier: Topic :: Software Development :: Build Tools +Classifier: Topic :: Software Development :: Libraries :: Python Modules +Classifier: Topic :: System :: Software Distribution +Classifier: Topic :: Utilities diff --git a/installer/cx_Freeze/README.txt b/installer/cx_Freeze/README.txt new file mode 100644 index 0000000000..1ac67dc749 --- /dev/null +++ b/installer/cx_Freeze/README.txt @@ -0,0 +1,12 @@ +Please see cx_Freeze.html for documentation on how to use cx_Freeze. + +To build: + +python setup.py build +python setup.py install + +On Windows I have used the MinGW compiler (http://www.mingw.org) + +python setup.py build --compiler=mingw32 +python setup.py build --compiler=mingw32 install + diff --git a/installer/cx_Freeze/cx_Freeze/__init__.py b/installer/cx_Freeze/cx_Freeze/__init__.py new file mode 100644 index 0000000000..545883eb3e --- /dev/null +++ b/installer/cx_Freeze/cx_Freeze/__init__.py @@ -0,0 +1,14 @@ +version = "4.0.1" + +import sys +from dist import * +if sys.platform == "win32" and sys.version_info[:2] >= (2, 5): + from windist import * +from finder import * +from freezer import * +from main import * + +del dist +del finder +del freezer + diff --git a/installer/cx_Freeze/cx_Freeze/dist.py b/installer/cx_Freeze/cx_Freeze/dist.py new file mode 100644 index 0000000000..c2af2ac623 --- /dev/null +++ b/installer/cx_Freeze/cx_Freeze/dist.py @@ -0,0 +1,279 @@ +import distutils.command.bdist_rpm +import distutils.command.build +import distutils.command.install +import distutils.core +import distutils.dir_util +import distutils.dist +import distutils.util +import distutils.version +import os +import sys + +import cx_Freeze + +__all__ = [ "bdist_rpm", "build", "build_exe", "install", "install_exe", + "setup" ] + +class Distribution(distutils.dist.Distribution): + + def __init__(self, attrs): + self.executables = [] + distutils.dist.Distribution.__init__(self, attrs) + + +class bdist_rpm(distutils.command.bdist_rpm.bdist_rpm): + + def finalize_options(self): + distutils.command.bdist_rpm.bdist_rpm.finalize_options(self) + self.use_rpm_opt_flags = 1 + + def _make_spec_file(self): + contents = distutils.command.bdist_rpm.bdist_rpm._make_spec_file(self) + return [c for c in contents if c != 'BuildArch: noarch'] + + +class build(distutils.command.build.build): + user_options = distutils.command.build.build.user_options + [ + ('build-exe=', None, 'build directory for executables') + ] + + def get_sub_commands(self): + subCommands = distutils.command.build.build.get_sub_commands(self) + if self.distribution.executables: + subCommands.append("build_exe") + return subCommands + + def initialize_options(self): + distutils.command.build.build.initialize_options(self) + self.build_exe = None + + def finalize_options(self): + distutils.command.build.build.finalize_options(self) + if self.build_exe is None: + dirName = "exe.%s-%s" % \ + (distutils.util.get_platform(), sys.version[0:3]) + self.build_exe = os.path.join(self.build_base, dirName) + + +class build_exe(distutils.core.Command): + description = "build executables from Python scripts" + user_options = [ + ('build-exe=', 'b', + 'directory for built executables'), + ('optimize=', 'O', + 'optimization level: -O1 for "python -O", ' + '-O2 for "python -OO" and -O0 to disable [default: -O0]'), + ('excludes=', 'e', + 'comma-separated list of modules to exclude'), + ('includes=', 'i', + 'comma-separated list of modules to include'), + ('packages=', 'p', + 'comma-separated list of packages to include'), + ('replace-paths=', None, + 'comma-separated list of paths to replace in included modules'), + ('path=', None, + 'comma-separated list of paths to search'), + ('init-script=', 'i', + 'name of script to use during initialization'), + ('base=', None, + 'name of base executable to use'), + ('compressed', 'c', + 'create a compressed zipfile'), + ('copy-dependent-files', None, + 'copy all dependent files'), + ('create-shared-zip', None, + 'create a shared zip file containing shared modules'), + ('append-script-to-exe', None, + 'append the script module to the exe'), + ('include-in-shared-zip', None, + 'include the script module in the shared zip file'), + ('icon', None, + 'include the icon along with the frozen executable(s)'), + ('constants=', None, + 'comma-separated list of constants to include'), + ('include-files=', 'f', + 'list of tuples of additional files to include in distribution'), + ('bin-includes', None, + 'list of names of files to include when determining dependencies'), + ('bin-excludes', None, + 'list of names of files to exclude when determining dependencies') + ] + boolean_options = ["compressed", "copy_dependent_files", + "create_shared_zip", "append_script_to_exe", + "include_in_shared_zip"] + + def _normalize(self, attrName): + value = getattr(self, attrName) + if value is None: + normalizedValue = [] + elif isinstance(value, basestring): + normalizedValue = value.split() + else: + normalizedValue = list(value) + setattr(self, attrName, normalizedValue) + + def initialize_options(self): + self.optimize = 0 + self.build_exe = None + self.excludes = [] + self.includes = [] + self.packages = [] + self.replace_paths = [] + self.compressed = None + self.copy_dependent_files = None + self.init_script = None + self.base = None + self.path = None + self.create_shared_zip = None + self.append_script_to_exe = None + self.include_in_shared_zip = None + self.icon = None + self.constants = [] + self.include_files = [] + self.bin_excludes = [] + self.bin_includes = [] + + def finalize_options(self): + self.set_undefined_options('build', ('build_exe', 'build_exe')) + self.optimize = int(self.optimize) + self._normalize("excludes") + self._normalize("includes") + self._normalize("packages") + self._normalize("constants") + + def run(self): + metadata = self.distribution.metadata + constantsModule = cx_Freeze.ConstantsModule(metadata.version) + for constant in self.constants: + parts = constant.split("=") + if len(parts) == 1: + name = constant + value = None + else: + name, stringValue = parts + value = eval(stringValue) + constantsModule.values[name] = value + freezer = cx_Freeze.Freezer(self.distribution.executables, + [constantsModule], self.includes, self.excludes, self.packages, + self.replace_paths, self.compressed, self.optimize, + self.copy_dependent_files, self.init_script, self.base, + self.path, self.create_shared_zip, self.append_script_to_exe, + self.include_in_shared_zip, self.build_exe, icon = self.icon, + includeFiles = self.include_files, + binIncludes = self.bin_includes, + binExcludes = self.bin_excludes) + freezer.Freeze() + + +class install(distutils.command.install.install): + user_options = distutils.command.install.install.user_options + [ + ('install-exe=', None, + 'installation directory for executables') + ] + + def expand_dirs(self): + distutils.command.install.install.expand_dirs(self) + self._expand_attrs(['install_exe']) + + def get_sub_commands(self): + subCommands = distutils.command.install.install.get_sub_commands(self) + if self.distribution.executables: + subCommands.append("install_exe") + return [s for s in subCommands if s != "install_egg_info"] + + def initialize_options(self): + distutils.command.install.install.initialize_options(self) + self.install_exe = None + + def finalize_options(self): + if self.prefix is None and sys.platform == "win32": + import _winreg + key = _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE, + r"Software\Microsoft\Windows\CurrentVersion") + prefix = str(_winreg.QueryValueEx(key, "ProgramFilesDir")[0]) + metadata = self.distribution.metadata + dirName = "%s-%s" % (metadata.name, metadata.version) + self.prefix = "%s/%s" % (prefix, dirName) + distutils.command.install.install.finalize_options(self) + self.convert_paths('exe') + if self.root is not None: + self.change_roots('exe') + + def select_scheme(self, name): + distutils.command.install.install.select_scheme(self, name) + if self.install_exe is None: + if sys.platform == "win32": + self.install_exe = '$base' + else: + metadata = self.distribution.metadata + dirName = "%s-%s" % (metadata.name, metadata.version) + self.install_exe = '$base/lib/%s' % dirName + + +class install_exe(distutils.core.Command): + description = "install executables built from Python scripts" + user_options = [ + ('install-dir=', 'd', 'directory to install executables to'), + ('build-dir=', 'b', 'build directory (where to install from)'), + ('force', 'f', 'force installation (overwrite existing files)'), + ('skip-build', None, 'skip the build steps') + ] + + def initialize_options(self): + self.install_dir = None + self.force = 0 + self.build_dir = None + self.skip_build = None + + def finalize_options(self): + self.set_undefined_options('build', ('build_exe', 'build_dir')) + self.set_undefined_options('install', + ('install_exe', 'install_dir'), + ('force', 'force'), + ('skip_build', 'skip_build')) + + def run(self): + if not self.skip_build: + self.run_command('build_exe') + self.outfiles = self.copy_tree(self.build_dir, self.install_dir) + if sys.platform != "win32": + baseDir = os.path.dirname(os.path.dirname(self.install_dir)) + binDir = os.path.join(baseDir, "bin") + if not os.path.exists(binDir): + os.makedirs(binDir) + sourceDir = os.path.join("..", self.install_dir[len(baseDir) + 1:]) + for executable in self.distribution.executables: + name = os.path.basename(executable.targetName) + source = os.path.join(sourceDir, name) + target = os.path.join(binDir, name) + if os.path.exists(target): + os.unlink(target) + os.symlink(source, target) + self.outfiles.append(target) + + def get_inputs(self): + return self.distribution.executables or [] + + def get_outputs(self): + return self.outfiles or [] + + +def _AddCommandClass(commandClasses, name, cls): + if name not in commandClasses: + commandClasses[name] = cls + + +def setup(**attrs): + attrs["distclass"] = Distribution + commandClasses = attrs.setdefault("cmdclass", {}) + if sys.platform == "win32": + if sys.version_info[:2] >= (2, 5): + _AddCommandClass(commandClasses, "bdist_msi", cx_Freeze.bdist_msi) + else: + _AddCommandClass(commandClasses, "bdist_rpm", cx_Freeze.bdist_rpm) + _AddCommandClass(commandClasses, "build", build) + _AddCommandClass(commandClasses, "build_exe", build_exe) + _AddCommandClass(commandClasses, "install", install) + _AddCommandClass(commandClasses, "install_exe", install_exe) + distutils.core.setup(**attrs) + diff --git a/installer/cx_Freeze/cx_Freeze/finder.py b/installer/cx_Freeze/cx_Freeze/finder.py new file mode 100644 index 0000000000..f815db97be --- /dev/null +++ b/installer/cx_Freeze/cx_Freeze/finder.py @@ -0,0 +1,455 @@ +""" +Base class for finding modules. +""" + +import dis +import imp +import marshal +import new +import opcode +import os +import sys +import zipfile + +import cx_Freeze.hooks + +BUILD_LIST = opcode.opmap["BUILD_LIST"] +INPLACE_ADD = opcode.opmap["INPLACE_ADD"] +LOAD_CONST = opcode.opmap["LOAD_CONST"] +IMPORT_NAME = opcode.opmap["IMPORT_NAME"] +IMPORT_FROM = opcode.opmap["IMPORT_FROM"] +STORE_NAME = opcode.opmap["STORE_NAME"] +STORE_GLOBAL = opcode.opmap["STORE_GLOBAL"] +STORE_OPS = (STORE_NAME, STORE_GLOBAL) + +__all__ = [ "Module", "ModuleFinder" ] + +class ModuleFinder(object): + + def __init__(self, includeFiles, excludes, path, replacePaths): + self.includeFiles = includeFiles + self.excludes = dict.fromkeys(excludes) + self.replacePaths = replacePaths + self.path = path or sys.path + self.modules = [] + self.aliases = {} + self._modules = dict.fromkeys(excludes) + self._builtinModules = dict.fromkeys(sys.builtin_module_names) + self._badModules = {} + self._zipFileEntries = {} + self._zipFiles = {} + cx_Freeze.hooks.initialize(self) + + def _AddModule(self, name): + """Add a module to the list of modules but if one is already found, + then return it instead; this is done so that packages can be + handled properly.""" + module = self._modules.get(name) + if module is None: + module = self._modules[name] = Module(name) + self.modules.append(module) + if name in self._badModules: + del self._badModules[name] + return module + + def _DetermineParent(self, caller): + """Determine the parent to use when searching packages.""" + if caller is not None: + if caller.path is not None: + return caller + return self._GetParentByName(caller.name) + + def _EnsureFromList(self, caller, packageModule, fromList, + deferredImports): + """Ensure that the from list is satisfied. This is only necessary for + package modules. If the caller is the package itself, actually + attempt to import right then since it must be a submodule; otherwise + defer until after all global names are defined in order to avoid + spurious complaints about missing modules.""" + if caller is not packageModule: + deferredImports.append((packageModule, fromList)) + else: + if fromList == ("*",): + fromList = packageModule.allNames + for name in fromList: + if name in packageModule.globalNames: + continue + subModuleName = "%s.%s" % (packageModule.name, name) + self._ImportModule(subModuleName, deferredImports, caller) + + def _FindModule(self, name, path): + try: + return imp.find_module(name, path) + except ImportError: + if not path: + path = [] + for location in path: + if name in self._zipFileEntries: + break + if location in self._zipFiles: + continue + if os.path.isdir(location) or not zipfile.is_zipfile(location): + self._zipFiles[location] = None + continue + zip = zipfile.ZipFile(location) + for archiveName in zip.namelist(): + baseName, ext = os.path.splitext(archiveName) + if ext not in ('.pyc', '.pyo'): + continue + moduleName = ".".join(baseName.split("/")) + if moduleName in self._zipFileEntries: + continue + self._zipFileEntries[moduleName] = (zip, archiveName) + self._zipFiles[location] = None + info = self._zipFileEntries.get(name) + if info is not None: + zip, archiveName = info + fp = zip.read(archiveName) + info = (".pyc", "rb", imp.PY_COMPILED) + return fp, os.path.join(zip.filename, archiveName), info + raise + + def _GetParentByName(self, name): + """Return the parent module given the name of a module.""" + pos = name.rfind(".") + if pos > 0: + parentName = name[:pos] + return self._modules[parentName] + + def _ImportAllSubModules(self, module, deferredImports, recursive = True): + """Import all sub modules to the given package.""" + suffixes = dict.fromkeys([s[0] for s in imp.get_suffixes()]) + for dir in module.path: + try: + fileNames = os.listdir(dir) + except os.error: + continue + for fileName in fileNames: + name, ext = os.path.splitext(fileName) + if ext not in suffixes: + continue + if name == "__init__": + continue + subModuleName = "%s.%s" % (module.name, name) + subModule, returnError = \ + self._InternalImportModule(subModuleName, + deferredImports) + if returnError and subModule is None: + raise ImportError, "No module named %s" % subModuleName + module.globalNames[name] = None + if subModule.path and recursive: + self._ImportAllSubModules(subModule, deferredImports, + recursive) + + def _ImportDeferredImports(self, deferredImports): + """Import any sub modules that were deferred, if applicable.""" + while deferredImports: + newDeferredImports = [] + for packageModule, subModuleNames in deferredImports: + self._EnsureFromList(packageModule, packageModule, + subModuleNames, newDeferredImports) + deferredImports = newDeferredImports + + def _ImportModule(self, name, deferredImports, caller = None, + relativeImportIndex = 0): + """Attempt to find the named module and return it or None if no module + by that name could be found.""" + + # absolute import (available in Python 2.5 and up) + # the name given is the only name that will be searched + if relativeImportIndex == 0: + module, returnError = self._InternalImportModule(name, + deferredImports) + + # old style relative import (only possibility in Python 2.4 and prior) + # the name given is tried in all parents until a match is found and if + # no match is found, the global namespace is searched + elif relativeImportIndex < 0: + parent = self._DetermineParent(caller) + while parent is not None: + fullName = "%s.%s" % (parent.name, name) + module, returnError = self._InternalImportModule(fullName, + deferredImports) + if module is not None: + parent.globalNames[name] = None + return module + parent = self._GetParentByName(parent.name) + module, returnError = self._InternalImportModule(name, + deferredImports) + + # new style relative import (available in Python 2.5 and up) + # the index indicates how many levels to traverse and only that level + # is searched for the named module + elif relativeImportIndex > 0: + parent = caller + if parent.path is not None: + relativeImportIndex -= 1 + while parent is not None and relativeImportIndex > 0: + parent = self._GetParentByName(parent.name) + relativeImportIndex -= 1 + if parent is None: + module = None + returnError = True + elif not name: + module = parent + else: + name = "%s.%s" % (parent.name, name) + module, returnError = self._InternalImportModule(name, + deferredImports) + + # if module not found, track that fact + if module is None: + if caller is None: + raise ImportError, "No module named %s" % name + self._RunHook("missing", name, caller) + if returnError and name not in caller.ignoreNames: + callers = self._badModules.setdefault(name, {}) + callers[caller.name] = None + + return module + + def _InternalImportModule(self, name, deferredImports): + """Internal method used for importing a module which assumes that the + name given is an absolute name. None is returned if the module + cannot be found.""" + try: + return self._modules[name], False + except KeyError: + pass + if name in self._builtinModules: + module = self._AddModule(name) + self._RunHook("load", module.name, module) + return module, False + pos = name.rfind(".") + if pos < 0: + path = self.path + searchName = name + parentModule = None + else: + parentName = name[:pos] + parentModule, returnError = \ + self._InternalImportModule(parentName, deferredImports) + if parentModule is None: + return None, returnError + path = parentModule.path + searchName = name[pos + 1:] + if name in self.aliases: + actualName = self.aliases[name] + module, returnError = \ + self._InternalImportModule(actualName, deferredImports) + self._modules[name] = module + return module, returnError + try: + fp, path, info = self._FindModule(searchName, path) + except ImportError: + self._modules[name] = None + return None, True + module = self._LoadModule(name, fp, path, info, deferredImports, + parentModule) + return module, False + + def _LoadModule(self, name, fp, path, info, deferredImports, + parent = None): + """Load the module, given the information acquired by the finder.""" + suffix, mode, type = info + if type == imp.PKG_DIRECTORY: + return self._LoadPackage(name, path, parent, deferredImports) + module = self._AddModule(name) + module.file = path + module.parent = parent + if type == imp.PY_SOURCE: + module.code = compile(fp.read() + "\n", path, "exec") + elif type == imp.PY_COMPILED: + if isinstance(fp, str): + magic = fp[:4] + else: + magic = fp.read(4) + if magic != imp.get_magic(): + raise ImportError, "Bad magic number in %s" % path + if isinstance(fp, str): + module.code = marshal.loads(fp[8:]) + module.inZipFile = True + else: + fp.read(4) + module.code = marshal.load(fp) + self._RunHook("load", module.name, module) + if module.code is not None: + if self.replacePaths: + topLevelModule = module + while topLevelModule.parent is not None: + topLevelModule = topLevelModule.parent + module.code = self._ReplacePathsInCode(topLevelModule, + module.code) + self._ScanCode(module.code, module, deferredImports) + return module + + def _LoadPackage(self, name, path, parent, deferredImports): + """Load the package, given its name and path.""" + module = self._AddModule(name) + module.path = [path] + fp, path, info = imp.find_module("__init__", module.path) + self._LoadModule(name, fp, path, info, deferredImports, parent) + return module + + def _ReplacePathsInCode(self, topLevelModule, co): + """Replace paths in the code as directed, returning a new code object + with the modified paths in place.""" + origFileName = newFileName = os.path.normpath(co.co_filename) + for searchValue, replaceValue in self.replacePaths: + if searchValue == "*": + searchValue = os.path.dirname(topLevelModule.file) + if topLevelModule.path: + searchValue = os.path.dirname(searchValue) + if searchValue: + searchValue = searchValue + os.pathsep + elif not origFileName.startswith(searchValue): + continue + newFileName = replaceValue + origFileName[len(searchValue):] + break + constants = list(co.co_consts) + for i, value in enumerate(constants): + if isinstance(value, type(co)): + constants[i] = self._ReplacePathsInCode(topLevelModule, value) + return new.code(co.co_argcount, co.co_nlocals, co.co_stacksize, + co.co_flags, co.co_code, tuple(constants), co.co_names, + co.co_varnames, newFileName, co.co_name, co.co_firstlineno, + co.co_lnotab, co.co_freevars, co.co_cellvars) + + def _RunHook(self, hookName, moduleName, *args): + """Run hook for the given module if one is present.""" + name = "%s_%s" % (hookName, moduleName.replace(".", "_")) + method = getattr(cx_Freeze.hooks, name, None) + if method is not None: + method(self, *args) + + def _ScanCode(self, co, module, deferredImports): + """Scan code, looking for imported modules and keeping track of the + constants that have been created in order to better tell which + modules are truly missing.""" + opIndex = 0 + arguments = [] + code = co.co_code + numOps = len(code) + while opIndex < numOps: + op = ord(code[opIndex]) + opIndex += 1 + if op >= dis.HAVE_ARGUMENT: + opArg = ord(code[opIndex]) + ord(code[opIndex + 1]) * 256 + opIndex += 2 + if op == LOAD_CONST: + arguments.append(co.co_consts[opArg]) + elif op == IMPORT_NAME: + name = co.co_names[opArg] + if len(arguments) == 2: + relativeImportIndex, fromList = arguments + else: + relativeImportIndex = -1 + fromList, = arguments + if name not in module.excludeNames: + subModule = self._ImportModule(name, deferredImports, + module, relativeImportIndex) + if subModule is not None: + module.globalNames.update(subModule.globalNames) + if fromList and subModule.path is not None: + self._EnsureFromList(module, subModule, fromList, + deferredImports) + elif op == IMPORT_FROM: + opIndex += 3 + elif op not in (BUILD_LIST, INPLACE_ADD): + if op in STORE_OPS: + name = co.co_names[opArg] + if name == "__all__": + module.allNames.extend(arguments) + module.globalNames[name] = None + arguments = [] + for constant in co.co_consts: + if isinstance(constant, type(co)): + self._ScanCode(constant, module, deferredImports) + + def AddAlias(self, name, aliasFor): + """Add an alias for a particular module; when an attempt is made to + import a module using the alias name, import the actual name + instead.""" + self.aliases[name] = aliasFor + + def ExcludeModule(self, name): + """Exclude the named module from the resulting frozen executable.""" + self.excludes[name] = None + self._modules[name] = None + + def IncludeFile(self, path, moduleName = None): + """Include the named file as a module in the frozen executable.""" + name, ext = os.path.splitext(os.path.basename(path)) + if moduleName is None: + moduleName = name + info = (ext, "r", imp.PY_SOURCE) + deferredImports = [] + module = self._LoadModule(moduleName, file(path, "U"), path, info, + deferredImports) + self._ImportDeferredImports(deferredImports) + return module + + def IncludeFiles(self, sourcePath, targetPath): + """Include the files in the given directory in the target build.""" + self.includeFiles.append((sourcePath, targetPath)) + + def IncludeModule(self, name): + """Include the named module in the frozen executable.""" + deferredImports = [] + module = self._ImportModule(name, deferredImports) + self._ImportDeferredImports(deferredImports) + return module + + def IncludePackage(self, name): + """Include the named package and any submodules in the frozen + executable.""" + deferredImports = [] + module = self._ImportModule(name, deferredImports) + if module.path: + self._ImportAllSubModules(module, deferredImports) + self._ImportDeferredImports(deferredImports) + return module + + def ReportMissingModules(self): + if self._badModules: + print "Missing modules:" + names = self._badModules.keys() + names.sort() + for name in names: + callers = self._badModules[name].keys() + callers.sort() + print "?", name, "imported from", ", ".join(callers) + print + + +class Module(object): + + def __init__(self, name): + self.name = name + self.file = None + self.path = None + self.code = None + self.parent = None + self.globalNames = {} + self.excludeNames = {} + self.ignoreNames = {} + self.allNames = [] + self.inZipFile = False + + def __repr__(self): + parts = ["name=%s" % repr(self.name)] + if self.file is not None: + parts.append("file=%s" % repr(self.file)) + if self.path is not None: + parts.append("path=%s" % repr(self.path)) + return "" % ", ".join(parts) + + def AddGlobalName(self, name): + self.globalNames[name] = None + + def ExcludeName(self, name): + self.excludeNames[name] = None + + def IgnoreName(self, name): + self.ignoreNames[name] = None + diff --git a/installer/cx_Freeze/cx_Freeze/freezer.py b/installer/cx_Freeze/cx_Freeze/freezer.py new file mode 100644 index 0000000000..e0739e8a4e --- /dev/null +++ b/installer/cx_Freeze/cx_Freeze/freezer.py @@ -0,0 +1,550 @@ +""" +Base class for freezing scripts into executables. +""" + +import datetime +import distutils.sysconfig +import imp +import marshal +import os +import shutil +import socket +import stat +import struct +import sys +import time +import zipfile + +import cx_Freeze +import cx_Freeze.util + +__all__ = [ "ConfigError", "ConstantsModule", "Executable", "Freezer" ] + +if sys.platform == "win32": + pythonDll = "python%s%s.dll" % sys.version_info[:2] + GLOBAL_BIN_PATH_EXCLUDES = [cx_Freeze.util.GetSystemDir()] + GLOBAL_BIN_INCLUDES = [ + pythonDll, + "gdiplus.dll", + "mfc71.dll", + "msvcp71.dll", + "msvcr71.dll" + ] + GLOBAL_BIN_EXCLUDES = [ + "comctl32.dll", + "oci.dll", + "cx_Logging.pyd" + ] +else: + extension = distutils.sysconfig.get_config_var("SO") + pythonSharedLib = "libpython%s.%s%s" % \ + (sys.version_info[:2] + (extension,)) + GLOBAL_BIN_INCLUDES = [pythonSharedLib] + GLOBAL_BIN_EXCLUDES = [ + "libclntsh.so", + "libwtc9.so" + ] + GLOBAL_BIN_PATH_EXCLUDES = ["/lib", "/lib32", "/lib64", "/usr/lib", + "/usr/lib32", "/usr/lib64"] + + +# NOTE: the try: except: block in this code is not necessary under Python 2.4 +# and higher and can be removed once support for Python 2.3 is no longer needed +EXTENSION_LOADER_SOURCE = \ +""" +import imp, os, sys + +found = False +for p in sys.path: + if not os.path.isdir(p): + continue + f = os.path.join(p, "%s") + if not os.path.exists(f): + continue + try: + m = imp.load_dynamic(__name__, f) + except ImportError: + del sys.modules[__name__] + raise + sys.modules[__name__] = m + found = True + break +if not found: + del sys.modules[__name__] + raise ImportError, "No module named %%s" %% __name__ +""" + + +class Freezer(object): + + def __init__(self, executables, constantsModules = [], includes = [], + excludes = [], packages = [], replacePaths = [], compress = None, + optimizeFlag = 0, copyDependentFiles = None, initScript = None, + base = None, path = None, createLibraryZip = None, + appendScriptToExe = None, appendScriptToLibrary = None, + targetDir = None, binIncludes = [], binExcludes = [], + binPathIncludes = [], binPathExcludes = [], icon = None, + includeFiles = []): + self.executables = executables + self.constantsModules = constantsModules + self.includes = includes + self.excludes = excludes + self.packages = packages + self.replacePaths = replacePaths + self.compress = compress + self.optimizeFlag = optimizeFlag + self.copyDependentFiles = copyDependentFiles + self.initScript = initScript + self.base = base + self.path = path + self.createLibraryZip = createLibraryZip + self.appendScriptToExe = appendScriptToExe + self.appendScriptToLibrary = appendScriptToLibrary + self.targetDir = targetDir + self.binIncludes = [os.path.normcase(n) \ + for n in GLOBAL_BIN_INCLUDES + binIncludes] + self.binExcludes = [os.path.normcase(n) \ + for n in GLOBAL_BIN_EXCLUDES + binExcludes] + self.binPathIncludes = [os.path.normcase(n) for n in binPathIncludes] + self.binPathExcludes = [os.path.normcase(n) \ + for n in GLOBAL_BIN_PATH_EXCLUDES + binPathExcludes] + self.icon = icon + self.includeFiles = includeFiles + self._VerifyConfiguration() + + def _CopyFile(self, source, target, copyDependentFiles, + includeMode = False): + normalizedSource = os.path.normcase(os.path.normpath(source)) + normalizedTarget = os.path.normcase(os.path.normpath(target)) + if normalizedTarget in self.filesCopied: + return + if normalizedSource == normalizedTarget: + return + self._RemoveFile(target) + targetDir = os.path.dirname(target) + self._CreateDirectory(targetDir) + print "copying", source, "->", target + shutil.copyfile(source, target) + if includeMode: + shutil.copymode(source, target) + self.filesCopied[normalizedTarget] = None + if copyDependentFiles: + for source in self._GetDependentFiles(source): + target = os.path.join(targetDir, os.path.basename(source)) + self._CopyFile(source, target, copyDependentFiles) + + def _CreateDirectory(self, path): + if not os.path.isdir(path): + print "creating directory", path + os.makedirs(path) + + def _FreezeExecutable(self, exe): + if self.createLibraryZip: + finder = self.finder + else: + finder = self._GetModuleFinder(exe) + if exe.script is None: + scriptModule = None + else: + scriptModule = finder.IncludeFile(exe.script, exe.moduleName) + self._CopyFile(exe.base, exe.targetName, exe.copyDependentFiles, + includeMode = True) + if exe.icon is not None: + if sys.platform == "win32": + cx_Freeze.util.AddIcon(exe.targetName, exe.icon) + else: + targetName = os.path.join(os.path.dirname(exe.targetName), + os.path.basename(exe.icon)) + self._CopyFile(exe.icon, targetName, + copyDependentFiles = False) + if not os.access(exe.targetName, os.W_OK): + mode = os.stat(exe.targetName).st_mode + os.chmod(exe.targetName, mode | stat.S_IWUSR) + if not exe.appendScriptToLibrary: + if exe.appendScriptToExe: + fileName = exe.targetName + else: + baseFileName, ext = os.path.splitext(exe.targetName) + fileName = baseFileName + ".zip" + self._RemoveFile(fileName) + if not self.createLibraryZip and exe.copyDependentFiles: + scriptModule = None + self._WriteModules(fileName, exe.initScript, finder, exe.compress, + exe.copyDependentFiles, scriptModule) + + def _GetBaseFileName(self, argsSource = None): + if argsSource is None: + argsSource = self + name = argsSource.base + if name is None: + if argsSource.copyDependentFiles: + name = "Console" + else: + name = "ConsoleKeepPath" + argsSource.base = self._GetFileName("bases", name) + if argsSource.base is None: + raise ConfigError("no base named %s", name) + + def _GetDependentFiles(self, path): + dependentFiles = self.dependentFiles.get(path) + if dependentFiles is None: + if sys.platform == "win32": + origPath = os.environ["PATH"] + os.environ["PATH"] = origPath + os.pathsep + \ + os.pathsep.join(sys.path) + dependentFiles = cx_Freeze.util.GetDependentFiles(path) + os.environ["PATH"] = origPath + else: + dependentFiles = [] + for line in os.popen('ldd "%s"' % path): + parts = line.strip().split(" => ") + if len(parts) != 2: + continue + dependentFile = parts[1] + if dependentFile == "not found": + print "WARNING: cannot find", parts[0] + continue + pos = dependentFile.find(" (") + if pos >= 0: + dependentFile = dependentFile[:pos].strip() + if dependentFile: + dependentFiles.append(dependentFile) + dependentFiles = self.dependentFiles[path] = \ + [f for f in dependentFiles if self._ShouldCopyFile(f)] + return dependentFiles + + def _GetFileName(self, dir, name): + if os.path.isabs(name): + return name + name = os.path.normcase(name) + fullDir = os.path.join(os.path.dirname(cx_Freeze.__file__), dir) + if os.path.isdir(fullDir): + for fileName in os.listdir(fullDir): + if name == os.path.splitext(os.path.normcase(fileName))[0]: + return os.path.join(fullDir, fileName) + + def _GetInitScriptFileName(self, argsSource = None): + if argsSource is None: + argsSource = self + name = argsSource.initScript + if name is None: + if argsSource.copyDependentFiles: + name = "Console" + else: + name = "ConsoleKeepPath" + argsSource.initScript = self._GetFileName("initscripts", name) + if argsSource.initScript is None: + raise ConfigError("no initscript named %s", name) + + def _GetModuleFinder(self, argsSource = None): + if argsSource is None: + argsSource = self + finder = cx_Freeze.ModuleFinder(self.includeFiles, argsSource.excludes, + argsSource.path, argsSource.replacePaths) + if argsSource.copyDependentFiles: + finder.IncludeModule("imp") + finder.IncludeModule("os") + finder.IncludeModule("sys") + if argsSource.compress: + finder.IncludeModule("zlib") + for name in argsSource.includes: + finder.IncludeModule(name) + for name in argsSource.packages: + finder.IncludePackage(name) + return finder + + def _PrintReport(self, fileName, modules): + print "writing zip file", fileName + print + print " %-25s %s" % ("Name", "File") + print " %-25s %s" % ("----", "----") + for module in modules: + if module.path: + print "P", + else: + print "m", + print "%-25s" % module.name, module.file or "" + print + + def _RemoveFile(self, path): + if os.path.exists(path): + os.chmod(path, 0777) + os.remove(path) + + def _ShouldCopyFile(self, path): + dir, name = os.path.split(os.path.normcase(path)) + parts = name.split(".") + tweaked = False + while True: + if not parts[-1].isdigit(): + break + parts.pop(-1) + tweaked = True + if tweaked: + name = ".".join(parts) + if name in self.binIncludes: + return True + if name in self.binExcludes: + return False + for path in self.binPathIncludes: + if dir.startswith(path): + return True + for path in self.binPathExcludes: + if dir.startswith(path): + return False + return True + + def _VerifyCanAppendToLibrary(self): + if not self.createLibraryZip: + raise ConfigError("script cannot be appended to library zip if " + "one is not being created") + + def _VerifyConfiguration(self): + if self.compress is None: + self.compress = True + if self.copyDependentFiles is None: + self.copyDependentFiles = True + if self.createLibraryZip is None: + self.createLibraryZip = True + if self.appendScriptToExe is None: + self.appendScriptToExe = False + if self.appendScriptToLibrary is None: + self.appendScriptToLibrary = \ + self.createLibraryZip and not self.appendScriptToExe + if self.targetDir is None: + self.targetDir = os.path.abspath("dist") + self._GetInitScriptFileName() + self._GetBaseFileName() + if self.path is None: + self.path = sys.path + if self.appendScriptToLibrary: + self._VerifyCanAppendToLibrary() + for sourceFileName, targetFileName in self.includeFiles: + if not os.path.exists(sourceFileName): + raise ConfigError("cannot find file/directory named %s", + sourceFileName) + if os.path.isabs(targetFileName): + raise ConfigError("target file/directory cannot be absolute") + for executable in self.executables: + executable._VerifyConfiguration(self) + + def _WriteModules(self, fileName, initScript, finder, compress, + copyDependentFiles, scriptModule = None): + initModule = finder.IncludeFile(initScript, "cx_Freeze__init__") + if scriptModule is None: + for module in self.constantsModules: + module.Create(finder) + modules = [m for m in finder.modules \ + if m.name not in self.excludeModules] + else: + modules = [initModule, scriptModule] + self.excludeModules[initModule.name] = None + self.excludeModules[scriptModule.name] = None + itemsToSort = [(m.name, m) for m in modules] + itemsToSort.sort() + modules = [m for n, m in itemsToSort] + self._PrintReport(fileName, modules) + if scriptModule is None: + finder.ReportMissingModules() + targetDir = os.path.dirname(fileName) + self._CreateDirectory(targetDir) + filesToCopy = [] + if os.path.exists(fileName): + mode = "a" + else: + mode = "w" + outFile = zipfile.PyZipFile(fileName, mode, zipfile.ZIP_DEFLATED) + for module in modules: + if module.code is None and module.file is not None: + fileName = os.path.basename(module.file) + baseFileName, ext = os.path.splitext(fileName) + if baseFileName != module.name and module.name != "zlib": + if "." in module.name: + fileName = module.name + ext + generatedFileName = "ExtensionLoader_%s.py" % \ + module.name.replace(".", "_") + module.code = compile(EXTENSION_LOADER_SOURCE % fileName, + generatedFileName, "exec") + target = os.path.join(targetDir, fileName) + filesToCopy.append((module, target)) + if module.code is None: + continue + fileName = "/".join(module.name.split(".")) + if module.path: + fileName += "/__init__" + if module.file is not None and os.path.exists(module.file): + mtime = os.stat(module.file).st_mtime + else: + mtime = time.time() + zipTime = time.localtime(mtime)[:6] + data = imp.get_magic() + struct.pack("" % self.script + + def _VerifyConfiguration(self, freezer): + if self.path is None: + self.path = freezer.path + if self.targetDir is None: + self.targetDir = freezer.targetDir + if self.includes is None: + self.includes = freezer.includes + if self.excludes is None: + self.excludes = freezer.excludes + if self.packages is None: + self.packages = freezer.packages + if self.replacePaths is None: + self.replacePaths = freezer.replacePaths + if self.compress is None: + self.compress = freezer.compress + if self.copyDependentFiles is None: + self.copyDependentFiles = freezer.copyDependentFiles + if self.appendScriptToExe is None: + self.appendScriptToExe = freezer.appendScriptToExe + if self.appendScriptToLibrary is None: + self.appendScriptToLibrary = freezer.appendScriptToLibrary + if self.initScript is None: + self.initScript = freezer.initScript + else: + freezer._GetInitScriptFileName(self) + if self.base is None: + self.base = freezer.base + else: + freezer._GetBaseFileName(self) + if self.appendScriptToLibrary: + freezer._VerifyCanAppendToLibrary() + if self.icon is None: + self.icon = freezer.icon + if self.script is not None: + name, ext = os.path.splitext(os.path.basename(self.script)) + if self.appendScriptToLibrary: + self.moduleName = "%s__main__" % os.path.normcase(name) + else: + self.moduleName = "__main__" + if self.targetName is None: + baseName, ext = os.path.splitext(self.base) + self.targetName = name + ext + self.targetName = os.path.join(self.targetDir, self.targetName) + + +class ConstantsModule(object): + + def __init__(self, releaseString = None, copyright = None, + moduleName = "BUILD_CONSTANTS", timeFormat = "%B %d, %Y %H:%M:%S"): + self.moduleName = moduleName + self.timeFormat = timeFormat + self.values = {} + self.values["BUILD_RELEASE_STRING"] = releaseString + self.values["BUILD_COPYRIGHT"] = copyright + + def Create(self, finder): + """Create the module which consists of declaration statements for each + of the values.""" + today = datetime.datetime.today() + sourceTimestamp = 0 + for module in finder.modules: + if module.file is None: + continue + if module.inZipFile: + continue + if not os.path.exists(module.file): + raise ConfigError("no file named %s", module.file) + timestamp = os.stat(module.file).st_mtime + sourceTimestamp = max(sourceTimestamp, timestamp) + sourceTimestamp = datetime.datetime.fromtimestamp(sourceTimestamp) + self.values["BUILD_TIMESTAMP"] = today.strftime(self.timeFormat) + self.values["BUILD_HOST"] = socket.gethostname().split(".")[0] + self.values["SOURCE_TIMESTAMP"] = \ + sourceTimestamp.strftime(self.timeFormat) + module = finder._AddModule(self.moduleName) + sourceParts = [] + names = self.values.keys() + names.sort() + for name in names: + value = self.values[name] + sourceParts.append("%s = %r" % (name, value)) + source = "\n".join(sourceParts) + module.code = compile(source, "%s.py" % self.moduleName, "exec") + diff --git a/installer/cx_Freeze/cx_Freeze/hooks.py b/installer/cx_Freeze/cx_Freeze/hooks.py new file mode 100644 index 0000000000..edc2f78788 --- /dev/null +++ b/installer/cx_Freeze/cx_Freeze/hooks.py @@ -0,0 +1,281 @@ +import os +import sys + +def initialize(finder): + """upon initialization of the finder, this routine is called to set up some + automatic exclusions for various platforms.""" + finder.ExcludeModule("FCNTL") + finder.ExcludeModule("os.path") + if os.name == "nt": + finder.ExcludeModule("fcntl") + finder.ExcludeModule("grp") + finder.ExcludeModule("pwd") + finder.ExcludeModule("termios") + else: + finder.ExcludeModule("_winreg") + finder.ExcludeModule("msilib") + finder.ExcludeModule("msvcrt") + finder.ExcludeModule("nt") + if os.name not in ("os2", "ce"): + finder.ExcludeModule("ntpath") + finder.ExcludeModule("nturl2path") + finder.ExcludeModule("pythoncom") + finder.ExcludeModule("pywintypes") + finder.ExcludeModule("winerror") + finder.ExcludeModule("winsound") + finder.ExcludeModule("win32api") + finder.ExcludeModule("win32con") + finder.ExcludeModule("win32event") + finder.ExcludeModule("win32file") + finder.ExcludeModule("win32pdh") + finder.ExcludeModule("win32pipe") + finder.ExcludeModule("win32process") + finder.ExcludeModule("win32security") + finder.ExcludeModule("win32service") + finder.ExcludeModule("wx.activex") + if os.name != "posix": + finder.ExcludeModule("posix") + if os.name != "mac": + finder.ExcludeModule("Carbon") + finder.ExcludeModule("gestalt") + finder.ExcludeModule("ic") + finder.ExcludeModule("mac") + finder.ExcludeModule("MacOS") + finder.ExcludeModule("macpath") + finder.ExcludeModule("macurl2path") + if os.name != "nt": + finder.ExcludeModule("EasyDialogs") + if os.name != "os2": + finder.ExcludeModule("os2") + finder.ExcludeModule("os2emxpath") + finder.ExcludeModule("_emx_link") + if os.name != "ce": + finder.ExcludeModule("ce") + if os.name != "riscos": + finder.ExcludeModule("riscos") + finder.ExcludeModule("riscosenviron") + finder.ExcludeModule("riscospath") + finder.ExcludeModule("rourl2path") + if sys.platform[:4] != "java": + finder.ExcludeModule("java.lang") + finder.ExcludeModule("org.python.core") + + +def load_cElementTree(finder, module): + """the cElementTree module implicitly loads the elementtree.ElementTree + module; make sure this happens.""" + finder.IncludeModule("elementtree.ElementTree") + + +def load_ceODBC(finder, module): + """the ceODBC module implicitly imports both datetime and decimal; make + sure this happens.""" + finder.IncludeModule("datetime") + finder.IncludeModule("decimal") + + +def load_cx_Oracle(finder, module): + """the cx_Oracle module implicitly imports datetime; make sure this + happens.""" + finder.IncludeModule("datetime") + + +def load_docutils_frontend(finder, module): + """The optik module is the old name for the optparse module; ignore the + module if it cannot be found.""" + module.IgnoreName("optik") + + +def load_dummy_threading(finder, module): + """the dummy_threading module plays games with the name of the threading + module for its own purposes; ignore that here""" + finder.ExcludeModule("_dummy_threading") + + +def load_email(finder, module): + """the email package has a bunch of aliases as the submodule names were + all changed to lowercase in Python 2.5; mimic that here.""" + if sys.version_info[:2] >= (2, 5): + for name in ("Charset", "Encoders", "Errors", "FeedParser", + "Generator", "Header", "Iterators", "Message", "Parser", + "Utils", "base64MIME", "quopriMIME"): + finder.AddAlias("email.%s" % name, "email.%s" % name.lower()) + + +def load_ftplib(finder, module): + """the ftplib module attempts to import the SOCKS module; ignore this + module if it cannot be found""" + module.IgnoreName("SOCKS") + + +def load_matplotlib(finder, module): + """the matplotlib module requires data to be found in mpl-data in the + same directory as the frozen executable so oblige it""" + dir = os.path.join(module.path[0], "mpl-data") + finder.IncludeFiles(dir, "mpl-data") + + +def load_matplotlib_numerix(finder, module): + """the numpy.numerix module loads a number of modules dynamically""" + for name in ("ma", "fft", "linear_algebra", "random_array", "mlab"): + finder.IncludeModule("%s.%s" % (module.name, name)) + + +def load_numpy_linalg(finder, module): + """the numpy.linalg module implicitly loads the lapack_lite module; make + sure this happens""" + finder.IncludeModule("numpy.linalg.lapack_lite") + + +def load_pty(finder, module): + """The sgi module is not needed for this module to function.""" + module.IgnoreName("sgi") + + +def load_pythoncom(finder, module): + """the pythoncom module is actually contained in a DLL but since those + cannot be loaded directly in Python 2.5 and higher a special module is + used to perform that task; simply use that technique directly to + determine the name of the DLL and ensure it is included as a normal + extension; also load the pywintypes module which is implicitly + loaded.""" + import pythoncom + module.file = pythoncom.__file__ + module.code = None + finder.IncludeModule("pywintypes") + + +def load_pywintypes(finder, module): + """the pywintypes module is actually contained in a DLL but since those + cannot be loaded directly in Python 2.5 and higher a special module is + used to perform that task; simply use that technique directly to + determine the name of the DLL and ensure it is included as a normal + extension.""" + import pywintypes + module.file = pywintypes.__file__ + module.code = None + + +def load_PyQt4_Qt(finder, module): + """the PyQt4.Qt module is an extension module which imports a number of + other modules and injects their namespace into its own. It seems a + foolish way of doing things but perhaps there is some hidden advantage + to this technique over pure Python; ignore the absence of some of + the modules since not every installation includes all of them.""" + finder.IncludeModule("PyQt4.QtCore") + finder.IncludeModule("PyQt4.QtGui") + finder.IncludeModule("sip") + for name in ("PyQt4.QtSvg", "PyQt4.Qsci", "PyQt4.QtAssistant", + "PyQt4.QtNetwork", "PyQt4.QtOpenGL", "PyQt4.QtScript", "PyQt4._qt", + "PyQt4.QtSql", "PyQt4.QtSvg", "PyQt4.QtTest", "PyQt4.QtXml"): + try: + finder.IncludeModule(name) + except ImportError: + pass + + +def load_Tkinter(finder, module): + """the Tkinter module has data files that are required to be loaded so + ensure that they are copied into the directory that is expected at + runtime.""" + import Tkinter + import _tkinter + tk = _tkinter.create() + tclDir = os.path.dirname(tk.call("info", "library")) + tclSourceDir = os.path.join(tclDir, "tcl%s" % _tkinter.TCL_VERSION) + tkSourceDir = os.path.join(tclDir, "tk%s" % _tkinter.TK_VERSION) + finder.IncludeFiles(tclSourceDir, "tcl") + finder.IncludeFiles(tkSourceDir, "tk") + + +def load_tempfile(finder, module): + """the tempfile module attempts to load the fcntl and thread modules but + continues if these modules cannot be found; ignore these modules if they + cannot be found.""" + module.IgnoreName("fcntl") + module.IgnoreName("thread") + + +def load_time(finder, module): + """the time module implicitly loads _strptime; make sure this happens.""" + finder.IncludeModule("_strptime") + + +def load_win32api(finder, module): + """the win32api module implicitly loads the pywintypes module; make sure + this happens.""" + finder.IncludeModule("pywintypes") + + +def load_win32com(finder, module): + """the win32com package manipulates its search path at runtime to include + the sibling directory called win32comext; simulate that by changing the + search path in a similar fashion here.""" + baseDir = os.path.dirname(os.path.dirname(module.file)) + module.path.append(os.path.join(baseDir, "win32comext")) + + +def load_win32file(finder, module): + """the win32api module implicitly loads the pywintypes module; make sure + this happens.""" + finder.IncludeModule("pywintypes") + + +def load_xml(finder, module): + """the builtin xml package attempts to load the _xmlplus module to see if + that module should take its role instead; ignore the failure to find + this module, though.""" + module.IgnoreName("_xmlplus") + + +def load_xml_etree_cElementTree(finder, module): + """the xml.etree.cElementTree module implicitly loads the + xml.etree.ElementTree module; make sure this happens.""" + finder.IncludeModule("xml.etree.ElementTree") + +def load_IPython(finder, module): + ipy = os.path.join(os.path.dirname(module.file), 'Extensions') + extensions = set([]) + for m in os.listdir(ipy): + extensions.add(os.path.splitext(m)[0]) + extensions.remove('__init__') + for m in extensions: + finder.IncludeModule('IPython.Extensions.'+m) + +def load_lxml(finder, module): + finder.IncludeModule('lxml._elementpath') + +def load_cherrypy(finder, module): + finder.IncludeModule('cherrypy.lib.encoding') + +def missing_cElementTree(finder, caller): + """the cElementTree has been incorporated into the standard library in + Python 2.5 so ignore its absence if it cannot found.""" + if sys.version_info[:2] >= (2, 5): + caller.IgnoreName("cElementTree") + + +def missing_EasyDialogs(finder, caller): + """the EasyDialogs module is not normally present on Windows but it also + may be so instead of excluding it completely, ignore it if it can't be + found""" + if sys.platform == "win32": + caller.IgnoreName("EasyDialogs") + + +def missing_readline(finder, caller): + """the readline module is not normally present on Windows but it also may + be so instead of excluding it completely, ignore it if it can't be + found""" + if sys.platform == "win32": + caller.IgnoreName("readline") + + +def missing_xml_etree(finder, caller): + """the xml.etree package is new for Python 2.5 but it is common practice + to use a try..except.. block in order to support versions earlier than + Python 2.5 transparently; ignore the absence of the package in this + situation.""" + if sys.version_info[:2] < (2, 5): + caller.IgnoreName("xml.etree") + diff --git a/installer/cx_Freeze/cx_Freeze/main.py b/installer/cx_Freeze/cx_Freeze/main.py new file mode 100644 index 0000000000..1704c598d2 --- /dev/null +++ b/installer/cx_Freeze/cx_Freeze/main.py @@ -0,0 +1,171 @@ +import optparse +import os +import shutil +import stat +import sys + +import cx_Freeze + +__all__ = ["main"] + +USAGE = \ +""" +%prog [options] [SCRIPT] + +Freeze a Python script and all of its referenced modules to a base +executable which can then be distributed without requiring a Python +installation.""" + +VERSION = \ +""" +%%prog %s +Copyright (c) 2007-2008 Colt Engineering. All rights reserved. +Copyright (c) 2001-2006 Computronix Corporation. All rights reserved.""" % \ + cx_Freeze.version + + +def ParseCommandLine(): + parser = optparse.OptionParser(version = VERSION.strip(), + usage = USAGE.strip()) + parser.add_option("-O", + action = "count", + default = 0, + dest = "optimized", + help = "optimize generated bytecode as per PYTHONOPTIMIZE; " + "use -OO in order to remove doc strings") + parser.add_option("-c", "--compress", + action = "store_true", + dest = "compress", + help = "compress byte code in zip files") + parser.add_option("--base-name", + dest = "baseName", + metavar = "NAME", + help = "file on which to base the target file; if the name of the " + "file is not an absolute file name, the subdirectory bases " + "(rooted in the directory in which the freezer is found) " + "will be searched for a file matching the name") + parser.add_option("--init-script", + dest = "initScript", + metavar = "NAME", + help = "script which will be executed upon startup; if the name " + "of the file is not an absolute file name, the " + "subdirectory initscripts (rooted in the directory in " + "which the cx_Freeze package is found) will be searched " + "for a file matching the name") + parser.add_option("--target-dir", "--install-dir", + dest = "targetDir", + metavar = "DIR", + help = "the directory in which to place the target file and " + "any dependent files") + parser.add_option("--target-name", + dest = "targetName", + metavar = "NAME", + help = "the name of the file to create instead of the base name " + "of the script and the extension of the base binary") + parser.add_option("--no-copy-deps", + dest = "copyDeps", + default = True, + action = "store_false", + help = "do not copy the dependent files (extensions, shared " + "libraries, etc.) to the target directory; this also " + "modifies the default init script to ConsoleKeepPath.py " + "and means that the target executable requires a Python " + "installation to execute properly") + parser.add_option("--default-path", + action = "append", + dest = "defaultPath", + metavar = "DIRS", + help = "list of paths separated by the standard path separator " + "for the platform which will be used to initialize " + "sys.path prior to running the module finder") + parser.add_option("--include-path", + action = "append", + dest = "includePath", + metavar = "DIRS", + help = "list of paths separated by the standard path separator " + "for the platform which will be used to modify sys.path " + "prior to running the module finder") + parser.add_option("--replace-paths", + dest = "replacePaths", + metavar = "DIRECTIVES", + help = "replace all the paths in modules found in the given paths " + "with the given replacement string; multiple values are " + "separated by the standard path separator and each value " + "is of the form path=replacement_string; path can be * " + "which means all paths not already specified") + parser.add_option("--include-modules", + dest = "includeModules", + metavar = "NAMES", + help = "comma separated list of modules to include") + parser.add_option("--exclude-modules", + dest = "excludeModules", + metavar = "NAMES", + help = "comma separated list of modules to exclude") + parser.add_option("--ext-list-file", + dest = "extListFile", + metavar = "NAME", + help = "name of file in which to place the list of dependent files " + "which were copied into the target directory") + parser.add_option("-z", "--zip-include", + dest = "zipIncludes", + action = "append", + default = [], + metavar = "SPEC", + help = "name of file to add to the zip file or a specification of " + "the form name=arcname which will specify the archive name " + "to use; multiple --zip-include arguments can be used") + options, args = parser.parse_args() + if len(args) == 0: + options.script = None + elif len(args) == 1: + options.script, = args + else: + parser.error("only one script can be specified") + if not args and options.includeModules is None and options.copyDeps: + parser.error("script or a list of modules must be specified") + if not args and options.targetName is None: + parser.error("script or a target name must be specified") + if options.excludeModules: + options.excludeModules = options.excludeModules.split(",") + else: + options.excludeModules = [] + if options.includeModules: + options.includeModules = options.includeModules.split(",") + else: + options.includeModules = [] + replacePaths = [] + if options.replacePaths: + for directive in options.replacePaths.split(os.pathsep): + fromPath, replacement = directive.split("=") + replacePaths.append((fromPath, replacement)) + options.replacePaths = replacePaths + if options.defaultPath is not None: + sys.path = [p for mp in options.defaultPath \ + for p in mp.split(os.pathsep)] + if options.includePath is not None: + paths = [p for mp in options.includePath for p in mp.split(os.pathsep)] + sys.path = paths + sys.path + if options.script is not None: + sys.path.insert(0, os.path.dirname(options.script)) + return options + + +def main(): + options = ParseCommandLine() + executables = [cx_Freeze.Executable(options.script, + targetName = options.targetName)] + freezer = cx_Freeze.Freezer(executables, + includes = options.includeModules, + excludes = options.excludeModules, + replacePaths = options.replacePaths, + compress = options.compress, + optimizeFlag = options.optimized, + copyDependentFiles = options.copyDeps, + initScript = options.initScript, + base = options.baseName, + path = None, + createLibraryZip = False, + appendScriptToExe = True, + targetDir = options.targetDir) + freezer.Freeze() + diff --git a/installer/cx_Freeze/cx_Freeze/windist.py b/installer/cx_Freeze/cx_Freeze/windist.py new file mode 100644 index 0000000000..51af544771 --- /dev/null +++ b/installer/cx_Freeze/cx_Freeze/windist.py @@ -0,0 +1,337 @@ +import distutils.command.bdist_msi +import msilib +import os + +__all__ = [ "bdist_msi" ] + +# force the remove existing products action to happen first since Windows +# installer appears to be braindead and doesn't handle files shared between +# different "products" very well +sequence = msilib.sequence.InstallExecuteSequence +for index, info in enumerate(sequence): + if info[0] == u'RemoveExistingProducts': + sequence[index] = (info[0], info[1], 1450) + + +class bdist_msi(distutils.command.bdist_msi.bdist_msi): + user_options = distutils.command.bdist_msi.bdist_msi.user_options + [ + ('add-to-path=', None, 'add target dir to PATH environment variable'), + ('upgrade-code=', None, 'upgrade code to use') + ] + x = y = 50 + width = 370 + height = 300 + title = "[ProductName] Setup" + modeless = 1 + modal = 3 + + def add_config(self, fullname): + initialTargetDir = self.get_initial_target_dir(fullname) + if self.add_to_path is None: + self.add_to_path = False + for executable in self.distribution.executables: + if os.path.basename(executable.base).startswith("Console"): + self.add_to_path = True + break + if self.add_to_path: + msilib.add_data(self.db, 'Environment', + [("E_PATH", "Path", r"[~];[TARGETDIR]", "TARGETDIR")]) + msilib.add_data(self.db, 'CustomAction', + [("InitialTargetDir", 256 + 51, "TARGETDIR", initialTargetDir) + ]) + msilib.add_data(self.db, 'InstallExecuteSequence', + [("InitialTargetDir", 'TARGETDIR=""', 401)]) + msilib.add_data(self.db, 'InstallUISequence', + [("PrepareDlg", None, 140), + ("InitialTargetDir", 'TARGETDIR=""', 401), + ("SelectDirectoryDlg", "not Installed", 1230), + ("MaintenanceTypeDlg", + "Installed and not Resume and not Preselected", 1250), + ("ProgressDlg", None, 1280) + ]) + + def add_cancel_dialog(self): + dialog = msilib.Dialog(self.db, "CancelDlg", 50, 10, 260, 85, 3, + self.title, "No", "No", "No") + dialog.text("Text", 48, 15, 194, 30, 3, + "Are you sure you want to cancel [ProductName] installation?") + button = dialog.pushbutton("Yes", 72, 57, 56, 17, 3, "Yes", "No") + button.event("EndDialog", "Exit") + button = dialog.pushbutton("No", 132, 57, 56, 17, 3, "No", "Yes") + button.event("EndDialog", "Return") + + def add_error_dialog(self): + dialog = msilib.Dialog(self.db, "ErrorDlg", 50, 10, 330, 101, 65543, + self.title, "ErrorText", None, None) + dialog.text("ErrorText", 50, 9, 280, 48, 3, "") + for text, x in [("No", 120), ("Yes", 240), ("Abort", 0), + ("Cancel", 42), ("Ignore", 81), ("Ok", 159), ("Retry", 198)]: + button = dialog.pushbutton(text[0], x, 72, 81, 21, 3, text, None) + button.event("EndDialog", "Error%s" % text) + + def add_exit_dialog(self): + dialog = distutils.command.bdist_msi.PyDialog(self.db, "ExitDialog", + self.x, self.y, self.width, self.height, self.modal, + self.title, "Finish", "Finish", "Finish") + dialog.title("Completing the [ProductName] installer") + dialog.back("< Back", "Finish", active = False) + dialog.cancel("Cancel", "Back", active = False) + dialog.text("Description", 15, 235, 320, 20, 0x30003, + "Click the Finish button to exit the installer.") + button = dialog.next("Finish", "Cancel", name = "Finish") + button.event("EndDialog", "Return") + + def add_fatal_error_dialog(self): + dialog = distutils.command.bdist_msi.PyDialog(self.db, "FatalError", + self.x, self.y, self.width, self.height, self.modal, + self.title, "Finish", "Finish", "Finish") + dialog.title("[ProductName] installer ended prematurely") + dialog.back("< Back", "Finish", active = False) + dialog.cancel("Cancel", "Back", active = False) + dialog.text("Description1", 15, 70, 320, 80, 0x30003, + "[ProductName] setup ended prematurely because of an error. " + "Your system has not been modified. To install this program " + "at a later time, please run the installation again.") + dialog.text("Description2", 15, 155, 320, 20, 0x30003, + "Click the Finish button to exit the installer.") + button = dialog.next("Finish", "Cancel", name = "Finish") + button.event("EndDialog", "Exit") + + def add_files_in_use_dialog(self): + dialog = distutils.command.bdist_msi.PyDialog(self.db, "FilesInUse", + self.x, self.y, self.width, self.height, 19, self.title, + "Retry", "Retry", "Retry", bitmap = False) + dialog.text("Title", 15, 6, 200, 15, 0x30003, + r"{\DlgFontBold8}Files in Use") + dialog.text("Description", 20, 23, 280, 20, 0x30003, + "Some files that need to be updated are currently in use.") + dialog.text("Text", 20, 55, 330, 50, 3, + "The following applications are using files that need to be " + "updated by this setup. Close these applications and then " + "click Retry to continue the installation or Cancel to exit " + "it.") + dialog.control("List", "ListBox", 20, 107, 330, 130, 7, + "FileInUseProcess", None, None, None) + button = dialog.back("Exit", "Ignore", name = "Exit") + button.event("EndDialog", "Exit") + button = dialog.next("Ignore", "Retry", name = "Ignore") + button.event("EndDialog", "Ignore") + button = dialog.cancel("Retry", "Exit", name = "Retry") + button.event("EndDialog", "Retry") + + def add_maintenance_type_dialog(self): + dialog = distutils.command.bdist_msi.PyDialog(self.db, + "MaintenanceTypeDlg", self.x, self.y, self.width, self.height, + self.modal, self.title, "Next", "Next", "Cancel") + dialog.title("Welcome to the [ProductName] Setup Wizard") + dialog.text("BodyText", 15, 63, 330, 42, 3, + "Select whether you want to repair or remove [ProductName].") + group = dialog.radiogroup("RepairRadioGroup", 15, 108, 330, 60, 3, + "MaintenanceForm_Action", "", "Next") + group.add("Repair", 0, 18, 300, 17, "&Repair [ProductName]") + group.add("Remove", 0, 36, 300, 17, "Re&move [ProductName]") + dialog.back("< Back", None, active = False) + button = dialog.next("Finish", "Cancel") + button.event("[REINSTALL]", "ALL", + 'MaintenanceForm_Action="Repair"', 5) + button.event("[Progress1]", "Repairing", + 'MaintenanceForm_Action="Repair"', 6) + button.event("[Progress2]", "repairs", + 'MaintenanceForm_Action="Repair"', 7) + button.event("Reinstall", "ALL", + 'MaintenanceForm_Action="Repair"', 8) + button.event("[REMOVE]", "ALL", + 'MaintenanceForm_Action="Remove"', 11) + button.event("[Progress1]", "Removing", + 'MaintenanceForm_Action="Remove"', 12) + button.event("[Progress2]", "removes", + 'MaintenanceForm_Action="Remove"', 13) + button.event("Remove", "ALL", + 'MaintenanceForm_Action="Remove"', 14) + button.event("EndDialog", "Return", + 'MaintenanceForm_Action<>"Change"', 20) + button = dialog.cancel("Cancel", "RepairRadioGroup") + button.event("SpawnDialog", "CancelDlg") + + def add_prepare_dialog(self): + dialog = distutils.command.bdist_msi.PyDialog(self.db, "PrepareDlg", + self.x, self.y, self.width, self.height, self.modeless, + self.title, "Cancel", "Cancel", "Cancel") + dialog.text("Description", 15, 70, 320, 40, 0x30003, + "Please wait while the installer prepares to guide you through" + "the installation.") + dialog.title("Welcome to the [ProductName] installer") + text = dialog.text("ActionText", 15, 110, 320, 20, 0x30003, + "Pondering...") + text.mapping("ActionText", "Text") + text = dialog.text("ActionData", 15, 135, 320, 30, 0x30003, None) + text.mapping("ActionData", "Text") + dialog.back("Back", None, active = False) + dialog.next("Next", None, active = False) + button = dialog.cancel("Cancel", None) + button.event("SpawnDialog", "CancelDlg") + + def add_progress_dialog(self): + dialog = distutils.command.bdist_msi.PyDialog(self.db, "ProgressDlg", + self.x, self.y, self.width, self.height, self.modeless, + self.title, "Cancel", "Cancel", "Cancel", bitmap = False) + dialog.text("Title", 20, 15, 200, 15, 0x30003, + r"{\DlgFontBold8}[Progress1] [ProductName]") + dialog.text("Text", 35, 65, 300, 30, 3, + "Please wait while the installer [Progress2] [ProductName].") + dialog.text("StatusLabel", 35, 100 ,35, 20, 3, "Status:") + text = dialog.text("ActionText", 70, 100, self.width - 70, 20, 3, + "Pondering...") + text.mapping("ActionText", "Text") + control = dialog.control("ProgressBar", "ProgressBar", 35, 120, 300, + 10, 65537, None, "Progress done", None, None) + control.mapping("SetProgress", "Progress") + dialog.back("< Back", "Next", active = False) + dialog.next("Next >", "Cancel", active = False) + button = dialog.cancel("Cancel", "Back") + button.event("SpawnDialog", "CancelDlg") + + def add_properties(self): + metadata = self.distribution.metadata + props = [ + ('DistVersion', metadata.get_version()), + ('DefaultUIFont', 'DlgFont8'), + ('ErrorDialog', 'ErrorDlg'), + ('Progress1', 'Install'), + ('Progress2', 'installs'), + ('MaintenanceForm_Action', 'Repair') + ] + email = metadata.author_email or metadata.maintainer_email + if email: + props.append(("ARPCONTACT", email)) + if metadata.url: + props.append(("ARPURLINFOABOUT", metadata.url)) + if self.upgrade_code is not None: + props.append(("UpgradeCode", self.upgrade_code)) + msilib.add_data(self.db, 'Property', props) + + def add_select_directory_dialog(self): + dialog = distutils.command.bdist_msi.PyDialog(self.db, + "SelectDirectoryDlg", self.x, self.y, self.width, self.height, + self.modal, self.title, "Next", "Next", "Cancel") + dialog.title("Select destination directory") + dialog.back("< Back", None, active = False) + button = dialog.next("Next >", "Cancel") + button.event("SetTargetPath", "TARGETDIR", ordering = 1) + button.event("SpawnWaitDialog", "WaitForCostingDlg", ordering = 2) + button.event("EndDialog", "Return", ordering = 3) + button = dialog.cancel("Cancel", "DirectoryCombo") + button.event("SpawnDialog", "CancelDlg") + dialog.control("DirectoryCombo", "DirectoryCombo", 15, 70, 272, 80, + 393219, "TARGETDIR", None, "DirectoryList", None) + dialog.control("DirectoryList", "DirectoryList", 15, 90, 308, 136, 3, + "TARGETDIR", None, "PathEdit", None) + dialog.control("PathEdit", "PathEdit", 15, 230, 306, 16, 3, + "TARGETDIR", None, "Next", None) + button = dialog.pushbutton("Up", 306, 70, 18, 18, 3, "Up", None) + button.event("DirectoryListUp", "0") + button = dialog.pushbutton("NewDir", 324, 70, 30, 18, 3, "New", None) + button.event("DirectoryListNew", "0") + + def add_text_styles(self): + msilib.add_data(self.db, 'TextStyle', + [("DlgFont8", "Tahoma", 9, None, 0), + ("DlgFontBold8", "Tahoma", 8, None, 1), + ("VerdanaBold10", "Verdana", 10, None, 1), + ("VerdanaRed9", "Verdana", 9, 255, 0) + ]) + + def add_ui(self): + self.add_text_styles() + self.add_error_dialog() + self.add_fatal_error_dialog() + self.add_cancel_dialog() + self.add_exit_dialog() + self.add_user_exit_dialog() + self.add_files_in_use_dialog() + self.add_wait_for_costing_dialog() + self.add_prepare_dialog() + self.add_select_directory_dialog() + self.add_progress_dialog() + self.add_maintenance_type_dialog() + + def add_upgrade_config(self, sversion): + if self.upgrade_code is not None: + msilib.add_data(self.db, 'Upgrade', + [(self.upgrade_code, None, sversion, None, 513, None, + "REMOVEOLDVERSION"), + (self.upgrade_code, sversion, None, None, 257, None, + "REMOVENEWVERSION") + ]) + + def add_user_exit_dialog(self): + dialog = distutils.command.bdist_msi.PyDialog(self.db, "UserExit", + self.x, self.y, self.width, self.height, self.modal, + self.title, "Finish", "Finish", "Finish") + dialog.title("[ProductName] installer was interrupted") + dialog.back("< Back", "Finish", active = False) + dialog.cancel("Cancel", "Back", active = False) + dialog.text("Description1", 15, 70, 320, 80, 0x30003, + "[ProductName] setup was interrupted. Your system has not " + "been modified. To install this program at a later time, " + "please run the installation again.") + dialog.text("Description2", 15, 155, 320, 20, 0x30003, + "Click the Finish button to exit the installer.") + button = dialog.next("Finish", "Cancel", name = "Finish") + button.event("EndDialog", "Exit") + + def add_wait_for_costing_dialog(self): + dialog = msilib.Dialog(self.db, "WaitForCostingDlg", 50, 10, 260, 85, + self.modal, self.title, "Return", "Return", "Return") + dialog.text("Text", 48, 15, 194, 30, 3, + "Please wait while the installer finishes determining your " + "disk space requirements.") + button = dialog.pushbutton("Return", 102, 57, 56, 17, 3, "Return", + None) + button.event("EndDialog", "Exit") + + def get_initial_target_dir(self, fullname): + return r"[ProgramFilesFolder]\%s" % fullname + + def get_installer_filename(self, fullname): + return os.path.join(self.dist_dir, "%s.msi" % fullname) + + def initialize_options(self): + distutils.command.bdist_msi.bdist_msi.initialize_options(self) + self.upgrade_code = None + self.add_to_path = None + + def run(self): + if not self.skip_build: + self.run_command('build') + install = self.reinitialize_command('install', reinit_subcommands = 1) + install.prefix = self.bdist_dir + install.skip_build = self.skip_build + install.warn_dir = 0 + distutils.log.info("installing to %s", self.bdist_dir) + install.ensure_finalized() + install.run() + self.mkpath(self.dist_dir) + fullname = self.distribution.get_fullname() + filename = os.path.abspath(self.get_installer_filename(fullname)) + if os.path.exists(filename): + os.unlink(filename) + metadata = self.distribution.metadata + author = metadata.author or metadata.maintainer or "UNKNOWN" + version = metadata.get_version() + sversion = "%d.%d.%d" % \ + distutils.version.StrictVersion(version).version + self.db = msilib.init_database(filename, msilib.schema, + self.distribution.metadata.name, msilib.gen_uuid(), sversion, + author) + msilib.add_tables(self.db, msilib.sequence) + self.add_properties() + self.add_config(fullname) + self.add_upgrade_config(sversion) + self.add_ui() + self.add_files() + self.db.Commit() + if not self.keep_temp: + distutils.dir_util.remove_tree(self.bdist_dir, + dry_run = self.dry_run) + diff --git a/installer/cx_Freeze/cxfreeze b/installer/cx_Freeze/cxfreeze new file mode 100755 index 0000000000..acd6789833 --- /dev/null +++ b/installer/cx_Freeze/cxfreeze @@ -0,0 +1,6 @@ +#!/usr/bin/python + +from cx_Freeze import main + +main() + diff --git a/installer/cx_Freeze/initscripts/Console.py b/installer/cx_Freeze/initscripts/Console.py new file mode 100755 index 0000000000..e10649d722 --- /dev/null +++ b/installer/cx_Freeze/initscripts/Console.py @@ -0,0 +1,35 @@ +#------------------------------------------------------------------------------ +# Console.py +# Initialization script for cx_Freeze which manipulates the path so that the +# directory in which the executable is found is searched for extensions but +# no other directory is searched. It also sets the attribute sys.frozen so that +# the Win32 extensions behave as expected. +#------------------------------------------------------------------------------ + +import encodings +import os +import sys +import warnings +import zipimport + +sys.frozen = True +sys.path = sys.path[:4] + +os.environ["TCL_LIBRARY"] = os.path.join(DIR_NAME, "tcl") +os.environ["TK_LIBRARY"] = os.path.join(DIR_NAME, "tk") + +m = __import__("__main__") +importer = zipimport.zipimporter(INITSCRIPT_ZIP_FILE_NAME) +if INITSCRIPT_ZIP_FILE_NAME != SHARED_ZIP_FILE_NAME: + moduleName = m.__name__ +else: + name, ext = os.path.splitext(os.path.basename(os.path.normcase(FILE_NAME))) + moduleName = "%s__main__" % name +code = importer.get_code(moduleName) +exec code in m.__dict__ + +if sys.version_info[:2] >= (2, 5): + module = sys.modules.get("threading") + if module is not None: + module._shutdown() + diff --git a/installer/cx_Freeze/initscripts/ConsoleKeepPath.py b/installer/cx_Freeze/initscripts/ConsoleKeepPath.py new file mode 100755 index 0000000000..60151a1ff6 --- /dev/null +++ b/installer/cx_Freeze/initscripts/ConsoleKeepPath.py @@ -0,0 +1,19 @@ +#------------------------------------------------------------------------------ +# ConsoleKeepPath.py +# Initialization script for cx_Freeze which leaves the path alone and does +# not set the sys.frozen attribute. +#------------------------------------------------------------------------------ + +import sys +import zipimport + +m = __import__("__main__") +importer = zipimport.zipimporter(INITSCRIPT_ZIP_FILE_NAME) +code = importer.get_code(m.__name__) +exec code in m.__dict__ + +if sys.version_info[:2] >= (2, 5): + module = sys.modules.get("threading") + if module is not None: + module._shutdown() + diff --git a/installer/cx_Freeze/initscripts/ConsoleSetLibPath.py b/installer/cx_Freeze/initscripts/ConsoleSetLibPath.py new file mode 100755 index 0000000000..b558652c0a --- /dev/null +++ b/installer/cx_Freeze/initscripts/ConsoleSetLibPath.py @@ -0,0 +1,38 @@ +#------------------------------------------------------------------------------ +# ConsoleSetLibPath.py +# Initialization script for cx_Freeze which manipulates the path so that the +# directory in which the executable is found is searched for extensions but +# no other directory is searched. The environment variable LD_LIBRARY_PATH is +# manipulated first, however, to ensure that shared libraries found in the +# target directory are found. This requires a restart of the executable because +# the environment variable LD_LIBRARY_PATH is only checked at startup. +#------------------------------------------------------------------------------ + +import encodings +import os +import sys +import warnings +import zipimport + +paths = os.environ.get("LD_LIBRARY_PATH", "").split(os.pathsep) +if DIR_NAME not in paths: + paths.insert(0, DIR_NAME) + os.environ["LD_LIBRARY_PATH"] = os.pathsep.join(paths) + os.execv(sys.executable, sys.argv) + +sys.frozen = True +sys.path = sys.path[:4] + +os.environ["TCL_LIBRARY"] = os.path.join(DIR_NAME, "tcl") +os.environ["TK_LIBRARY"] = os.path.join(DIR_NAME, "tk") + +m = __import__("__main__") +importer = zipimport.zipimporter(INITSCRIPT_ZIP_FILE_NAME) +code = importer.get_code(m.__name__) +exec code in m.__dict__ + +if sys.version_info[:2] >= (2, 5): + module = sys.modules.get("threading") + if module is not None: + module._shutdown() + diff --git a/installer/cx_Freeze/initscripts/SharedLib.py b/installer/cx_Freeze/initscripts/SharedLib.py new file mode 100755 index 0000000000..0445367010 --- /dev/null +++ b/installer/cx_Freeze/initscripts/SharedLib.py @@ -0,0 +1,20 @@ +#------------------------------------------------------------------------------ +# SharedLib.py +# Initialization script for cx_Freeze which behaves similarly to the one for +# console based applications but must handle the case where Python has already +# been initialized and another DLL of this kind has been loaded. As such it +# does not block the path unless sys.frozen is not already set. +#------------------------------------------------------------------------------ + +import encodings +import os +import sys +import warnings + +if not hasattr(sys, "frozen"): + sys.frozen = True + sys.path = sys.path[:4] + +os.environ["TCL_LIBRARY"] = os.path.join(DIR_NAME, "tcl") +os.environ["TK_LIBRARY"] = os.path.join(DIR_NAME, "tk") + diff --git a/installer/cx_Freeze/initscripts/SharedLibSource.py b/installer/cx_Freeze/initscripts/SharedLibSource.py new file mode 100755 index 0000000000..3edae93694 --- /dev/null +++ b/installer/cx_Freeze/initscripts/SharedLibSource.py @@ -0,0 +1,23 @@ +#------------------------------------------------------------------------------ +# SharedLibSource.py +# Initialization script for cx_Freeze which imports the site module (as per +# normal processing of a Python script) and then searches for a file with the +# same name as the shared library but with the extension .pth. The entries in +# this file are used to modify the path to use for subsequent imports. +#------------------------------------------------------------------------------ + +import os +import sys +import warnings + +# the site module must be imported for normal behavior to take place; it is +# done dynamically so that cx_Freeze will not add all modules referenced by +# the site module to the frozen executable +__import__("site") + +# now locate the pth file to modify the path appropriately +baseName, ext = os.path.splitext(FILE_NAME) +pathFileName = baseName + ".pth" +sys.path = [s.strip() for s in file(pathFileName).read().splitlines()] + \ + sys.path + diff --git a/installer/cx_Freeze/samples/advanced/advanced_1.py b/installer/cx_Freeze/samples/advanced/advanced_1.py new file mode 100644 index 0000000000..2f1b68bceb --- /dev/null +++ b/installer/cx_Freeze/samples/advanced/advanced_1.py @@ -0,0 +1,7 @@ +import sys + +print "Hello from cx_Freeze Advanced #1" +print + +module = __import__("testfreeze_1") + diff --git a/installer/cx_Freeze/samples/advanced/advanced_2.py b/installer/cx_Freeze/samples/advanced/advanced_2.py new file mode 100644 index 0000000000..1a6fe37e62 --- /dev/null +++ b/installer/cx_Freeze/samples/advanced/advanced_2.py @@ -0,0 +1,7 @@ +import sys + +print "Hello from cx_Freeze Advanced #2" +print + +module = __import__("testfreeze_2") + diff --git a/installer/cx_Freeze/samples/advanced/modules/testfreeze_1.py b/installer/cx_Freeze/samples/advanced/modules/testfreeze_1.py new file mode 100644 index 0000000000..6157b72a69 --- /dev/null +++ b/installer/cx_Freeze/samples/advanced/modules/testfreeze_1.py @@ -0,0 +1 @@ +print "Test freeze module #1" diff --git a/installer/cx_Freeze/samples/advanced/modules/testfreeze_2.py b/installer/cx_Freeze/samples/advanced/modules/testfreeze_2.py new file mode 100644 index 0000000000..ca133a7d58 --- /dev/null +++ b/installer/cx_Freeze/samples/advanced/modules/testfreeze_2.py @@ -0,0 +1 @@ +print "Test freeze module #2" diff --git a/installer/cx_Freeze/samples/advanced/setup.py b/installer/cx_Freeze/samples/advanced/setup.py new file mode 100644 index 0000000000..3a79cf23af --- /dev/null +++ b/installer/cx_Freeze/samples/advanced/setup.py @@ -0,0 +1,31 @@ +# An advanced setup script to create multiple executables and demonstrate a few +# of the features available to setup scripts +# +# hello.py is a very simple "Hello, world" type script which also displays the +# environment in which the script runs +# +# Run the build process by running the command 'python setup.py build' +# +# If everything works well you should find a subdirectory in the build +# subdirectory that contains the files needed to run the script without Python + +import sys +from cx_Freeze import setup, Executable + +executables = [ + Executable("advanced_1.py"), + Executable("advanced_2.py") +] + +buildOptions = dict( + compressed = True, + includes = ["testfreeze_1", "testfreeze_2"], + path = sys.path + ["modules"]) + +setup( + name = "advanced_cx_Freeze_sample", + version = "0.1", + description = "Advanced sample cx_Freeze script", + options = dict(build_exe = buildOptions), + executables = executables) + diff --git a/installer/cx_Freeze/samples/matplotlib/setup.py b/installer/cx_Freeze/samples/matplotlib/setup.py new file mode 100644 index 0000000000..54bd97fc3f --- /dev/null +++ b/installer/cx_Freeze/samples/matplotlib/setup.py @@ -0,0 +1,27 @@ +# A simple setup script to create an executable using matplotlib. +# +# test_matplotlib.py is a very simple matplotlib application that demonstrates +# its use. +# +# Run the build process by running the command 'python setup.py build' +# +# If everything works well you should find a subdirectory in the build +# subdirectory that contains the files needed to run the application + +import cx_Freeze +import sys + +base = None +if sys.platform == "win32": + base = "Win32GUI" + +executables = [ + cx_Freeze.Executable("test_matplotlib.py", base = base) +] + +cx_Freeze.setup( + name = "test_matplotlib", + version = "0.1", + description = "Sample matplotlib script", + executables = executables) + diff --git a/installer/cx_Freeze/samples/matplotlib/test_matplotlib.py b/installer/cx_Freeze/samples/matplotlib/test_matplotlib.py new file mode 100644 index 0000000000..2029845ca5 --- /dev/null +++ b/installer/cx_Freeze/samples/matplotlib/test_matplotlib.py @@ -0,0 +1,48 @@ +from numpy import arange, sin, pi +import matplotlib +matplotlib.use('WXAgg') +from matplotlib.backends.backend_wxagg import FigureCanvasWxAgg as FigureCanvas +from matplotlib.backends.backend_wx import NavigationToolbar2Wx +from matplotlib.figure import Figure +from wx import * + +class CanvasFrame(Frame): + def __init__(self): + Frame.__init__(self,None,-1, 'CanvasFrame',size=(550,350)) + self.SetBackgroundColour(NamedColor("WHITE")) + self.figure = Figure() + self.axes = self.figure.add_subplot(111) + t = arange(0.0,3.0,0.01) + s = sin(2*pi*t) + self.axes.plot(t,s) + self.canvas = FigureCanvas(self, -1, self.figure) + self.sizer = BoxSizer(VERTICAL) + self.sizer.Add(self.canvas, 1, LEFT | TOP | GROW) + self.SetSizerAndFit(self.sizer) + self.add_toolbar() + + def add_toolbar(self): + self.toolbar = NavigationToolbar2Wx(self.canvas) + self.toolbar.Realize() + if Platform == '__WXMAC__': + self.SetToolBar(self.toolbar) + else: + tw, th = self.toolbar.GetSizeTuple() + fw, fh = self.canvas.GetSizeTuple() + self.toolbar.SetSize(Size(fw, th)) + self.sizer.Add(self.toolbar, 0, LEFT | EXPAND) + self.toolbar.update() + + def OnPaint(self, event): + self.canvas.draw() + +class App(App): + def OnInit(self): + 'Create the main window and insert the custom frame' + frame = CanvasFrame() + frame.Show(True) + return True + +app = App(0) +app.MainLoop() + diff --git a/installer/cx_Freeze/samples/relimport/pkg1/__init__.py b/installer/cx_Freeze/samples/relimport/pkg1/__init__.py new file mode 100644 index 0000000000..5a170fd2dd --- /dev/null +++ b/installer/cx_Freeze/samples/relimport/pkg1/__init__.py @@ -0,0 +1,3 @@ +print "importing pkg1" +from . import sub1 +from . import pkg2 diff --git a/installer/cx_Freeze/samples/relimport/pkg1/pkg2/__init__.py b/installer/cx_Freeze/samples/relimport/pkg1/pkg2/__init__.py new file mode 100644 index 0000000000..71e0b1fbe6 --- /dev/null +++ b/installer/cx_Freeze/samples/relimport/pkg1/pkg2/__init__.py @@ -0,0 +1,3 @@ +print "importing pkg1.pkg2" +from . import sub3 +from .. import sub4 diff --git a/installer/cx_Freeze/samples/relimport/pkg1/pkg2/sub3.py b/installer/cx_Freeze/samples/relimport/pkg1/pkg2/sub3.py new file mode 100644 index 0000000000..1719aadb41 --- /dev/null +++ b/installer/cx_Freeze/samples/relimport/pkg1/pkg2/sub3.py @@ -0,0 +1,3 @@ +print "importing pkg1.pkg2.sub3" +from . import sub5 +from .. import sub6 diff --git a/installer/cx_Freeze/samples/relimport/pkg1/pkg2/sub5.py b/installer/cx_Freeze/samples/relimport/pkg1/pkg2/sub5.py new file mode 100644 index 0000000000..1c91b8fa23 --- /dev/null +++ b/installer/cx_Freeze/samples/relimport/pkg1/pkg2/sub5.py @@ -0,0 +1 @@ +print "importing pkg1.pkg2.sub5" diff --git a/installer/cx_Freeze/samples/relimport/pkg1/sub1.py b/installer/cx_Freeze/samples/relimport/pkg1/sub1.py new file mode 100644 index 0000000000..514bd88a87 --- /dev/null +++ b/installer/cx_Freeze/samples/relimport/pkg1/sub1.py @@ -0,0 +1,2 @@ +print "importing pkg1.sub1" +from . import sub2 diff --git a/installer/cx_Freeze/samples/relimport/pkg1/sub2.py b/installer/cx_Freeze/samples/relimport/pkg1/sub2.py new file mode 100644 index 0000000000..63a0838b25 --- /dev/null +++ b/installer/cx_Freeze/samples/relimport/pkg1/sub2.py @@ -0,0 +1 @@ +print "importing pkg1.sub2" diff --git a/installer/cx_Freeze/samples/relimport/pkg1/sub4.py b/installer/cx_Freeze/samples/relimport/pkg1/sub4.py new file mode 100644 index 0000000000..3a8e760e43 --- /dev/null +++ b/installer/cx_Freeze/samples/relimport/pkg1/sub4.py @@ -0,0 +1 @@ +print 'importing pkg1.sub4' diff --git a/installer/cx_Freeze/samples/relimport/pkg1/sub6.py b/installer/cx_Freeze/samples/relimport/pkg1/sub6.py new file mode 100644 index 0000000000..1e7d7955d6 --- /dev/null +++ b/installer/cx_Freeze/samples/relimport/pkg1/sub6.py @@ -0,0 +1 @@ +print "importing pkg1.sub6" diff --git a/installer/cx_Freeze/samples/relimport/relimport.py b/installer/cx_Freeze/samples/relimport/relimport.py new file mode 100644 index 0000000000..39cb50c91d --- /dev/null +++ b/installer/cx_Freeze/samples/relimport/relimport.py @@ -0,0 +1 @@ +import pkg1 diff --git a/installer/cx_Freeze/samples/relimport/setup.py b/installer/cx_Freeze/samples/relimport/setup.py new file mode 100644 index 0000000000..b8b3f3853b --- /dev/null +++ b/installer/cx_Freeze/samples/relimport/setup.py @@ -0,0 +1,16 @@ +# relimport.py is a very simple script that tests importing using relative +# imports (available in Python 2.5 and up) +# +# Run the build process by running the command 'python setup.py build' +# +# If everything works well you should find a subdirectory in the build +# subdirectory that contains the files needed to run the script without Python + +from cx_Freeze import setup, Executable + +setup( + name = "relimport", + version = "0.1", + description = "Sample cx_Freeze script for relative imports", + executables = [Executable("relimport.py")]) + diff --git a/installer/cx_Freeze/samples/simple/hello.py b/installer/cx_Freeze/samples/simple/hello.py new file mode 100644 index 0000000000..0fb32405bc --- /dev/null +++ b/installer/cx_Freeze/samples/simple/hello.py @@ -0,0 +1,19 @@ +import sys + +print "Hello from cx_Freeze" +print + +print "sys.executable", sys.executable +print "sys.prefix", sys.prefix +print + +print "ARGUMENTS:" +for a in sys.argv: + print a +print + +print "PATH:" +for p in sys.path: + print p +print + diff --git a/installer/cx_Freeze/samples/simple/setup.py b/installer/cx_Freeze/samples/simple/setup.py new file mode 100644 index 0000000000..25de838b10 --- /dev/null +++ b/installer/cx_Freeze/samples/simple/setup.py @@ -0,0 +1,18 @@ +# A very simple setup script to create a single executable +# +# hello.py is a very simple "Hello, world" type script which also displays the +# environment in which the script runs +# +# Run the build process by running the command 'python setup.py build' +# +# If everything works well you should find a subdirectory in the build +# subdirectory that contains the files needed to run the script without Python + +from cx_Freeze import setup, Executable + +setup( + name = "hello", + version = "0.1", + description = "Sample cx_Freeze script", + executables = [Executable("hello.py")]) + diff --git a/installer/cx_Freeze/samples/wx/setup.py b/installer/cx_Freeze/samples/wx/setup.py new file mode 100644 index 0000000000..9412996859 --- /dev/null +++ b/installer/cx_Freeze/samples/wx/setup.py @@ -0,0 +1,25 @@ +# A simple setup script to create an executable running wxPython. This also +# demonstrates the method for creating a Windows executable that does not have +# an associated console. +# +# wxapp.py is a very simple "Hello, world" type wxPython application +# +# Run the build process by running the command 'python setup.py build' +# +# If everything works well you should find a subdirectory in the build +# subdirectory that contains the files needed to run the application + +import sys + +from cx_Freeze import setup, Executable + +base = None +if sys.platform == "win32": + base = "Win32GUI" + +setup( + name = "hello", + version = "0.1", + description = "Sample cx_Freeze wxPython script", + executables = [Executable("wxapp.py", base = base)]) + diff --git a/installer/cx_Freeze/samples/wx/wxapp.py b/installer/cx_Freeze/samples/wx/wxapp.py new file mode 100644 index 0000000000..7baa90b8d1 --- /dev/null +++ b/installer/cx_Freeze/samples/wx/wxapp.py @@ -0,0 +1,42 @@ +import wx + +class Frame(wx.Frame): + + def __init__(self): + wx.Frame.__init__(self, parent = None, title = "Hello from cx_Freeze") + panel = wx.Panel(self) + closeMeButton = wx.Button(panel, -1, "Close Me") + wx.EVT_BUTTON(self, closeMeButton.GetId(), self.OnCloseMe) + wx.EVT_CLOSE(self, self.OnCloseWindow) + pushMeButton = wx.Button(panel, -1, "Push Me") + wx.EVT_BUTTON(self, pushMeButton.GetId(), self.OnPushMe) + sizer = wx.BoxSizer(wx.HORIZONTAL) + sizer.Add(closeMeButton, flag = wx.ALL, border = 20) + sizer.Add(pushMeButton, flag = wx.ALL, border = 20) + panel.SetSizer(sizer) + topSizer = wx.BoxSizer(wx.VERTICAL) + topSizer.Add(panel, flag = wx.ALL | wx.EXPAND) + topSizer.Fit(self) + + def OnCloseMe(self, event): + self.Close(True) + + def OnPushMe(self, event): + 1 / 0 + + def OnCloseWindow(self, event): + self.Destroy() + + +class App(wx.App): + + def OnInit(self): + frame = Frame() + frame.Show(True) + self.SetTopWindow(frame) + return True + + +app = App(1) +app.MainLoop() + diff --git a/installer/cx_Freeze/setup.py b/installer/cx_Freeze/setup.py new file mode 100755 index 0000000000..b51453aa7a --- /dev/null +++ b/installer/cx_Freeze/setup.py @@ -0,0 +1,197 @@ +""" +Distutils script for cx_Freeze. +""" + +import distutils.command.bdist_rpm +import distutils.command.build_ext +import distutils.command.build_scripts +import distutils.command.install +import distutils.command.install_data +import distutils.sysconfig +import os +import sys + +from distutils.core import setup +from distutils.extension import Extension + +class bdist_rpm(distutils.command.bdist_rpm.bdist_rpm): + + # rpm automatically byte compiles all Python files in a package but we + # don't want that to happen for initscripts and samples so we tell it to + # ignore those files + def _make_spec_file(self): + specFile = distutils.command.bdist_rpm.bdist_rpm._make_spec_file(self) + specFile.insert(0, "%define _unpackaged_files_terminate_build 0%{nil}") + return specFile + + def run(self): + distutils.command.bdist_rpm.bdist_rpm.run(self) + specFile = os.path.join(self.rpm_base, "SPECS", + "%s.spec" % self.distribution.get_name()) + queryFormat = "%{name}-%{version}-%{release}.%{arch}.rpm" + command = "rpm -q --qf '%s' --specfile %s" % (queryFormat, specFile) + origFileName = os.popen(command).read() + parts = origFileName.split("-") + parts.insert(2, "py%s%s" % sys.version_info[:2]) + newFileName = "-".join(parts) + self.move_file(os.path.join("dist", origFileName), + os.path.join("dist", newFileName)) + + +class build_ext(distutils.command.build_ext.build_ext): + + def build_extension(self, ext): + if ext.name.find("bases") < 0: + distutils.command.build_ext.build_ext.build_extension(self, ext) + return + os.environ["LD_RUN_PATH"] = "${ORIGIN}:${ORIGIN}/../lib" + objects = self.compiler.compile(ext.sources, + output_dir = self.build_temp, + include_dirs = ext.include_dirs, + debug = self.debug, + depends = ext.depends) + fileName = os.path.splitext(self.get_ext_filename(ext.name))[0] + fullName = os.path.join(self.build_lib, fileName) + libraryDirs = ext.library_dirs or [] + libraries = self.get_libraries(ext) + extraArgs = ext.extra_link_args or [] + if sys.platform != "win32": + vars = distutils.sysconfig.get_config_vars() + libraryDirs.append(vars["LIBPL"]) + libraries.append("python%s.%s" % sys.version_info[:2]) + if vars["LINKFORSHARED"]: + extraArgs.extend(vars["LINKFORSHARED"].split()) + if vars["LIBS"]: + extraArgs.extend(vars["LIBS"].split()) + if vars["LIBM"]: + extraArgs.append(vars["LIBM"]) + if vars["BASEMODLIBS"]: + extraArgs.extend(vars["BASEMODLIBS"].split()) + if vars["LOCALMODLIBS"]: + extraArgs.extend(vars["LOCALMODLIBS"].split()) + extraArgs.append("-s") + self.compiler.link_executable(objects, fullName, + libraries = libraries, + library_dirs = libraryDirs, + runtime_library_dirs = ext.runtime_library_dirs, + extra_postargs = extraArgs, + debug = self.debug) + + def get_ext_filename(self, name): + fileName = distutils.command.build_ext.build_ext.get_ext_filename(self, + name) + if name.find("bases") < 0: + return fileName + ext = self.compiler.exe_extension or "" + return os.path.splitext(fileName)[0] + ext + + +class build_scripts(distutils.command.build_scripts.build_scripts): + + def copy_scripts(self): + distutils.command.build_scripts.build_scripts.copy_scripts(self) + if sys.platform == "win32": + for script in self.scripts: + batFileName = os.path.join(self.build_dir, script + ".bat") + fullScriptName = r"%s\Scripts\%s" % \ + (os.path.dirname(sys.executable), script) + command = "%s %s %%1 %%2 %%3 %%4 %%5 %%6 %%7 %%8 %%9" % \ + (sys.executable, fullScriptName) + file(batFileName, "w").write("@echo off\n\n%s" % command) + + +class install(distutils.command.install.install): + + def get_sub_commands(self): + subCommands = distutils.command.install.install.get_sub_commands(self) + subCommands.append("install_packagedata") + return subCommands + + +class install_packagedata(distutils.command.install_data.install_data): + + def run(self): + installCommand = self.get_finalized_command("install") + installDir = getattr(installCommand, "install_lib") + sourceDirs = ["samples", "initscripts"] + while sourceDirs: + sourceDir = sourceDirs.pop(0) + targetDir = os.path.join(installDir, "cx_Freeze", sourceDir) + self.mkpath(targetDir) + for name in os.listdir(sourceDir): + if name == "build" or name.startswith("."): + continue + fullSourceName = os.path.join(sourceDir, name) + if os.path.isdir(fullSourceName): + sourceDirs.append(fullSourceName) + else: + fullTargetName = os.path.join(targetDir, name) + self.copy_file(fullSourceName, fullTargetName) + self.outfiles.append(fullTargetName) + + +commandClasses = dict( + build_ext = build_ext, + build_scripts = build_scripts, + bdist_rpm = bdist_rpm, + install = install, + install_packagedata = install_packagedata) + +if sys.platform == "win32": + libraries = ["imagehlp"] +else: + libraries = [] +utilModule = Extension("cx_Freeze.util", ["source/util.c"], + libraries = libraries) +depends = ["source/bases/Common.c"] +if sys.platform == "win32": + if sys.version_info[:2] >= (2, 6): + extraSources = ["source/bases/manifest.rc"] + else: + extraSources = ["source/bases/dummy.rc"] +else: + extraSources = [] +console = Extension("cx_Freeze.bases.Console", + ["source/bases/Console.c"] + extraSources, depends = depends) +consoleKeepPath = Extension("cx_Freeze.bases.ConsoleKeepPath", + ["source/bases/ConsoleKeepPath.c"] + extraSources, depends = depends) +extensions = [utilModule, console, consoleKeepPath] +if sys.platform == "win32": + gui = Extension("cx_Freeze.bases.Win32GUI", + ["source/bases/Win32GUI.c"] + extraSources, + depends = depends, extra_link_args = ["-mwindows"]) + extensions.append(gui) + +docFiles = "LICENSE.txt README.txt HISTORY.txt doc/cx_Freeze.html" + +classifiers = [ + "Development Status :: 5 - Production/Stable", + "Intended Audience :: Developers", + "License :: OSI Approved :: Python Software Foundation License", + "Natural Language :: English", + "Operating System :: OS Independent", + "Programming Language :: C", + "Programming Language :: Python", + "Topic :: Software Development :: Build Tools", + "Topic :: Software Development :: Libraries :: Python Modules", + "Topic :: System :: Software Distribution", + "Topic :: Utilities" +] + +setup(name = "cx_Freeze", + description = "create standalone executables from Python scripts", + long_description = "create standalone executables from Python scripts", + version = "4.0.1", + cmdclass = commandClasses, + options = dict(bdist_rpm = dict(doc_files = docFiles), + install = dict(optimize = 1)), + ext_modules = extensions, + packages = ['cx_Freeze'], + maintainer="Anthony Tuininga", + maintainer_email="anthony.tuininga@gmail.com", + url = "http://cx-freeze.sourceforge.net", + scripts = ["cxfreeze"], + classifiers = classifiers, + keywords = "freeze", + license = "Python Software Foundation License") + diff --git a/installer/cx_Freeze/source/bases/Common.c b/installer/cx_Freeze/source/bases/Common.c new file mode 100644 index 0000000000..ce1e137ebb --- /dev/null +++ b/installer/cx_Freeze/source/bases/Common.c @@ -0,0 +1,262 @@ +//----------------------------------------------------------------------------- +// Common.c +// Routines which are common to running frozen executables. +//----------------------------------------------------------------------------- + +#include +#include +#include + +// global variables (used for simplicity) +static PyObject *g_FileName = NULL; +static PyObject *g_DirName = NULL; +static PyObject *g_ExclusiveZipFileName = NULL; +static PyObject *g_SharedZipFileName = NULL; +static PyObject *g_InitScriptZipFileName = NULL; + +//----------------------------------------------------------------------------- +// GetDirName() +// Return the directory name of the given path. +//----------------------------------------------------------------------------- +static int GetDirName( + const char *path, // path to calculate dir name for + PyObject **dirName) // directory name (OUT) +{ + int i; + + for (i = strlen(path); i > 0 && path[i] != SEP; --i); + *dirName = PyString_FromStringAndSize(path, i); + if (!*dirName) + return FatalError("cannot create string for directory name"); + return 0; +} + + +//----------------------------------------------------------------------------- +// SetExecutableName() +// Set the script to execute and calculate the directory in which the +// executable is found as well as the exclusive (only for this executable) and +// shared zip file names. +//----------------------------------------------------------------------------- +static int SetExecutableName( + const char *fileName) // script to execute +{ + char temp[MAXPATHLEN + 12], *ptr; +#ifndef WIN32 + char linkData[MAXPATHLEN + 1]; + struct stat statData; + size_t linkSize, i; + PyObject *dirName; +#endif + + // store file name + g_FileName = PyString_FromString(fileName); + if (!g_FileName) + return FatalError("cannot create string for file name"); + +#ifndef WIN32 + for (i = 0; i < 25; i++) { + if (lstat(fileName, &statData) < 0) { + PyErr_SetFromErrnoWithFilename(PyExc_OSError, (char*) fileName); + return FatalError("unable to stat file"); + } + if (!S_ISLNK(statData.st_mode)) + break; + linkSize = readlink(fileName, linkData, sizeof(linkData)); + if (linkSize < 0) { + PyErr_SetFromErrnoWithFilename(PyExc_OSError, (char*) fileName); + return FatalError("unable to stat file"); + } + if (linkData[0] == '/') { + Py_DECREF(g_FileName); + g_FileName = PyString_FromStringAndSize(linkData, linkSize); + } else { + if (GetDirName(PyString_AS_STRING(g_FileName), &dirName) < 0) + return -1; + if (PyString_GET_SIZE(dirName) + linkSize + 1 > MAXPATHLEN) { + Py_DECREF(dirName); + return FatalError("cannot dereference link, path too large"); + } + strcpy(temp, PyString_AS_STRING(dirName)); + strcat(temp, "/"); + strcat(temp, linkData); + Py_DECREF(g_FileName); + g_FileName = PyString_FromString(temp); + } + if (!g_FileName) + return FatalError("cannot create string for linked file name"); + fileName = PyString_AS_STRING(g_FileName); + } +#endif + + // calculate and store directory name + if (GetDirName(fileName, &g_DirName) < 0) + return -1; + + // calculate and store exclusive zip file name + strcpy(temp, fileName); + ptr = temp + strlen(temp) - 1; + while (ptr > temp && *ptr != SEP && *ptr != '.') + ptr--; + if (*ptr == '.') + *ptr = '\0'; + strcat(temp, ".zip"); + g_ExclusiveZipFileName = PyString_FromString(temp); + if (!g_ExclusiveZipFileName) + return FatalError("cannot create string for exclusive zip file name"); + + // calculate and store shared zip file name + strcpy(temp, PyString_AS_STRING(g_DirName)); + ptr = temp + strlen(temp); + *ptr++ = SEP; + strcpy(ptr, "library.zip"); + g_SharedZipFileName = PyString_FromString(temp); + if (!g_SharedZipFileName) + return FatalError("cannot create string for shared zip file name"); + + return 0; +} + + +//----------------------------------------------------------------------------- +// SetPathToSearch() +// Set the path to search. This includes the file (for those situations where +// a zip file is attached to the executable itself), the directory where the +// executable is found (to search for extensions), the exclusive zip file +// name and the shared zip file name. +//----------------------------------------------------------------------------- +static int SetPathToSearch(void) +{ + PyObject *pathList; + + pathList = PySys_GetObject("path"); + if (!pathList) + return FatalError("cannot acquire sys.path"); + if (PyList_Insert(pathList, 0, g_FileName) < 0) + return FatalError("cannot insert file name into sys.path"); + if (PyList_Insert(pathList, 1, g_DirName) < 0) + return FatalError("cannot insert directory name into sys.path"); + if (PyList_Insert(pathList, 2, g_ExclusiveZipFileName) < 0) + return FatalError("cannot insert exclusive zip name into sys.path"); + if (PyList_Insert(pathList, 3, g_SharedZipFileName) < 0) + return FatalError("cannot insert shared zip name into sys.path"); + return 0; +} + + +//----------------------------------------------------------------------------- +// GetImporterHelper() +// Helper which is used to locate the importer for the initscript. +//----------------------------------------------------------------------------- +static PyObject *GetImporterHelper( + PyObject *module, // zipimport module + PyObject *fileName) // name of file to search +{ + PyObject *importer; + + importer = PyObject_CallMethod(module, "zipimporter", "O", fileName); + if (importer) + g_InitScriptZipFileName = fileName; + else + PyErr_Clear(); + return importer; +} + + +//----------------------------------------------------------------------------- +// GetImporter() +// Return the importer which will be used for importing the initialization +// script. The executable itself is searched first, followed by the exclusive +// zip file and finally by the shared zip file. +//----------------------------------------------------------------------------- +static int GetImporter( + PyObject **importer) // importer (OUT) +{ + PyObject *module; + + module = PyImport_ImportModule("zipimport"); + if (!module) + return FatalError("cannot import zipimport module"); + *importer = GetImporterHelper(module, g_FileName); + if (!*importer) { + *importer = GetImporterHelper(module, g_ExclusiveZipFileName); + if (!*importer) + *importer = GetImporterHelper(module, g_SharedZipFileName); + } + Py_DECREF(module); + if (!*importer) + return FatalError("cannot get zipimporter instance"); + return 0; +} + + +//----------------------------------------------------------------------------- +// PopulateInitScriptDict() +// Return the dictionary used by the initialization script. +//----------------------------------------------------------------------------- +static int PopulateInitScriptDict( + PyObject *dict) // dictionary to populate +{ + if (!dict) + return FatalError("unable to create temporary dictionary"); + if (PyDict_SetItemString(dict, "__builtins__", PyEval_GetBuiltins()) < 0) + return FatalError("unable to set __builtins__"); + if (PyDict_SetItemString(dict, "FILE_NAME", g_FileName) < 0) + return FatalError("unable to set FILE_NAME"); + if (PyDict_SetItemString(dict, "DIR_NAME", g_DirName) < 0) + return FatalError("unable to set DIR_NAME"); + if (PyDict_SetItemString(dict, "EXCLUSIVE_ZIP_FILE_NAME", + g_ExclusiveZipFileName) < 0) + return FatalError("unable to set EXCLUSIVE_ZIP_FILE_NAME"); + if (PyDict_SetItemString(dict, "SHARED_ZIP_FILE_NAME", + g_SharedZipFileName) < 0) + return FatalError("unable to set SHARED_ZIP_FILE_NAME"); + if (PyDict_SetItemString(dict, "INITSCRIPT_ZIP_FILE_NAME", + g_InitScriptZipFileName) < 0) + return FatalError("unable to set INITSCRIPT_ZIP_FILE_NAME"); + return 0; +} + + + + +//----------------------------------------------------------------------------- +// ExecuteScript() +// Execute the script found within the file. +//----------------------------------------------------------------------------- +static int ExecuteScript( + const char *fileName) // name of file containing Python code +{ + PyObject *importer, *dict, *code, *temp; + + if (SetExecutableName(fileName) < 0) + return -1; + if (SetPathToSearch() < 0) + return -1; + importer = NULL; + if (GetImporter(&importer) < 0) + return -1; + + // create and populate dictionary for initscript module + dict = PyDict_New(); + if (PopulateInitScriptDict(dict) < 0) { + Py_XDECREF(dict); + Py_DECREF(importer); + return -1; + } + + // locate and execute script + code = PyObject_CallMethod(importer, "get_code", "s", "cx_Freeze__init__"); + Py_DECREF(importer); + if (!code) + return FatalError("unable to locate initialization module"); + temp = PyEval_EvalCode( (PyCodeObject*) code, dict, dict); + Py_DECREF(code); + Py_DECREF(dict); + if (!temp) + return FatalScriptError(); + Py_DECREF(temp); + + return 0; +} + diff --git a/installer/cx_Freeze/source/bases/Console.c b/installer/cx_Freeze/source/bases/Console.c new file mode 100644 index 0000000000..d6a8a515a0 --- /dev/null +++ b/installer/cx_Freeze/source/bases/Console.c @@ -0,0 +1,72 @@ +//----------------------------------------------------------------------------- +// Console.c +// Main routine for frozen programs which run in a console. +//----------------------------------------------------------------------------- + +#include +#ifdef __WIN32__ +#include +#endif + +//----------------------------------------------------------------------------- +// FatalError() +// Prints a fatal error. +//----------------------------------------------------------------------------- +static int FatalError( + const char *message) // message to print +{ + PyErr_Print(); + Py_FatalError(message); + return -1; +} + + +//----------------------------------------------------------------------------- +// FatalScriptError() +// Prints a fatal error in the initialization script. +//----------------------------------------------------------------------------- +static int FatalScriptError(void) +{ + PyErr_Print(); + return -1; +} + + +#include "Common.c" + + +//----------------------------------------------------------------------------- +// main() +// Main routine for frozen programs. +//----------------------------------------------------------------------------- +int main(int argc, char **argv) +{ + const char *fileName; + char *encoding; + + // initialize Python + Py_NoSiteFlag = 1; + Py_FrozenFlag = 1; + Py_IgnoreEnvironmentFlag = 1; + + encoding = getenv("PYTHONIOENCODING"); + if (encoding != NULL) { + Py_FileSystemDefaultEncoding = strndup(encoding, 100); + } + + Py_SetPythonHome(""); + Py_SetProgramName(argv[0]); + fileName = Py_GetProgramFullPath(); + + Py_Initialize(); + PySys_SetArgv(argc, argv); + + + // do the work + if (ExecuteScript(fileName) < 0) + return 1; + + Py_Finalize(); + return 0; +} + diff --git a/installer/cx_Freeze/source/bases/ConsoleKeepPath.c b/installer/cx_Freeze/source/bases/ConsoleKeepPath.c new file mode 100644 index 0000000000..3ad00f8488 --- /dev/null +++ b/installer/cx_Freeze/source/bases/ConsoleKeepPath.c @@ -0,0 +1,60 @@ +//----------------------------------------------------------------------------- +// ConsoleKeepPath.c +// Main routine for frozen programs which need a Python installation to do +// their work. +//----------------------------------------------------------------------------- + +#include +#ifdef __WIN32__ +#include +#endif + +//----------------------------------------------------------------------------- +// FatalError() +// Prints a fatal error. +//----------------------------------------------------------------------------- +static int FatalError( + const char *message) // message to print +{ + PyErr_Print(); + Py_FatalError(message); + return -1; +} + + +//----------------------------------------------------------------------------- +// FatalScriptError() +// Prints a fatal error in the initialization script. +//----------------------------------------------------------------------------- +static int FatalScriptError(void) +{ + PyErr_Print(); + return -1; +} + + +#include "Common.c" + + +//----------------------------------------------------------------------------- +// main() +// Main routine for frozen programs. +//----------------------------------------------------------------------------- +int main(int argc, char **argv) +{ + const char *fileName; + + // initialize Python + Py_SetProgramName(argv[0]); + fileName = Py_GetProgramFullPath(); + Py_Initialize(); + PySys_SetArgv(argc, argv); + + // do the work + if (ExecuteScript(fileName) < 0) + return 1; + + Py_Finalize(); + return 0; +} + diff --git a/installer/cx_Freeze/source/bases/Win32GUI.c b/installer/cx_Freeze/source/bases/Win32GUI.c new file mode 100644 index 0000000000..f5bbe74dba --- /dev/null +++ b/installer/cx_Freeze/source/bases/Win32GUI.c @@ -0,0 +1,242 @@ +//----------------------------------------------------------------------------- +// Win32GUI.c +// Main routine for frozen programs written for the Win32 GUI subsystem. +//----------------------------------------------------------------------------- + +#include +#include + +//----------------------------------------------------------------------------- +// FatalError() +// Handle a fatal error. +//----------------------------------------------------------------------------- +static int FatalError( + char *a_Message) // message to display +{ + MessageBox(NULL, a_Message, "cx_Freeze Fatal Error", MB_ICONERROR); + Py_Finalize(); + return -1; +} + + +//----------------------------------------------------------------------------- +// StringifyObject() +// Stringify a Python object. +//----------------------------------------------------------------------------- +static char *StringifyObject( + PyObject *object, // object to stringify + PyObject **stringRep) // string representation +{ + if (object) { + *stringRep = PyObject_Str(object); + if (*stringRep) + return PyString_AS_STRING(*stringRep); + return "Unable to stringify"; + } + + // object is NULL + *stringRep = NULL; + return "None"; +} + + +//----------------------------------------------------------------------------- +// FatalPythonErrorNoTraceback() +// Handle a fatal Python error without traceback. +//----------------------------------------------------------------------------- +static int FatalPythonErrorNoTraceback( + PyObject *origType, // exception type + PyObject *origValue, // exception value + char *message) // message to display +{ + PyObject *typeStrRep, *valueStrRep, *origTypeStrRep, *origValueStrRep; + char *totalMessage, *typeStr, *valueStr, *origTypeStr, *origValueStr; + PyObject *type, *value, *traceback; + int totalMessageLength; + char *messageFormat; + + // fetch error and string representations of the error + PyErr_Fetch(&type, &value, &traceback); + origTypeStr = StringifyObject(origType, &origTypeStrRep); + origValueStr = StringifyObject(origValue, &origValueStrRep); + typeStr = StringifyObject(type, &typeStrRep); + valueStr = StringifyObject(value, &valueStrRep); + + // fill out the message to be displayed + messageFormat = "Type: %s\nValue: %s\nOther Type: %s\nOtherValue: %s\n%s"; + totalMessageLength = strlen(origTypeStr) + strlen(origValueStr) + + strlen(typeStr) + strlen(valueStr) + strlen(message) + + strlen(messageFormat) + 1; + totalMessage = malloc(totalMessageLength); + if (!totalMessage) + return FatalError("Out of memory!"); + sprintf(totalMessage, messageFormat, typeStr, valueStr, origTypeStr, + origValueStr, message); + + // display the message + MessageBox(NULL, totalMessage, + "cx_Freeze: Python error in main script (traceback unavailable)", + MB_ICONERROR); + free(totalMessage); + return -1; +} + + +//----------------------------------------------------------------------------- +// ArgumentValue() +// Return a suitable argument value by replacing NULL with Py_None. +//----------------------------------------------------------------------------- +static PyObject *ArgumentValue( + PyObject *object) // argument to massage +{ + if (object) { + Py_INCREF(object); + return object; + } + Py_INCREF(Py_None); + return Py_None; +} + + +//----------------------------------------------------------------------------- +// HandleSystemExitException() +// Handles a system exit exception differently. If an integer value is passed +// through then that becomes the exit value; otherwise the string value of the +// value passed through is displayed in a message box. +//----------------------------------------------------------------------------- +static void HandleSystemExitException() +{ + PyObject *type, *value, *traceback, *valueStr; + int exitCode = 0; + char *message; + + PyErr_Fetch(&type, &value, &traceback); + if (PyInstance_Check(value)) { + PyObject *code = PyObject_GetAttrString(value, "code"); + if (code) { + Py_DECREF(value); + value = code; + if (value == Py_None) + Py_Exit(0); + } + } + if (PyInt_Check(value)) + exitCode = PyInt_AsLong(value); + else { + message = StringifyObject(value, &valueStr); + MessageBox(NULL, message, "cx_Freeze: Application Terminated", + MB_ICONERROR); + Py_XDECREF(valueStr); + exitCode = 1; + } + Py_Exit(exitCode); +} + + +//----------------------------------------------------------------------------- +// FatalScriptError() +// Handle a fatal Python error with traceback. +//----------------------------------------------------------------------------- +static int FatalScriptError() +{ + PyObject *type, *value, *traceback, *argsTuple, *module, *method, *result; + int tracebackLength, i; + char *tracebackStr; + + // if a system exception, handle it specially + if (PyErr_ExceptionMatches(PyExc_SystemExit)) + HandleSystemExitException(); + + // get the exception details + PyErr_Fetch(&type, &value, &traceback); + + // import the traceback module + module = PyImport_ImportModule("traceback"); + if (!module) + return FatalPythonErrorNoTraceback(type, value, + "Cannot import traceback module."); + + // get the format_exception method + method = PyObject_GetAttrString(module, "format_exception"); + Py_DECREF(module); + if (!method) + return FatalPythonErrorNoTraceback(type, value, + "Cannot get format_exception method."); + + // create a tuple for the arguments + argsTuple = PyTuple_New(3); + if (!argsTuple) { + Py_DECREF(method); + return FatalPythonErrorNoTraceback(type, value, + "Cannot create arguments tuple for traceback."); + } + PyTuple_SET_ITEM(argsTuple, 0, ArgumentValue(type)); + PyTuple_SET_ITEM(argsTuple, 1, ArgumentValue(value)); + PyTuple_SET_ITEM(argsTuple, 2, ArgumentValue(traceback)); + + // call the format_exception method + result = PyObject_CallObject(method, argsTuple); + Py_DECREF(method); + Py_DECREF(argsTuple); + if (!result) + return FatalPythonErrorNoTraceback(type, value, + "Failed calling format_exception method."); + + // determine length of string representation of formatted traceback + tracebackLength = 1; + for (i = 0; i < PyList_GET_SIZE(result); i++) + tracebackLength += PyString_GET_SIZE(PyList_GET_ITEM(result, i)); + + // create a string representation of the formatted traceback + tracebackStr = malloc(tracebackLength); + if (!tracebackStr) { + Py_DECREF(result); + return FatalError("Out of memory!"); + } + tracebackStr[0] = '\0'; + for (i = 0; i < PyList_GET_SIZE(result); i++) + strcat(tracebackStr, PyString_AS_STRING(PyList_GET_ITEM(result, i))); + Py_DECREF(result); + + // bring up the error + MessageBox(NULL, tracebackStr, "cx_Freeze: Python error in main script", + MB_ICONERROR); + Py_Finalize(); + return 1; +} + + +#include "Common.c" + + +//----------------------------------------------------------------------------- +// WinMain() +// Main routine for the executable in Windows. +//----------------------------------------------------------------------------- +int WINAPI WinMain( + HINSTANCE instance, // handle to application + HINSTANCE prevInstance, // previous handle to application + LPSTR commandLine, // command line + int showFlag) // show flag +{ + const char *fileName; + + // initialize Python + Py_NoSiteFlag = 1; + Py_FrozenFlag = 1; + Py_IgnoreEnvironmentFlag = 1; + Py_SetPythonHome(""); + Py_SetProgramName(__argv[0]); + fileName = Py_GetProgramFullPath(); + Py_Initialize(); + PySys_SetArgv(__argc, __argv); + + // do the work + if (ExecuteScript(fileName) < 0) + return 1; + + // terminate Python + Py_Finalize(); + return 0; +} + diff --git a/installer/cx_Freeze/source/bases/dummy.rc b/installer/cx_Freeze/source/bases/dummy.rc new file mode 100644 index 0000000000..5c1fa1a194 --- /dev/null +++ b/installer/cx_Freeze/source/bases/dummy.rc @@ -0,0 +1,5 @@ +STRINGTABLE +{ + 1, "Just to ensure that buggy EndUpdateResource doesn't fall over." +} + diff --git a/installer/cx_Freeze/source/bases/manifest.rc b/installer/cx_Freeze/source/bases/manifest.rc new file mode 100644 index 0000000000..2b7ee27ab5 --- /dev/null +++ b/installer/cx_Freeze/source/bases/manifest.rc @@ -0,0 +1,3 @@ +#include "dummy.rc" + +1 24 source/bases/manifest.txt diff --git a/installer/cx_Freeze/source/util.c b/installer/cx_Freeze/source/util.c new file mode 100644 index 0000000000..1c8eb0c0ca --- /dev/null +++ b/installer/cx_Freeze/source/util.c @@ -0,0 +1,418 @@ +//----------------------------------------------------------------------------- +// util.c +// Shared library for use by cx_Freeze. +//----------------------------------------------------------------------------- + +#include + +#ifdef WIN32 +#include +#include + +#pragma pack(2) + +typedef struct { + BYTE bWidth; // Width, in pixels, of the image + BYTE bHeight; // Height, in pixels, of the image + BYTE bColorCount; // Number of colors in image + BYTE bReserved; // Reserved ( must be 0) + WORD wPlanes; // Color Planes + WORD wBitCount; // Bits per pixel + DWORD dwBytesInRes; // How many bytes in this resource? + DWORD dwImageOffset; // Where in the file is this image? +} ICONDIRENTRY; + +typedef struct { + WORD idReserved; // Reserved (must be 0) + WORD idType; // Resource Type (1 for icons) + WORD idCount; // How many images? + ICONDIRENTRY idEntries[0]; // An entry for each image +} ICONDIR; + +typedef struct { + BYTE bWidth; // Width, in pixels, of the image + BYTE bHeight; // Height, in pixels, of the image + BYTE bColorCount; // Number of colors in image + BYTE bReserved; // Reserved ( must be 0) + WORD wPlanes; // Color Planes + WORD wBitCount; // Bits per pixel + DWORD dwBytesInRes; // How many bytes in this resource? + WORD nID; // resource ID +} GRPICONDIRENTRY; + +typedef struct { + WORD idReserved; // Reserved (must be 0) + WORD idType; // Resource Type (1 for icons) + WORD idCount; // How many images? + GRPICONDIRENTRY idEntries[0]; // An entry for each image +} GRPICONDIR; +#endif + +//----------------------------------------------------------------------------- +// Globals +//----------------------------------------------------------------------------- +#ifdef WIN32 +static PyObject *g_BindErrorException = NULL; +static PyObject *g_ImageNames = NULL; +#endif + + +#ifdef WIN32 +//----------------------------------------------------------------------------- +// BindStatusRoutine() +// Called by BindImageEx() at various points. This is used to determine the +// dependency tree which is later examined by cx_Freeze. +//----------------------------------------------------------------------------- +static BOOL __stdcall BindStatusRoutine( + IMAGEHLP_STATUS_REASON reason, // reason called + PSTR imageName, // name of image being examined + PSTR dllName, // name of DLL + ULONG virtualAddress, // computed virtual address + ULONG parameter) // parameter (value depends on reason) +{ + char fileName[MAX_PATH + 1]; + + switch (reason) { + case BindImportModule: + if (!SearchPath(NULL, dllName, NULL, sizeof(fileName), fileName, + NULL)) + return FALSE; + Py_INCREF(Py_None); + if (PyDict_SetItemString(g_ImageNames, fileName, Py_None) < 0) + return FALSE; + break; + default: + break; + } + return TRUE; +} + + +//----------------------------------------------------------------------------- +// GetFileData() +// Return the data for the given file. +//----------------------------------------------------------------------------- +static int GetFileData( + const char *fileName, // name of file to read + char **data) // pointer to data (OUT) +{ + DWORD numberOfBytesRead, dataSize; + HANDLE file; + + file = CreateFile(fileName, GENERIC_READ, FILE_SHARE_READ, NULL, + OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); + if (file == INVALID_HANDLE_VALUE) + return -1; + dataSize = GetFileSize(file, NULL); + if (dataSize == INVALID_FILE_SIZE) { + CloseHandle(file); + return -1; + } + *data = PyMem_Malloc(dataSize); + if (!*data) { + CloseHandle(file); + return -1; + } + if (!ReadFile(file, *data, dataSize, &numberOfBytesRead, NULL)) { + CloseHandle(file); + return -1; + } + CloseHandle(file); + return 0; +} + + +//----------------------------------------------------------------------------- +// CreateGroupIconResource() +// Return the group icon resource given the icon file data. +//----------------------------------------------------------------------------- +static GRPICONDIR *CreateGroupIconResource( + ICONDIR *iconDir, // icon information + DWORD *resourceSize) // size of resource (OUT) +{ + GRPICONDIR *groupIconDir; + int i; + + *resourceSize = sizeof(GRPICONDIR) + + sizeof(GRPICONDIRENTRY) * iconDir->idCount; + groupIconDir = PyMem_Malloc(*resourceSize); + if (!groupIconDir) + return NULL; + groupIconDir->idReserved = iconDir->idReserved; + groupIconDir->idType = iconDir->idType; + groupIconDir->idCount = iconDir->idCount; + for (i = 0; i < iconDir->idCount; i++) { + groupIconDir->idEntries[i].bWidth = iconDir->idEntries[i].bWidth; + groupIconDir->idEntries[i].bHeight = iconDir->idEntries[i].bHeight; + groupIconDir->idEntries[i].bColorCount = + iconDir->idEntries[i].bColorCount; + groupIconDir->idEntries[i].bReserved = iconDir->idEntries[i].bReserved; + groupIconDir->idEntries[i].wPlanes = iconDir->idEntries[i].wPlanes; + groupIconDir->idEntries[i].wBitCount = iconDir->idEntries[i].wBitCount; + groupIconDir->idEntries[i].dwBytesInRes = + iconDir->idEntries[i].dwBytesInRes; + groupIconDir->idEntries[i].nID = i + 1; + } + + return groupIconDir; +} + + +//----------------------------------------------------------------------------- +// ExtAddIcon() +// Add the icon as a resource to the specified file. +//----------------------------------------------------------------------------- +static PyObject *ExtAddIcon( + PyObject *self, // passthrough argument + PyObject *args) // arguments +{ + char *executableName, *iconName, *data, *iconData; + GRPICONDIR *groupIconDir; + DWORD resourceSize; + ICONDIR *iconDir; + BOOL succeeded; + HANDLE handle; + int i; + + if (!PyArg_ParseTuple(args, "ss", &executableName, &iconName)) + return NULL; + + // begin updating the executable + handle = BeginUpdateResource(executableName, FALSE); + if (!handle) { + PyErr_SetExcFromWindowsErrWithFilename(PyExc_WindowsError, + GetLastError(), executableName); + return NULL; + } + + // first attempt to get the data from the icon file + data = NULL; + succeeded = TRUE; + groupIconDir = NULL; + if (GetFileData(iconName, &data) < 0) + succeeded = FALSE; + iconDir = (ICONDIR*) data; + + // next, attempt to add a group icon resource + if (succeeded) { + groupIconDir = CreateGroupIconResource(iconDir, &resourceSize); + if (groupIconDir) + succeeded = UpdateResource(handle, RT_GROUP_ICON, + MAKEINTRESOURCE(1), + MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL), + groupIconDir, resourceSize); + else succeeded = FALSE; + } + + // next, add each icon as a resource + if (succeeded) { + for (i = 0; i < iconDir->idCount; i++) { + iconData = &data[iconDir->idEntries[i].dwImageOffset]; + resourceSize = iconDir->idEntries[i].dwBytesInRes; + succeeded = UpdateResource(handle, RT_ICON, MAKEINTRESOURCE(i + 1), + MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL), iconData, + resourceSize); + if (!succeeded) + break; + } + } + + // finish writing the resource (or discarding the changes upon an error) + if (!EndUpdateResource(handle, !succeeded)) { + if (succeeded) { + succeeded = FALSE; + PyErr_SetExcFromWindowsErrWithFilename(PyExc_WindowsError, + GetLastError(), executableName); + } + } + + // clean up + if (groupIconDir) + PyMem_Free(groupIconDir); + if (data) + PyMem_Free(data); + if (!succeeded) + return NULL; + + Py_INCREF(Py_None); + return Py_None; +} + + +//----------------------------------------------------------------------------- +// ExtBeginUpdateResource() +// Wrapper for BeginUpdateResource(). +//----------------------------------------------------------------------------- +static PyObject *ExtBeginUpdateResource( + PyObject *self, // passthrough argument + PyObject *args) // arguments +{ + BOOL deleteExistingResources; + char *fileName; + HANDLE handle; + + deleteExistingResources = TRUE; + if (!PyArg_ParseTuple(args, "s|i", &fileName, &deleteExistingResources)) + return NULL; + handle = BeginUpdateResource(fileName, deleteExistingResources); + if (!handle) { + PyErr_SetExcFromWindowsErrWithFilename(PyExc_WindowsError, + GetLastError(), fileName); + return NULL; + } + return PyInt_FromLong((long) handle); +} + + +//----------------------------------------------------------------------------- +// ExtUpdateResource() +// Wrapper for UpdateResource(). +//----------------------------------------------------------------------------- +static PyObject *ExtUpdateResource( + PyObject *self, // passthrough argument + PyObject *args) // arguments +{ + int resourceType, resourceId, resourceDataSize; + char *resourceData; + HANDLE handle; + + if (!PyArg_ParseTuple(args, "iiis#", &handle, &resourceType, &resourceId, + &resourceData, &resourceDataSize)) + return NULL; + if (!UpdateResource(handle, MAKEINTRESOURCE(resourceType), + MAKEINTRESOURCE(resourceId), + MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL), resourceData, + resourceDataSize)) { + PyErr_SetExcFromWindowsErr(PyExc_WindowsError, GetLastError()); + return NULL; + } + + Py_INCREF(Py_None); + return Py_None; +} + + +//----------------------------------------------------------------------------- +// ExtEndUpdateResource() +// Wrapper for EndUpdateResource(). +//----------------------------------------------------------------------------- +static PyObject *ExtEndUpdateResource( + PyObject *self, // passthrough argument + PyObject *args) // arguments +{ + BOOL discardChanges; + HANDLE handle; + + discardChanges = FALSE; + if (!PyArg_ParseTuple(args, "i|i", &handle, &discardChanges)) + return NULL; + if (!EndUpdateResource(handle, discardChanges)) { + PyErr_SetExcFromWindowsErr(PyExc_WindowsError, GetLastError()); + return NULL; + } + + Py_INCREF(Py_None); + return Py_None; +} + + +//----------------------------------------------------------------------------- +// ExtGetDependentFiles() +// Return a list of files that this file depends on. +//----------------------------------------------------------------------------- +static PyObject *ExtGetDependentFiles( + PyObject *self, // passthrough argument + PyObject *args) // arguments +{ + PyObject *results; + char *imageName; + + if (!PyArg_ParseTuple(args, "s", &imageName)) + return NULL; + g_ImageNames = PyDict_New(); + if (!g_ImageNames) + return NULL; + if (!BindImageEx(BIND_NO_BOUND_IMPORTS | BIND_NO_UPDATE | BIND_ALL_IMAGES, + imageName, NULL, NULL, BindStatusRoutine)) { + Py_DECREF(g_ImageNames); + PyErr_SetExcFromWindowsErrWithFilename(g_BindErrorException, + GetLastError(), imageName); + return NULL; + } + results = PyDict_Keys(g_ImageNames); + Py_DECREF(g_ImageNames); + return results; +} + + +//----------------------------------------------------------------------------- +// ExtGetSystemDir() +// Return the Windows directory (C:\Windows for example). +//----------------------------------------------------------------------------- +static PyObject *ExtGetSystemDir( + PyObject *self, // passthrough argument + PyObject *args) // arguments (ignored) +{ + char dir[MAX_PATH + 1]; + + if (GetSystemDirectory(dir, sizeof(dir))) + return PyString_FromString(dir); + PyErr_SetExcFromWindowsErr(PyExc_RuntimeError, GetLastError()); + return NULL; +} +#endif + + +//----------------------------------------------------------------------------- +// ExtSetOptimizeFlag() +// Set the optimize flag as needed. +//----------------------------------------------------------------------------- +static PyObject *ExtSetOptimizeFlag( + PyObject *self, // passthrough argument + PyObject *args) // arguments +{ + if (!PyArg_ParseTuple(args, "i", &Py_OptimizeFlag)) + return NULL; + Py_INCREF(Py_None); + return Py_None; +} + + +//----------------------------------------------------------------------------- +// Methods +//----------------------------------------------------------------------------- +static PyMethodDef g_ModuleMethods[] = { + { "SetOptimizeFlag", ExtSetOptimizeFlag, METH_VARARGS }, +#ifdef WIN32 + { "BeginUpdateResource", ExtBeginUpdateResource, METH_VARARGS }, + { "UpdateResource", ExtUpdateResource, METH_VARARGS }, + { "EndUpdateResource", ExtEndUpdateResource, METH_VARARGS }, + { "AddIcon", ExtAddIcon, METH_VARARGS }, + { "GetDependentFiles", ExtGetDependentFiles, METH_VARARGS }, + { "GetSystemDir", ExtGetSystemDir, METH_NOARGS }, +#endif + { NULL } +}; + + +//----------------------------------------------------------------------------- +// initutil() +// Initialization routine for the shared libary. +//----------------------------------------------------------------------------- +void initutil(void) +{ + PyObject *module; + + module = Py_InitModule("cx_Freeze.util", g_ModuleMethods); + if (!module) + return; +#ifdef WIN32 + g_BindErrorException = PyErr_NewException("cx_Freeze.util.BindError", + NULL, NULL); + if (!g_BindErrorException) + return; + if (PyModule_AddObject(module, "BindError", g_BindErrorException) < 0) + return; +#endif +} + diff --git a/installer/linux/freeze.py b/installer/linux/freeze.py index ca11e8d5c4..7fa6e4bbd6 100644 --- a/installer/linux/freeze.py +++ b/installer/linux/freeze.py @@ -1,4 +1,5 @@ #!/usr/bin/env python +from __future__ import with_statement __license__ = 'GPL v3' __copyright__ = '2008, Kovid Goyal kovid@kovidgoyal.net' __docformat__ = 'restructuredtext en' @@ -6,162 +7,212 @@ __docformat__ = 'restructuredtext en' ''' Create linux binary. ''' -import glob, sys, subprocess, tarfile, os, re, py_compile, shutil -HOME = '/home/kovid' -PYINSTALLER = os.path.expanduser('~/build/pyinstaller') -CALIBREPREFIX = '___' -PDFTOHTML = '/usr/bin/pdftohtml' -LIBUNRAR = '/usr/lib/libunrar.so' -QTDIR = '/usr/lib/qt4' -QTDLLS = ('QtCore', 'QtGui', 'QtNetwork', 'QtSvg', 'QtXml', 'QtWebKit') -EXTRAS = ('/usr/lib/python2.5/site-packages/PIL', os.path.expanduser('~/ipython/IPython')) -SQLITE = '/usr/lib/libsqlite3.so.0' -DBUS = '/usr/lib/libdbus-1.so.3' -LIBMNG = '/usr/lib/libmng.so.1' -LIBZ = '/lib/libz.so.1' -LIBBZ2 = '/lib/libbz2.so.1' -LIBUSB = '/usr/lib/libusb.so' -LIBPOPPLER = '/usr/lib/libpoppler.so.3' -LIBXML2 = '/usr/lib/libxml2.so.2' -LIBXSLT = '/usr/lib/libxslt.so.1' -LIBEXSLT = '/usr/lib/libexslt.so.0' +def freeze(): + import glob, sys, subprocess, tarfile, os, re, textwrap, shutil, cStringIO, bz2, codecs + from contextlib import closing + from cx_Freeze import Executable, setup + from calibre.constants import __version__, __appname__ + from calibre.linux import entry_points + from calibre import walk + from calibre.web.feeds.recipes import recipe_modules + import calibre + -CALIBRESRC = os.path.join(CALIBREPREFIX, 'src') -CALIBREPLUGINS = os.path.join(CALIBRESRC, 'calibre', 'plugins') + QTDIR = '/usr/lib/qt4' + QTDLLS = ('QtCore', 'QtGui', 'QtNetwork', 'QtSvg', 'QtXml', 'QtWebKit') + + binary_excludes = ['libGLcore*', 'libGL*', 'libnvidia*'] + + binary_includes = [ + '/usr/bin/pdftohtml', + '/usr/lib/libunrar.so', + '/usr/lib/libsqlite3.so.0', + '/usr/lib/libsqlite3.so.0', + '/usr/lib/libmng.so.1', + '/lib/libz.so.1', + '/lib/libbz2.so.1', + '/lib/libbz2.so.1', + '/usr/lib/libpoppler.so.4', + '/usr/lib/libxml2.so.2', + '/usr/lib/libxslt.so.1', + '/usr/lib/libxslt.so.1' + ] + + binary_includes += [os.path.join(QTDIR, 'lib%s.so.4'%x) for x in QTDLLS] + + + d = os.path.dirname + CALIBRESRC = d(d(d(os.path.abspath(calibre.__file__)))) + CALIBREPLUGINS = os.path.join(CALIBRESRC, 'src', 'calibre', 'plugins') + FREEZE_DIR = os.path.join(CALIBRESRC, 'build', 'cx_freeze') + DIST_DIR = os.path.join(CALIBRESRC, 'dist') + + os.chdir(CALIBRESRC) + + print 'Freezing calibre located at', CALIBRESRC + + sys.path.insert(0, os.path.join(CALIBRESRC, 'src')) + + entry_points = entry_points['console_scripts'] + entry_points['gui_scripts'] + entry_points = ['calibre_postinstall=calibre.linux:binary_install', + 'calibre-parallel=calibre.parallel:main'] + entry_points + executables = {} + for ep in entry_points: + executables[ep.split('=')[0].strip()] = (ep.split('=')[1].split(':')[0].strip(), + ep.split(':')[-1].strip()) + + if os.path.exists(FREEZE_DIR): + shutil.rmtree(FREEZE_DIR) + os.makedirs(FREEZE_DIR) + + if not os.path.exists(DIST_DIR): + os.makedirs(DIST_DIR) + + includes = [x[0] for x in executables.values()] + + excludes = ['matplotlib', "Tkconstants", "Tkinter", "tcl", "_imagingtk", + "ImageTk", "FixTk", 'wx', 'PyQt4.QtAssistant', 'PyQt4.QtOpenGL.so', + 'PyQt4.QtScript.so', 'PyQt4.QtSql.so', 'PyQt4.QtTest.so', 'qt', + 'glib', 'gobject'] + + packages = ['calibre', 'encodings', 'cherrypy', 'cssutils', 'xdg'] + + includes += ['calibre.web.feeds.recipes.'+r for r in recipe_modules] + + LOADER = '/tmp/loader.py' + open(LOADER, 'wb').write('# This script is never actually used.\nimport sys') + + INIT_SCRIPT = '/tmp/init.py' + open(INIT_SCRIPT, 'wb').write(textwrap.dedent(''' + ## Load calibre module specified in the environment variable CALIBRE_CX_EXE + ## Also restrict sys.path to the executables' directory and add the + ## executables directory to LD_LIBRARY_PATH + import encodings + import os + import sys + import warnings + import zipimport + import locale + import codecs + + enc = locale.getdefaultlocale()[1] + if not enc: + enc = locale.nl_langinfo(locale.CODESET) + enc = codecs.lookup(enc if enc else 'UTF-8').name + sys.setdefaultencoding(enc) + + paths = os.environ.get('LD_LIBRARY_PATH', '').split(os.pathsep) + if DIR_NAME not in paths or not sys.getfilesystemencoding(): + paths.insert(0, DIR_NAME) + os.environ['LD_LIBRARY_PATH'] = os.pathsep.join(paths) + os.environ['PYTHONIOENCODING'] = enc + os.execv(sys.executable, sys.argv) + + sys.path = sys.path[:3] + sys.frozen = True + sys.frozen_path = DIR_NAME + + executables = %(executables)s + + exe = os.environ.get('CALIBRE_CX_EXE', False) + ret = 1 + if not exe: + print >>sys.stderr, 'Invalid invocation of calibre loader. CALIBRE_CX_EXE not set' + elif exe not in executables: + print >>sys.stderr, 'Invalid invocation of calibre loader. CALIBRE_CX_EXE=%%s is unknown'%%exe + else: + sys.argv[0] = exe + module, func = executables[exe] + module = __import__(module, fromlist=[1]) + func = getattr(module, func) + ret = func() + + module = sys.modules.get("threading") + if module is not None: + module._shutdown() + sys.exit(ret) + ''')%dict(executables=repr(executables))) + sys.argv = ['freeze', 'build_exe'] + setup( + name = __appname__, + version = __version__, + executables = [Executable(script=LOADER, targetName='loader', compress=False)], + options = { 'build_exe' : + { + 'build_exe' : os.path.join(CALIBRESRC, 'build/cx_freeze'), + 'optimize' : 2, + 'excludes' : excludes, + 'includes' : includes, + 'packages' : packages, + 'init_script' : INIT_SCRIPT, + 'copy_dependent_files' : True, + 'create_shared_zip' : False, + } + } + ) + + def copy_binary(src, dest_dir): + dest = os.path.join(dest_dir, os.path.basename(src)) + if not os.path.exists(dest_dir): + os.makedirs(dest_dir) + shutil.copyfile(src, dest) + shutil.copymode(src, dest) + + for f in binary_includes: + copy_binary(f, FREEZE_DIR) + + for pat in binary_excludes: + matches = glob.glob(os.path.join(FREEZE_DIR, pat)) + for f in matches: + os.remove(f) + + print 'Adding calibre plugins...' + os.makedirs(os.path.join(FREEZE_DIR, 'plugins')) + for f in glob.glob(os.path.join(CALIBREPLUGINS, '*.so')): + copy_binary(f, os.path.join(FREEZE_DIR, 'plugins')) + + print 'Adding Qt plugins...' + plugdir = os.path.join(QTDIR, 'plugins') + for dirpath, dirnames, filenames in os.walk(plugdir): + for f in filenames: + if not f.endswith('.so') or 'designer' in dirpath or 'codecs' in dirpath or 'sqldrivers' in dirpath: + continue + f = os.path.join(dirpath, f) + dest_dir = dirpath.replace(plugdir, os.path.join(FREEZE_DIR, 'qtlugins')) + copy_binary(f, dest_dir) -sys.path.insert(0, CALIBRESRC) -from calibre import __version__ -from calibre.parallel import PARALLEL_FUNCS -from calibre.web.feeds.recipes import recipes -hiddenimports = list(map(lambda x: x[0], PARALLEL_FUNCS.values())) -hiddenimports += ['PyQt4.QtWebKit'] -hiddenimports += ['lxml._elementpath', 'keyword', 'codeop', 'commands', 'shlex', 'pydoc'] -hiddenimports += map(lambda x: x.__module__, recipes) -open(os.path.join(PYINSTALLER, 'hooks', 'hook-calibre.parallel.py'), 'wb').write('hiddenimports = %s'%repr(hiddenimports)) - -def run_pyinstaller(args=sys.argv): - subprocess.check_call(('/usr/bin/sudo', 'chown', '-R', 'kovid:users', glob.glob('/usr/lib/python*/site-packages/')[-1])) - subprocess.check_call('rm -rf %(py)s/dist/* %(py)s/build/*'%dict(py=PYINSTALLER), shell=True) - cp = HOME+'/build/'+os.path.basename(os.getcwd()) - spec = open(os.path.join(PYINSTALLER, 'calibre', 'calibre.spec'), 'wb') - raw = re.sub(r'CALIBREPREFIX\s+=\s+\'___\'', 'CALIBREPREFIX = '+repr(cp), - open(__file__).read()) - spec.write(raw) - spec.close() - os.chdir(PYINSTALLER) - shutil.rmtree('calibre/dist') - os.mkdir('calibre/dist') - subprocess.check_call('python -OO Build.py calibre/calibre.spec', shell=True) - + print 'Creating launchers' + for exe in executables: + path = os.path.join(FREEZE_DIR, exe) + open(path, 'wb').write(textwrap.dedent('''\ + #!/bin/sh + export CALIBRE_CX_EXE=%s + path=`readlink -e $0` + base=`dirname $path` + loader=$base/loader + export LD_LIBRARY_PATH=$base:$LD_LIBRARY_PATH + $loader "$@" + ''')%exe) + os.chmod(path, 0755) + + exes = list(executables.keys()) + exes.remove('calibre_postinstall') + exes.remove('calibre-parallel') + open(os.path.join(FREEZE_DIR, 'manifest'), 'wb').write('\n'.join(exes)) + + print 'Creating archive...' + dist = open(os.path.join(DIST_DIR, 'calibre-%s-i686.tar.bz2'%__version__), 'wb') + with closing(tarfile.open(fileobj=dist, mode='w:bz2', + format=tarfile.PAX_FORMAT)) as tf: + for f in walk(FREEZE_DIR): + name = f.replace(FREEZE_DIR, '')[1:] + if name: + tf.add(f, name) + dist.flush() + dist.seek(0, 2) + print 'Archive %s created: %.2f MB'%(dist.name, dist.tell()/(1024.**2)) return 0 - -if __name__ == '__main__' and 'freeze.py' in __file__: - sys.exit(run_pyinstaller()) - - -loader = os.path.join(os.path.expanduser('~/temp'), 'calibre_installer_loader.py') -if not os.path.exists(loader): - open(loader, 'wb').write(''' -import sys, os -sys.frozen_path = os.getcwd() -os.chdir(os.environ.get("ORIGWD", ".")) -sys.path.insert(0, os.path.join(sys.frozen_path, "library.pyz")) -sys.path.insert(0, sys.frozen_path) -from PyQt4.QtCore import QCoreApplication -QCoreApplication.setLibraryPaths([sys.frozen_path, os.path.join(sys.frozen_path, "qtplugins")]) -''') -excludes = ['gtk._gtk', 'gtk.glade', 'qt', 'matplotlib.nxutils', 'matplotlib._cntr', - 'matplotlib.ttconv', 'matplotlib._image', 'matplotlib.ft2font', - 'matplotlib._transforms', 'matplotlib._agg', 'matplotlib.backends._backend_agg', - 'matplotlib.axes', 'matplotlib', 'matplotlib.pyparsing', - 'TKinter', 'atk', 'gobject._gobject', 'pango', 'PIL', 'Image', 'IPython'] - - -sys.path.insert(0, CALIBRESRC) -from calibre.linux import entry_points - -executables, scripts = ['calibre_postinstall', 'calibre-parallel'], \ - [os.path.join(CALIBRESRC, 'calibre', 'linux.py'), os.path.join(CALIBRESRC, 'calibre', 'parallel.py')] - -for entry in entry_points['console_scripts'] + entry_points['gui_scripts']: - fields = entry.split('=') - executables.append(fields[0].strip()) - scripts.append(os.path.join(CALIBRESRC, *map(lambda x: x.strip(), fields[1].split(':')[0].split('.')))+'.py') - -analyses = [Analysis([os.path.join(HOMEPATH,'support/_mountzlib.py'), os.path.join(HOMEPATH,'support/useUnicode.py'), loader, script], - pathex=[PYINSTALLER, CALIBRESRC], excludes=excludes) for script in scripts] - -pyz = TOC() -binaries = TOC() - -for a in analyses: - pyz = a.pure + pyz - binaries = a.binaries + binaries -pyz = PYZ(pyz, name='library.pyz') - -built_executables = [] -for script, exe, a in zip(scripts, executables, analyses): - built_executables.append(EXE(PYZ(TOC()), - a.scripts+[('O','','OPTION'),], - exclude_binaries=1, - name=os.path.join('buildcalibre', exe), - debug=False, - strip=True, - upx=False, - excludes=excludes, - console=1)) - -print 'Adding plugins...' -for f in glob.glob(os.path.join(CALIBREPLUGINS, '*.so')): - binaries += [('plugins/'+os.path.basename(f), f, 'BINARY')] -for f in glob.glob(os.path.join(CALIBREPLUGINS, '*.so.*')): - binaries += [(os.path.basename(f), f, 'BINARY')] - -print 'Adding external programs...' -binaries += [('pdftohtml', PDFTOHTML, 'BINARY'), - ('libunrar.so', LIBUNRAR, 'BINARY')] - -print 'Adding external libraries...' -binaries += [ (os.path.basename(x), x, 'BINARY') for x in (SQLITE, DBUS, - LIBMNG, LIBZ, LIBBZ2, LIBUSB, LIBPOPPLER, LIBXML2, LIBXSLT, LIBEXSLT)] - - -qt = [] -for dll in QTDLLS: - path = os.path.join(QTDIR, 'lib'+dll+'.so.4') - qt.append((os.path.basename(path), path, 'BINARY')) -binaries += qt - -plugins = [] -plugdir = os.path.join(QTDIR, 'plugins') -for dirpath, dirnames, filenames in os.walk(plugdir): - for f in filenames: - if not f.endswith('.so') or 'designer' in dirpath or 'codcs' in dirpath or 'sqldrivers' in dirpath : continue - f = os.path.join(dirpath, f) - plugins.append(('qtplugins/'+f.replace(plugdir, ''), f, 'BINARY')) -binaries += plugins - -manifest = '/tmp/manifest' -open(manifest, 'wb').write('\n'.join(executables)) -version = '/tmp/version' -open(version, 'wb').write(__version__) -coll = COLLECT(binaries, pyz, - [('manifest', manifest, 'DATA'), ('version', version, 'DATA')], - *built_executables, - **dict(strip=True, - upx=False, - excludes=excludes, - name='dist')) - -os.chdir(os.path.join(HOMEPATH, 'calibre', 'dist')) -for folder in EXTRAS: - subprocess.check_call('cp -rf %s .'%folder, shell=True) - -print 'Building tarball...' -tbz2 = 'calibre-%s-i686.tar.bz2'%__version__ -tf = tarfile.open(os.path.join('/tmp', tbz2), 'w:bz2') - -for f in os.listdir('.'): - tf.add(f) +if __name__ == '__main__': + freeze() diff --git a/installer/osx/freeze.py b/installer/osx/freeze.py index f40c280570..2a74d15802 100644 --- a/installer/osx/freeze.py +++ b/installer/osx/freeze.py @@ -177,7 +177,7 @@ _check_symlinks_prescript() def fix_python_dependencies(self, files): for f in files: - subprocess.check_call(['/usr/bin/install_name_tool', '-change', '/Library/Frameworks/Python.framework/Versions/2.5/Python', '@executable_path/../Frameworks/Python.framework/Versions/2.5/Python', f]) + subprocess.check_call(['/usr/bin/install_name_tool', '-change', '/Library/Frameworks/Python.framework/Versions/2.6/Python', '@executable_path/../Frameworks/Python.framework/Versions/2.6/Python', f]) def fix_misc_dependencies(self, files): for path in files: @@ -247,10 +247,13 @@ _check_symlinks_prescript() print 'Adding pdftohtml' os.link(os.path.expanduser('~/pdftohtml'), os.path.join(frameworks_dir, 'pdftohtml')) print 'Adding plugins' - module_dir = os.path.join(resource_dir, 'lib', 'python2.5', 'lib-dynload') + module_dir = os.path.join(resource_dir, 'lib', 'python2.6', 'lib-dynload') print 'Adding fontconfig' for f in glob.glob(os.path.expanduser('~/fontconfig-bundled/*')): - os.link(f, os.path.join(frameworks_dir, os.path.basename(f))) + dest = os.path.join(frameworks_dir, os.path.basename(f)) + if os.path.exists(dest): + os.remove(dest) + os.link(f, dest) dst = os.path.join(resource_dir, 'fonts') if os.path.exists(dst): shutil.rmtree(dst) @@ -258,7 +261,7 @@ _check_symlinks_prescript() print print 'Adding IPython' - dst = os.path.join(resource_dir, 'lib', 'python2.5', 'IPython') + dst = os.path.join(resource_dir, 'lib', 'python2.6', 'IPython') if os.path.exists(dst): shutil.rmtree(dst) shutil.copytree(os.path.expanduser('~/build/ipython/IPython'), dst) @@ -280,6 +283,7 @@ _check_symlinks_prescript() f = open(launcher_path, 'r') src = f.read() f.close() + src = src.replace('import Image', 'from PIL import Image') src = re.sub('(_run\s*\(.*?.py.*?\))', cs+'%s'%( ''' sys.frameworks_dir = os.path.join(os.path.dirname(os.environ['RESOURCEPATH']), 'Frameworks') @@ -290,7 +294,7 @@ sys.frameworks_dir = os.path.join(os.path.dirname(os.environ['RESOURCEPATH']), ' f.close() print print 'Adding main scripts to site-packages' - f = zipfile.ZipFile(os.path.join(self.dist_dir, APPNAME+'.app', 'Contents', 'Resources', 'lib', 'python2.5', 'site-packages.zip'), 'a', zipfile.ZIP_DEFLATED) + f = zipfile.ZipFile(os.path.join(self.dist_dir, APPNAME+'.app', 'Contents', 'Resources', 'lib', 'python2.6', 'site-packages.zip'), 'a', zipfile.ZIP_DEFLATED) for script in scripts['gui']+scripts['console']: f.write(script, script.partition('/')[-1]) f.close() @@ -322,7 +326,8 @@ def main(): 'genshi', 'calibre.web.feeds.recipes.*', 'calibre.ebooks.lrf.any.*', 'calibre.ebooks.lrf.feeds.*', 'keyword', 'codeop', 'pydoc', 'readline', - 'BeautifulSoup'], + 'BeautifulSoup' + ], 'packages' : ['PIL', 'Authorization', 'lxml'], 'excludes' : ['IPython'], 'plist' : { 'CFBundleGetInfoString' : '''calibre, an E-book management application.''' diff --git a/installer/windows/freeze.py b/installer/windows/freeze.py index 007217803e..73bb9cae56 100644 --- a/installer/windows/freeze.py +++ b/installer/windows/freeze.py @@ -6,13 +6,13 @@ __docformat__ = 'restructuredtext en' ''' Freeze app into executable using py2exe. ''' -QT_DIR = 'C:\\Qt\\4.4.1' +QT_DIR = 'C:\\Qt\\4.4.3' LIBUSB_DIR = 'C:\\libusb' LIBUNRAR = 'C:\\Program Files\\UnrarDLL\\unrar.dll' PDFTOHTML = 'C:\\pdftohtml\\pdftohtml.exe' IMAGEMAGICK_DIR = 'C:\\ImageMagick' FONTCONFIG_DIR = 'C:\\fontconfig' - +VC90 = r'C:\Program Files\Microsoft Visual Studio 9.0\VC\redist\x86\Microsoft.VC90.CRT' import sys, os, py2exe, shutil, zipfile, glob, subprocess, re from distutils.core import setup @@ -65,6 +65,8 @@ class BuildEXE(py2exe.build_exe.py2exe): shutil.copyfile(f, os.path.join(self.dist_dir, os.path.basename(f))) for f in glob.glob(os.path.join(BASE_DIR, 'src', 'calibre', 'plugins', '*.pyd')): shutil.copyfile(f, os.path.join(tgt, os.path.basename(f))) + for f in glob.glob(os.path.join(BASE_DIR, 'src', 'calibre', 'plugins', '*.manifest')): + shutil.copyfile(f, os.path.join(tgt, os.path.basename(f))) shutil.copyfile('LICENSE', os.path.join(self.dist_dir, 'LICENSE')) print print 'Adding QtXml4.dll' @@ -115,12 +117,17 @@ class BuildEXE(py2exe.build_exe.py2exe): shutil.copytree(f, tgt) else: shutil.copyfile(f, tgt) - + print print 'Doing DLL redirection' # See http://msdn.microsoft.com/en-us/library/ms682600(VS.85).aspx for f in glob.glob(os.path.join(PY2EXE_DIR, '*.exe')): open(f + '.local', 'w').write('\n') + print + print 'Adding Windows runtime dependencies...' + for f in glob.glob(os.path.join(VC90, '*')): + shutil.copyfile(f, os.path.join(PY2EXE_DIR, os.path.basename(f))) + @classmethod def manifest(cls, prog): @@ -142,17 +149,17 @@ def main(args=sys.argv): {'script' : scripts['gui'][0], 'dest_base' : APPNAME, 'icon_resources' : [(1, ICONS[0])], - 'other_resources' : [BuildEXE.manifest(APPNAME)], + #'other_resources' : [BuildEXE.manifest(APPNAME)], }, {'script' : scripts['gui'][1], 'dest_base' : 'lrfviewer', 'icon_resources' : [(1, ICONS[1])], - 'other_resources' : [BuildEXE.manifest('lrfviewer')], + #'other_resources' : [BuildEXE.manifest('lrfviewer')], }, {'script' : scripts['gui'][2], 'dest_base' : 'ebook-viewer', 'icon_resources' : [(1, ICONS[1])], - 'other_resources' : [BuildEXE.manifest('ebook-viewer')], + #'other_resources' : [BuildEXE.manifest('ebook-viewer')], }, ], console = console, @@ -162,12 +169,12 @@ def main(args=sys.argv): 'includes' : [ 'sip', 'pkg_resources', 'PyQt4.QtSvg', 'mechanize', 'ClientForm', 'wmi', - 'win32file', 'pythoncom', 'rtf2xml', + 'win32file', 'pythoncom', 'win32process', 'win32api', 'msvcrt', 'win32event', 'calibre.ebooks.lrf.any.*', 'calibre.ebooks.lrf.feeds.*', - 'genshi', 'BeautifulSoup', - 'path', 'pydoc', 'IPython.Extensions.*', + 'BeautifulSoup', 'pyreadline', + 'pydoc', 'IPython.Extensions.*', 'calibre.web.feeds.recipes.*', 'PyQt4.QtWebKit', 'PyQt4.QtNetwork', ], diff --git a/pyqtdistutils.py b/pyqtdistutils.py index 252968fb60..0e53aaabfe 100644 --- a/pyqtdistutils.py +++ b/pyqtdistutils.py @@ -6,7 +6,7 @@ __docformat__ = 'restructuredtext en' ''' Build PyQt extensions. Integrates with distutils (but uses the PyQt build system). ''' -from distutils.core import Extension +from distutils.core import Extension as _Extension from distutils.command.build_ext import build_ext as _build_ext from distutils.dep_util import newer_group from distutils import log @@ -15,12 +15,23 @@ import sipconfig, os, sys, string, glob, shutil from PyQt4 import pyqtconfig iswindows = 'win32' in sys.platform QMAKE = os.path.expanduser('~/qt/bin/qmake') if 'darwin' in sys.platform else'qmake' -WINDOWS_PYTHON = ['C:/Python25/libs'] +WINDOWS_PYTHON = ['C:/Python26/libs'] OSX_SDK = '/Developer/SDKs/MacOSX10.4u.sdk' def replace_suffix(path, new_suffix): return os.path.splitext(path)[0] + new_suffix +class Extension(_Extension): + pass + +if iswindows: + from distutils import msvc9compiler + msvc = msvc9compiler.MSVCCompiler() + msvc.initialize() + nmake = msvc.find_exe('nmake.exe') + rc = msvc.find_exe('rc.exe') + + class PyQtExtension(Extension): def __init__(self, name, sources, sip_sources, **kw): @@ -37,9 +48,7 @@ class PyQtExtension(Extension): class build_ext(_build_ext): def make(self, makefile): - make = 'make' - if iswindows: - make = 'mingw32-make' + make = nmake if iswindows else 'make' self.spawn([make, '-f', makefile]) def build_qt_objects(self, ext, bdir): @@ -65,12 +74,13 @@ CONFIG += x86 ppc open(name+'.pro', 'wb').write(pro) self.spawn([QMAKE, '-o', 'Makefile.qt', name+'.pro']) self.make('Makefile.qt') - pat = 'release\\*.o' if iswindows else '*.o' + pat = 'release\\*.obj' if iswindows else '*.o' return map(os.path.abspath, glob.glob(pat)) finally: os.chdir(cwd) def build_sbf(self, sip, sbf, bdir): + print '\tBuilding spf...' sip_bin = self.sipcfg.sip_bin self.spawn([sip_bin, "-c", bdir, @@ -100,9 +110,7 @@ CONFIG += x86 ppc def build_extension(self, ext): self.inplace = True # Causes extensions to be built in the source tree - if not isinstance(ext, PyQtExtension): - return _build_ext.build_extension(self, ext) - + fullname = self.get_ext_fullname(ext.name) if self.inplace: # ignore build-lib -- put the compiled extension into @@ -119,7 +127,38 @@ CONFIG += x86 ppc else: ext_filename = os.path.join(self.build_lib, self.get_ext_filename(fullname)) - bdir = os.path.abspath(os.path.join(self.build_temp, fullname)) + bdir = os.path.abspath(os.path.join(self.build_temp, fullname)) + if not os.path.exists(bdir): + os.makedirs(bdir) + + if not isinstance(ext, PyQtExtension): + if not iswindows: + return _build_ext.build_extension(self, ext) + + c_sources = [f for f in ext.sources if os.path.splitext(f)[1].lower() in ('.c', '.cpp', '.cxx')] + compile_args = '/c /nologo /Ox /MD /W3 /GX /DNDEBUG'.split() + compile_args += ext.extra_compile_args + self.swig_opts = '' + inc_dirs = self.include_dirs + [x.replace('/', '\\') for x in ext.include_dirs] + cc = [msvc.cc] + compile_args + ['-I%s'%x for x in list(set(inc_dirs))] + objects = [] + for f in c_sources: + o = os.path.join(bdir, os.path.basename(f)+'.obj') + objects.append(o) + compiler = cc + ['/Tc'+f, '/Fo'+o] + self.spawn(compiler) + out = os.path.join(bdir, base+'.pyd') + linker = [msvc.linker] + '/DLL /nologo /INCREMENTAL:NO'.split() + linker += ['/LIBPATH:'+x for x in self.library_dirs] + linker += [x+'.lib' for x in ext.libraries] + linker += ['/EXPORT:init'+base] + objects + ['/OUT:'+out] + self.spawn(linker) + for src in (out, out+'.manifest'): + shutil.copyfile(src, os.path.join('src', 'calibre', 'plugins', os.path.basename(src))) + return + + + if not os.path.exists(bdir): os.makedirs(bdir) ext.sources2 = map(os.path.abspath, ext.sources) diff --git a/setup.py b/setup.py index 37d54c4317..523b2b1509 100644 --- a/setup.py +++ b/setup.py @@ -46,10 +46,10 @@ main_functions = { } if __name__ == '__main__': - from setuptools import setup, find_packages, Extension + from setuptools import setup, find_packages from distutils.command.build import build as _build from distutils.core import Command as _Command - from pyqtdistutils import PyQtExtension, build_ext + from pyqtdistutils import PyQtExtension, build_ext, Extension import subprocess, glob def newer(targets, sources): @@ -391,11 +391,14 @@ if __name__ == '__main__': ext_modules.append(Extension('calibre.plugins.winutil', sources=['src/calibre/utils/windows/winutil.c'], libraries=['shell32', 'setupapi'], - include_dirs=['C:/WinDDK/6001.18001/inc/api/']) - ) + include_dirs=['C:/WinDDK/6001.18001/inc/api/', + 'C:/WinDDK/6001.18001/inc/crt/'], + extra_compile_args=['/X'] + )) if isosx: ext_modules.append(Extension('calibre.plugins.usbobserver', - sources=['src/calibre/devices/usbobserver/usbobserver.c']) + sources=['src/calibre/devices/usbobserver/usbobserver.c'], + extra_link_args=['-framework', 'IOKit']) ) setup( diff --git a/src/calibre/__init__.py b/src/calibre/__init__.py index 0e379ce9d1..f483902126 100644 --- a/src/calibre/__init__.py +++ b/src/calibre/__init__.py @@ -20,6 +20,11 @@ mimetypes.add_type('application/epub+zip', '.epub') mimetypes.add_type('text/x-sony-bbeb+xml', '.lrs') mimetypes.add_type('application/x-sony-bbeb', '.lrf') +def to_unicode(raw, encoding='utf-8', errors='strict'): + if isinstance(raw, unicode): + return raw + return raw.decode(encoding, errors) + def unicode_path(path, abs=False): if not isinstance(path, unicode): path = path.decode(sys.getfilesystemencoding()) @@ -317,7 +322,12 @@ class LoggingInterface: def ___log(self, func, msg, args, kwargs): args = [msg] + list(args) for i in range(len(args)): - if isinstance(args[i], unicode): + if not isinstance(args[i], basestring): + continue + if sys.version_info[:2] > (2, 5): + if not isinstance(args[i], unicode): + args[i] = args[i].decode(preferred_encoding, 'replace') + elif isinstance(args[i], unicode): args[i] = args[i].encode(preferred_encoding, 'replace') func(*args, **kwargs) diff --git a/src/calibre/constants.py b/src/calibre/constants.py index f4eb465dde..0bccd77c44 100644 --- a/src/calibre/constants.py +++ b/src/calibre/constants.py @@ -2,7 +2,7 @@ __license__ = 'GPL v3' __copyright__ = '2008, Kovid Goyal kovid@kovidgoyal.net' __docformat__ = 'restructuredtext en' __appname__ = 'calibre' -__version__ = '0.4.112' +__version__ = '0.4.115' __author__ = "Kovid Goyal " ''' Various run time constants. diff --git a/src/calibre/devices/libusb.py b/src/calibre/devices/libusb.py index 0bedce32bb..226a99f239 100644 --- a/src/calibre/devices/libusb.py +++ b/src/calibre/devices/libusb.py @@ -4,17 +4,20 @@ __copyright__ = '2008, Kovid Goyal ' This module provides a thin ctypes based wrapper around libusb. """ -from ctypes import cdll, POINTER, byref, pointer, Structure, \ +from ctypes import cdll, POINTER, byref, pointer, Structure as _Structure, \ c_ubyte, c_ushort, c_int, c_char, c_void_p, c_byte, c_uint from errno import EBUSY, ENOMEM -from calibre import iswindows, isosx, load_library, isfrozen +from calibre import iswindows, isosx, load_library _libusb_name = 'libusb' PATH_MAX = 511 if iswindows else 1024 if isosx else 4096 if iswindows: - Structure._pack_ = 1 + class Structure(_Structure): + _pack_ = 1 _libusb_name = 'libusb0' +else: + Structure = _Structure try: try: diff --git a/src/calibre/devices/prs505/driver.py b/src/calibre/devices/prs505/driver.py index 698a8f2a03..dd4b8d575a 100644 --- a/src/calibre/devices/prs505/driver.py +++ b/src/calibre/devices/prs505/driver.py @@ -64,9 +64,11 @@ class PRS505(Device): - - %(storage_card)s - %(deviceclass)s + + + %(storage_card)s + %(deviceclass)s + diff --git a/src/calibre/devices/scanner.py b/src/calibre/devices/scanner.py index 99a50020ec..40573114a7 100644 --- a/src/calibre/devices/scanner.py +++ b/src/calibre/devices/scanner.py @@ -43,7 +43,8 @@ class DeviceScanner(object): if iswindows: for device_id in self.devices: vid, pid = 'vid_%4.4x'%device.VENDOR_ID, 'pid_%4.4x'%device.PRODUCT_ID - if vid in device_id and pid in device_id: + rev = ('rev_%4.4x'%device.BCD).replace('a', ':') # Bug in winutil.get_usb_devices converts a to : + if vid in device_id and pid in device_id and rev in device_id: return True return False else: diff --git a/src/calibre/ebooks/epub/from_html.py b/src/calibre/ebooks/epub/from_html.py index ae2fa5eae1..66a3cebbae 100644 --- a/src/calibre/ebooks/epub/from_html.py +++ b/src/calibre/ebooks/epub/from_html.py @@ -48,8 +48,7 @@ from calibre.ebooks.epub import initialize_container, PROFILES from calibre.ebooks.epub.split import split from calibre.ebooks.epub.fonts import Rationalizer from calibre.constants import preferred_encoding -from calibre import walk -from calibre import CurrentDir +from calibre import walk, CurrentDir, to_unicode content = functools.partial(os.path.join, u'content') @@ -79,7 +78,7 @@ def check(opf_path, pretty_print): base = os.path.dirname(path) root = html.fromstring(open(content(path), 'rb').read()) for element, attribute, link, pos in list(root.iterlinks()): - link = link.decode('utf-8') + link = to_unicode(link) plink = Link(link, base) bad = False if plink.path is not None and not os.path.exists(plink.path): @@ -204,7 +203,7 @@ TITLEPAGE = '''\
- cover + cover
diff --git a/src/calibre/ebooks/epub/iterator.py b/src/calibre/ebooks/epub/iterator.py index 127af6e55f..08c275e81f 100644 --- a/src/calibre/ebooks/epub/iterator.py +++ b/src/calibre/ebooks/epub/iterator.py @@ -168,8 +168,12 @@ class EbookIterator(object): if bookmarks is None: bookmarks = self.bookmarks dat = self.serialize_bookmarks(bookmarks) - if os.path.splitext(self.pathtoebook)[1].lower() == '.epub': - zf = open(self.pathtoebook, 'r+b') + if os.path.splitext(self.pathtoebook)[1].lower() == '.epub' and \ + os.access(self.pathtoebook, os.R_OK): + try: + zf = open(self.pathtoebook, 'r+b') + except IOError: + return zipf = ZipFile(zf, mode='a') for name in zipf.namelist(): if name == 'META-INF/calibre_bookmarks.txt': diff --git a/src/calibre/ebooks/epub/split.py b/src/calibre/ebooks/epub/split.py index f4847df578..ed2a78826f 100644 --- a/src/calibre/ebooks/epub/split.py +++ b/src/calibre/ebooks/epub/split.py @@ -7,7 +7,7 @@ __docformat__ = 'restructuredtext en' Split the flows in an epub file to conform to size limitations. ''' -import os, math, logging, functools, collections, re, copy +import os, math, logging, functools, collections, re, copy, sys from lxml.etree import XPath as _XPath from lxml import etree, html @@ -34,29 +34,61 @@ class SplitError(ValueError): class Splitter(LoggingInterface): - def __init__(self, path, opts, stylesheet_map, always_remove=False): + def __init__(self, path, opts, stylesheet_map, opf): LoggingInterface.__init__(self, logging.getLogger('htmlsplit')) self.setup_cli_handler(opts.verbose) self.path = path - self.always_remove = always_remove + self.always_remove = not opts.preserve_tag_structure or \ + os.stat(content(path)).st_size > 5*opts.profile.flow_size self.base = (os.path.splitext(path)[0].replace('%', '%%') + '_split_%d.html') self.opts = opts self.orig_size = os.stat(content(path)).st_size self.log_info('\tSplitting %s (%d KB)', path, self.orig_size/1024.) root = html.fromstring(open(content(path)).read()) - self.page_breaks = [] - self.find_page_breaks(stylesheet_map[self.path], root) - - self.trees = [] + self.page_breaks, self.trees = [], [] self.split_size = 0 - self.split(root.getroottree()) - self.commit() - self.log_info('\t\tSplit into %d parts.', len(self.trees)) - if self.opts.verbose: - for f in self.files: - self.log_info('\t\t\t%s - %d KB', f, os.stat(content(f)).st_size/1024.) + + # Split on page breaks + self.log_info('\tSplitting on page breaks...') + if self.path in stylesheet_map: + self.find_page_breaks(stylesheet_map[self.path], root) + self.split_on_page_breaks(root.getroottree()) + trees = list(self.trees) + + # Split any remaining over-sized trees + if self.opts.profile.flow_size < sys.maxint: + lt_found = False + self.log_info('\tLooking for large trees...') + for i, tree in enumerate(list(trees)): + self.trees = [] + size = len(tostring(tree.getroot())) + if size > self.opts.profile.flow_size: + lt_found = True + try: + self.split_to_size(tree) + except (SplitError, RuntimeError): # Splitting fails + if not self.always_remove: + self.always_remove = True + self.split_to_size(tree) + else: + raise + trees[i:i+1] = list(self.trees) + if not lt_found: + self.log_info('\tNo large trees found') + + self.trees = trees + self.was_split = len(self.trees) > 1 + if self.was_split: + self.commit() + self.log_info('\t\tSplit into %d parts.', len(self.trees)) + if self.opts.verbose: + for f in self.files: + self.log_info('\t\t\t%s - %d KB', f, os.stat(content(f)).st_size/1024.) + self.fix_opf(opf) + self.trees = None + def split_text(self, text, root, size): self.log_debug('\t\t\tSplitting text of length: %d'%len(text)) @@ -76,12 +108,7 @@ class Splitter(LoggingInterface): return ans - def split(self, tree): - ''' - Split ``tree`` into a *before* and *after* tree, preserving tag structure, - but not duplicating any text. All tags that have had their text and tail - removed have the attribute ``calibre_split`` set to 1. - ''' + def split_to_size(self, tree): self.log_debug('\t\tSplitting...') root = tree.getroot() # Split large
 tags
@@ -108,10 +135,50 @@ class Splitter(LoggingInterface):
             if not self.always_remove:
                 self.log_warn(_('\t\tToo much markup. Re-splitting without structure preservation. This may cause incorrect rendering.'))
             raise SplitError(self.path, root)
-        tree2 = copy.deepcopy(tree)
-        root2 = tree2.getroot()
-        body, body2 = root.body, root2.body
-        path = tree.getpath(split_point)
+        
+        for t in self.do_split(tree, split_point, before):
+            r = t.getroot()
+            if self.is_page_empty(r):
+                continue
+            size = len(tostring(r))
+            if size <= self.opts.profile.flow_size:
+                self.trees.append(t)
+                #print tostring(t.getroot(), pretty_print=True)
+                self.log_debug('\t\t\tCommitted sub-tree #%d (%d KB)', len(self.trees), size/1024.)
+                self.split_size += size
+            else:
+                self.split_to_size(t)
+    
+    def is_page_empty(self, root):
+        body = root.find('body')
+        if body is None:
+            return False
+        txt = re.sub(r'\s+', '', html.tostring(body, method='text', encoding=unicode))
+        if len(txt) > 4:
+            #if len(txt) < 100:
+            #    print 1111111, html.tostring(body, method='html', encoding=unicode)
+            return False
+        for img in root.xpath('//img'):
+            if img.get('style', '') != 'display:none':
+                return False
+        return True
+                
+    def do_split(self, tree, split_point, before):
+        '''
+        Split ``tree`` into a *before* and *after* tree at ``split_point``, 
+        preserving tag structure, but not duplicating any text. 
+        All tags that have had their text and tail
+        removed have the attribute ``calibre_split`` set to 1.
+        
+        :param before: If True tree is split before split_point, otherwise after split_point
+        :return: before_tree, after_tree
+        '''
+        path         = tree.getpath(split_point)
+        tree, tree2  = copy.deepcopy(tree), copy.deepcopy(tree)
+        root         = tree.getroot()
+        root2        = tree2.getroot()
+        body, body2  = root.body, root2.body
+        split_point  = root.xpath(path)[0]
         split_point2 = root2.xpath(path)[0]
         
         def nix_element(elem, top=True):
@@ -129,7 +196,7 @@ class Splitter(LoggingInterface):
                 elem.tail = u''
                 elem.set(SPLIT_ATTR, '1')
                 if elem.tag.lower() in ['ul', 'ol', 'dl', 'table', 'hr', 'img']:
-                    elem.set('style', 'display:none;')
+                    elem.set('style', 'display:none')
         
         def fix_split_point(sp):
             sp.set('style', sp.get('style', '')+'page-break-before:avoid;page-break-after:avoid') 
@@ -163,20 +230,35 @@ class Splitter(LoggingInterface):
             if not hit_split_point:
                 nix_element(elem, top=False)
         
-        for t, r in [(tree, root), (tree2, root2)]:
-            size = len(tostring(r)) 
-            if size <= self.opts.profile.flow_size:
-                self.trees.append(t)
-                #print tostring(t.getroot(), pretty_print=True)
-                self.log_debug('\t\t\tCommitted sub-tree #%d (%d KB)', len(self.trees), size/1024.)
-                self.split_size += size
-            else:
-                self.split(t)
+        return tree, tree2
                 
+    
+    def split_on_page_breaks(self, orig_tree):
+        ordered_ids = []
+        for elem in orig_tree.xpath('//*[@id]'):
+            id = elem.get('id')
+            if id in self.page_break_ids:
+                ordered_ids.append(self.page_breaks[self.page_break_ids.index(id)])
+                
+        self.trees = []
+        tree = orig_tree
+        for pattern, before in ordered_ids:
+            self.log_info('\t\tSplitting on page-break')
+            elem = pattern(tree)
+            if elem:
+                before, after = self.do_split(tree, elem[0], before)
+                self.trees.append(before)
+                tree = after
+        self.trees.append(tree)
+        self.trees = [t for t in self.trees if not self.is_page_empty(t.getroot())]
+                
+            
                 
     def find_page_breaks(self, stylesheets, root):
         '''
         Find all elements that have either page-break-before or page-break-after set.
+        Populates `self.page_breaks` with id based XPath selectors (for elements that don't 
+        have ids, an id is created).
         '''
         page_break_selectors = set([])
         for rule in rules(stylesheets):
@@ -204,16 +286,18 @@ class Splitter(LoggingInterface):
             
         page_breaks = list(page_breaks)
         page_breaks.sort(cmp=lambda x,y : cmp(x.pb_order, y.pb_order))
+        self.page_break_ids = []
         for i, x in enumerate(page_breaks):
             x.set('id', x.get('id', 'calibre_pb_%d'%i))
-            self.page_breaks.append((XPath('//*[@id="%s"]'%x.get('id')), x.pb_before))
+            id = x.get('id')
+            self.page_breaks.append((XPath('//*[@id="%s"]'%id), x.pb_before))
+            self.page_break_ids.append(id)                        
         
         
     def find_split_point(self, root):
         '''
         Find the tag at which to split the tree rooted at `root`. 
         Search order is:
-            * page breaks
             * Heading tags
             * 
tags *

tags @@ -229,19 +313,6 @@ class Splitter(LoggingInterface): elems[i].set(SPLIT_POINT_ATTR, '1') return elems[i] - page_breaks = [] - for x in self.page_breaks: - pb = x[0](root) - if pb: - page_breaks.append(pb[0]) - - elem = pick_elem(page_breaks) - if elem is not None: - i = page_breaks.index(elem) - return elem, self.page_breaks[i][1] - - - for path in ( '//*[re:match(name(), "h[1-6]", "i")]', '/html/body/div', @@ -315,6 +386,9 @@ class Splitter(LoggingInterface): frag = None if len(href) > 1: frag = href[1] + if frag not in self.anchor_map: + self.log_warning('\t\tUnable to re-map OPF link', href) + continue new_file = self.anchor_map[frag] ref.set('href', 'content/'+new_file+('' if frag is None else ('#'+frag))) @@ -341,7 +415,11 @@ def fix_content_links(html_files, changes, opts): anchor = href[1] if len(href) > 1 else None href = href[0] if href in split_files: - newf = anchor_maps[split_files.index(href)][anchor] + try: + newf = anchor_maps[split_files.index(href)][anchor] + except: + print '\t\tUnable to remap HTML link:', href, anchor + continue frag = ('#'+anchor) if anchor else '' a.set('href', newf+frag) changed = True @@ -354,52 +432,54 @@ def fix_ncx(path, changes): anchor_maps = [f.anchor_map for f in changes] tree = etree.parse(path) changed = False - for content in tree.getroot().xpath('//x:content[@src]', namespaces={'x':"http://www.daisy.org/z3986/2005/ncx/"}): + for content in tree.getroot().xpath('//x:content[@src]', + namespaces={'x':"http://www.daisy.org/z3986/2005/ncx/"}): href = content.get('src') if not href.startswith('#'): href = href.split('#') anchor = href[1] if len(href) > 1 else None href = href[0].split('/')[-1] if href in split_files: - newf = anchor_maps[split_files.index(href)][anchor] + try: + newf = anchor_maps[split_files.index(href)][anchor] + except: + print 'Unable to remap NCX link:', href, anchor frag = ('#'+anchor) if anchor else '' content.set('src', 'content/'+newf+frag) changed = True if changed: open(path, 'wb').write(etree.tostring(tree.getroot(), encoding='UTF-8', xml_declaration=True)) - + +def find_html_files(opf): + ''' + Find all HTML files referenced by `opf`. + ''' + html_files = [] + for item in opf.itermanifest(): + if 'html' in item.get('media-type', '').lower(): + f = item.get('href').split('/')[-1] + f2 = f.replace('&', '%26') + if not os.path.exists(content(f)) and os.path.exists(content(f2)): + f = f2 + item.set('href', item.get('href').replace('&', '%26')) + if os.path.exists(content(f)): + html_files.append(f) + return html_files + + def split(pathtoopf, opts, stylesheet_map): pathtoopf = os.path.abspath(pathtoopf) + opf = OPF(open(pathtoopf, 'rb'), os.path.dirname(pathtoopf)) + with CurrentDir(os.path.dirname(pathtoopf)): - opf = OPF(open(pathtoopf, 'rb'), os.path.dirname(pathtoopf)) - html_files = [] - for item in opf.itermanifest(): - if 'html' in item.get('media-type', '').lower(): - f = item.get('href').split('/')[-1] - f2 = f.replace('&', '%26') - if not os.path.exists(content(f)) and os.path.exists(content(f2)): - f = f2 - item.set('href', item.get('href').replace('&', '%26')) - html_files.append(f) - changes = [] - always_remove = not opts.preserve_tag_structure - for f in html_files: - if os.stat(content(f)).st_size > opts.profile.flow_size: - try: - changes.append(Splitter(f, opts, stylesheet_map, - always_remove=(always_remove or \ - os.stat(content(f)).st_size > 5*opts.profile.flow_size))) - except (SplitError, RuntimeError): - if not always_remove: - changes.append(Splitter(f, opts, stylesheet_map, always_remove=True)) - else: - raise - changes[-1].fix_opf(opf) + html_files = find_html_files(opf) + changes = [Splitter(f, opts, stylesheet_map, opf) for f in html_files] + changes = [c for c in changes if c.was_split] - open(pathtoopf, 'wb').write(opf.render()) fix_content_links(html_files, changes, opts) - for item in opf.itermanifest(): if item.get('media-type', '') == 'application/x-dtbncx+xml': fix_ncx(item.get('href'), changes) break + + open(pathtoopf, 'wb').write(opf.render()) diff --git a/src/calibre/ebooks/lrf/html/convert_from.py b/src/calibre/ebooks/lrf/html/convert_from.py index c9ae5e8c58..2554d91f15 100644 --- a/src/calibre/ebooks/lrf/html/convert_from.py +++ b/src/calibre/ebooks/lrf/html/convert_from.py @@ -1920,7 +1920,7 @@ def process_file(path, options, logger=None): options.anchor_ids = True files = options.spine if (options.use_spine and hasattr(options, 'spine')) else [path] conv = HTMLConverter(book, fonts, options, logger, files) - if options.use_spine and hasattr(options, 'toc'): + if options.use_spine and hasattr(options, 'toc') and options.toc is not None: conv.create_toc(options.toc) oname = options.output if not oname: @@ -1948,7 +1948,8 @@ def try_opf(path, options, logger): return dirpath = os.path.dirname(os.path.abspath(opf)) - opf = OPFReader(open(opf, 'rb'), dirpath) + from calibre.ebooks.metadata.opf2 import OPF as OPF2 + opf = OPF2(open(opf, 'rb'), dirpath) try: title = opf.title if title and not getattr(options, 'title', None): @@ -1962,10 +1963,6 @@ def try_opf(path, options, logger): publisher = opf.publisher if publisher: options.publisher = publisher - if not getattr(options, 'category', None): - category = opf.category - if category: - options.category = category if not getattr(options, 'cover', None) or options.use_metadata_cover: orig_cover = getattr(options, 'cover', None) options.cover = None diff --git a/src/calibre/ebooks/metadata/lrx.py b/src/calibre/ebooks/metadata/lrx.py new file mode 100644 index 0000000000..2106a45450 --- /dev/null +++ b/src/calibre/ebooks/metadata/lrx.py @@ -0,0 +1,89 @@ +#!/usr/bin/env python +__license__ = 'GPL v3' +__copyright__ = '2008, Kovid Goyal kovid@kovidgoyal.net' +__docformat__ = 'restructuredtext en' + +''' +Read metadata from LRX files +''' + +import sys, struct +from zlib import decompress +from lxml import etree + +from calibre.ebooks.metadata import MetaInformation, string_to_authors + +def _read(f, at, amount): + f.seek(at) + return f.read(amount) + +def word_be(buf): + return struct.unpack('>L', buf)[0] + +def word_le(buf): + return struct.unpack('H', buf)[0] + + +def get_metadata(f): + read = lambda at, amount: _read(f, at, amount) + f.seek(0) + buf = f.read(12) + if buf[4:] == 'ftypLRX2': + offset = 0 + while True: + offset += word_be(buf[:4]) + try: + buf = read(offset, 8) + except: + raise ValueError('Not a valid LRX file') + if buf[4:] == 'bbeb': + break + offset += 8 + buf = read(offset, 16) + if buf[:8].decode('utf-16-le') != 'LRF\x00': + raise ValueError('Not a valid LRX file') + lrf_version = word_le(buf[8:12]) + offset += 0x4c + compressed_size = short_le(read(offset, 2)) + offset += 2 + if lrf_version >= 800: + offset += 6 + compressed_size -= 4 + uncompressed_size = word_le(read(offset, 4)) + info = decompress(f.read(compressed_size)) + if len(info) != uncompressed_size: + raise ValueError('LRX file has malformed metadata section') + root = etree.fromstring(info) + bi = root.find('BookInfo') + title = bi.find('Title') + title_sort = title.get('reading', None) + title = title.text + author = bi.find('Author') + author_sort = author.get('reading', None) + mi = MetaInformation(title, string_to_authors(author.text)) + mi.title_sort, mi.author_sort = title_sort, author_sort + author = author.text + publisher = bi.find('Publisher') + mi.publisher = getattr(publisher, 'text', None) + mi.tags = [x.text for x in bi.findall('Category')] + mi.language = root.find('DocInfo').find('Language').text + return mi + + elif buf[4:8] == 'LRX': + raise ValueError('Librie LRX format not supported') + else: + raise ValueError('Not a LRX file') + + +def main(args=sys.argv): + print get_metadata(open(args[1], 'rb')) + return 0 + +if __name__ == '__main__': + sys.exit(main()) \ No newline at end of file diff --git a/src/calibre/ebooks/metadata/meta.py b/src/calibre/ebooks/metadata/meta.py index aff09281da..3264655f9c 100644 --- a/src/calibre/ebooks/metadata/meta.py +++ b/src/calibre/ebooks/metadata/meta.py @@ -16,6 +16,7 @@ from calibre.ebooks.metadata.epub import get_metadata as epub_metadata from calibre.ebooks.metadata.html import get_metadata as html_metadata from calibre.ebooks.mobi.reader import get_metadata as mobi_metadata from calibre.ebooks.metadata.odt import get_metadata as odt_metadata +from calibre.ebooks.metadata.lrx import get_metadata as lrx_metadata from calibre.ebooks.metadata.opf2 import OPF from calibre.ebooks.metadata.rtf import set_metadata as set_rtf_metadata from calibre.ebooks.lrf.meta import set_metadata as set_lrf_metadata @@ -29,12 +30,12 @@ except OSError: from calibre.libunzip import extract_member as zip_extract_first from calibre.ebooks.metadata import MetaInformation -from calibre.ptempfile import TemporaryDirectory _METADATA_PRIORITIES = [ 'html', 'htm', 'xhtml', 'xhtm', 'rtf', 'fb2', 'pdf', 'prc', 'odt', - 'epub', 'lit', 'lrf', 'mobi', 'rb', 'imp' + 'epub', 'lit', 'lrx', 'lrf', 'mobi', + 'rb', 'imp' ] # The priorities for loading metadata from different file types diff --git a/src/calibre/ebooks/metadata/opf.py b/src/calibre/ebooks/metadata/opf.py index 21e0730c8c..ce137ffa15 100644 --- a/src/calibre/ebooks/metadata/opf.py +++ b/src/calibre/ebooks/metadata/opf.py @@ -70,7 +70,7 @@ class Manifest(ResourceCollection): @staticmethod def from_opf_manifest_element(manifest, dir): m = Manifest() - for item in manifest.findAll('item'): + for item in manifest.findAll(re.compile('item')): try: m.append(ManifestItem.from_opf_manifest_item(item, dir)) id = item.get('id', '') @@ -130,7 +130,7 @@ class Spine(ResourceCollection): @staticmethod def from_opf_spine_element(spine, manifest): s = Spine(manifest) - for itemref in spine.findAll('itemref'): + for itemref in spine.findAll(re.compile('itemref')): if itemref.has_key('idref'): r = Spine.Item(s.manifest.id_for_path, s.manifest.path_for_id(itemref['idref']), is_path=True) @@ -216,7 +216,7 @@ class standard_field(object): def __get__(self, obj, typ=None): return getattr(obj, 'get_'+self.name)() - + class OPF(MetaInformation): MIMETYPE = 'application/oebps-package+xml' @@ -242,14 +242,27 @@ class OPF(MetaInformation): def __init__(self): raise NotImplementedError('Abstract base class') + @apply + def package(): + def fget(self): + return self.soup.find(re.compile('package')) + return property(fget=fget) + + @apply + def metadata(): + def fget(self): + return self.package.find(re.compile('metadata')) + return property(fget=fget) + + def get_title(self): - title = self.soup.package.metadata.find('dc:title') + title = self.metadata.find('dc:title') if title and title.string: return self.ENTITY_PATTERN.sub(entity_to_unicode, title.string).strip() return self.default_title.strip() def get_authors(self): - creators = self.soup.package.metadata.findAll('dc:creator') + creators = self.metadata.findAll('dc:creator') for elem in creators: role = elem.get('role') if not role: @@ -266,7 +279,7 @@ class OPF(MetaInformation): return [] def get_author_sort(self): - creators = self.soup.package.metadata.findAll('dc:creator') + creators = self.metadata.findAll('dc:creator') for elem in creators: role = elem.get('role') if not role: @@ -277,7 +290,7 @@ class OPF(MetaInformation): return None def get_title_sort(self): - title = self.soup.package.find('dc:title') + title = self.package.find('dc:title') if title: if title.has_key('file-as'): return title['file-as'].strip() @@ -290,7 +303,7 @@ class OPF(MetaInformation): return None def get_uid(self): - package = self.soup.find('package') + package = self.package if package.has_key('unique-identifier'): return package['unique-identifier'] @@ -307,7 +320,7 @@ class OPF(MetaInformation): return None def get_isbn(self): - for item in self.soup.package.metadata.findAll('dc:identifier'): + for item in self.metadata.findAll('dc:identifier'): scheme = item.get('scheme') if not scheme: scheme = item.get('opf:scheme') @@ -316,13 +329,13 @@ class OPF(MetaInformation): return None def get_language(self): - item = self.soup.package.metadata.find('dc:language') + item = self.metadata.find('dc:language') if not item: return _('Unknown') return ''.join(item.findAll(text=True)).strip() def get_application_id(self): - for item in self.soup.package.metadata.findAll('dc:identifier'): + for item in self.metadata.findAll('dc:identifier'): scheme = item.get('scheme', None) if scheme is None: scheme = item.get('opf:scheme', None) @@ -342,7 +355,7 @@ class OPF(MetaInformation): def possible_cover_prefixes(self): isbn, ans = [], [] - for item in self.soup.package.metadata.findAll('dc:identifier'): + for item in self.metadata.findAll('dc:identifier'): scheme = item.get('scheme') if not scheme: scheme = item.get('opf:scheme') @@ -352,13 +365,13 @@ class OPF(MetaInformation): return ans def get_series(self): - s = self.soup.package.metadata.find('series') + s = self.metadata.find('series') if s is not None: return str(s.string).strip() return None def get_series_index(self): - s = self.soup.package.metadata.find('series-index') + s = self.metadata.find('series-index') if s and s.string: try: return int(str(s.string).strip()) @@ -367,7 +380,7 @@ class OPF(MetaInformation): return None def get_rating(self): - s = self.soup.package.metadata.find('rating') + s = self.metadata.find('rating') if s and s.string: try: return int(str(s.string).strip()) @@ -400,17 +413,17 @@ class OPFReader(OPF): if manage: stream.close() self.manifest = Manifest() - m = self.soup.find('manifest') + m = self.soup.find(re.compile('manifest')) if m is not None: self.manifest = Manifest.from_opf_manifest_element(m, dir) self.spine = None - spine = self.soup.find('spine') + spine = self.soup.find(re.compile('spine')) if spine is not None: self.spine = Spine.from_opf_spine_element(spine, self.manifest) self.toc = TOC(base_path=dir) self.toc.read_from_opf(self) - guide = self.soup.find('guide') + guide = self.soup.find(re.compile('guide')) if guide is not None: self.guide = Guide.from_opf_guide(guide, dir) self.base_dir = dir diff --git a/src/calibre/ebooks/metadata/opf2.py b/src/calibre/ebooks/metadata/opf2.py index be99bb8332..70180b014b 100644 --- a/src/calibre/ebooks/metadata/opf2.py +++ b/src/calibre/ebooks/metadata/opf2.py @@ -30,7 +30,6 @@ class Resource(object): :member:`path` :member:`mime_type` :method:`href` - ''' def __init__(self, href_or_path, basedir=os.getcwd(), is_path=True): diff --git a/src/calibre/ebooks/sgmllib.py b/src/calibre/ebooks/sgmllib.py index 2a83225d43..4a82a1a9e3 100644 --- a/src/calibre/ebooks/sgmllib.py +++ b/src/calibre/ebooks/sgmllib.py @@ -351,7 +351,7 @@ class SGMLParser(markupbase.ParserBase): if tag not in self.stack: try: method = getattr(self, 'end_' + tag) - except AttributeError: + except (AttributeError, ValueError): self.unknown_endtag(tag) else: self.report_unbalanced(tag) diff --git a/src/calibre/gui2/dialogs/metadata_bulk.py b/src/calibre/gui2/dialogs/metadata_bulk.py index db60693fa7..132355b12a 100644 --- a/src/calibre/gui2/dialogs/metadata_bulk.py +++ b/src/calibre/gui2/dialogs/metadata_bulk.py @@ -9,9 +9,10 @@ from PyQt4.QtGui import QDialog from calibre.gui2 import qstring_to_unicode from calibre.gui2.dialogs.metadata_bulk_ui import Ui_MetadataBulkDialog from calibre.gui2.dialogs.tag_editor import TagEditor -from calibre.ebooks.metadata import string_to_authors +from calibre.ebooks.metadata import string_to_authors, authors_to_sort_string class MetadataBulkDialog(QDialog, Ui_MetadataBulkDialog): + def __init__(self, window, rows, db): QDialog.__init__(self, window) Ui_MetadataBulkDialog.__init__(self) @@ -54,8 +55,15 @@ class MetadataBulkDialog(QDialog, Ui_MetadataBulkDialog): if au: au = string_to_authors(au) self.db.set_authors(id, au, notify=False) + if self.auto_author_sort.isChecked(): + aut = self.db.authors(id, index_is_id=True) + aut = aut if aut else '' + aut = [a.strip().replace('|', ',') for a in aut.strip().split(',')] + x = authors_to_sort_string(aut) + if x: + self.db.set_author_sort(id, x, notify=False) aus = qstring_to_unicode(self.author_sort.text()) - if aus: + if aus and self.author_sort.isEnabled(): self.db.set_author_sort(id, aus, notify=False) if self.write_rating: self.db.set_rating(id, 2*self.rating.value(), notify=False) diff --git a/src/calibre/gui2/dialogs/metadata_bulk.ui b/src/calibre/gui2/dialogs/metadata_bulk.ui index b4a4106d87..4597b987f5 100644 --- a/src/calibre/gui2/dialogs/metadata_bulk.ui +++ b/src/calibre/gui2/dialogs/metadata_bulk.ui @@ -56,7 +56,7 @@ - + Author S&ort: @@ -69,14 +69,14 @@ - + Specify how the author(s) of this book should be sorted. For example Charles Dickens should be sorted as Dickens, Charles. - + &Rating: @@ -89,7 +89,7 @@ - + Rating of this book. 0-5 stars @@ -108,7 +108,7 @@ - + &Publisher: @@ -121,14 +121,14 @@ - + Change the publisher of this book - + Add Ta&gs: @@ -141,14 +141,14 @@ - + Tags categorize the book. This is particularly useful while searching. <br><br>They can be any words or phrases, separated by commas. - + Open Tag Editor @@ -162,7 +162,7 @@ - + &Remove tags: @@ -172,14 +172,14 @@ - + Comma separated list of tags to remove from the books. - + &Series: @@ -195,7 +195,7 @@ - + List of known series. You can add new series. @@ -214,10 +214,10 @@ - + - + Remove &format: @@ -227,6 +227,13 @@ + + + + A&utomatically set author sort + + + @@ -257,8 +264,8 @@ accept() - 248 - 254 + 252 + 382 157 @@ -273,8 +280,8 @@ reject() - 316 - 260 + 320 + 382 286 @@ -282,5 +289,21 @@ + + auto_author_sort + toggled(bool) + author_sort + setDisabled(bool) + + + 240 + 95 + + + 240 + 113 + + + diff --git a/src/calibre/gui2/dialogs/metadata_single.py b/src/calibre/gui2/dialogs/metadata_single.py index 832d47238f..c7670f989f 100644 --- a/src/calibre/gui2/dialogs/metadata_single.py +++ b/src/calibre/gui2/dialogs/metadata_single.py @@ -129,6 +129,7 @@ class MetadataSingleDialog(QDialog, Ui_MetadataSingleDialog): QDialog.__init__(self, window) Ui_MetadataSingleDialog.__init__(self) self.setupUi(self) + self.bc_box.layout().setAlignment(self.cover, Qt.AlignCenter|Qt.AlignHCenter) self.splitter.setStretchFactor(100, 1) self.db = db self.accepted_callback = accepted_callback diff --git a/src/calibre/gui2/dialogs/metadata_single.ui b/src/calibre/gui2/dialogs/metadata_single.ui index 3c1a4a5e8e..b86e47af24 100644 --- a/src/calibre/gui2/dialogs/metadata_single.ui +++ b/src/calibre/gui2/dialogs/metadata_single.ui @@ -439,7 +439,7 @@ - + 0 diff --git a/src/calibre/gui2/dialogs/user_profiles.py b/src/calibre/gui2/dialogs/user_profiles.py index 005c947a94..5da604c04a 100644 --- a/src/calibre/gui2/dialogs/user_profiles.py +++ b/src/calibre/gui2/dialogs/user_profiles.py @@ -191,7 +191,7 @@ class %(classname)s(%(base_class)s): class Recipe(object): def __init__(self, title, id, recipes): - self.title = title + self.title = unicode(title) self.id = id self.text = recipes[id] def __cmp__(self, other): @@ -202,8 +202,9 @@ class %(classname)s(%(base_class)s): title, ok = QInputDialog.getItem(self, _('Pick recipe'), _('Pick the recipe to customize'), items, 0, False) if ok: + title = unicode(title) for r in recipes: - if r.title == unicode(title): + if r.title == title: try: self.available_profiles.add_item(title, (title, r.text), replace=False) except ValueError: diff --git a/src/calibre/gui2/images/books_in_series.svg b/src/calibre/gui2/images/books_in_series.svg new file mode 100644 index 0000000000..a9f39ca982 --- /dev/null +++ b/src/calibre/gui2/images/books_in_series.svg @@ -0,0 +1,581 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/calibre/gui2/images/news/liberation.png b/src/calibre/gui2/images/news/liberation.png new file mode 100644 index 0000000000..e6c6d7b884 Binary files /dev/null and b/src/calibre/gui2/images/news/liberation.png differ diff --git a/src/calibre/gui2/images/news/new_yorker.png b/src/calibre/gui2/images/news/new_yorker.png new file mode 100644 index 0000000000..562b3b1555 Binary files /dev/null and b/src/calibre/gui2/images/news/new_yorker.png differ diff --git a/src/calibre/gui2/images/news/newyorker.png b/src/calibre/gui2/images/news/newyorker.png deleted file mode 100644 index a5bb5ee183..0000000000 Binary files a/src/calibre/gui2/images/news/newyorker.png and /dev/null differ diff --git a/src/calibre/gui2/images/news/telegraph_uk.png b/src/calibre/gui2/images/news/telegraph_uk.png new file mode 100644 index 0000000000..b943e57afc Binary files /dev/null and b/src/calibre/gui2/images/news/telegraph_uk.png differ diff --git a/src/calibre/gui2/library.py b/src/calibre/gui2/library.py index c529b55879..75d2aade59 100644 --- a/src/calibre/gui2/library.py +++ b/src/calibre/gui2/library.py @@ -163,11 +163,18 @@ class BooksModel(QAbstractTableModel): self.reset() def add_books(self, paths, formats, metadata, uris=[], add_duplicates=False): - return self.db.add_books(paths, formats, metadata, uris, + ret = self.db.add_books(paths, formats, metadata, uris, add_duplicates=add_duplicates) + self.count_changed() + return ret def add_news(self, path, recipe): - return self.db.add_news(path, recipe) + ret = self.db.add_news(path, recipe) + self.count_changed() + return ret + + def count_changed(self, *args): + self.emit(SIGNAL('count_changed(int)'), self.db.count()) def row_indices(self, index): ''' Return list indices of all cells in index.row()''' @@ -189,9 +196,11 @@ class BooksModel(QAbstractTableModel): self.beginRemoveRows(QModelIndex(), row, row) self.db.delete_book(id) self.endRemoveRows() + self.count_changed() self.clear_caches() self.reset() + def delete_books_by_id(self, ids): for id in ids: try: @@ -203,12 +212,14 @@ class BooksModel(QAbstractTableModel): self.db.delete_book(id) if row > -1: self.endRemoveRows() + self.count_changed() self.clear_caches() def books_added(self, num): if num > 0: self.beginInsertRows(QModelIndex(), 0, num-1) self.endInsertRows() + self.count_changed() def search(self, text, refinement, reset=True): self.db.search(text) @@ -564,7 +575,7 @@ class BooksView(TableView): self.setItemDelegateForColumn(col, self.rating_delegate) def set_context_menu(self, edit_metadata, send_to_device, convert, view, - save, open_folder, book_details): + save, open_folder, book_details, similar_menu=None): self.setContextMenuPolicy(Qt.DefaultContextMenu) self.context_menu = QMenu(self) if edit_metadata is not None: @@ -579,6 +590,8 @@ class BooksView(TableView): self.context_menu.addAction(open_folder) if book_details is not None: self.context_menu.addAction(book_details) + if similar_menu is not None: + self.context_menu.addMenu(similar_menu) def contextMenuEvent(self, event): self.context_menu.popup(event.globalPos()) diff --git a/src/calibre/gui2/main.py b/src/calibre/gui2/main.py index 4c71ac2dd7..f0a0ad1d40 100644 --- a/src/calibre/gui2/main.py +++ b/src/calibre/gui2/main.py @@ -234,10 +234,33 @@ class Main(MainWindow, Ui_MainWindow): QObject.connect(self.advanced_search_button, SIGNAL('clicked(bool)'), self.do_advanced_search) ####################### Library view ######################## + similar_menu = QMenu(_('Similar books...')) + similar_menu.addAction(self.action_books_by_same_author) + similar_menu.addAction(self.action_books_in_this_series) + similar_menu.addAction(self.action_books_with_the_same_tags) + similar_menu.addAction(self.action_books_by_this_publisher) + self.action_books_by_same_author.setShortcut(Qt.ALT + Qt.Key_A) + self.action_books_in_this_series.setShortcut(Qt.ALT + Qt.Key_S) + self.action_books_by_this_publisher.setShortcut(Qt.ALT + Qt.Key_P) + self.action_books_with_the_same_tags.setShortcut(Qt.ALT+Qt.Key_T) + self.addAction(self.action_books_by_same_author) + self.addAction(self.action_books_by_this_publisher) + self.addAction(self.action_books_in_this_series) + self.addAction(self.action_books_with_the_same_tags) + self.similar_menu = similar_menu + self.connect(self.action_books_by_same_author, SIGNAL('triggered()'), + lambda : self.show_similar_books('author')) + self.connect(self.action_books_in_this_series, SIGNAL('triggered()'), + lambda : self.show_similar_books('series')) + self.connect(self.action_books_with_the_same_tags, SIGNAL('triggered()'), + lambda : self.show_similar_books('tag')) + self.connect(self.action_books_by_this_publisher, SIGNAL('triggered()'), + lambda : self.show_similar_books('publisher')) self.library_view.set_context_menu(self.action_edit, self.action_sync, self.action_convert, self.action_view, self.action_save, self.action_open_containing_folder, - self.action_show_book_details) + self.action_show_book_details, + similar_menu=similar_menu) self.memory_view.set_context_menu(None, None, None, self.action_view, self.action_save, None, None) self.card_view.set_context_menu(None, None, None, self.action_view, self.action_save, None, None) QObject.connect(self.library_view, SIGNAL('files_dropped(PyQt_PyObject)'), @@ -258,7 +281,7 @@ class Main(MainWindow, Ui_MainWindow): db = LibraryDatabase2(self.library_path) except OSError, err: error_dialog(self, _('Bad database location'), unicode(err)).exec_() - dir = unicode(QFileDialog.getExistingDirectory(self, + dir = unicode(QFileDialog.getExistingDirectory(self, _('Choose a location for your ebook library.'), os.path.expanduser('~'))) if not dir: QCoreApplication.exit(1) @@ -297,6 +320,8 @@ class Main(MainWindow, Ui_MainWindow): self.connect(self.status_bar.tag_view_button, SIGNAL('toggled(bool)'), self.toggle_tags_view) self.connect(self.search, SIGNAL('search(PyQt_PyObject, PyQt_PyObject)'), self.tags_view.model().reinit) + self.connect(self.library_view.model(), SIGNAL('count_changed(int)'), self.location_view.count_changed) + self.library_view.model().count_changed() ########################### Cover Flow ################################ self.cover_flow = None if CoverFlow is not None: @@ -339,17 +364,45 @@ class Main(MainWindow, Ui_MainWindow): error_dialog(self, _('Failed to start content server'), unicode(self.content_server.exception)).exec_() + def show_similar_books(self, type): + search, join = [], ' ' + idx = self.library_view.currentIndex() + if not idx.isValid(): + return + row = idx.row() + if type == 'series': + series = idx.model().db.series(row) + if series: + search = ['series:'+series] + elif type == 'publisher': + publisher = idx.model().db.publisher(row) + if publisher: + search = ['publisher:'+publisher] + elif type == 'tag': + tags = idx.model().db.tags(row) + if tags: + search = ['tag:'+t for t in tags.split(',')] + elif type == 'author': + authors = idx.model().db.authors(row) + if authors: + search = ['author:'+a.strip().replace('|', ',') for a in authors.split(',')] + join = ' or ' + if search: + self.search.set_search_string(join.join(search)) + + + def toggle_cover_flow(self, show): if show: self.library_view.setCurrentIndex(self.library_view.currentIndex()) self.cover_flow.setVisible(True) self.cover_flow.setFocus(Qt.OtherFocusReason) - self.status_bar.book_info.book_data.setMaximumHeight(100) - self.status_bar.setMaximumHeight(120) + #self.status_bar.book_info.book_data.setMaximumHeight(100) + #self.status_bar.setMaximumHeight(120) self.library_view.scrollTo(self.library_view.currentIndex()) else: self.cover_flow.setVisible(False) - self.status_bar.book_info.book_data.setMaximumHeight(1000) + #self.status_bar.book_info.book_data.setMaximumHeight(1000) self.setMaximumHeight(available_height()) def toggle_tags_view(self, show): @@ -619,13 +672,13 @@ class Main(MainWindow, Ui_MainWindow): files, names, on_card=on_card, titles=titles ) - self.upload_memory[job] = (metadata, on_card, memory) + self.upload_memory[job] = (metadata, on_card, memory, files) def books_uploaded(self, job): ''' Called once books have been uploaded. ''' - metadata, on_card, memory = self.upload_memory.pop(job) + metadata, on_card, memory, files = self.upload_memory.pop(job) if job.exception is not None: if isinstance(job.exception, FreeSpaceError): @@ -646,6 +699,8 @@ class Main(MainWindow, Ui_MainWindow): view = self.card_view if on_card else self.memory_view view.model().resort(reset=False) view.model().research() + for f in files: + getattr(f, 'close', lambda : True)() if memory and memory[1]: self.library_view.model().delete_books_by_id(memory[1]) diff --git a/src/calibre/gui2/main.ui b/src/calibre/gui2/main.ui index a4541f0a1d..1833789f61 100644 --- a/src/calibre/gui2/main.ui +++ b/src/calibre/gui2/main.ui @@ -46,8 +46,8 @@ - 10000 - 110 + 16777215 + 100 @@ -74,14 +74,17 @@ QListView::LeftToRight - - false - - - 10 + + + 175 + 90 + - QListView::IconMode + QListView::ListMode + + + true @@ -578,6 +581,42 @@ Show book details + + + + :/images/user_profile.svg:/images/user_profile.svg + + + Books by same author + + + + + + :/images/books_in_series.svg:/images/books_in_series.svg + + + Books in this series + + + + + + :/images/publisher.png:/images/publisher.png + + + Books by this publisher + + + + + + :/images/tags.svg:/images/tags.svg + + + Books with the same tags + + diff --git a/src/calibre/gui2/pictureflow/pictureflow.cpp b/src/calibre/gui2/pictureflow/pictureflow.cpp index a6b28146e9..3d2b0286c0 100644 --- a/src/calibre/gui2/pictureflow/pictureflow.cpp +++ b/src/calibre/gui2/pictureflow/pictureflow.cpp @@ -715,7 +715,7 @@ void PictureFlowPrivate::render() painter.setPen(Qt::white); //painter.setPen(QColor(255,255,255,127)); - if (centerIndex < slideCount() and centerIndex > -1) + if (centerIndex < slideCount() && centerIndex > -1) painter.drawText( QRect(0,0, buffer.width(), (buffer.height() - slideSize().height())/2), Qt::AlignCenter, slideImages->caption(centerIndex)); @@ -767,12 +767,12 @@ void PictureFlowPrivate::render() int sc = slideCount(); painter.setPen(QColor(255,255,255, (255-fade) )); - if (leftTextIndex < sc and leftTextIndex > -1) + if (leftTextIndex < sc && leftTextIndex > -1) painter.drawText( QRect(0,0, buffer.width(), (buffer.height() - slideSize().height())/2), Qt::AlignCenter, slideImages->caption(leftTextIndex)); painter.setPen(QColor(255,255,255, fade)); - if (leftTextIndex+1 < sc and leftTextIndex > -2) + if (leftTextIndex+1 < sc && leftTextIndex > -2) painter.drawText( QRect(0,0, buffer.width(), (buffer.height() - slideSize().height())/2), Qt::AlignCenter, slideImages->caption(leftTextIndex+1)); diff --git a/src/calibre/gui2/status.py b/src/calibre/gui2/status.py index d6321fbf43..221a6fd12b 100644 --- a/src/calibre/gui2/status.py +++ b/src/calibre/gui2/status.py @@ -2,16 +2,18 @@ __license__ = 'GPL v3' __copyright__ = '2008, Kovid Goyal ' import re, collections -from PyQt4.QtGui import QStatusBar, QMovie, QLabel, QFrame, QHBoxLayout, QPixmap, \ - QVBoxLayout, QSizePolicy, QToolButton, QIcon +from PyQt4.QtGui import QStatusBar, QMovie, QLabel, QWidget, QHBoxLayout, QPixmap, \ + QVBoxLayout, QSizePolicy, QToolButton, QIcon, QScrollArea, QFrame from PyQt4.QtCore import Qt, QSize, SIGNAL, QCoreApplication from calibre import fit_image, preferred_encoding from calibre.gui2 import qstring_to_unicode -class BookInfoDisplay(QFrame): +class BookInfoDisplay(QWidget): class BookCoverDisplay(QLabel): - WIDTH = 80 - HEIGHT = 100 + + WIDTH = 81 + HEIGHT = 108 + def __init__(self, coverpath=':/images/book.svg'): QLabel.__init__(self) self.default_pixmap = QPixmap(coverpath).scaled(self.__class__.WIDTH, @@ -19,6 +21,7 @@ class BookInfoDisplay(QFrame): Qt.IgnoreAspectRatio, Qt.SmoothTransformation) self.setScaledContents(True) + self.setMaximumHeight(self.HEIGHT) self.setPixmap(self.default_pixmap) @@ -29,7 +32,10 @@ class BookInfoDisplay(QFrame): self.setMaximumWidth(width) QLabel.setPixmap(self, pixmap) - aspect_ratio = pixmap.width()/float(pixmap.height()) + try: + aspect_ratio = pixmap.width()/float(pixmap.height()) + except ZeroDivisionError: + aspect_ratio = 1 self.setMaximumWidth(int(aspect_ratio*self.HEIGHT)) def sizeHint(self): @@ -39,11 +45,9 @@ class BookInfoDisplay(QFrame): class BookDataDisplay(QLabel): def __init__(self): QLabel.__init__(self) - #self.setTextInteractionFlags(Qt.TextSelectableByMouse) self.setText('') self.setWordWrap(True) - self.setSizePolicy(QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Minimum)) - self.setMaximumHeight(100) + self.setSizePolicy(QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)) def mouseReleaseEvent(self, ev): self.emit(SIGNAL('mr(int)'), 1) @@ -56,18 +60,20 @@ class BookInfoDisplay(QFrame): WEIGHTS[_('Tags')] = 4 def __init__(self, clear_message): - QFrame.__init__(self) + QWidget.__init__(self) self.setCursor(Qt.PointingHandCursor) + self.setSizePolicy(QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)) + self._layout = QHBoxLayout() + self.setLayout(self._layout) self.clear_message = clear_message - self.layout = QHBoxLayout() - self.setLayout(self.layout) self.cover_display = BookInfoDisplay.BookCoverDisplay() - self.layout.addWidget(self.cover_display) + self._layout.addWidget(self.cover_display) self.book_data = BookInfoDisplay.BookDataDisplay() self.connect(self.book_data, SIGNAL('mr(int)'), self.mouseReleaseEvent) - self.layout.addWidget(self.book_data) + self._layout.addWidget(self.book_data) self.data = {} self.setVisible(False) + self._layout.setAlignment(self.cover_display, Qt.AlignTop|Qt.AlignLeft) def mouseReleaseEvent(self, ev): self.emit(SIGNAL('show_book_info()')) @@ -85,7 +91,6 @@ class BookInfoDisplay(QFrame): keys.sort(cmp=lambda x, y: cmp(self.WEIGHTS[x], self.WEIGHTS[y])) for key in keys: txt = data[key] - #txt = '
\n'.join(textwrap.wrap(txt, 120)) if isinstance(key, str): key = key.decode(preferred_encoding, 'replace') if isinstance(txt, str): @@ -94,6 +99,8 @@ class BookInfoDisplay(QFrame): self.book_data.setText(u''+rows+u'
') self.clear_message() + self.book_data.updateGeometry() + self.updateGeometry() self.setVisible(True) class MovieButton(QFrame): @@ -164,6 +171,7 @@ class TagViewButton(QToolButton): class StatusBar(QStatusBar): + def __init__(self, jobs_dialog, systray=None): QStatusBar.__init__(self) self.systray = systray @@ -174,9 +182,15 @@ class StatusBar(QStatusBar): self.addPermanentWidget(self.tag_view_button) self.addPermanentWidget(self.movie_button) self.book_info = BookInfoDisplay(self.clearMessage) + self.scroll_area = QScrollArea() + self.scroll_area.setWidget(self.book_info) + self.scroll_area.setMaximumHeight(120) + self.scroll_area.setWidgetResizable(True) self.connect(self.book_info, SIGNAL('show_book_info()'), self.show_book_info) - self.addWidget(self.book_info) + self.addWidget(self.scroll_area, 100) self.setMinimumHeight(120) + self.setMaximumHeight(120) + def reset_info(self): self.book_info.show_data({}) diff --git a/src/calibre/gui2/viewer/documentview.py b/src/calibre/gui2/viewer/documentview.py index da8120c910..ed5f8efdcd 100644 --- a/src/calibre/gui2/viewer/documentview.py +++ b/src/calibre/gui2/viewer/documentview.py @@ -512,11 +512,19 @@ class DocumentView(QWebView): def wheelEvent(self, event): if event.delta() < -14: - self.next_page() + if self.document.at_bottom: + if self.manager is not None: + self.manager.next_document() + event.accept() + return elif event.delta() > 14: - self.previous_page() - event.accept() - + if self.document.at_top: + if self.manager is not None: + self.manager.previous_document() + event.accept() + return + return QWebView.wheelEvent(self, event) + def keyPressEvent(self, event): key = event.key() if key in [Qt.Key_PageDown, Qt.Key_Space, Qt.Key_Down]: diff --git a/src/calibre/gui2/widgets.py b/src/calibre/gui2/widgets.py index 5b3c2afe8f..caf2011a75 100644 --- a/src/calibre/gui2/widgets.py +++ b/src/calibre/gui2/widgets.py @@ -7,9 +7,9 @@ import re, os, traceback from PyQt4.QtGui import QListView, QIcon, QFont, QLabel, QListWidget, \ QListWidgetItem, QTextCharFormat, QApplication, \ QSyntaxHighlighter, QCursor, QColor, QWidget, QDialog, \ - QAbstractItemDelegate, QPixmap, QStyle, QFontMetrics + QPixmap from PyQt4.QtCore import QAbstractListModel, QVariant, Qt, SIGNAL, \ - QObject, QRegExp, QString, QSettings + QObject, QRegExp, QString, QSettings, QSize from calibre.gui2.jobs2 import DetailView from calibre.gui2 import human_readable, NONE, TableView, \ @@ -128,57 +128,19 @@ class ImageView(QLabel): self.setMaximumWidth(width) self.setMaximumHeight(height) -class LocationDelegate(QAbstractItemDelegate): - - def __init__(self): - QAbstractItemDelegate.__init__(self) - self.pixmap = QPixmap(40, 40) - self.text = QString('Reader\n999.9 MB Available202') - - def rects(self, option): - style = QApplication.style() - font = QFont(option.font) - font.setBold(True) - irect = style.itemPixmapRect(option.rect, Qt.AlignHCenter|Qt.AlignTop, self.pixmap) - trect = style.itemTextRect(QFontMetrics(font), option.rect, - Qt.AlignHCenter|Qt.AlignTop, True, self.text) - trect.moveTop(irect.bottom()) - return irect, trect - - def sizeHint(self, option, index): - irect, trect = self.rects(option) - return irect.united(trect).size() - - def paint(self, painter, option, index): - style = QApplication.style() - painter.save() - if hasattr(QStyle, 'CE_ItemViewItem'): - QApplication.style().drawControl(QStyle.CE_ItemViewItem, option, painter) - highlight = getattr(index.model(), 'highlight_row', -1) == index.row() - mode = QIcon.Active if highlight else QIcon.Normal - pixmap = QIcon(index.model().data(index, Qt.DecorationRole)).pixmap(self.pixmap.size()) - pixmap = style.generatedIconPixmap(mode, pixmap, option) - text = index.model().data(index, Qt.DisplayRole).toString() - irect, trect = self.rects(option) - style.drawItemPixmap(painter, irect, Qt.AlignHCenter|Qt.AlignTop, pixmap) - font = QFont(option.font) - font.setBold(highlight) - painter.setFont(font) - style.drawItemText(painter, trect, Qt.AlignHCenter|Qt.AlignBottom, - option.palette, True, text) - painter.restore() - class LocationModel(QAbstractListModel): + def __init__(self, parent): QAbstractListModel.__init__(self, parent) self.icons = [QVariant(QIcon(':/library')), QVariant(QIcon(':/images/reader.svg')), QVariant(QIcon(':/images/sd.svg'))] - self.text = [_('Library'), - _('Reader\n%s available'), - _('Card\n%s available')] + self.text = [_('Library\n%d\nbooks'), + _('Reader\n%s\navailable'), + _('Card\n%s\navailable')] self.free = [-1, -1] + self.count = 0 self.highlight_row = 0 self.tooltips = [ _('Click to see the list of books available on your computer'), @@ -194,12 +156,18 @@ class LocationModel(QAbstractListModel): data = NONE if role == Qt.DisplayRole: text = self.text[row]%(human_readable(self.free[row-1])) if row > 0 \ - else self.text[row] + else self.text[row]%self.count data = QVariant(text) elif role == Qt.DecorationRole: data = self.icons[row] elif role == Qt.ToolTipRole: - return QVariant(self.tooltips[row]) + data = QVariant(self.tooltips[row]) + elif role == Qt.SizeHintRole: + data = QVariant(QSize(155, 90)) + elif role == Qt.FontRole: + font = QFont('monospace') + font.setBold(row == self.highlight_row) + data = QVariant(font) return data def headerData(self, section, orientation, role): @@ -223,10 +191,12 @@ class LocationView(QListView): self.setModel(LocationModel(self)) self.reset() QObject.connect(self.selectionModel(), SIGNAL('currentChanged(QModelIndex, QModelIndex)'), self.current_changed) - self.delegate = LocationDelegate() - self.setItemDelegate(self.delegate) self.setCursor(Qt.PointingHandCursor) + def count_changed(self, new_count): + self.model().count = new_count + self.model().reset() + def current_changed(self, current, previous): i = current.row() location = 'library' if i == 0 else 'main' if i == 1 else 'card' @@ -270,7 +240,6 @@ class FontFamilyModel(QAbstractListModel): try: family = self.families[index.row()] except: - import traceback traceback.print_exc() return NONE if role == Qt.DisplayRole: diff --git a/src/calibre/library/database2.py b/src/calibre/library/database2.py index 2328ca7bad..9f5dae70dc 100644 --- a/src/calibre/library/database2.py +++ b/src/calibre/library/database2.py @@ -255,6 +255,9 @@ class ResultCache(SearchQueryParser): if id in self._map: self._map.remove(id) if id in self._map_filtered: self._map_filtered.remove(id) + def count(self): + return len(self._map) + def refresh(self, db, field=None, ascending=True): temp = db.conn.get('SELECT * FROM meta') self._data = list(itertools.repeat(None, temp[-1][0]+2)) if temp else [] @@ -375,6 +378,7 @@ class LibraryDatabase2(LibraryDatabase): self.refresh_ids = functools.partial(self.data.refresh_ids, self.conn) self.row = self.data.row self.has_id = self.data.has_id + self.count = self.data.count self.refresh() @@ -757,7 +761,10 @@ class LibraryDatabase2(LibraryDatabase): newspapers = self.conn.get('SELECT name FROM tags WHERE id IN (SELECT DISTINCT tag FROM books_tags_link WHERE book IN (select book from books_tags_link where tag IN (SELECT id FROM tags WHERE name=?)))', (_('News'),)) if newspapers: newspapers = [f[0] for f in newspapers] - newspapers.remove(_('News')) + try: + newspapers.remove(_('News')) + except ValueError: + pass categories['news'] = list(map(Tag, newspapers)) for tag in categories['news']: tag.count = self.conn.get('SELECT COUNT(id) FROM books_tags_link WHERE tag IN (SELECT DISTINCT id FROM tags WHERE name=?)', (tag,), all=False) @@ -1188,9 +1195,6 @@ class LibraryDatabase2(LibraryDatabase): for i in iter(self): yield i['id'] - def count(self): - return len(self.data._map) - def get_data_as_dict(self, prefix=None, authors_as_string=False): ''' Return all metadata stored in the database as a dict. Includes paths to diff --git a/src/calibre/library/server.py b/src/calibre/library/server.py index fad5fd4aaf..1fcd824a5f 100644 --- a/src/calibre/library/server.py +++ b/src/calibre/library/server.py @@ -256,7 +256,9 @@ class LibraryServer(object): ' Feeds to read calibre books on a ipod with stanza.' books = [] for record in iter(self.db): - if 'EPUB' in record[FIELD_MAP['formats']].upper(): + r = record[FIELD_MAP['formats']] + r = r.upper() if r else '' + if 'EPUB' in r: authors = ' & '.join([i.replace('|', ',') for i in record[FIELD_MAP['authors']].split(',')]) extra = [] rating = record[FIELD_MAP['rating']] diff --git a/src/calibre/libunrar.py b/src/calibre/libunrar.py index bb324282c3..7c608b72f1 100644 --- a/src/calibre/libunrar.py +++ b/src/calibre/libunrar.py @@ -7,7 +7,7 @@ This module provides a thin ctypes based wrapper around libunrar. See ftp://ftp.rarlabs.com/rar/unrarsrc-3.7.5.tar.gz """ import os, ctypes, sys, re -from ctypes import Structure, c_char_p, c_uint, c_void_p, POINTER, \ +from ctypes import Structure as _Structure, c_char_p, c_uint, c_void_p, POINTER, \ byref, c_wchar_p, c_int, c_char, c_wchar from tempfile import NamedTemporaryFile from StringIO import StringIO @@ -18,9 +18,12 @@ from calibre.ptempfile import TemporaryDirectory _librar_name = 'libunrar' cdll = ctypes.cdll if iswindows: - Structure._pack_ = 1 + class Structure(_Structure): + _pack_ = 1 _librar_name = 'unrar' cdll = ctypes.windll +else: + Structure = _Structure if hasattr(sys, 'frozen') and iswindows: _libunrar = cdll.LoadLibrary(os.path.join(os.path.dirname(sys.executable), 'unrar.dll')) _libunrar = load_library(_librar_name, cdll) diff --git a/src/calibre/linux.py b/src/calibre/linux.py index f69b306b2b..81f288384f 100644 --- a/src/calibre/linux.py +++ b/src/calibre/linux.py @@ -422,7 +422,8 @@ def install_man_pages(fatal_errors): raise print 'Failed to install MAN pages as help2man is missing from your system' break - raw = re.compile(r'^\.IP\s*^([A-Z :]+)$', re.MULTILINE).sub(r'.SS\n\1', p.stdout.read()) + o = p.stdout.read() + raw = re.compile(r'^\.IP\s*^([A-Z :]+)$', re.MULTILINE).sub(r'.SS\n\1', o) if not raw.strip(): print 'Unable to create MAN page for', prog continue @@ -464,6 +465,17 @@ def post_install(): if os.stat(f).st_uid == 0: os.unlink(f) +def binary_install(): + manifest = os.path.join(sys.frozen_path, 'manifest') + exes = [x.strip() for x in open(manifest).readlines()] + print 'Creating symlinks...' + for exe in exes: + dest = os.path.join('/usr', 'bin', exe) + if os.path.exists(dest): + os.remove(dest) + os.symlink(os.path.join(sys.frozen_path, exe), dest) + post_install() + return 0 VIEWER = '''\ [Desktop Entry] @@ -579,7 +591,7 @@ def setup_desktop_integration(fatal_errors): print >>sys.stderr, 'Could not setup desktop integration. Error:' print err - +main = post_install if __name__ == '__main__': post_install() diff --git a/src/calibre/linux_installer.py b/src/calibre/linux_installer.py deleted file mode 100644 index e07cdc192a..0000000000 --- a/src/calibre/linux_installer.py +++ /dev/null @@ -1,327 +0,0 @@ -#!/usr/bin/env python -__license__ = 'GPL v3' -__copyright__ = '2008, Kovid Goyal kovid@kovidgoyal.net' -__docformat__ = 'restructuredtext en' - -''' -Download and install the linux binary. -''' -import sys, os, shutil, tarfile, subprocess, tempfile, urllib2, re, stat - -MOBILEREAD='https://dev.mobileread.com/dist/kovid/calibre/' - -class TerminalController: - """ - A class that can be used to portably generate formatted output to - a terminal. - - `TerminalController` defines a set of instance variables whose - values are initialized to the control sequence necessary to - perform a given action. These can be simply included in normal - output to the terminal: - - >>> term = TerminalController() - >>> print 'This is '+term.GREEN+'green'+term.NORMAL - - Alternatively, the `render()` method can used, which replaces - '${action}' with the string required to perform 'action': - - >>> term = TerminalController() - >>> print term.render('This is ${GREEN}green${NORMAL}') - - If the terminal doesn't support a given action, then the value of - the corresponding instance variable will be set to ''. As a - result, the above code will still work on terminals that do not - support color, except that their output will not be colored. - Also, this means that you can test whether the terminal supports a - given action by simply testing the truth value of the - corresponding instance variable: - - >>> term = TerminalController() - >>> if term.CLEAR_SCREEN: - ... print 'This terminal supports clearning the screen.' - - Finally, if the width and height of the terminal are known, then - they will be stored in the `COLS` and `LINES` attributes. - """ - # Cursor movement: - BOL = '' #: Move the cursor to the beginning of the line - UP = '' #: Move the cursor up one line - DOWN = '' #: Move the cursor down one line - LEFT = '' #: Move the cursor left one char - RIGHT = '' #: Move the cursor right one char - - # Deletion: - CLEAR_SCREEN = '' #: Clear the screen and move to home position - CLEAR_EOL = '' #: Clear to the end of the line. - CLEAR_BOL = '' #: Clear to the beginning of the line. - CLEAR_EOS = '' #: Clear to the end of the screen - - # Output modes: - BOLD = '' #: Turn on bold mode - BLINK = '' #: Turn on blink mode - DIM = '' #: Turn on half-bright mode - REVERSE = '' #: Turn on reverse-video mode - NORMAL = '' #: Turn off all modes - - # Cursor display: - HIDE_CURSOR = '' #: Make the cursor invisible - SHOW_CURSOR = '' #: Make the cursor visible - - # Terminal size: - COLS = None #: Width of the terminal (None for unknown) - LINES = None #: Height of the terminal (None for unknown) - - # Foreground colors: - BLACK = BLUE = GREEN = CYAN = RED = MAGENTA = YELLOW = WHITE = '' - - # Background colors: - BG_BLACK = BG_BLUE = BG_GREEN = BG_CYAN = '' - BG_RED = BG_MAGENTA = BG_YELLOW = BG_WHITE = '' - - _STRING_CAPABILITIES = """ - BOL=cr UP=cuu1 DOWN=cud1 LEFT=cub1 RIGHT=cuf1 - CLEAR_SCREEN=clear CLEAR_EOL=el CLEAR_BOL=el1 CLEAR_EOS=ed BOLD=bold - BLINK=blink DIM=dim REVERSE=rev UNDERLINE=smul NORMAL=sgr0 - HIDE_CURSOR=cinvis SHOW_CURSOR=cnorm""".split() - _COLORS = """BLACK BLUE GREEN CYAN RED MAGENTA YELLOW WHITE""".split() - _ANSICOLORS = "BLACK RED GREEN YELLOW BLUE MAGENTA CYAN WHITE".split() - - def __init__(self, term_stream=sys.stdout): - """ - Create a `TerminalController` and initialize its attributes - with appropriate values for the current terminal. - `term_stream` is the stream that will be used for terminal - output; if this stream is not a tty, then the terminal is - assumed to be a dumb terminal (i.e., have no capabilities). - """ - # Curses isn't available on all platforms - try: import curses - except: return - - # If the stream isn't a tty, then assume it has no capabilities. - if not hasattr(term_stream, 'isatty') or not term_stream.isatty(): return - - # Check the terminal type. If we fail, then assume that the - # terminal has no capabilities. - try: curses.setupterm() - except: return - - # Look up numeric capabilities. - self.COLS = curses.tigetnum('cols') - self.LINES = curses.tigetnum('lines') - - # Look up string capabilities. - for capability in self._STRING_CAPABILITIES: - (attrib, cap_name) = capability.split('=') - setattr(self, attrib, self._tigetstr(cap_name) or '') - - # Colors - set_fg = self._tigetstr('setf') - if set_fg: - for i,color in zip(range(len(self._COLORS)), self._COLORS): - setattr(self, color, curses.tparm(set_fg, i) or '') - set_fg_ansi = self._tigetstr('setaf') - if set_fg_ansi: - for i,color in zip(range(len(self._ANSICOLORS)), self._ANSICOLORS): - setattr(self, color, curses.tparm(set_fg_ansi, i) or '') - set_bg = self._tigetstr('setb') - if set_bg: - for i,color in zip(range(len(self._COLORS)), self._COLORS): - setattr(self, 'BG_'+color, curses.tparm(set_bg, i) or '') - set_bg_ansi = self._tigetstr('setab') - if set_bg_ansi: - for i,color in zip(range(len(self._ANSICOLORS)), self._ANSICOLORS): - setattr(self, 'BG_'+color, curses.tparm(set_bg_ansi, i) or '') - - def _tigetstr(self, cap_name): - # String capabilities can include "delays" of the form "$<2>". - # For any modern terminal, we should be able to just ignore - # these, so strip them out. - import curses - cap = curses.tigetstr(cap_name) or '' - return re.sub(r'\$<\d+>[/*]?', '', cap) - - def render(self, template): - """ - Replace each $-substitutions in the given template string with - the corresponding terminal control string (if it's defined) or - '' (if it's not). - """ - return re.sub(r'\$\$|\${\w+}', self._render_sub, template) - - def _render_sub(self, match): - s = match.group() - if s == '$$': return s - else: return getattr(self, s[2:-1]) - -####################################################################### -# Example use case: progress bar -####################################################################### - -class ProgressBar: - """ - A 3-line progress bar, which looks like:: - - Header - 20% [===========----------------------------------] - progress message - - The progress bar is colored, if the terminal supports color - output; and adjusts to the width of the terminal. - """ - BAR = '%3d%% ${GREEN}[${BOLD}%s%s${NORMAL}${GREEN}]${NORMAL}\n' - HEADER = '${BOLD}${CYAN}%s${NORMAL}\n\n' - - def __init__(self, term, header): - self.term = term - if not (self.term.CLEAR_EOL and self.term.UP and self.term.BOL): - raise ValueError("Terminal isn't capable enough -- you " - "should use a simpler progress dispaly.") - self.width = self.term.COLS or 75 - self.bar = term.render(self.BAR) - self.header = self.term.render(self.HEADER % header.center(self.width)) - self.cleared = 1 #: true if we haven't drawn the bar yet. - - def update(self, percent, message=''): - if isinstance(message, unicode): - message = message.encode('utf-8', 'ignore') - if self.cleared: - sys.stdout.write(self.header) - self.cleared = 0 - n = int((self.width-10)*percent) - msg = message.center(self.width) - sys.stdout.write( - self.term.BOL + self.term.UP + self.term.CLEAR_EOL + - (self.bar % (100*percent, '='*n, '-'*(self.width-10-n))) + - self.term.CLEAR_EOL + msg) - sys.stdout.flush() - - def clear(self): - if not self.cleared: - sys.stdout.write(self.term.BOL + self.term.CLEAR_EOL + - self.term.UP + self.term.CLEAR_EOL + - self.term.UP + self.term.CLEAR_EOL) - self.cleared = 1 - - -LAUNCHER='''\ -#!/bin/bash -frozen_path=%s -export ORIGWD=`pwd` -export LD_LIBRARY_PATH=$frozen_path:$LD_LIBRARY_PATH -cd $frozen_path -./%s "$@" -''' - -def extract_tarball(tar, destdir): - print 'Extracting application files...' - if hasattr(tar, 'read'): - try: - tarfile.open(fileobj=tar, mode='r').extractall(destdir) - except: # tarfile.py on Fedora 9 is buggy - subprocess.check_call(['tar', 'xjf', tar.name, '-C', destdir]) - else: - tarfile.open(tar, 'r').extractall(destdir) - -def create_launchers(destdir, bindir='/usr/bin'): - manifest = [] - for launcher in open(os.path.join(destdir, 'manifest')).readlines(): - if 'postinstall' in launcher: - continue - launcher = launcher.strip() - lp = os.path.join(bindir, launcher) - print 'Creating', lp - open(lp, 'wb').write(LAUNCHER%(destdir, launcher)) - os.chmod(lp, stat.S_IXUSR|stat.S_IXOTH|stat.S_IXGRP|stat.S_IREAD|stat.S_IWRITE|stat.S_IRGRP|stat.S_IROTH) - manifest.append(lp) - return manifest - -def do_postinstall(destdir): - cwd = os.getcwd() - t = tempfile.NamedTemporaryFile() - try: - os.chdir(destdir) - os.environ['LD_LIBRARY_PATH'] = destdir+':'+os.environ.get('LD_LIBRARY_PATH', '') - os.environ['PYTHONPATH'] = destdir - os.environ['PYTHONSTARTUP'] = '' - subprocess.call((os.path.join(destdir, 'calibre_postinstall'), '--save-manifest-to', t.name)) - finally: - os.chdir(cwd) - t.seek(0) - return list(t.readlines()) - -def download_tarball(): - try: - pb = ProgressBar(TerminalController(sys.stdout), 'Downloading calibre...') - except ValueError: - print 'Downloading calibre...' - pb = None - local = 'calibre-test.tar.bz2' - src = open(local) if os.access(local, os.R_OK) else urllib2.urlopen(MOBILEREAD+'calibre-%version-i686.tar.bz2') - if hasattr(src, 'info'): - size = int(src.info()['content-length']) - else: - src.seek(0, 2) - size = src.tell() - src.seek(0) - f = tempfile.NamedTemporaryFile() - while f.tell() < size: - f.write(src.read(4*1024)) - percent = f.tell()/float(size) - if pb is not None: - pb.update(percent) - else: - print '%d%%, '%int(percent*100), - f.seek(0) - return f - -def main(args=sys.argv): - defdir = '/opt/calibre' - destdir = raw_input('Enter the installation directory for calibre (Its contents will be deleted!)[%s]: '%defdir).strip() - if not destdir: - destdir = defdir - if os.path.exists(destdir): - shutil.rmtree(destdir) - os.makedirs(destdir) - - f = download_tarball() - - print 'Extracting...' - extract_tarball(f, destdir) - manifest = create_launchers(destdir) - manifest += do_postinstall(destdir) - - manifest += ['/usr/bin/calibre-uninstall'] - - UNINSTALLER = '''\ -#!/usr/bin/env python -import os, sys -if os.geteuid() != 0: - print 'You must run this uninstaller as root' - sys.exit(0) -manifest = %s -failures = [] -for path in manifest: - print 'Deleting', path - try: - os.unlink(path) - except: - failures.append(path) - -print 'Uninstalling complete.' -if failures: - print 'Failed to remove the following files:' - for f in failures: print f -'''%repr(manifest) - - open('/usr/bin/calibre-uninstall', 'wb').write(UNINSTALLER) - os.chmod('/usr/bin/calibre-uninstall', - stat.S_IXUSR|stat.S_IXOTH|stat.S_IXGRP|stat.S_IREAD|stat.S_IWRITE|stat.S_IRGRP|stat.S_IROTH) - - print 'You can uninstall calibre by running sudo calibre-uninstall' - - return 0 - -if __name__ == '__main__': - sys.exit(main()) diff --git a/src/calibre/manual/faq.rst b/src/calibre/manual/faq.rst index caea4af553..450f860640 100644 --- a/src/calibre/manual/faq.rst +++ b/src/calibre/manual/faq.rst @@ -153,8 +153,9 @@ Content From The Web My downloaded news content causes the reader to reset. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This is a bug in the SONY firmware. The problem can be mitigated by switching the output format to EPUB -in the configuration dialog. EPUB files typically only cause the reader to reset when clicking on certain -links. Alternatively, you can use the LRF output format and use the SONY software to transfer the files to the reader. The SONY software pre-paginates the LRF file, thereby reducing the number of resets. +in the configuration dialog. Alternatively, you can use the LRF output format and use the SONY software +to transfer the files to the reader. The SONY software pre-paginates the LRF file, +thereby reducing the number of resets. I obtained a recipe for a news site as a .py file from somewhere, how do I use it? ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/src/calibre/startup.py b/src/calibre/startup.py index fc2749323a..eebec7d784 100644 --- a/src/calibre/startup.py +++ b/src/calibre/startup.py @@ -85,6 +85,8 @@ if not _run_once: to byte strings using `encoding`, calls abspath and then decodes back to unicode. ''' to_unicode = False + if encoding is None: + encoding = preferred_encoding if isinstance(path, unicode): path = path.encode(encoding) to_unicode = True @@ -97,6 +99,8 @@ if not _run_once: _join = os.path.join def my_join(a, *p): encoding=sys.getfilesystemencoding() + if not encoding: + encoding = preferred_encoding p = [a] + list(p) _unicode = False for i in p: diff --git a/src/calibre/trac/plugins/download.py b/src/calibre/trac/plugins/download.py index ca5ecabed4..6436aba448 100644 --- a/src/calibre/trac/plugins/download.py +++ b/src/calibre/trac/plugins/download.py @@ -11,7 +11,6 @@ from trac.util import Markup __appname__ = 'calibre' DOWNLOAD_DIR = '/var/www/calibre.kovidgoyal.net/htdocs/downloads' -LINUX_INSTALLER = '/var/www/calibre.kovidgoyal.net/calibre/src/calibre/linux_installer.py' MOBILEREAD = 'https://dev.mobileread.com/dist/kovid/calibre/' class OS(dict): @@ -114,7 +113,7 @@ class Download(Component): if req.path_info == '/download': return self.top_level(req) elif req.path_info == '/download_linux_binary_installer': - req.send(open(LINUX_INSTALLER).read().replace('%version', self.version_from_filename()), 'text/x-python') + req.send(LINUX_INSTALLER.replace('%version', self.version_from_filename()), 'text/x-python') else: match = re.match(r'\/download_(\S+)', req.path_info) if match: @@ -240,3 +239,196 @@ If not, head over to ". + # For any modern terminal, we should be able to just ignore + # these, so strip them out. + import curses + cap = curses.tigetstr(cap_name) or '' + return re.sub(r'\$<\d+>[/*]?', '', cap) + + def render(self, template): + return re.sub(r'\$\$|\${\w+}', self._render_sub, template) + + def _render_sub(self, match): + s = match.group() + if s == '$$': return s + else: return getattr(self, s[2:-1]) + +class ProgressBar: + BAR = '%3d%% ${GREEN}[${BOLD}%s%s${NORMAL}${GREEN}]${NORMAL}\n' + HEADER = '${BOLD}${CYAN}%s${NORMAL}\n\n' + + def __init__(self, term, header): + self.term = term + if not (self.term.CLEAR_EOL and self.term.UP and self.term.BOL): + raise ValueError("Terminal isn't capable enough -- you " + "should use a simpler progress dispaly.") + self.width = self.term.COLS or 75 + self.bar = term.render(self.BAR) + self.header = self.term.render(self.HEADER % header.center(self.width)) + self.cleared = 1 #: true if we haven't drawn the bar yet. + + def update(self, percent, message=''): + if isinstance(message, unicode): + message = message.encode('utf-8', 'ignore') + if self.cleared: + sys.stdout.write(self.header) + self.cleared = 0 + n = int((self.width-10)*percent) + msg = message.center(self.width) + sys.stdout.write( + self.term.BOL + self.term.UP + self.term.CLEAR_EOL + + (self.bar % (100*percent, '='*n, '-'*(self.width-10-n))) + + self.term.CLEAR_EOL + msg) + sys.stdout.flush() + + def clear(self): + if not self.cleared: + sys.stdout.write(self.term.BOL + self.term.CLEAR_EOL + + self.term.UP + self.term.CLEAR_EOL + + self.term.UP + self.term.CLEAR_EOL) + self.cleared = 1 + +def download_tarball(): + try: + pb = ProgressBar(TerminalController(sys.stdout), 'Downloading calibre...') + except ValueError: + print 'Downloading calibre...' + pb = None + local = 'calibre-test.tar.bz2' + src = open(local) if os.access(local, os.R_OK) else urllib2.urlopen(MOBILEREAD+'calibre-%version-i686.tar.bz2') + if hasattr(src, 'info'): + size = int(src.info()['content-length']) + else: + src.seek(0, 2) + size = src.tell() + src.seek(0) + f = tempfile.NamedTemporaryFile() + while f.tell() < size: + f.write(src.read(4*1024)) + percent = f.tell()/float(size) + if pb is not None: + pb.update(percent) + else: + print '%d%%, '%int(percent*100), + f.seek(0) + return f + +def extract_tarball(tar, destdir): + print 'Extracting application files...' + if hasattr(tar, 'read'): + try: + tarfile.open(fileobj=tar, mode='r').extractall(destdir) + except: # tarfile.py on Fedora 9 is buggy + subprocess.check_call(['tar', 'xjf', tar.name, '-C', destdir]) + else: + tarfile.open(tar, 'r').extractall(destdir) + +def main(): + defdir = '/opt/calibre' + destdir = raw_input('Enter the installation directory for calibre (Its contents will be deleted!)[%s]: '%defdir).strip() + if not destdir: + destdir = defdir + destdir = os.path.abspath(destdir) + if os.path.exists(destdir): + shutil.rmtree(destdir) + os.makedirs(destdir) + + f = download_tarball() + + print 'Extracting files to %s ...'%destdir + extract_tarball(f, destdir) + pi = os.path.join(destdir, 'calibre_postinstall') + subprocess.call(pi, shell=True) + return 0 +''' diff --git a/src/calibre/trac/plugins/templates/pyinstaller.html b/src/calibre/trac/plugins/templates/pyinstaller.html index 6a661e7f15..f85b3b9499 100644 --- a/src/calibre/trac/plugins/templates/pyinstaller.html +++ b/src/calibre/trac/plugins/templates/pyinstaller.html @@ -37,7 +37,7 @@

Note

    -
  • This installer is very new and has only been tested ona couple of systems, so if you encounter +
  • This installer is very new and has only been tested on a couple of systems, so if you encounter problems, please report them.
  • You shoud have help2man and xdg-utils installed on your system.
diff --git a/src/calibre/translations/bg.po b/src/calibre/translations/bg.po index 791f7325b4..cb3c5d3171 100644 --- a/src/calibre/translations/bg.po +++ b/src/calibre/translations/bg.po @@ -6,25 +6,25 @@ msgid "" msgstr "" "Project-Id-Version: calibre 0.4.51\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2008-12-06 07:37+0000\n" +"POT-Creation-Date: 2008-12-15 02:49+0000\n" "PO-Revision-Date: 2008-05-24 06:23+0000\n" "Last-Translator: Kovid Goyal \n" "Language-Team: bg\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2008-12-07 21:41+0000\n" +"X-Launchpad-Export-Date: 2008-12-15 18:24+0000\n" "X-Generator: Launchpad (build Unknown)\n" "Generated-By: pygettext.py 1.5\n" -#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:135 -#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:153 -#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:191 -#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:219 +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:137 +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:155 +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:193 +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:221 msgid "Unable to detect the %s disk drive. Try rebooting." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:407 +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:409 msgid "The reader has no storage card connected." msgstr "" @@ -219,13 +219,13 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:226 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:229 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:274 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:64 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:66 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:99 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:101 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf.py:321 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf.py:436 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:794 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:65 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:67 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:100 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:102 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf.py:334 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf.py:449 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:793 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/pdf.py:12 #: /home/kovid/work/calibre/src/calibre/ebooks/odt/to_oeb.py:46 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf.py:48 @@ -234,12 +234,12 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:365 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:37 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:38 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:317 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:331 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:815 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:581 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:818 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:821 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:328 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:342 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:826 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:583 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:820 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:823 #: /home/kovid/work/calibre/src/calibre/gui2/tools.py:52 #: /home/kovid/work/calibre/src/calibre/gui2/tools.py:112 #: /home/kovid/work/calibre/src/calibre/library/cli.py:245 @@ -248,10 +248,10 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/library/database.py:1423 #: /home/kovid/work/calibre/src/calibre/library/database.py:1452 #: /home/kovid/work/calibre/src/calibre/library/database.py:1564 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:473 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:485 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:810 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:843 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:477 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:489 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:817 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:850 msgid "Unknown" msgstr "" @@ -263,11 +263,11 @@ msgid "" "formats are: %s\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/from_html.py:99 +#: /home/kovid/work/calibre/src/calibre/ebooks/epub/from_html.py:98 msgid "Could not find an ebook inside the archive" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/from_html.py:157 +#: /home/kovid/work/calibre/src/calibre/ebooks/epub/from_html.py:156 msgid "" "%prog [options] file.html|opf\n" "\n" @@ -278,7 +278,7 @@ msgid "" "the element of the OPF file. \n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/from_html.py:386 +#: /home/kovid/work/calibre/src/calibre/ebooks/epub/from_html.py:385 #: /home/kovid/work/calibre/src/calibre/ebooks/html.py:1035 msgid "You must specify an input HTML file" msgstr "" @@ -292,7 +292,7 @@ msgid "" "Could not find reasonable point at which to split: %s Sub-tree size: %d KB" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/split.py:109 +#: /home/kovid/work/calibre/src/calibre/ebooks/epub/split.py:136 msgid "" "\t\tToo much markup. Re-splitting without structure preservation. This may " "cause incorrect rendering." @@ -934,11 +934,11 @@ msgstr "" msgid "Cannot read from: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:2000 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1997 msgid "Failed to process opf file" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:2006 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:2003 msgid "" "Usage: %prog [options] mybook.html\n" "\n" @@ -1138,16 +1138,16 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:70 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:36 #: /home/kovid/work/calibre/src/calibre/gui2/library.py:91 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:314 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:885 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:325 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:896 msgid "Title" msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:274 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:37 #: /home/kovid/work/calibre/src/calibre/gui2/library.py:92 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:319 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:886 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:330 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:897 msgid "Author(s)" msgstr "" @@ -1166,25 +1166,25 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:391 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:527 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:308 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:275 -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:54 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:286 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:58 msgid "Comments" msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:280 #: /home/kovid/work/calibre/src/calibre/gui2/library.py:97 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:264 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:825 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:889 -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:56 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:275 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:836 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:900 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:60 #: /home/kovid/work/calibre/src/calibre/gui2/tags.py:42 msgid "Tags" msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:281 #: /home/kovid/work/calibre/src/calibre/gui2/library.py:98 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:280 -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:55 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:291 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:59 #: /home/kovid/work/calibre/src/calibre/gui2/tags.py:42 msgid "Series" msgstr "" @@ -1288,7 +1288,7 @@ msgstr "" msgid "Cover saved to" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:939 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:938 msgid "Set the dc:language field" msgstr "" @@ -1428,9 +1428,9 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:84 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:85 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:86 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:271 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:820 -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:52 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:282 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:831 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:56 msgid "Path" msgstr "" @@ -1438,8 +1438,8 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:88 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:89 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:92 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:270 -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:53 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:281 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:57 #: /home/kovid/work/calibre/src/calibre/gui2/tags.py:42 msgid "Formats" msgstr "" @@ -1546,49 +1546,49 @@ msgid "" "Server" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:161 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:162 msgid "Error log:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:165 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:166 msgid "Access log:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:187 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:339 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:188 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:341 msgid "Failed to start content server" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:227 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:228 msgid "Invalid size" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:227 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:228 msgid "The size %s is invalid. must be of the form widthxheight" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:269 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:273 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:270 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:274 msgid "Invalid database location" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:270 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:271 msgid "
Must be a directory." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:270 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:271 msgid "Invalid database location " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:274 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:275 msgid "Invalid database location.
Cannot write to " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:286 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:287 msgid "Compacting database. This may take a while." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:286 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:287 msgid "Compacting..." msgstr "" @@ -1612,7 +1612,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:389 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:399 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:400 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:374 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:373 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:509 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:282 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:288 @@ -1952,7 +1952,7 @@ msgid " is not a valid picture" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub.py:227 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:908 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:910 msgid "Cannot convert" msgstr "" @@ -1993,22 +1993,22 @@ msgid "Book Cover" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:371 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:510 -msgid "Use cover from &source file" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:372 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:507 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:316 msgid "Change &cover image:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:373 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:372 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:508 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:317 msgid "Browse for an image to use as the cover of this book." msgstr "" +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:374 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:510 +msgid "Use cover from &source file" +msgstr "" + #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:375 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:511 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:279 @@ -2023,14 +2023,14 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:377 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:513 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:124 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:128 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:283 msgid "&Author(s): " msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:378 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:514 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:125 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:129 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:284 msgid "" "Change the author(s) of this book. Multiple authors should be separated by " @@ -2051,14 +2051,14 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:381 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:517 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:132 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:136 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:293 msgid "&Publisher: " msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:382 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:518 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:133 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:137 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:294 msgid "Change the publisher of this book" msgstr "" @@ -2071,7 +2071,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:384 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:520 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:135 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:139 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:296 msgid "" "Tags categorize the book. This is particularly useful while searching. " @@ -2080,7 +2080,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:385 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:521 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:140 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:144 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:299 msgid "&Series:" msgstr "" @@ -2089,8 +2089,8 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:387 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:522 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:523 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:141 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:142 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:145 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:146 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:300 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:301 msgid "List of known series. You can add new series." @@ -2503,91 +2503,95 @@ msgid "" "\n" "

" +"margin-left:0px; margin-right:0px; -qt-block-indent:0; text-" +"indent:0px;\">

" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:122 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:126 msgid "Edit Meta information" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:123 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:127 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:278 msgid "Meta information" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:126 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:130 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:285 msgid "Author S&ort: " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:127 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:131 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:286 msgid "" "Specify how the author(s) of this book should be sorted. For example Charles " "Dickens should be sorted as Dickens, Charles." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:128 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:132 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:289 msgid "&Rating:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:129 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:130 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:133 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:134 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:290 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:291 msgid "Rating of this book. 0-5 stars" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:131 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:135 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:292 msgid " stars" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:134 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:138 msgid "Add Ta&gs: " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:136 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:137 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:140 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:141 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:297 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:298 msgid "Open Tag Editor" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:138 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:142 msgid "&Remove tags:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:139 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:143 msgid "Comma separated list of tags to remove from the books. " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:143 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:147 msgid "Remove &format:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:264 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:148 +msgid "A&utomatically set author sort" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:265 msgid "" "

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

" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:294 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:295 msgid "Could not fetch cover.
" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:294 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:295 msgid "Could not fetch cover" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:300 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:301 msgid "Cannot fetch cover" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:300 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:301 msgid "You must specify the ISBN identifier for this book." msgstr "" @@ -2693,14 +2697,14 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:335 #: /home/kovid/work/calibre/src/calibre/gui2/tags.py:42 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:757 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:760 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1057 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:761 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:765 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1064 msgid "News" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:137 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:221 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:222 msgid "Recipes" msgstr "" @@ -2904,25 +2908,25 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:163 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:172 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:228 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:229 msgid "Invalid input" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:164 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:173 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:229 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:230 msgid "

Could not create recipe. Error:
%s" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:179 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:210 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:234 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:211 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:235 msgid "Replace recipe?" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:180 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:211 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:235 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:212 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:236 msgid "A custom recipe named %s already exists. Do you want to replace it?" msgstr "" @@ -2934,7 +2938,7 @@ msgstr "" msgid "Pick the recipe to customize" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:221 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:222 msgid "Choose a recipe file" msgstr "" @@ -3178,12 +3182,12 @@ msgid "Job has already run" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/library.py:93 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:887 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:898 msgid "Size (MB)" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/library.py:94 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:888 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:899 msgid "Date" msgstr "" @@ -3191,25 +3195,25 @@ msgstr "" msgid "Rating" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:263 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:269 #: /home/kovid/work/calibre/src/calibre/gui2/library.py:274 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:280 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:285 msgid "None" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:280 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:291 msgid "Book %s of %s." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:819 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:830 msgid "Format" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:824 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:835 msgid "Timestamp" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:922 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:933 msgid "Search (For Advanced Search click the button to the left)" msgstr "" @@ -3368,7 +3372,7 @@ msgid "Save to disk in a single directory" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/main.py:192 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1106 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1108 msgid "Save only %s format to disk" msgstr "" @@ -3402,7 +3406,7 @@ msgid "Bad database location" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/main.py:262 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1262 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1264 msgid "Choose a location for your ebook library." msgstr "" @@ -3410,23 +3414,23 @@ msgstr "" msgid "Migrating database" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:416 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:418 msgid "Device: " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:417 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:419 msgid " detected." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:439 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:441 msgid "Connected " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:450 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:452 msgid "Device database corrupted" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:451 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:453 msgid "" "\n" "

The database of books on the reader is corrupted. Try the " @@ -3442,288 +3446,288 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:503 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:599 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:505 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:601 msgid "" "

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

    " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:506 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:602 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:508 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:604 msgid "Duplicates found!" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:539 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:563 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:541 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:565 msgid "Uploading books to device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:547 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:549 msgid "Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:548 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:550 msgid "EPUB Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:549 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:551 msgid "LRF Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:550 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:552 msgid "HTML Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:551 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:553 msgid "LIT Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:552 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:554 msgid "MOBI Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:553 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:555 msgid "Text books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:554 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:556 msgid "PDF Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:555 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:557 msgid "Comics" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:556 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:558 msgid "Archives" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:634 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:636 msgid "No space on device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:635 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:637 msgid "" "

    Cannot upload books to device there is no more free space available " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:665 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:667 msgid "Confirm delete" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:666 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:668 msgid "Are you sure you want to delete these %d books?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:678 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:680 msgid "Deleting books from device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:708 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:730 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:710 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:732 msgid "Cannot edit metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:708 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:730 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:849 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:908 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:710 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:732 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:851 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:910 msgid "No books selected" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:777 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:779 msgid "Sending news to device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:829 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:831 msgid "Sending books to device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:832 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:834 msgid "No suitable formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:833 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:835 msgid "" "Could not upload the following books to the device, as no suitable formats " "were found:

      %s
    " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:849 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:851 msgid "Cannot save to disk" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:853 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:855 msgid "Choose destination directory" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:860 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:862 msgid "" "

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

      " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:864 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:866 msgid "Could not save some ebooks" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:884 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:886 msgid "Fetching news from " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:898 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:900 msgid " fetched." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1012 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1030 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1042 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1014 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1032 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1044 msgid "No book selected" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1012 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1042 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1058 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1014 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1044 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1060 msgid "Cannot view" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1018 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1063 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1020 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1065 msgid "Choose the format to view" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1030 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1032 msgid "Cannot open folder" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1059 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1061 msgid "%s has no available formats." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1097 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1099 msgid "Cannot configure" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1097 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1099 msgid "Cannot configure while there are running jobs." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1116 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1118 msgid "Copying database" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1118 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1120 msgid "Copying library to " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1128 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1130 msgid "Invalid database" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1129 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1131 msgid "" "

      An invalid database already exists at %s, delete it before trying to move " "the existing database.
      Error: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1135 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1137 msgid "Could not move database" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1155 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1157 msgid "No detailed info available" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1156 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1158 msgid "No detailed information is available for books on the device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1199 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1201 msgid "Error talking to device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1200 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1202 msgid "" "There was a temporary error talking to the device. Please unplug and " "reconnect the device and or reboot." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1213 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1228 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1232 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1215 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1230 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1234 msgid "Conversion Error" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1214 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1216 msgid "" "

      Could not convert: %s

      It is a DRMed book. You must " "first remove the DRM using 3rd party tools." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1248 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1250 msgid "Database does not exist" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1249 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1251 msgid "" "The directory in which the database should be: %s no longer exists. Please " "choose a new database location." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1251 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1253 msgid "Choose new location for database" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1304 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1306 msgid "" "is the result of the efforts of many volunteers from all over the world. If " "you find it useful, please consider donating to support its development." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1325 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1327 msgid "There are active jobs. Are you sure you want to quit?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1327 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1329 msgid "" " is communicating with the device!
      \n" " 'Quitting may cause corruption on the device.
      \n" " 'Are you sure you want to quit?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1331 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1333 msgid "WARNING: Active jobs" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1360 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1362 msgid "" "will keep running in the system tray. To close it, choose Quit in the " "context menu of the system tray." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1373 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1375 msgid "" "Latest version: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1378 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1380 msgid "" "%s has been updated to version %s. See the new features. " "Visit the download page?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1378 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1380 msgid "Update available" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1393 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1395 msgid "Use the library located at the specified path." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1395 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1397 msgid "Log debugging information to console" msgstr "" @@ -3842,29 +3846,29 @@ msgstr "" msgid "ERROR: Unhandled exception" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:108 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:115 msgid "Jobs:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:117 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:124 msgid "Click to see list of active jobs." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:146 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:153 msgid "Click to browse books by their covers" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:146 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:153 msgid "Click to turn off Cover Browsing" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:151 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:158 msgid "" "

      Browsing books by their covers is disabled.
      Import of pictureflow " "module failed:
      " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:159 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:166 msgid "Click to browse books by tags" msgstr "" @@ -4142,31 +4146,36 @@ msgstr "" msgid "Invalid regular expression: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:178 -msgid "Library" +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:139 +msgid "" +"Library\n" +"%d\n" +"books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:179 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:140 msgid "" "Reader\n" -"%s available" +"%s\n" +"available" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:180 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:141 msgid "" "Card\n" -"%s available" +"%s\n" +"available" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:184 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:146 msgid "Click to see the list of books available on your computer" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:185 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:147 msgid "Click to see the list of books in the main memory of your reader" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:186 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:148 msgid "Click to see the list of books on the storage card in your reader" msgstr "" @@ -4425,20 +4434,20 @@ msgid "" "For help on an individual command: %%prog command --help\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1137 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1144 msgid "

      Copying books to %s

      " msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1150 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1262 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1157 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1266 msgid "Copying %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1233 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1237 msgid "

      Migrating old database to ebook library in %s

      " msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1279 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1283 msgid "Compacting database" msgstr "" @@ -4446,7 +4455,7 @@ msgstr "" msgid "Password to access your calibre library. Username is " msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server.py:380 +#: /home/kovid/work/calibre/src/calibre/library/server.py:382 msgid "" "[options]\n" "\n" @@ -4521,13 +4530,13 @@ msgstr "" msgid "Failed to authenticate with server: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:63 -#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:84 +#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:76 +#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:97 msgid "Unknown feed" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:102 -#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:124 +#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:115 +#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:137 msgid "Untitled article" msgstr "" @@ -4676,87 +4685,87 @@ msgid "Dont show the progress bar" msgstr "" #: /home/kovid/work/calibre/src/calibre/web/feeds/main.py:118 -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:668 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:674 msgid "Fetching feeds..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:34 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:40 msgid "Unknown News Source" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:549 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:555 msgid "Download finished" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:551 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:557 msgid "Failed to download the following articles:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:553 #: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:559 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:565 msgid " from " msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:557 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:563 msgid "Failed to download parts of the following articles:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:561 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:567 msgid "\tFailed links:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:647 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:653 msgid "Could not fetch article. Run with --debug to see the reason" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:672 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:678 msgid "Got feeds from index page" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:678 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:684 msgid "Trying to download cover..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:731 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:737 msgid "Starting download [%d thread(s)]..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:747 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:753 msgid "Feeds downloaded to %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:757 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:763 msgid "Could not download cover: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:762 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:768 msgid "Downloading cover from %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:802 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:895 msgid "Untitled Article" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:857 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:950 msgid "" "\n" "Downloaded article %s from %s\n" "%s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:863 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:956 msgid "Article downloaded: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:869 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:962 msgid "Failed to download article: %s from %s\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:874 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:967 msgid "Article download failed: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:889 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:982 msgid "Fetching feed" msgstr "" diff --git a/src/calibre/translations/ca.po b/src/calibre/translations/ca.po index 77ef9fcefd..033728d130 100644 --- a/src/calibre/translations/ca.po +++ b/src/calibre/translations/ca.po @@ -10,24 +10,24 @@ msgid "" msgstr "" "Project-Id-Version: ca\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2008-12-06 07:37+0000\n" +"POT-Creation-Date: 2008-12-15 02:49+0000\n" "PO-Revision-Date: 2008-05-24 06:21+0000\n" "Last-Translator: Kovid Goyal \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2008-12-07 21:41+0000\n" +"X-Launchpad-Export-Date: 2008-12-15 18:24+0000\n" "X-Generator: Launchpad (build Unknown)\n" -#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:135 -#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:153 -#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:191 -#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:219 +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:137 +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:155 +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:193 +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:221 msgid "Unable to detect the %s disk drive. Try rebooting." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:407 +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:409 msgid "The reader has no storage card connected." msgstr "" @@ -222,13 +222,13 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:226 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:229 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:274 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:64 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:66 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:99 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:101 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf.py:321 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf.py:436 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:794 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:65 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:67 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:100 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:102 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf.py:334 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf.py:449 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:793 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/pdf.py:12 #: /home/kovid/work/calibre/src/calibre/ebooks/odt/to_oeb.py:46 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf.py:48 @@ -237,12 +237,12 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:365 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:37 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:38 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:317 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:331 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:815 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:581 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:818 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:821 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:328 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:342 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:826 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:583 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:820 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:823 #: /home/kovid/work/calibre/src/calibre/gui2/tools.py:52 #: /home/kovid/work/calibre/src/calibre/gui2/tools.py:112 #: /home/kovid/work/calibre/src/calibre/library/cli.py:245 @@ -251,10 +251,10 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/library/database.py:1423 #: /home/kovid/work/calibre/src/calibre/library/database.py:1452 #: /home/kovid/work/calibre/src/calibre/library/database.py:1564 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:473 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:485 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:810 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:843 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:477 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:489 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:817 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:850 msgid "Unknown" msgstr "Desconegut" @@ -266,11 +266,11 @@ msgid "" "formats are: %s\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/from_html.py:99 +#: /home/kovid/work/calibre/src/calibre/ebooks/epub/from_html.py:98 msgid "Could not find an ebook inside the archive" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/from_html.py:157 +#: /home/kovid/work/calibre/src/calibre/ebooks/epub/from_html.py:156 msgid "" "%prog [options] file.html|opf\n" "\n" @@ -281,7 +281,7 @@ msgid "" "the element of the OPF file. \n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/from_html.py:386 +#: /home/kovid/work/calibre/src/calibre/ebooks/epub/from_html.py:385 #: /home/kovid/work/calibre/src/calibre/ebooks/html.py:1035 msgid "You must specify an input HTML file" msgstr "" @@ -295,7 +295,7 @@ msgid "" "Could not find reasonable point at which to split: %s Sub-tree size: %d KB" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/split.py:109 +#: /home/kovid/work/calibre/src/calibre/ebooks/epub/split.py:136 msgid "" "\t\tToo much markup. Re-splitting without structure preservation. This may " "cause incorrect rendering." @@ -980,11 +980,11 @@ msgstr "" msgid "Cannot read from: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:2000 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1997 msgid "Failed to process opf file" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:2006 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:2003 msgid "" "Usage: %prog [options] mybook.html\n" "\n" @@ -1184,16 +1184,16 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:70 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:36 #: /home/kovid/work/calibre/src/calibre/gui2/library.py:91 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:314 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:885 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:325 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:896 msgid "Title" msgstr "Tí­tol" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:274 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:37 #: /home/kovid/work/calibre/src/calibre/gui2/library.py:92 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:319 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:886 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:330 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:897 msgid "Author(s)" msgstr "Autor(s)" @@ -1212,25 +1212,25 @@ msgstr "Categoria" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:391 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:527 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:308 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:275 -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:54 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:286 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:58 msgid "Comments" msgstr "Comentaris" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:280 #: /home/kovid/work/calibre/src/calibre/gui2/library.py:97 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:264 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:825 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:889 -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:56 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:275 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:836 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:900 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:60 #: /home/kovid/work/calibre/src/calibre/gui2/tags.py:42 msgid "Tags" msgstr "Etiquetes" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:281 #: /home/kovid/work/calibre/src/calibre/gui2/library.py:98 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:280 -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:55 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:291 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:59 #: /home/kovid/work/calibre/src/calibre/gui2/tags.py:42 msgid "Series" msgstr "Sèries" @@ -1334,7 +1334,7 @@ msgstr "" msgid "Cover saved to" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:939 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:938 msgid "Set the dc:language field" msgstr "" @@ -1474,9 +1474,9 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:84 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:85 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:86 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:271 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:820 -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:52 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:282 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:831 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:56 msgid "Path" msgstr "Camí" @@ -1484,8 +1484,8 @@ msgstr "Camí" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:88 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:89 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:92 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:270 -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:53 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:281 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:57 #: /home/kovid/work/calibre/src/calibre/gui2/tags.py:42 msgid "Formats" msgstr "Formats" @@ -1592,49 +1592,49 @@ msgid "" "Server" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:161 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:162 msgid "Error log:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:165 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:166 msgid "Access log:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:187 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:339 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:188 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:341 msgid "Failed to start content server" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:227 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:228 msgid "Invalid size" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:227 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:228 msgid "The size %s is invalid. must be of the form widthxheight" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:269 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:273 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:270 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:274 msgid "Invalid database location" msgstr "Ubicació de la base de dades no vàlida" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:270 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:271 msgid "
      Must be a directory." msgstr "
      Cal que siga un directori." -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:270 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:271 msgid "Invalid database location " msgstr "Ubicació de la base de dades no vàlida " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:274 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:275 msgid "Invalid database location.
      Cannot write to " msgstr "Ubicació de la base de dades no vàlida.
      No es pot escriure " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:286 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:287 msgid "Compacting database. This may take a while." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:286 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:287 msgid "Compacting..." msgstr "" @@ -1658,7 +1658,7 @@ msgstr "Cerca la nova ubicació de la base de dades" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:389 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:399 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:400 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:374 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:373 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:509 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:282 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:288 @@ -1998,7 +1998,7 @@ msgid " is not a valid picture" msgstr " no és una imatge vàlida" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub.py:227 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:908 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:910 msgid "Cannot convert" msgstr "No puc convertir-lo" @@ -2039,22 +2039,22 @@ msgid "Book Cover" msgstr "Coberta" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:371 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:510 -msgid "Use cover from &source file" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:372 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:507 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:316 msgid "Change &cover image:" msgstr "Canvia la imatge de la &coberta:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:373 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:372 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:508 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:317 msgid "Browse for an image to use as the cover of this book." msgstr "Cerca una imatge per a utilitzar com a coberta d'aquest llibre." +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:374 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:510 +msgid "Use cover from &source file" +msgstr "" + #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:375 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:511 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:279 @@ -2069,14 +2069,14 @@ msgstr "Canvia el tí­tol del llibre" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:377 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:513 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:124 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:128 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:283 msgid "&Author(s): " msgstr "&Autor(s): " #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:378 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:514 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:125 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:129 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:284 msgid "" "Change the author(s) of this book. Multiple authors should be separated by " @@ -2098,14 +2098,14 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:381 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:517 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:132 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:136 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:293 msgid "&Publisher: " msgstr "&Editorial: " #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:382 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:518 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:133 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:137 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:294 msgid "Change the publisher of this book" msgstr "Canvia l'editorial del llibre" @@ -2118,7 +2118,7 @@ msgstr "Etique&tes: " #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:384 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:520 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:135 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:139 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:296 msgid "" "Tags categorize the book. This is particularly useful while searching. " @@ -2129,7 +2129,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:385 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:521 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:140 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:144 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:299 msgid "&Series:" msgstr "&Sèries:" @@ -2138,8 +2138,8 @@ msgstr "&Sèries:" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:387 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:522 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:523 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:141 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:142 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:145 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:146 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:300 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:301 msgid "List of known series. You can add new series." @@ -2563,25 +2563,25 @@ msgid "" "\n" "

      " +"margin-left:0px; margin-right:0px; -qt-block-indent:0; text-" +"indent:0px;\">

      " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:122 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:126 msgid "Edit Meta information" msgstr "Editar Meta-informació" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:123 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:127 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:278 msgid "Meta information" msgstr "Meta-informació" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:126 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:130 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:285 msgid "Author S&ort: " msgstr "&Ordena autors: " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:127 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:131 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:286 msgid "" "Specify how the author(s) of this book should be sorted. For example Charles " @@ -2590,66 +2590,70 @@ msgstr "" "Especifiqueu com s'ha d'ordenar l'autor(s) d'aquest llibre. Per " "exemple,ordena Vicent A. Estellés com a Estellés, Vicent A." -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:128 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:132 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:289 msgid "&Rating:" msgstr "&Valoració:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:129 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:130 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:133 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:134 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:290 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:291 msgid "Rating of this book. 0-5 stars" msgstr "Valora aquest llibre: 0-5 estreles" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:131 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:135 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:292 msgid " stars" msgstr " estreles" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:134 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:138 msgid "Add Ta&gs: " msgstr "Afe&geix les etiquetes: " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:136 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:137 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:140 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:141 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:297 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:298 msgid "Open Tag Editor" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:138 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:142 msgid "&Remove tags:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:139 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:143 msgid "Comma separated list of tags to remove from the books. " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:143 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:147 msgid "Remove &format:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:264 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:148 +msgid "A&utomatically set author sort" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:265 msgid "" "

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

      " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:294 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:295 msgid "Could not fetch cover.
      " msgstr "No puc aconseguir la coberta.
      " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:294 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:295 msgid "Could not fetch cover" msgstr "No puc aconseguir la coberta" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:300 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:301 msgid "Cannot fetch cover" msgstr "No puc aconseguir la coberta" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:300 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:301 msgid "You must specify the ISBN identifier for this book." msgstr "Cal especificar un ISBN correcte per al llibre." @@ -2756,14 +2760,14 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:335 #: /home/kovid/work/calibre/src/calibre/gui2/tags.py:42 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:757 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:760 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1057 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:761 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:765 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1064 msgid "News" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:137 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:221 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:222 msgid "Recipes" msgstr "" @@ -2967,25 +2971,25 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:163 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:172 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:228 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:229 msgid "Invalid input" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:164 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:173 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:229 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:230 msgid "

      Could not create recipe. Error:
      %s" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:179 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:210 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:234 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:211 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:235 msgid "Replace recipe?" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:180 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:211 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:235 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:212 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:236 msgid "A custom recipe named %s already exists. Do you want to replace it?" msgstr "" @@ -2997,7 +3001,7 @@ msgstr "" msgid "Pick the recipe to customize" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:221 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:222 msgid "Choose a recipe file" msgstr "" @@ -3241,12 +3245,12 @@ msgid "Job has already run" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/library.py:93 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:887 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:898 msgid "Size (MB)" msgstr "Grandària (MB)" #: /home/kovid/work/calibre/src/calibre/gui2/library.py:94 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:888 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:899 msgid "Date" msgstr "Data" @@ -3254,25 +3258,25 @@ msgstr "Data" msgid "Rating" msgstr "Valoració" -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:263 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:269 #: /home/kovid/work/calibre/src/calibre/gui2/library.py:274 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:280 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:285 msgid "None" msgstr "Cap" -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:280 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:291 msgid "Book %s of %s." msgstr "Llibre %s de %s." -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:819 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:830 msgid "Format" msgstr "Format" -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:824 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:835 msgid "Timestamp" msgstr "Marca de temps" -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:922 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:933 msgid "Search (For Advanced Search click the button to the left)" msgstr "" @@ -3431,7 +3435,7 @@ msgid "Save to disk in a single directory" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/main.py:192 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1106 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1108 msgid "Save only %s format to disk" msgstr "" @@ -3465,7 +3469,7 @@ msgid "Bad database location" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/main.py:262 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1262 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1264 msgid "Choose a location for your ebook library." msgstr "" @@ -3473,23 +3477,23 @@ msgstr "" msgid "Migrating database" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:416 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:418 msgid "Device: " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:417 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:419 msgid " detected." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:439 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:441 msgid "Connected " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:450 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:452 msgid "Device database corrupted" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:451 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:453 msgid "" "\n" "

      The database of books on the reader is corrupted. Try the " @@ -3505,208 +3509,208 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:503 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:599 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:505 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:601 msgid "" "

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

        " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:506 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:602 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:508 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:604 msgid "Duplicates found!" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:539 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:563 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:541 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:565 msgid "Uploading books to device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:547 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:549 msgid "Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:548 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:550 msgid "EPUB Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:549 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:551 msgid "LRF Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:550 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:552 msgid "HTML Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:551 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:553 msgid "LIT Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:552 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:554 msgid "MOBI Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:553 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:555 msgid "Text books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:554 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:556 msgid "PDF Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:555 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:557 msgid "Comics" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:556 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:558 msgid "Archives" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:634 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:636 msgid "No space on device" msgstr "Sense espai al dispositiu" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:635 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:637 msgid "" "

        Cannot upload books to device there is no more free space available " msgstr "

        No puc desar llibres al dispositiu perquè no hi ha espai restant " -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:665 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:667 msgid "Confirm delete" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:666 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:668 msgid "Are you sure you want to delete these %d books?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:678 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:680 msgid "Deleting books from device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:708 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:730 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:710 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:732 msgid "Cannot edit metadata" msgstr "No puc editar les meta-dades" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:708 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:730 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:849 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:908 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:710 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:732 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:851 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:910 msgid "No books selected" msgstr "Cap llibre seleccionat" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:777 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:779 msgid "Sending news to device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:829 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:831 msgid "Sending books to device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:832 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:834 msgid "No suitable formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:833 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:835 msgid "" "Could not upload the following books to the device, as no suitable formats " "were found:

          %s
        " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:849 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:851 msgid "Cannot save to disk" msgstr "No puc desar al disc" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:853 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:855 msgid "Choose destination directory" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:860 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:862 msgid "" "

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

          " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:864 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:866 msgid "Could not save some ebooks" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:884 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:886 msgid "Fetching news from " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:898 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:900 msgid " fetched." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1012 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1030 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1042 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1014 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1032 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1044 msgid "No book selected" msgstr "Cap llibre seleccionat" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1012 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1042 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1058 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1014 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1044 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1060 msgid "Cannot view" msgstr "No puc mostrar-lo" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1018 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1063 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1020 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1065 msgid "Choose the format to view" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1030 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1032 msgid "Cannot open folder" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1059 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1061 msgid "%s has no available formats." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1097 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1099 msgid "Cannot configure" msgstr "No puc configurar-lo" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1097 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1099 msgid "Cannot configure while there are running jobs." msgstr "No puc configurar-lo amb treballs processant-se" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1116 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1118 msgid "Copying database" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1118 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1120 msgid "Copying library to " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1128 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1130 msgid "Invalid database" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1129 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1131 msgid "" "

          An invalid database already exists at %s, delete it before trying to move " "the existing database.
          Error: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1135 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1137 msgid "Could not move database" msgstr "No puc moure la base de dades" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1155 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1157 msgid "No detailed info available" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1156 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1158 msgid "No detailed information is available for books on the device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1199 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1201 msgid "Error talking to device" msgstr "Error comunicant amb el dispositiu" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1200 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1202 msgid "" "There was a temporary error talking to the device. Please unplug and " "reconnect the device and or reboot." @@ -3714,81 +3718,81 @@ msgstr "" "Hi ha hagut un error de comunicació amb el dispositiu. Lleve, torne a " "connectar el dispositiu i torne a iniciar el programa" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1213 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1228 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1232 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1215 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1230 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1234 msgid "Conversion Error" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1214 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1216 msgid "" "

          Could not convert: %s

          It is a DRMed book. You must " "first remove the DRM using 3rd party tools." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1248 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1250 msgid "Database does not exist" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1249 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1251 msgid "" "The directory in which the database should be: %s no longer exists. Please " "choose a new database location." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1251 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1253 msgid "Choose new location for database" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1304 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1306 msgid "" "is the result of the efforts of many volunteers from all over the world. If " "you find it useful, please consider donating to support its development." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1325 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1327 msgid "There are active jobs. Are you sure you want to quit?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1327 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1329 msgid "" " is communicating with the device!
          \n" " 'Quitting may cause corruption on the device.
          \n" " 'Are you sure you want to quit?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1331 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1333 msgid "WARNING: Active jobs" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1360 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1362 msgid "" "will keep running in the system tray. To close it, choose Quit in the " "context menu of the system tray." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1373 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1375 msgid "" "Latest version: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1378 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1380 msgid "" "%s has been updated to version %s. See the new features. " "Visit the download page?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1378 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1380 msgid "Update available" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1393 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1395 msgid "Use the library located at the specified path." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1395 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1397 msgid "Log debugging information to console" msgstr "" @@ -3911,29 +3915,29 @@ msgstr "" msgid "ERROR: Unhandled exception" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:108 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:115 msgid "Jobs:" msgstr "Treballs:" -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:117 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:124 msgid "Click to see list of active jobs." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:146 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:153 msgid "Click to browse books by their covers" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:146 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:153 msgid "Click to turn off Cover Browsing" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:151 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:158 msgid "" "

          Browsing books by their covers is disabled.
          Import of pictureflow " "module failed:
          " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:159 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:166 msgid "Click to browse books by tags" msgstr "" @@ -4211,35 +4215,36 @@ msgstr "" msgid "Invalid regular expression: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:178 -msgid "Library" -msgstr "Biblioteca" +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:139 +msgid "" +"Library\n" +"%d\n" +"books" +msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:179 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:140 msgid "" "Reader\n" -"%s available" +"%s\n" +"available" msgstr "" -"El Sony Reader\n" -"%s està disponible" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:180 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:141 msgid "" "Card\n" -"%s available" +"%s\n" +"available" msgstr "" -"La targeta\n" -"%s està disponible" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:184 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:146 msgid "Click to see the list of books available on your computer" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:185 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:147 msgid "Click to see the list of books in the main memory of your reader" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:186 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:148 msgid "Click to see the list of books on the storage card in your reader" msgstr "" @@ -4498,20 +4503,20 @@ msgid "" "For help on an individual command: %%prog command --help\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1137 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1144 msgid "

          Copying books to %s

          " msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1150 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1262 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1157 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1266 msgid "Copying %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1233 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1237 msgid "

          Migrating old database to ebook library in %s

          " msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1279 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1283 msgid "Compacting database" msgstr "" @@ -4519,7 +4524,7 @@ msgstr "" msgid "Password to access your calibre library. Username is " msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server.py:380 +#: /home/kovid/work/calibre/src/calibre/library/server.py:382 msgid "" "[options]\n" "\n" @@ -4594,13 +4599,13 @@ msgstr "" msgid "Failed to authenticate with server: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:63 -#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:84 +#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:76 +#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:97 msgid "Unknown feed" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:102 -#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:124 +#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:115 +#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:137 msgid "Untitled article" msgstr "" @@ -4749,87 +4754,87 @@ msgid "Dont show the progress bar" msgstr "" #: /home/kovid/work/calibre/src/calibre/web/feeds/main.py:118 -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:668 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:674 msgid "Fetching feeds..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:34 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:40 msgid "Unknown News Source" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:549 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:555 msgid "Download finished" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:551 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:557 msgid "Failed to download the following articles:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:553 #: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:559 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:565 msgid " from " msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:557 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:563 msgid "Failed to download parts of the following articles:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:561 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:567 msgid "\tFailed links:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:647 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:653 msgid "Could not fetch article. Run with --debug to see the reason" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:672 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:678 msgid "Got feeds from index page" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:678 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:684 msgid "Trying to download cover..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:731 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:737 msgid "Starting download [%d thread(s)]..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:747 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:753 msgid "Feeds downloaded to %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:757 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:763 msgid "Could not download cover: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:762 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:768 msgid "Downloading cover from %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:802 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:895 msgid "Untitled Article" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:857 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:950 msgid "" "\n" "Downloaded article %s from %s\n" "%s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:863 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:956 msgid "Article downloaded: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:869 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:962 msgid "Failed to download article: %s from %s\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:874 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:967 msgid "Article download failed: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:889 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:982 msgid "Fetching feed" msgstr "" @@ -4912,6 +4917,23 @@ msgstr "" #~ msgid "Changes will only take affect after a restart." #~ msgstr "Els canvis s'ignoren fins que el re-inicieu." +#~ msgid "Library" +#~ msgstr "Biblioteca" + +#~ msgid "" +#~ "Reader\n" +#~ "%s available" +#~ msgstr "" +#~ "El Sony Reader\n" +#~ "%s està disponible" + +#~ msgid "" +#~ "Card\n" +#~ "%s available" +#~ msgstr "" +#~ "La targeta\n" +#~ "%s està disponible" + #~ msgid "%s is not available in LRF format. Please convert it first." #~ msgstr "%s no està disponible en LRF. Ha de ser convertir primer." diff --git a/src/calibre/translations/cs.po b/src/calibre/translations/cs.po index f2f257ea36..1da250437d 100644 --- a/src/calibre/translations/cs.po +++ b/src/calibre/translations/cs.po @@ -7,24 +7,24 @@ msgid "" msgstr "" "Project-Id-Version: calibre\n" "Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2008-12-06 07:37+0000\n" +"POT-Creation-Date: 2008-12-15 02:49+0000\n" "PO-Revision-Date: 2008-10-23 12:18+0000\n" "Last-Translator: raduz \n" "Language-Team: Czech \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2008-12-07 21:42+0000\n" +"X-Launchpad-Export-Date: 2008-12-15 18:24+0000\n" "X-Generator: Launchpad (build Unknown)\n" -#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:135 -#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:153 -#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:191 -#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:219 +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:137 +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:155 +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:193 +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:221 msgid "Unable to detect the %s disk drive. Try rebooting." msgstr "Disk %s nebyl nalezen. Zkuste restart." -#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:407 +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:409 msgid "The reader has no storage card connected." msgstr "Do čtecího zařízení není vložena žádná paměťová karta." @@ -263,13 +263,13 @@ msgstr "Extrahovat obsah vytvořeného EPUB souboru do určeného adresáře." #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:226 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:229 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:274 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:64 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:66 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:99 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:101 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf.py:321 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf.py:436 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:794 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:65 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:67 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:100 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:102 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf.py:334 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf.py:449 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:793 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/pdf.py:12 #: /home/kovid/work/calibre/src/calibre/ebooks/odt/to_oeb.py:46 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf.py:48 @@ -278,12 +278,12 @@ msgstr "Extrahovat obsah vytvořeného EPUB souboru do určeného adresáře." #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:365 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:37 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:38 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:317 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:331 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:815 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:581 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:818 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:821 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:328 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:342 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:826 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:583 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:820 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:823 #: /home/kovid/work/calibre/src/calibre/gui2/tools.py:52 #: /home/kovid/work/calibre/src/calibre/gui2/tools.py:112 #: /home/kovid/work/calibre/src/calibre/library/cli.py:245 @@ -292,10 +292,10 @@ msgstr "Extrahovat obsah vytvořeného EPUB souboru do určeného adresáře." #: /home/kovid/work/calibre/src/calibre/library/database.py:1423 #: /home/kovid/work/calibre/src/calibre/library/database.py:1452 #: /home/kovid/work/calibre/src/calibre/library/database.py:1564 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:473 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:485 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:810 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:843 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:477 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:489 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:817 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:850 msgid "Unknown" msgstr "Neznámý" @@ -311,11 +311,11 @@ msgstr "" "Převede kterýkoliv z velkého množství ebook formátů do epub souboru. " "Podporované formáty jsou: %s\n" -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/from_html.py:99 +#: /home/kovid/work/calibre/src/calibre/ebooks/epub/from_html.py:98 msgid "Could not find an ebook inside the archive" msgstr "V archivu nebyl nalezen žádný ebook." -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/from_html.py:157 +#: /home/kovid/work/calibre/src/calibre/ebooks/epub/from_html.py:156 msgid "" "%prog [options] file.html|opf\n" "\n" @@ -326,7 +326,7 @@ msgid "" "the element of the OPF file. \n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/from_html.py:386 +#: /home/kovid/work/calibre/src/calibre/ebooks/epub/from_html.py:385 #: /home/kovid/work/calibre/src/calibre/ebooks/html.py:1035 msgid "You must specify an input HTML file" msgstr "Musíte specifikovat vstupní HTML soubor." @@ -341,7 +341,7 @@ msgid "" msgstr "" "Nepodařilo se najit vhodný bod pro rozdělení: %s Velikost podstromu:%d KB" -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/split.py:109 +#: /home/kovid/work/calibre/src/calibre/ebooks/epub/split.py:136 msgid "" "\t\tToo much markup. Re-splitting without structure preservation. This may " "cause incorrect rendering." @@ -1015,11 +1015,11 @@ msgstr "" msgid "Cannot read from: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:2000 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1997 msgid "Failed to process opf file" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:2006 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:2003 msgid "" "Usage: %prog [options] mybook.html\n" "\n" @@ -1219,16 +1219,16 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:70 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:36 #: /home/kovid/work/calibre/src/calibre/gui2/library.py:91 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:314 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:885 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:325 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:896 msgid "Title" msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:274 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:37 #: /home/kovid/work/calibre/src/calibre/gui2/library.py:92 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:319 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:886 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:330 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:897 msgid "Author(s)" msgstr "" @@ -1247,25 +1247,25 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:391 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:527 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:308 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:275 -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:54 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:286 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:58 msgid "Comments" msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:280 #: /home/kovid/work/calibre/src/calibre/gui2/library.py:97 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:264 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:825 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:889 -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:56 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:275 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:836 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:900 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:60 #: /home/kovid/work/calibre/src/calibre/gui2/tags.py:42 msgid "Tags" msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:281 #: /home/kovid/work/calibre/src/calibre/gui2/library.py:98 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:280 -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:55 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:291 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:59 #: /home/kovid/work/calibre/src/calibre/gui2/tags.py:42 msgid "Series" msgstr "" @@ -1369,7 +1369,7 @@ msgstr "" msgid "Cover saved to" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:939 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:938 msgid "Set the dc:language field" msgstr "" @@ -1509,9 +1509,9 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:84 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:85 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:86 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:271 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:820 -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:52 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:282 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:831 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:56 msgid "Path" msgstr "" @@ -1519,8 +1519,8 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:88 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:89 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:92 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:270 -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:53 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:281 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:57 #: /home/kovid/work/calibre/src/calibre/gui2/tags.py:42 msgid "Formats" msgstr "" @@ -1627,49 +1627,49 @@ msgid "" "Server" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:161 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:162 msgid "Error log:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:165 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:166 msgid "Access log:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:187 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:339 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:188 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:341 msgid "Failed to start content server" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:227 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:228 msgid "Invalid size" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:227 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:228 msgid "The size %s is invalid. must be of the form widthxheight" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:269 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:273 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:270 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:274 msgid "Invalid database location" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:270 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:271 msgid "
          Must be a directory." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:270 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:271 msgid "Invalid database location " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:274 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:275 msgid "Invalid database location.
          Cannot write to " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:286 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:287 msgid "Compacting database. This may take a while." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:286 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:287 msgid "Compacting..." msgstr "" @@ -1693,7 +1693,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:389 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:399 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:400 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:374 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:373 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:509 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:282 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:288 @@ -2033,7 +2033,7 @@ msgid " is not a valid picture" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub.py:227 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:908 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:910 msgid "Cannot convert" msgstr "" @@ -2074,22 +2074,22 @@ msgid "Book Cover" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:371 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:510 -msgid "Use cover from &source file" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:372 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:507 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:316 msgid "Change &cover image:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:373 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:372 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:508 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:317 msgid "Browse for an image to use as the cover of this book." msgstr "" +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:374 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:510 +msgid "Use cover from &source file" +msgstr "" + #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:375 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:511 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:279 @@ -2104,14 +2104,14 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:377 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:513 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:124 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:128 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:283 msgid "&Author(s): " msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:378 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:514 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:125 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:129 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:284 msgid "" "Change the author(s) of this book. Multiple authors should be separated by " @@ -2132,14 +2132,14 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:381 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:517 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:132 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:136 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:293 msgid "&Publisher: " msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:382 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:518 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:133 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:137 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:294 msgid "Change the publisher of this book" msgstr "" @@ -2152,7 +2152,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:384 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:520 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:135 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:139 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:296 msgid "" "Tags categorize the book. This is particularly useful while searching. " @@ -2161,7 +2161,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:385 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:521 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:140 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:144 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:299 msgid "&Series:" msgstr "" @@ -2170,8 +2170,8 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:387 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:522 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:523 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:141 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:142 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:145 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:146 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:300 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:301 msgid "List of known series. You can add new series." @@ -2584,91 +2584,95 @@ msgid "" "\n" "

          " +"margin-left:0px; margin-right:0px; -qt-block-indent:0; text-" +"indent:0px;\">

          " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:122 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:126 msgid "Edit Meta information" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:123 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:127 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:278 msgid "Meta information" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:126 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:130 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:285 msgid "Author S&ort: " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:127 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:131 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:286 msgid "" "Specify how the author(s) of this book should be sorted. For example Charles " "Dickens should be sorted as Dickens, Charles." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:128 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:132 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:289 msgid "&Rating:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:129 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:130 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:133 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:134 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:290 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:291 msgid "Rating of this book. 0-5 stars" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:131 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:135 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:292 msgid " stars" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:134 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:138 msgid "Add Ta&gs: " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:136 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:137 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:140 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:141 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:297 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:298 msgid "Open Tag Editor" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:138 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:142 msgid "&Remove tags:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:139 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:143 msgid "Comma separated list of tags to remove from the books. " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:143 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:147 msgid "Remove &format:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:264 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:148 +msgid "A&utomatically set author sort" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:265 msgid "" "

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

          " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:294 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:295 msgid "Could not fetch cover.
          " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:294 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:295 msgid "Could not fetch cover" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:300 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:301 msgid "Cannot fetch cover" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:300 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:301 msgid "You must specify the ISBN identifier for this book." msgstr "" @@ -2774,14 +2778,14 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:335 #: /home/kovid/work/calibre/src/calibre/gui2/tags.py:42 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:757 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:760 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1057 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:761 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:765 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1064 msgid "News" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:137 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:221 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:222 msgid "Recipes" msgstr "" @@ -2985,25 +2989,25 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:163 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:172 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:228 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:229 msgid "Invalid input" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:164 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:173 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:229 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:230 msgid "

          Could not create recipe. Error:
          %s" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:179 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:210 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:234 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:211 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:235 msgid "Replace recipe?" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:180 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:211 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:235 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:212 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:236 msgid "A custom recipe named %s already exists. Do you want to replace it?" msgstr "" @@ -3015,7 +3019,7 @@ msgstr "" msgid "Pick the recipe to customize" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:221 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:222 msgid "Choose a recipe file" msgstr "" @@ -3259,12 +3263,12 @@ msgid "Job has already run" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/library.py:93 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:887 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:898 msgid "Size (MB)" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/library.py:94 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:888 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:899 msgid "Date" msgstr "" @@ -3272,25 +3276,25 @@ msgstr "" msgid "Rating" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:263 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:269 #: /home/kovid/work/calibre/src/calibre/gui2/library.py:274 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:280 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:285 msgid "None" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:280 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:291 msgid "Book %s of %s." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:819 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:830 msgid "Format" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:824 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:835 msgid "Timestamp" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:922 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:933 msgid "Search (For Advanced Search click the button to the left)" msgstr "" @@ -3449,7 +3453,7 @@ msgid "Save to disk in a single directory" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/main.py:192 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1106 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1108 msgid "Save only %s format to disk" msgstr "" @@ -3483,7 +3487,7 @@ msgid "Bad database location" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/main.py:262 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1262 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1264 msgid "Choose a location for your ebook library." msgstr "" @@ -3491,23 +3495,23 @@ msgstr "" msgid "Migrating database" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:416 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:418 msgid "Device: " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:417 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:419 msgid " detected." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:439 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:441 msgid "Connected " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:450 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:452 msgid "Device database corrupted" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:451 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:453 msgid "" "\n" "

          The database of books on the reader is corrupted. Try the " @@ -3523,288 +3527,288 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:503 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:599 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:505 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:601 msgid "" "

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

            " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:506 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:602 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:508 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:604 msgid "Duplicates found!" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:539 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:563 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:541 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:565 msgid "Uploading books to device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:547 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:549 msgid "Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:548 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:550 msgid "EPUB Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:549 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:551 msgid "LRF Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:550 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:552 msgid "HTML Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:551 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:553 msgid "LIT Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:552 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:554 msgid "MOBI Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:553 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:555 msgid "Text books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:554 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:556 msgid "PDF Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:555 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:557 msgid "Comics" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:556 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:558 msgid "Archives" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:634 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:636 msgid "No space on device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:635 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:637 msgid "" "

            Cannot upload books to device there is no more free space available " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:665 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:667 msgid "Confirm delete" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:666 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:668 msgid "Are you sure you want to delete these %d books?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:678 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:680 msgid "Deleting books from device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:708 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:730 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:710 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:732 msgid "Cannot edit metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:708 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:730 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:849 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:908 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:710 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:732 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:851 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:910 msgid "No books selected" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:777 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:779 msgid "Sending news to device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:829 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:831 msgid "Sending books to device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:832 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:834 msgid "No suitable formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:833 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:835 msgid "" "Could not upload the following books to the device, as no suitable formats " "were found:

              %s
            " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:849 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:851 msgid "Cannot save to disk" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:853 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:855 msgid "Choose destination directory" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:860 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:862 msgid "" "

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

              " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:864 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:866 msgid "Could not save some ebooks" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:884 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:886 msgid "Fetching news from " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:898 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:900 msgid " fetched." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1012 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1030 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1042 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1014 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1032 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1044 msgid "No book selected" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1012 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1042 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1058 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1014 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1044 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1060 msgid "Cannot view" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1018 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1063 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1020 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1065 msgid "Choose the format to view" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1030 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1032 msgid "Cannot open folder" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1059 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1061 msgid "%s has no available formats." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1097 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1099 msgid "Cannot configure" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1097 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1099 msgid "Cannot configure while there are running jobs." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1116 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1118 msgid "Copying database" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1118 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1120 msgid "Copying library to " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1128 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1130 msgid "Invalid database" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1129 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1131 msgid "" "

              An invalid database already exists at %s, delete it before trying to move " "the existing database.
              Error: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1135 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1137 msgid "Could not move database" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1155 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1157 msgid "No detailed info available" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1156 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1158 msgid "No detailed information is available for books on the device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1199 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1201 msgid "Error talking to device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1200 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1202 msgid "" "There was a temporary error talking to the device. Please unplug and " "reconnect the device and or reboot." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1213 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1228 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1232 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1215 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1230 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1234 msgid "Conversion Error" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1214 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1216 msgid "" "

              Could not convert: %s

              It is a DRMed book. You must " "first remove the DRM using 3rd party tools." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1248 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1250 msgid "Database does not exist" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1249 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1251 msgid "" "The directory in which the database should be: %s no longer exists. Please " "choose a new database location." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1251 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1253 msgid "Choose new location for database" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1304 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1306 msgid "" "is the result of the efforts of many volunteers from all over the world. If " "you find it useful, please consider donating to support its development." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1325 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1327 msgid "There are active jobs. Are you sure you want to quit?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1327 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1329 msgid "" " is communicating with the device!
              \n" " 'Quitting may cause corruption on the device.
              \n" " 'Are you sure you want to quit?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1331 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1333 msgid "WARNING: Active jobs" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1360 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1362 msgid "" "will keep running in the system tray. To close it, choose Quit in the " "context menu of the system tray." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1373 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1375 msgid "" "Latest version: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1378 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1380 msgid "" "%s has been updated to version %s. See the new features. " "Visit the download page?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1378 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1380 msgid "Update available" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1393 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1395 msgid "Use the library located at the specified path." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1395 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1397 msgid "Log debugging information to console" msgstr "" @@ -3923,29 +3927,29 @@ msgstr "" msgid "ERROR: Unhandled exception" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:108 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:115 msgid "Jobs:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:117 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:124 msgid "Click to see list of active jobs." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:146 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:153 msgid "Click to browse books by their covers" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:146 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:153 msgid "Click to turn off Cover Browsing" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:151 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:158 msgid "" "

              Browsing books by their covers is disabled.
              Import of pictureflow " "module failed:
              " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:159 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:166 msgid "Click to browse books by tags" msgstr "" @@ -4223,31 +4227,36 @@ msgstr "" msgid "Invalid regular expression: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:178 -msgid "Library" +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:139 +msgid "" +"Library\n" +"%d\n" +"books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:179 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:140 msgid "" "Reader\n" -"%s available" +"%s\n" +"available" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:180 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:141 msgid "" "Card\n" -"%s available" +"%s\n" +"available" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:184 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:146 msgid "Click to see the list of books available on your computer" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:185 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:147 msgid "Click to see the list of books in the main memory of your reader" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:186 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:148 msgid "Click to see the list of books on the storage card in your reader" msgstr "" @@ -4506,20 +4515,20 @@ msgid "" "For help on an individual command: %%prog command --help\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1137 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1144 msgid "

              Copying books to %s

              " msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1150 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1262 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1157 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1266 msgid "Copying %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1233 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1237 msgid "

              Migrating old database to ebook library in %s

              " msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1279 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1283 msgid "Compacting database" msgstr "" @@ -4527,7 +4536,7 @@ msgstr "" msgid "Password to access your calibre library. Username is " msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server.py:380 +#: /home/kovid/work/calibre/src/calibre/library/server.py:382 msgid "" "[options]\n" "\n" @@ -4602,13 +4611,13 @@ msgstr "" msgid "Failed to authenticate with server: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:63 -#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:84 +#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:76 +#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:97 msgid "Unknown feed" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:102 -#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:124 +#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:115 +#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:137 msgid "Untitled article" msgstr "" @@ -4757,87 +4766,87 @@ msgid "Dont show the progress bar" msgstr "" #: /home/kovid/work/calibre/src/calibre/web/feeds/main.py:118 -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:668 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:674 msgid "Fetching feeds..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:34 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:40 msgid "Unknown News Source" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:549 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:555 msgid "Download finished" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:551 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:557 msgid "Failed to download the following articles:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:553 #: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:559 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:565 msgid " from " msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:557 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:563 msgid "Failed to download parts of the following articles:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:561 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:567 msgid "\tFailed links:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:647 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:653 msgid "Could not fetch article. Run with --debug to see the reason" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:672 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:678 msgid "Got feeds from index page" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:678 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:684 msgid "Trying to download cover..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:731 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:737 msgid "Starting download [%d thread(s)]..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:747 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:753 msgid "Feeds downloaded to %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:757 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:763 msgid "Could not download cover: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:762 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:768 msgid "Downloading cover from %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:802 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:895 msgid "Untitled Article" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:857 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:950 msgid "" "\n" "Downloaded article %s from %s\n" "%s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:863 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:956 msgid "Article downloaded: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:869 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:962 msgid "Failed to download article: %s from %s\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:874 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:967 msgid "Article download failed: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:889 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:982 msgid "Fetching feed" msgstr "" diff --git a/src/calibre/translations/de.po b/src/calibre/translations/de.po index 394aa88271..f305d8c19e 100644 --- a/src/calibre/translations/de.po +++ b/src/calibre/translations/de.po @@ -7,25 +7,25 @@ msgid "" msgstr "" "Project-Id-Version: de\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2008-12-06 07:37+0000\n" -"PO-Revision-Date: 2008-12-06 14:13+0000\n" +"POT-Creation-Date: 2008-12-15 02:49+0000\n" +"PO-Revision-Date: 2008-12-11 21:51+0000\n" "Last-Translator: S. Dorscht \n" "Language-Team: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2008-12-07 21:42+0000\n" +"X-Launchpad-Export-Date: 2008-12-15 18:24+0000\n" "X-Generator: Launchpad (build Unknown)\n" "Generated-By: pygettext.py 1.5\n" -#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:135 -#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:153 -#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:191 -#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:219 +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:137 +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:155 +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:193 +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:221 msgid "Unable to detect the %s disk drive. Try rebooting." msgstr "Konnte das Laufwerk %s nicht finden. Versuchen Sie einen Neustart." -#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:407 +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:409 msgid "The reader has no storage card connected." msgstr "Im Reader ist keine Speicherkarte eingesteckt." @@ -284,13 +284,13 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:226 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:229 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:274 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:64 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:66 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:99 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:101 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf.py:321 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf.py:436 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:794 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:65 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:67 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:100 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:102 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf.py:334 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf.py:449 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:793 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/pdf.py:12 #: /home/kovid/work/calibre/src/calibre/ebooks/odt/to_oeb.py:46 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf.py:48 @@ -299,12 +299,12 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:365 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:37 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:38 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:317 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:331 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:815 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:581 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:818 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:821 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:328 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:342 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:826 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:583 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:820 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:823 #: /home/kovid/work/calibre/src/calibre/gui2/tools.py:52 #: /home/kovid/work/calibre/src/calibre/gui2/tools.py:112 #: /home/kovid/work/calibre/src/calibre/library/cli.py:245 @@ -313,10 +313,10 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/library/database.py:1423 #: /home/kovid/work/calibre/src/calibre/library/database.py:1452 #: /home/kovid/work/calibre/src/calibre/library/database.py:1564 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:473 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:485 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:810 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:843 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:477 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:489 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:817 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:850 msgid "Unknown" msgstr "Unbekannt" @@ -332,11 +332,11 @@ msgstr "" "Konvertiert eine große Anzahl von eBook Formaten in eine EPUB Datei. " "Unterstützte Formate: %s\n" -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/from_html.py:99 +#: /home/kovid/work/calibre/src/calibre/ebooks/epub/from_html.py:98 msgid "Could not find an ebook inside the archive" msgstr "Konnte kein eBook im Archiv finden" -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/from_html.py:157 +#: /home/kovid/work/calibre/src/calibre/ebooks/epub/from_html.py:156 msgid "" "%prog [options] file.html|opf\n" "\n" @@ -354,7 +354,7 @@ msgstr "" "Verknüpfungen aus dem\n" " Element der OPF Datei verwendet. \n" -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/from_html.py:386 +#: /home/kovid/work/calibre/src/calibre/ebooks/epub/from_html.py:385 #: /home/kovid/work/calibre/src/calibre/ebooks/html.py:1035 msgid "You must specify an input HTML file" msgstr "Geben Sie eine Eingabedatei im HTML Format an." @@ -370,7 +370,7 @@ msgstr "" "Konnte keinen vernünftige Stelle zur Trennung finden: %s Unterbaumgröße: %d " "KB" -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/split.py:109 +#: /home/kovid/work/calibre/src/calibre/ebooks/epub/split.py:136 msgid "" "\t\tToo much markup. Re-splitting without structure preservation. This may " "cause incorrect rendering." @@ -1177,11 +1177,11 @@ msgstr "Konnte Umschlagbild nicht lesen: %s" msgid "Cannot read from: %s" msgstr "Lesen nicht möglich von: %s" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:2000 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1997 msgid "Failed to process opf file" msgstr "Verarbeitung der OPF Datei schlug fehl" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:2006 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:2003 msgid "" "Usage: %prog [options] mybook.html\n" "\n" @@ -1431,16 +1431,16 @@ msgstr "Gebe Kommentar ein" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:70 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:36 #: /home/kovid/work/calibre/src/calibre/gui2/library.py:91 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:314 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:885 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:325 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:896 msgid "Title" msgstr "Titel" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:274 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:37 #: /home/kovid/work/calibre/src/calibre/gui2/library.py:92 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:319 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:886 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:330 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:897 msgid "Author(s)" msgstr "Autor(en)" @@ -1459,25 +1459,25 @@ msgstr "Kategorie" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:391 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:527 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:308 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:275 -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:54 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:286 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:58 msgid "Comments" msgstr "Bemerkung" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:280 #: /home/kovid/work/calibre/src/calibre/gui2/library.py:97 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:264 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:825 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:889 -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:56 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:275 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:836 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:900 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:60 #: /home/kovid/work/calibre/src/calibre/gui2/tags.py:42 msgid "Tags" msgstr "Etiketten" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:281 #: /home/kovid/work/calibre/src/calibre/gui2/library.py:98 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:280 -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:55 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:291 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:59 #: /home/kovid/work/calibre/src/calibre/gui2/tags.py:42 msgid "Series" msgstr "Serie" @@ -1601,7 +1601,7 @@ msgstr "Benutzung: %s dateiname.lit" msgid "Cover saved to" msgstr "Umschlagbild gespeichert unter" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:939 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:938 msgid "Set the dc:language field" msgstr "Geben Sie das Feld dc:language an" @@ -1747,9 +1747,9 @@ msgstr "Buch auf dem Gerät ansehen" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:84 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:85 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:86 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:271 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:820 -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:52 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:282 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:831 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:56 msgid "Path" msgstr "Pfad" @@ -1757,8 +1757,8 @@ msgstr "Pfad" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:88 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:89 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:92 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:270 -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:53 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:281 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:57 #: /home/kovid/work/calibre/src/calibre/gui2/tags.py:42 msgid "Formats" msgstr "Formate" @@ -1868,50 +1868,50 @@ msgstr "" "Content\n" "Server" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:161 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:162 msgid "Error log:" msgstr "Fehler Log:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:165 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:166 msgid "Access log:" msgstr "Zugriffs-Protokolldatei:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:187 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:339 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:188 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:341 msgid "Failed to start content server" msgstr "Content Server konnte nicht gestartet werden" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:227 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:228 msgid "Invalid size" msgstr "Ungültige Größe" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:227 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:228 msgid "The size %s is invalid. must be of the form widthxheight" msgstr "" "Die Größe %s ist ungültig. Sie muss der Form BreitexHöhe entsprechen." -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:269 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:273 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:270 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:274 msgid "Invalid database location" msgstr "Ortsangabe der Datenbank ungültig" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:270 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:271 msgid "
              Must be a directory." msgstr "
              Muss ein Verzeichnis sein." -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:270 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:271 msgid "Invalid database location " msgstr "Ortsangabe der Datenbank ungültig " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:274 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:275 msgid "Invalid database location.
              Cannot write to " msgstr "Ortsangabe der Datenbank ungültig.
              Speichern nicht möglich " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:286 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:287 msgid "Compacting database. This may take a while." msgstr "Komprimiere Datenbank. Das kann etwas dauern..." -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:286 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:287 msgid "Compacting..." msgstr "Komprimiere Datenbank..." @@ -1938,7 +1938,7 @@ msgstr "Zu einem neuen Ort der Datenbank wechseln" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:389 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:399 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:400 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:374 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:373 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:509 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:282 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:288 @@ -2306,7 +2306,7 @@ msgid " is not a valid picture" msgstr " ist kein gültiges Bild" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub.py:227 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:908 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:910 msgid "Cannot convert" msgstr "Konvertierung nicht möglich" @@ -2349,22 +2349,22 @@ msgid "Book Cover" msgstr "Umschlagbild" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:371 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:510 -msgid "Use cover from &source file" -msgstr "Um&schlagbild der Quelldatei verwenden" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:372 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:507 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:316 msgid "Change &cover image:" msgstr "&Umschlagbild ändern:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:373 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:372 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:508 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:317 msgid "Browse for an image to use as the cover of this book." msgstr "Nach Umschlagbild durchsuchen..." +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:374 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:510 +msgid "Use cover from &source file" +msgstr "Um&schlagbild der Quelldatei verwenden" + #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:375 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:511 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:279 @@ -2379,14 +2379,14 @@ msgstr "Titel dieses Buches ändern" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:377 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:513 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:124 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:128 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:283 msgid "&Author(s): " msgstr "&Autor(en): " #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:378 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:514 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:125 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:129 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:284 msgid "" "Change the author(s) of this book. Multiple authors should be separated by " @@ -2412,14 +2412,14 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:381 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:517 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:132 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:136 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:293 msgid "&Publisher: " msgstr "&Herausgeber: " #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:382 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:518 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:133 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:137 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:294 msgid "Change the publisher of this book" msgstr "Herausgeber dieses Buches ändern" @@ -2432,7 +2432,7 @@ msgstr "&Etiketten: " #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:384 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:520 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:135 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:139 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:296 msgid "" "Tags categorize the book. This is particularly useful while searching. " @@ -2444,7 +2444,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:385 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:521 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:140 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:144 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:299 msgid "&Series:" msgstr "&Serien:" @@ -2453,8 +2453,8 @@ msgstr "&Serien:" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:387 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:522 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:523 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:141 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:142 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:145 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:146 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:300 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:301 msgid "List of known series. You can add new series." @@ -2904,8 +2904,8 @@ msgid "" "\n" "

              " +"margin-left:0px; margin-right:0px; -qt-block-indent:0; text-" +"indent:0px;\">

              " msgstr "" "\n" @@ -2915,24 +2915,24 @@ msgstr "" "\n" "

              " +"margin-left:0px; margin-right:0px; -qt-block-indent:0; text-" +"indent:0px;\">

              " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:122 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:126 msgid "Edit Meta information" msgstr "Meta-Informationen bearbeiten" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:123 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:127 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:278 msgid "Meta information" msgstr "Meta-Informationen" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:126 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:130 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:285 msgid "Author S&ort: " msgstr "S&ortierung nach Autor: " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:127 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:131 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:286 msgid "" "Specify how the author(s) of this book should be sorted. For example Charles " @@ -2941,49 +2941,53 @@ msgstr "" "Geben Sie an, wie der Autor dieses Buches sortiert werden soll. \"Charles " "Dickens\" zum Beispiel als \"Dickens, Charles\"." -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:128 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:132 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:289 msgid "&Rating:" msgstr "&Bewertung:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:129 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:130 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:133 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:134 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:290 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:291 msgid "Rating of this book. 0-5 stars" msgstr "Bewertung dieses Buches: 0-5 Sterne" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:131 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:135 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:292 msgid " stars" msgstr " Sterne" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:134 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:138 msgid "Add Ta&gs: " msgstr "&Etiketten hinzufügen: " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:136 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:137 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:140 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:141 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:297 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:298 msgid "Open Tag Editor" msgstr "Etiketten-Editor öffnen" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:138 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:142 msgid "&Remove tags:" msgstr "Etiketten entfe&rnen:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:139 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:143 msgid "Comma separated list of tags to remove from the books. " msgstr "" "Durch Kommata getrennte Liste der Etiketten, die von den Büchern entfernt " "werden. " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:143 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:147 msgid "Remove &format:" msgstr "&Format entfernen:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:264 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:148 +msgid "A&utomatically set author sort" +msgstr "Automatisch Sortierung nach Autor setzen" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:265 msgid "" "

              Enter your username and password for LibraryThing.com.
              If you " "do not have one, you can register " @@ -2993,19 +2997,19 @@ msgstr "" "LibraryThing.com an.
              Insofern Sie dies nicht besitzen, können " "Sie sich kostenlos anmelden!

              " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:294 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:295 msgid "Could not fetch cover.
              " msgstr "Konnte kein Umschlagbild abrufen.
              " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:294 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:295 msgid "Could not fetch cover" msgstr "Konnte kein Umschlagbild abrufen" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:300 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:301 msgid "Cannot fetch cover" msgstr "Kann kein Umschlagbild abrufen" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:300 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:301 msgid "You must specify the ISBN identifier for this book." msgstr "Sie müssen die ISBN für dieses Buch angeben." @@ -3114,14 +3118,14 @@ msgstr "Neue individuelle Nachrichtenquelle hinzufügen" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:335 #: /home/kovid/work/calibre/src/calibre/gui2/tags.py:42 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:757 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:760 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1057 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:761 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:765 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1064 msgid "News" msgstr "Nachrichten" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:137 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:221 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:222 msgid "Recipes" msgstr "Rezepte" @@ -3295,7 +3299,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:63 msgid "No recipe selected" -msgstr "Kein Rezept ausgewählt" +msgstr "Kein Rezept gewählt" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:69 msgid "The attached file: %s is a recipe to download %s." @@ -3342,25 +3346,25 @@ msgstr "Dieser Feed wurde schon zu diesem Rezept hinzugefügt" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:163 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:172 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:228 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:229 msgid "Invalid input" msgstr "Ungültige Eingabe" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:164 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:173 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:229 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:230 msgid "

              Could not create recipe. Error:
              %s" msgstr "

              Konnte Rezept nicht erstellen. Fehler:
              %s" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:179 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:210 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:234 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:211 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:235 msgid "Replace recipe?" msgstr "Rezept ersetzen?" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:180 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:211 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:235 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:212 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:236 msgid "A custom recipe named %s already exists. Do you want to replace it?" msgstr "" "Es gibt schon ein erstelltes Rezept mit dem Namen %s. Soll es ersetzt werden?" @@ -3373,9 +3377,9 @@ msgstr "Rezept wählen" msgid "Pick the recipe to customize" msgstr "Rezept zum Anpassen auswählen" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:221 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:222 msgid "Choose a recipe file" -msgstr "Eine Rezept Datei auswählen" +msgstr "Eine Rezept Datei wählen" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:214 msgid "Add custom news source" @@ -3653,12 +3657,12 @@ msgid "Job has already run" msgstr "Auftrag wird schon ausgeführt" #: /home/kovid/work/calibre/src/calibre/gui2/library.py:93 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:887 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:898 msgid "Size (MB)" msgstr "Größe (MB)" #: /home/kovid/work/calibre/src/calibre/gui2/library.py:94 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:888 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:899 msgid "Date" msgstr "Datum" @@ -3666,25 +3670,25 @@ msgstr "Datum" msgid "Rating" msgstr "Bewertung" -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:263 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:269 #: /home/kovid/work/calibre/src/calibre/gui2/library.py:274 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:280 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:285 msgid "None" msgstr "Keine" -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:280 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:291 msgid "Book %s of %s." msgstr "Buch %s von %s." -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:819 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:830 msgid "Format" msgstr "Format" -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:824 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:835 msgid "Timestamp" msgstr "Zeitstempel" -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:922 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:933 msgid "Search (For Advanced Search click the button to the left)" msgstr "Suche (Zur erweiterten Suche die Schaltfläche links klicken)" @@ -3849,7 +3853,7 @@ msgid "Save to disk in a single directory" msgstr "Auf Festplatte in ein einziges Verzeichnis speichern" #: /home/kovid/work/calibre/src/calibre/gui2/main.py:192 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1106 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1108 msgid "Save only %s format to disk" msgstr "Nur das %s Format auf Festplatte speichern" @@ -3883,7 +3887,7 @@ msgid "Bad database location" msgstr "Schlechter Datenbank Standort" #: /home/kovid/work/calibre/src/calibre/gui2/main.py:262 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1262 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1264 msgid "Choose a location for your ebook library." msgstr "Wählen Sie einen Speicherort für Ihre eBook Bibliothek." @@ -3891,23 +3895,23 @@ msgstr "Wählen Sie einen Speicherort für Ihre eBook Bibliothek." msgid "Migrating database" msgstr "Migriere Datenbank" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:416 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:418 msgid "Device: " msgstr "Gerät: " -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:417 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:419 msgid " detected." msgstr " gefunden." -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:439 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:441 msgid "Connected " msgstr "Angeschlossen: " -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:450 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:452 msgid "Device database corrupted" msgstr "Gerätedatenbank ist beschädigt" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:451 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:453 msgid "" "\n" "

              The database of books on the reader is corrupted. Try the " @@ -3938,8 +3942,8 @@ msgstr "" " \n" " " -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:503 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:599 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:505 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:601 msgid "" "

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

                " @@ -3947,104 +3951,104 @@ msgstr "" "

                Es existieren bereits Bücher mit dem selben Titel in der Datenbank. " "Sollen die folgenden Bücher trotzdem hinzugefügt werden?

                  " -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:506 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:602 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:508 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:604 msgid "Duplicates found!" msgstr "Duplikate gefunden!" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:539 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:563 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:541 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:565 msgid "Uploading books to device." msgstr "Lade Bücher auf das Gerät." -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:547 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:549 msgid "Books" msgstr "Bücher" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:548 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:550 msgid "EPUB Books" msgstr "EPUB Bücher" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:549 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:551 msgid "LRF Books" msgstr "LRF Bücher" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:550 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:552 msgid "HTML Books" msgstr "HTML Bücher" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:551 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:553 msgid "LIT Books" msgstr "LIT Bücher" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:552 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:554 msgid "MOBI Books" msgstr "MOBI Bücher" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:553 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:555 msgid "Text books" msgstr "Text Bücher" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:554 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:556 msgid "PDF Books" msgstr "PDF Bücher" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:555 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:557 msgid "Comics" msgstr "Comics" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:556 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:558 msgid "Archives" msgstr "Archive" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:634 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:636 msgid "No space on device" msgstr "Gerätespeicher voll" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:635 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:637 msgid "" "

                  Cannot upload books to device there is no more free space available " msgstr "" "

                  Es können keine Bücher mehr auf das Gerät geladen werden, da der " "Gerätespeicher voll ist " -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:665 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:667 msgid "Confirm delete" msgstr "Bestätigen Sie das Löschen" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:666 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:668 msgid "Are you sure you want to delete these %d books?" msgstr "Sind Sie sicher, dass Sie diese %d Bücher löschen wollen?" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:678 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:680 msgid "Deleting books from device." msgstr "Lösche Bücher vom Gerät." -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:708 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:730 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:710 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:732 msgid "Cannot edit metadata" msgstr "Kann Metadaten nicht bearbeiten" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:708 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:730 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:849 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:908 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:710 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:732 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:851 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:910 msgid "No books selected" msgstr "Keine Bücher ausgewählt" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:777 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:779 msgid "Sending news to device." msgstr "Sende Nachrichten an das Gerät." -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:829 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:831 msgid "Sending books to device." msgstr "Sende Bücher an das Gerät." -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:832 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:834 msgid "No suitable formats" msgstr "Keine geeigneten Formate" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:833 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:835 msgid "" "Could not upload the following books to the device, as no suitable formats " "were found:

                    %s
                  " @@ -4052,15 +4056,15 @@ msgstr "" "Die folgenden Bücher konnten nicht auf das Gerät geladen werden, da keine " "geeigneten Formate vorhanden sind:
                    %s
                  " -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:849 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:851 msgid "Cannot save to disk" msgstr "Speichern auf Festplatte nicht möglich" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:853 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:855 msgid "Choose destination directory" msgstr "Zielverzeichnis auswählen" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:860 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:862 msgid "" "

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

                    " @@ -4068,64 +4072,64 @@ msgstr "" "

                    Die folgenden Bücher konnten nicht auf die Festplatte gespeichert werden, " "da das %s Format für sie nicht verfügbar ist:

                      " -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:864 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:866 msgid "Could not save some ebooks" msgstr "Konnte einige eBooks nicht speichern" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:884 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:886 msgid "Fetching news from " msgstr "Rufe Nachrichten ab von " -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:898 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:900 msgid " fetched." msgstr " abgerufen." -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1012 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1030 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1042 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1014 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1032 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1044 msgid "No book selected" msgstr "Kein Buch ausgewählt" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1012 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1042 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1058 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1014 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1044 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1060 msgid "Cannot view" msgstr "Ansehen nicht möglich" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1018 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1063 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1020 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1065 msgid "Choose the format to view" msgstr "Format zur Vorschau wählen" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1030 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1032 msgid "Cannot open folder" msgstr "Konnte Verzeichnis nicht öffnen" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1059 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1061 msgid "%s has no available formats." msgstr "%s hat keine verfügbaren Formate." -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1097 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1099 msgid "Cannot configure" msgstr "Konfiguration nicht möglich" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1097 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1099 msgid "Cannot configure while there are running jobs." msgstr "Konfiguration nicht möglich während Aufträge abgearbeitet werden." -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1116 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1118 msgid "Copying database" msgstr "Kopiere Datenbank" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1118 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1120 msgid "Copying library to " msgstr "Kopiere Bibliothek nach " -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1128 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1130 msgid "Invalid database" msgstr "Ungültige Datenbank" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1129 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1131 msgid "" "

                      An invalid database already exists at %s, delete it before trying to move " "the existing database.
                      Error: %s" @@ -4133,23 +4137,24 @@ msgstr "" "

                      Es existiert bereits eine ungültige Datenbank in %s, bitte löschen Sie " "diese, bevor sie die bestehende Datenbank verschieben.
                      Fehler: %s" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1135 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1137 msgid "Could not move database" msgstr "Konnte Datenbank nicht verschieben" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1155 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1157 msgid "No detailed info available" msgstr "Es ist keine weitere Information verfügbar" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1156 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1158 msgid "No detailed information is available for books on the device." -msgstr "Es ist keine weitere Information über Bücher auf dem Gerät verfügbar" +msgstr "" +"Es sind keine weitere Informationen über Bücher auf dem Gerät verfügbar" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1199 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1201 msgid "Error talking to device" msgstr "Fehler in der Kommunikation zum Gerät" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1200 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1202 msgid "" "There was a temporary error talking to the device. Please unplug and " "reconnect the device and or reboot." @@ -4157,13 +4162,13 @@ msgstr "" "Es trat ein Fehler in der Kommunikation mit dem Gerät auf. Bitte entfernen " "und schließen Sie das Gerät wieder an und - oder starten Sie neu." -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1213 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1228 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1232 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1215 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1230 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1234 msgid "Conversion Error" msgstr "Konvertierungsfehler" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1214 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1216 msgid "" "

                      Could not convert: %s

                      It is a DRMed book. You must " "first remove the DRM using 3rd party tools." @@ -4172,11 +4177,11 @@ msgstr "" "href=\"%s\">DRM geschützt. Sie müssen zunächst das DRM mit einem anderen " "Programm entfernen." -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1248 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1250 msgid "Database does not exist" msgstr "Datenbank existiert nicht" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1249 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1251 msgid "" "The directory in which the database should be: %s no longer exists. Please " "choose a new database location." @@ -4184,11 +4189,11 @@ msgstr "" "Das Verzeichnis, in dem die Datenbank sein sollte: %s existiert nicht mehr. " "Bitte wählen Sie einen neuen Ort für die Datenbank aus." -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1251 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1253 msgid "Choose new location for database" msgstr "Wählen Sie einen neuen Speicherort für die Datenbank" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1304 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1306 msgid "" "is the result of the efforts of many volunteers from all over the world. If " "you find it useful, please consider donating to support its development." @@ -4197,12 +4202,12 @@ msgstr "" "Falls Sie es nützlich finden, sollten Sie eine Spende zur Unterstützung " "seiner Entwicklung in Betracht ziehen." -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1325 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1327 msgid "There are active jobs. Are you sure you want to quit?" msgstr "" "Es bestehen aktive Aufträge. Sind Sie sicher, dass sie es beenden wollen?" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1327 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1329 msgid "" " is communicating with the device!
                      \n" " 'Quitting may cause corruption on the device.
                      \n" @@ -4212,11 +4217,11 @@ msgstr "" " 'Ein Beenden kann das Gerät beschädigen.
                      \n" " 'Sind Sie sicher, dass sie es beenden wollen?" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1331 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1333 msgid "WARNING: Active jobs" msgstr "WARNUNG: Aktive Aufträge" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1360 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1362 msgid "" "will keep running in the system tray. To close it, choose Quit in the " "context menu of the system tray." @@ -4224,7 +4229,7 @@ msgstr "" "wird im System Tray weiter laufen. Zum Schließen wählen Sie Beenden " "im Kontextmenü des System Tray." -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1373 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1375 msgid "" "Latest version: %s" @@ -4232,7 +4237,7 @@ msgstr "" "Letzte Version: %s" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1378 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1380 msgid "" "%s has been updated to version %s. See the new features. " @@ -4242,15 +4247,15 @@ msgstr "" "href=\"http://calibre.kovidgoyal.net/wiki/Changelog\">neuen Features an. " "Möchten Sie die Download Seite besuchen?" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1378 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1380 msgid "Update available" msgstr "Neue Version verfügbar" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1393 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1395 msgid "Use the library located at the specified path." msgstr "Die im angegebenen Pfad sich befindende Bibliothek verwenden" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1395 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1397 msgid "Log debugging information to console" msgstr "Informationen zur Fehlersuche in Konsole aufzeichnen" @@ -4377,23 +4382,23 @@ msgstr "" msgid "ERROR: Unhandled exception" msgstr "FEHLER: Unbehandelte Ausnahme" -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:108 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:115 msgid "Jobs:" msgstr "Aufträge:" -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:117 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:124 msgid "Click to see list of active jobs." msgstr "Ein Klick zeigt die aktiven Aufträge." -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:146 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:153 msgid "Click to browse books by their covers" msgstr "Klicken Sie, um die Bücher in der Cover-Ansicht zu durchsuchen" -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:146 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:153 msgid "Click to turn off Cover Browsing" msgstr "Klicken Sie, um die Cover-Ansicht zu verlassen" -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:151 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:158 msgid "" "

                      Browsing books by their covers is disabled.
                      Import of pictureflow " "module failed:
                      " @@ -4401,7 +4406,7 @@ msgstr "" "

                      Die Cover-Ansicht ist gesperrt.
                      Der Import des Pictureflow Moduls " "schlug fehl:
                      " -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:159 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:166 msgid "Click to browse books by tags" msgstr "Klicken Sie, um die Bücher anhand von Etiketten zu durchsuchen" @@ -4688,36 +4693,46 @@ msgstr "Ungültiger regulärer Ausdruck" msgid "Invalid regular expression: %s" msgstr "Ungültiger regulärer Ausdruck: %s" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:178 -msgid "Library" -msgstr "Bibliothek" +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:139 +msgid "" +"Library\n" +"%d\n" +"books" +msgstr "" +"Bibliothek\n" +"%d\n" +"Bücher" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:179 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:140 msgid "" "Reader\n" -"%s available" +"%s\n" +"available" msgstr "" "Reader\n" -"%s verfügbar" +"%s\n" +"verfügbar" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:180 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:141 msgid "" "Card\n" -"%s available" +"%s\n" +"available" msgstr "" "Karte\n" -"%s verfügbar" +"%s\n" +"verfügbar" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:184 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:146 msgid "Click to see the list of books available on your computer" msgstr "Ein Klick zeigt die Liste der auf dem Computer vorhandenen Bücher" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:185 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:147 msgid "Click to see the list of books in the main memory of your reader" msgstr "" "Ein Klick zeigt die Liste der im Hauptspeicher des Geräts vorhandenen Bücher" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:186 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:148 msgid "Click to see the list of books on the storage card in your reader" msgstr "" "Ein Klick zeigt die Liste der auf der Speicherkarte des Geräts vorhandenen " @@ -5069,20 +5084,20 @@ msgstr "" "\n" "Sie erhalten Hilfe zu einem bestimmten Befehl mit: %%prog command --help\n" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1137 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1144 msgid "

                      Copying books to %s

                      " msgstr "

                      Kopiere Bücher nach %s

                      " -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1150 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1262 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1157 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1266 msgid "Copying %s" msgstr "Kopiere %s" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1233 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1237 msgid "

                      Migrating old database to ebook library in %s

                      " msgstr "

                      Migriere alte Datenbank zu eBook Bibliothek in %s

                      " -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1279 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1283 msgid "Compacting database" msgstr "Komprimiere Datenbank" @@ -5091,7 +5106,7 @@ msgid "Password to access your calibre library. Username is " msgstr "" "Kennwort für den Zugriff auf die calibre Bibliothek. Benutzername ist " -#: /home/kovid/work/calibre/src/calibre/library/server.py:380 +#: /home/kovid/work/calibre/src/calibre/library/server.py:382 msgid "" "[options]\n" "\n" @@ -5170,13 +5185,13 @@ msgstr "Konnte SSH Sitzung nicht abschließen: " msgid "Failed to authenticate with server: %s" msgstr "Authentifizierung schlug fehl am Server: %s" -#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:63 -#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:84 +#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:76 +#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:97 msgid "Unknown feed" msgstr "Feed unbekannt" -#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:102 -#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:124 +#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:115 +#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:137 msgid "Untitled article" msgstr "Artikel ohne Titel" @@ -5377,70 +5392,70 @@ msgid "Dont show the progress bar" msgstr "Fortschrittsbalken nicht anzeigen" #: /home/kovid/work/calibre/src/calibre/web/feeds/main.py:118 -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:668 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:674 msgid "Fetching feeds..." msgstr "Rufe Feeds ab..." -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:34 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:40 msgid "Unknown News Source" msgstr "Nachrichtenquelle unbekannt" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:549 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:555 msgid "Download finished" msgstr "Download beendet" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:551 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:557 msgid "Failed to download the following articles:" msgstr "Der Download der folgenden Artikel schlug fehl:" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:553 #: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:559 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:565 msgid " from " msgstr " von " -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:557 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:563 msgid "Failed to download parts of the following articles:" msgstr "Der Download von Teilen der folgenden Artikel schlug fehl:" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:561 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:567 msgid "\tFailed links:" msgstr "\tFehlgeschlagene Verknüpfungen:" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:647 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:653 msgid "Could not fetch article. Run with --debug to see the reason" msgstr "" "Konnte Artikel nicht abrufen. Der erneute Start mit --debug zeigt mögliche " "Gründe an" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:672 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:678 msgid "Got feeds from index page" msgstr "Feeds der Index Seite erhalten" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:678 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:684 msgid "Trying to download cover..." msgstr "Versuche Umschlagbild zu laden..." -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:731 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:737 msgid "Starting download [%d thread(s)]..." msgstr "Starte Download von [%d Thread(s)]..." -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:747 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:753 msgid "Feeds downloaded to %s" msgstr "Feeds wurden nach %s heruntergeladen" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:757 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:763 msgid "Could not download cover: %s" msgstr "Konnte Umschlagbild nicht laden: %s" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:762 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:768 msgid "Downloading cover from %s" msgstr "Lade Umschlagbild von %s" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:802 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:895 msgid "Untitled Article" msgstr "Artikel ohne Titel" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:857 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:950 msgid "" "\n" "Downloaded article %s from %s\n" @@ -5450,19 +5465,19 @@ msgstr "" "Artikel %s von %s geladen\n" "%s" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:863 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:956 msgid "Article downloaded: %s" msgstr "Artikel geladen: %s" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:869 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:962 msgid "Failed to download article: %s from %s\n" msgstr "Laden der Artikel fehlgeschlagen: %s von %s\n" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:874 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:967 msgid "Article download failed: %s" msgstr "Laden der Artikel schlug fehl: %s" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:889 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:982 msgid "Fetching feed" msgstr "Rufe Feed ab" @@ -5634,6 +5649,23 @@ msgstr "Zeige detailierte Ausgabeinformation. Hilfreich zur Fehlersuche." #~ msgid "Custom news sources" #~ msgstr "Individuelle Nachrichtenquellen" +#~ msgid "Library" +#~ msgstr "Bibliothek" + +#~ msgid "" +#~ "Reader\n" +#~ "%s available" +#~ msgstr "" +#~ "Reader\n" +#~ "%s verfügbar" + +#~ msgid "" +#~ "Card\n" +#~ "%s available" +#~ msgstr "" +#~ "Karte\n" +#~ "%s verfügbar" + #~ msgid "Job killed by user" #~ msgstr "Auftrag durch Benutzer abgebrochen" @@ -5650,6 +5682,29 @@ msgstr "Zeige detailierte Ausgabeinformation. Hilfreich zur Fehlersuche." #~ msgid " does not allow copying of text." #~ msgstr " lässt das Kopieren von Text nicht zu." +#~ msgid "" +#~ "\n" +#~ "\n" +#~ "

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

                      " + #~ msgid "" #~ "Path to the calibre database. Default is to use the path stored in the " #~ "settings." diff --git a/src/calibre/translations/el.po b/src/calibre/translations/el.po index 0a506bce03..151d510f98 100644 --- a/src/calibre/translations/el.po +++ b/src/calibre/translations/el.po @@ -7,24 +7,24 @@ msgid "" msgstr "" "Project-Id-Version: calibre\n" "Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2008-12-06 07:37+0000\n" +"POT-Creation-Date: 2008-12-15 02:49+0000\n" "PO-Revision-Date: 2008-06-24 07:23+0000\n" "Last-Translator: Thanos Petkakis \n" "Language-Team: Greek \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2008-12-07 21:41+0000\n" +"X-Launchpad-Export-Date: 2008-12-15 18:24+0000\n" "X-Generator: Launchpad (build Unknown)\n" -#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:135 -#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:153 -#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:191 -#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:219 +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:137 +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:155 +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:193 +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:221 msgid "Unable to detect the %s disk drive. Try rebooting." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:407 +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:409 msgid "The reader has no storage card connected." msgstr "" @@ -219,13 +219,13 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:226 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:229 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:274 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:64 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:66 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:99 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:101 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf.py:321 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf.py:436 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:794 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:65 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:67 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:100 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:102 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf.py:334 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf.py:449 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:793 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/pdf.py:12 #: /home/kovid/work/calibre/src/calibre/ebooks/odt/to_oeb.py:46 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf.py:48 @@ -234,12 +234,12 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:365 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:37 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:38 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:317 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:331 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:815 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:581 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:818 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:821 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:328 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:342 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:826 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:583 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:820 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:823 #: /home/kovid/work/calibre/src/calibre/gui2/tools.py:52 #: /home/kovid/work/calibre/src/calibre/gui2/tools.py:112 #: /home/kovid/work/calibre/src/calibre/library/cli.py:245 @@ -248,10 +248,10 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/library/database.py:1423 #: /home/kovid/work/calibre/src/calibre/library/database.py:1452 #: /home/kovid/work/calibre/src/calibre/library/database.py:1564 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:473 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:485 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:810 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:843 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:477 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:489 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:817 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:850 msgid "Unknown" msgstr "Άγνωστο" @@ -263,11 +263,11 @@ msgid "" "formats are: %s\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/from_html.py:99 +#: /home/kovid/work/calibre/src/calibre/ebooks/epub/from_html.py:98 msgid "Could not find an ebook inside the archive" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/from_html.py:157 +#: /home/kovid/work/calibre/src/calibre/ebooks/epub/from_html.py:156 msgid "" "%prog [options] file.html|opf\n" "\n" @@ -278,7 +278,7 @@ msgid "" "the element of the OPF file. \n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/from_html.py:386 +#: /home/kovid/work/calibre/src/calibre/ebooks/epub/from_html.py:385 #: /home/kovid/work/calibre/src/calibre/ebooks/html.py:1035 msgid "You must specify an input HTML file" msgstr "" @@ -292,7 +292,7 @@ msgid "" "Could not find reasonable point at which to split: %s Sub-tree size: %d KB" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/split.py:109 +#: /home/kovid/work/calibre/src/calibre/ebooks/epub/split.py:136 msgid "" "\t\tToo much markup. Re-splitting without structure preservation. This may " "cause incorrect rendering." @@ -934,11 +934,11 @@ msgstr "" msgid "Cannot read from: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:2000 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1997 msgid "Failed to process opf file" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:2006 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:2003 msgid "" "Usage: %prog [options] mybook.html\n" "\n" @@ -1138,16 +1138,16 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:70 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:36 #: /home/kovid/work/calibre/src/calibre/gui2/library.py:91 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:314 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:885 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:325 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:896 msgid "Title" msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:274 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:37 #: /home/kovid/work/calibre/src/calibre/gui2/library.py:92 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:319 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:886 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:330 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:897 msgid "Author(s)" msgstr "" @@ -1166,25 +1166,25 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:391 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:527 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:308 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:275 -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:54 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:286 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:58 msgid "Comments" msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:280 #: /home/kovid/work/calibre/src/calibre/gui2/library.py:97 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:264 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:825 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:889 -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:56 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:275 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:836 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:900 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:60 #: /home/kovid/work/calibre/src/calibre/gui2/tags.py:42 msgid "Tags" msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:281 #: /home/kovid/work/calibre/src/calibre/gui2/library.py:98 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:280 -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:55 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:291 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:59 #: /home/kovid/work/calibre/src/calibre/gui2/tags.py:42 msgid "Series" msgstr "" @@ -1288,7 +1288,7 @@ msgstr "" msgid "Cover saved to" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:939 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:938 msgid "Set the dc:language field" msgstr "" @@ -1428,9 +1428,9 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:84 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:85 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:86 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:271 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:820 -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:52 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:282 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:831 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:56 msgid "Path" msgstr "" @@ -1438,8 +1438,8 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:88 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:89 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:92 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:270 -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:53 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:281 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:57 #: /home/kovid/work/calibre/src/calibre/gui2/tags.py:42 msgid "Formats" msgstr "" @@ -1546,49 +1546,49 @@ msgid "" "Server" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:161 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:162 msgid "Error log:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:165 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:166 msgid "Access log:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:187 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:339 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:188 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:341 msgid "Failed to start content server" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:227 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:228 msgid "Invalid size" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:227 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:228 msgid "The size %s is invalid. must be of the form widthxheight" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:269 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:273 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:270 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:274 msgid "Invalid database location" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:270 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:271 msgid "
                      Must be a directory." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:270 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:271 msgid "Invalid database location " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:274 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:275 msgid "Invalid database location.
                      Cannot write to " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:286 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:287 msgid "Compacting database. This may take a while." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:286 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:287 msgid "Compacting..." msgstr "" @@ -1612,7 +1612,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:389 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:399 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:400 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:374 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:373 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:509 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:282 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:288 @@ -1952,7 +1952,7 @@ msgid " is not a valid picture" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub.py:227 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:908 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:910 msgid "Cannot convert" msgstr "" @@ -1993,22 +1993,22 @@ msgid "Book Cover" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:371 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:510 -msgid "Use cover from &source file" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:372 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:507 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:316 msgid "Change &cover image:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:373 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:372 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:508 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:317 msgid "Browse for an image to use as the cover of this book." msgstr "" +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:374 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:510 +msgid "Use cover from &source file" +msgstr "" + #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:375 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:511 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:279 @@ -2023,14 +2023,14 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:377 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:513 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:124 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:128 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:283 msgid "&Author(s): " msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:378 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:514 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:125 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:129 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:284 msgid "" "Change the author(s) of this book. Multiple authors should be separated by " @@ -2051,14 +2051,14 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:381 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:517 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:132 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:136 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:293 msgid "&Publisher: " msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:382 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:518 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:133 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:137 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:294 msgid "Change the publisher of this book" msgstr "" @@ -2071,7 +2071,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:384 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:520 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:135 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:139 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:296 msgid "" "Tags categorize the book. This is particularly useful while searching. " @@ -2080,7 +2080,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:385 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:521 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:140 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:144 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:299 msgid "&Series:" msgstr "" @@ -2089,8 +2089,8 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:387 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:522 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:523 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:141 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:142 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:145 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:146 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:300 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:301 msgid "List of known series. You can add new series." @@ -2503,91 +2503,95 @@ msgid "" "\n" "

                      " +"margin-left:0px; margin-right:0px; -qt-block-indent:0; text-" +"indent:0px;\">

                      " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:122 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:126 msgid "Edit Meta information" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:123 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:127 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:278 msgid "Meta information" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:126 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:130 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:285 msgid "Author S&ort: " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:127 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:131 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:286 msgid "" "Specify how the author(s) of this book should be sorted. For example Charles " "Dickens should be sorted as Dickens, Charles." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:128 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:132 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:289 msgid "&Rating:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:129 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:130 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:133 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:134 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:290 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:291 msgid "Rating of this book. 0-5 stars" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:131 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:135 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:292 msgid " stars" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:134 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:138 msgid "Add Ta&gs: " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:136 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:137 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:140 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:141 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:297 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:298 msgid "Open Tag Editor" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:138 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:142 msgid "&Remove tags:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:139 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:143 msgid "Comma separated list of tags to remove from the books. " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:143 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:147 msgid "Remove &format:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:264 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:148 +msgid "A&utomatically set author sort" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:265 msgid "" "

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

                      " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:294 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:295 msgid "Could not fetch cover.
                      " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:294 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:295 msgid "Could not fetch cover" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:300 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:301 msgid "Cannot fetch cover" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:300 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:301 msgid "You must specify the ISBN identifier for this book." msgstr "" @@ -2693,14 +2697,14 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:335 #: /home/kovid/work/calibre/src/calibre/gui2/tags.py:42 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:757 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:760 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1057 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:761 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:765 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1064 msgid "News" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:137 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:221 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:222 msgid "Recipes" msgstr "" @@ -2904,25 +2908,25 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:163 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:172 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:228 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:229 msgid "Invalid input" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:164 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:173 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:229 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:230 msgid "

                      Could not create recipe. Error:
                      %s" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:179 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:210 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:234 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:211 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:235 msgid "Replace recipe?" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:180 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:211 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:235 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:212 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:236 msgid "A custom recipe named %s already exists. Do you want to replace it?" msgstr "" @@ -2934,7 +2938,7 @@ msgstr "" msgid "Pick the recipe to customize" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:221 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:222 msgid "Choose a recipe file" msgstr "" @@ -3178,12 +3182,12 @@ msgid "Job has already run" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/library.py:93 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:887 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:898 msgid "Size (MB)" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/library.py:94 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:888 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:899 msgid "Date" msgstr "" @@ -3191,25 +3195,25 @@ msgstr "" msgid "Rating" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:263 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:269 #: /home/kovid/work/calibre/src/calibre/gui2/library.py:274 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:280 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:285 msgid "None" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:280 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:291 msgid "Book %s of %s." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:819 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:830 msgid "Format" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:824 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:835 msgid "Timestamp" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:922 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:933 msgid "Search (For Advanced Search click the button to the left)" msgstr "" @@ -3368,7 +3372,7 @@ msgid "Save to disk in a single directory" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/main.py:192 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1106 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1108 msgid "Save only %s format to disk" msgstr "" @@ -3402,7 +3406,7 @@ msgid "Bad database location" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/main.py:262 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1262 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1264 msgid "Choose a location for your ebook library." msgstr "" @@ -3410,23 +3414,23 @@ msgstr "" msgid "Migrating database" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:416 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:418 msgid "Device: " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:417 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:419 msgid " detected." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:439 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:441 msgid "Connected " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:450 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:452 msgid "Device database corrupted" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:451 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:453 msgid "" "\n" "

                      The database of books on the reader is corrupted. Try the " @@ -3442,288 +3446,288 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:503 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:599 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:505 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:601 msgid "" "

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

                        " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:506 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:602 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:508 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:604 msgid "Duplicates found!" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:539 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:563 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:541 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:565 msgid "Uploading books to device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:547 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:549 msgid "Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:548 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:550 msgid "EPUB Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:549 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:551 msgid "LRF Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:550 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:552 msgid "HTML Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:551 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:553 msgid "LIT Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:552 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:554 msgid "MOBI Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:553 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:555 msgid "Text books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:554 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:556 msgid "PDF Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:555 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:557 msgid "Comics" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:556 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:558 msgid "Archives" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:634 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:636 msgid "No space on device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:635 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:637 msgid "" "

                        Cannot upload books to device there is no more free space available " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:665 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:667 msgid "Confirm delete" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:666 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:668 msgid "Are you sure you want to delete these %d books?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:678 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:680 msgid "Deleting books from device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:708 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:730 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:710 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:732 msgid "Cannot edit metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:708 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:730 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:849 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:908 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:710 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:732 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:851 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:910 msgid "No books selected" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:777 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:779 msgid "Sending news to device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:829 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:831 msgid "Sending books to device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:832 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:834 msgid "No suitable formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:833 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:835 msgid "" "Could not upload the following books to the device, as no suitable formats " "were found:

                          %s
                        " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:849 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:851 msgid "Cannot save to disk" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:853 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:855 msgid "Choose destination directory" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:860 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:862 msgid "" "

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

                          " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:864 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:866 msgid "Could not save some ebooks" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:884 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:886 msgid "Fetching news from " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:898 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:900 msgid " fetched." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1012 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1030 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1042 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1014 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1032 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1044 msgid "No book selected" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1012 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1042 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1058 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1014 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1044 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1060 msgid "Cannot view" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1018 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1063 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1020 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1065 msgid "Choose the format to view" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1030 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1032 msgid "Cannot open folder" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1059 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1061 msgid "%s has no available formats." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1097 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1099 msgid "Cannot configure" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1097 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1099 msgid "Cannot configure while there are running jobs." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1116 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1118 msgid "Copying database" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1118 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1120 msgid "Copying library to " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1128 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1130 msgid "Invalid database" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1129 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1131 msgid "" "

                          An invalid database already exists at %s, delete it before trying to move " "the existing database.
                          Error: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1135 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1137 msgid "Could not move database" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1155 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1157 msgid "No detailed info available" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1156 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1158 msgid "No detailed information is available for books on the device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1199 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1201 msgid "Error talking to device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1200 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1202 msgid "" "There was a temporary error talking to the device. Please unplug and " "reconnect the device and or reboot." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1213 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1228 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1232 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1215 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1230 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1234 msgid "Conversion Error" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1214 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1216 msgid "" "

                          Could not convert: %s

                          It is a DRMed book. You must " "first remove the DRM using 3rd party tools." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1248 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1250 msgid "Database does not exist" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1249 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1251 msgid "" "The directory in which the database should be: %s no longer exists. Please " "choose a new database location." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1251 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1253 msgid "Choose new location for database" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1304 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1306 msgid "" "is the result of the efforts of many volunteers from all over the world. If " "you find it useful, please consider donating to support its development." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1325 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1327 msgid "There are active jobs. Are you sure you want to quit?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1327 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1329 msgid "" " is communicating with the device!
                          \n" " 'Quitting may cause corruption on the device.
                          \n" " 'Are you sure you want to quit?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1331 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1333 msgid "WARNING: Active jobs" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1360 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1362 msgid "" "will keep running in the system tray. To close it, choose Quit in the " "context menu of the system tray." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1373 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1375 msgid "" "Latest version: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1378 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1380 msgid "" "%s has been updated to version %s. See the new features. " "Visit the download page?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1378 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1380 msgid "Update available" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1393 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1395 msgid "Use the library located at the specified path." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1395 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1397 msgid "Log debugging information to console" msgstr "" @@ -3842,29 +3846,29 @@ msgstr "" msgid "ERROR: Unhandled exception" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:108 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:115 msgid "Jobs:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:117 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:124 msgid "Click to see list of active jobs." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:146 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:153 msgid "Click to browse books by their covers" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:146 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:153 msgid "Click to turn off Cover Browsing" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:151 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:158 msgid "" "

                          Browsing books by their covers is disabled.
                          Import of pictureflow " "module failed:
                          " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:159 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:166 msgid "Click to browse books by tags" msgstr "" @@ -4142,31 +4146,36 @@ msgstr "" msgid "Invalid regular expression: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:178 -msgid "Library" +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:139 +msgid "" +"Library\n" +"%d\n" +"books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:179 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:140 msgid "" "Reader\n" -"%s available" +"%s\n" +"available" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:180 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:141 msgid "" "Card\n" -"%s available" +"%s\n" +"available" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:184 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:146 msgid "Click to see the list of books available on your computer" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:185 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:147 msgid "Click to see the list of books in the main memory of your reader" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:186 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:148 msgid "Click to see the list of books on the storage card in your reader" msgstr "" @@ -4425,20 +4434,20 @@ msgid "" "For help on an individual command: %%prog command --help\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1137 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1144 msgid "

                          Copying books to %s

                          " msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1150 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1262 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1157 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1266 msgid "Copying %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1233 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1237 msgid "

                          Migrating old database to ebook library in %s

                          " msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1279 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1283 msgid "Compacting database" msgstr "" @@ -4446,7 +4455,7 @@ msgstr "" msgid "Password to access your calibre library. Username is " msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server.py:380 +#: /home/kovid/work/calibre/src/calibre/library/server.py:382 msgid "" "[options]\n" "\n" @@ -4521,13 +4530,13 @@ msgstr "" msgid "Failed to authenticate with server: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:63 -#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:84 +#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:76 +#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:97 msgid "Unknown feed" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:102 -#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:124 +#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:115 +#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:137 msgid "Untitled article" msgstr "" @@ -4676,87 +4685,87 @@ msgid "Dont show the progress bar" msgstr "" #: /home/kovid/work/calibre/src/calibre/web/feeds/main.py:118 -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:668 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:674 msgid "Fetching feeds..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:34 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:40 msgid "Unknown News Source" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:549 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:555 msgid "Download finished" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:551 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:557 msgid "Failed to download the following articles:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:553 #: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:559 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:565 msgid " from " msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:557 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:563 msgid "Failed to download parts of the following articles:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:561 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:567 msgid "\tFailed links:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:647 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:653 msgid "Could not fetch article. Run with --debug to see the reason" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:672 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:678 msgid "Got feeds from index page" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:678 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:684 msgid "Trying to download cover..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:731 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:737 msgid "Starting download [%d thread(s)]..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:747 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:753 msgid "Feeds downloaded to %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:757 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:763 msgid "Could not download cover: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:762 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:768 msgid "Downloading cover from %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:802 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:895 msgid "Untitled Article" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:857 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:950 msgid "" "\n" "Downloaded article %s from %s\n" "%s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:863 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:956 msgid "Article downloaded: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:869 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:962 msgid "Failed to download article: %s from %s\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:874 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:967 msgid "Article download failed: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:889 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:982 msgid "Fetching feed" msgstr "" diff --git a/src/calibre/translations/es.po b/src/calibre/translations/es.po index 831b66a933..169f01bfcd 100644 --- a/src/calibre/translations/es.po +++ b/src/calibre/translations/es.po @@ -10,24 +10,24 @@ msgid "" msgstr "" "Project-Id-Version: es\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2008-12-06 07:37+0000\n" +"POT-Creation-Date: 2008-12-15 02:49+0000\n" "PO-Revision-Date: 2008-11-15 16:21+0000\n" "Last-Translator: Pablo Carmona A. \n" "Language-Team: Spanish\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2008-12-07 21:41+0000\n" +"X-Launchpad-Export-Date: 2008-12-15 18:24+0000\n" "X-Generator: Launchpad (build Unknown)\n" -#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:135 -#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:153 -#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:191 -#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:219 +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:137 +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:155 +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:193 +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:221 msgid "Unable to detect the %s disk drive. Try rebooting." msgstr "No se ha podido detectar la unidad de disco %s. Trate de reiniciar." -#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:407 +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:409 msgid "The reader has no storage card connected." msgstr "El lector no tiene ninguna tarjeta de almacenamiento conectada" @@ -229,13 +229,13 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:226 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:229 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:274 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:64 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:66 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:99 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:101 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf.py:321 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf.py:436 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:794 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:65 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:67 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:100 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:102 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf.py:334 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf.py:449 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:793 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/pdf.py:12 #: /home/kovid/work/calibre/src/calibre/ebooks/odt/to_oeb.py:46 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf.py:48 @@ -244,12 +244,12 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:365 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:37 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:38 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:317 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:331 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:815 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:581 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:818 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:821 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:328 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:342 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:826 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:583 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:820 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:823 #: /home/kovid/work/calibre/src/calibre/gui2/tools.py:52 #: /home/kovid/work/calibre/src/calibre/gui2/tools.py:112 #: /home/kovid/work/calibre/src/calibre/library/cli.py:245 @@ -258,10 +258,10 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/library/database.py:1423 #: /home/kovid/work/calibre/src/calibre/library/database.py:1452 #: /home/kovid/work/calibre/src/calibre/library/database.py:1564 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:473 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:485 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:810 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:843 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:477 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:489 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:817 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:850 msgid "Unknown" msgstr "Desconocido" @@ -273,11 +273,11 @@ msgid "" "formats are: %s\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/from_html.py:99 +#: /home/kovid/work/calibre/src/calibre/ebooks/epub/from_html.py:98 msgid "Could not find an ebook inside the archive" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/from_html.py:157 +#: /home/kovid/work/calibre/src/calibre/ebooks/epub/from_html.py:156 msgid "" "%prog [options] file.html|opf\n" "\n" @@ -293,7 +293,7 @@ msgstr "" "enlaces se tomará del elemento\n" " en el archivo OPF \n" -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/from_html.py:386 +#: /home/kovid/work/calibre/src/calibre/ebooks/epub/from_html.py:385 #: /home/kovid/work/calibre/src/calibre/ebooks/html.py:1035 msgid "You must specify an input HTML file" msgstr "Debe especificar un archivo HTML de entrada." @@ -307,7 +307,7 @@ msgid "" "Could not find reasonable point at which to split: %s Sub-tree size: %d KB" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/split.py:109 +#: /home/kovid/work/calibre/src/calibre/ebooks/epub/split.py:136 msgid "" "\t\tToo much markup. Re-splitting without structure preservation. This may " "cause incorrect rendering." @@ -1060,11 +1060,11 @@ msgstr "No se puedo leer la imagen de portada: %s" msgid "Cannot read from: %s" msgstr "No se puedo leer de: %s" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:2000 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1997 msgid "Failed to process opf file" msgstr "Incapaz de procesar el archivo opf" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:2006 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:2003 msgid "" "Usage: %prog [options] mybook.html\n" "\n" @@ -1306,16 +1306,16 @@ msgstr "Vea el comentario" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:70 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:36 #: /home/kovid/work/calibre/src/calibre/gui2/library.py:91 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:314 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:885 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:325 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:896 msgid "Title" msgstr "Título" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:274 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:37 #: /home/kovid/work/calibre/src/calibre/gui2/library.py:92 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:319 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:886 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:330 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:897 msgid "Author(s)" msgstr "Autor(es)" @@ -1334,25 +1334,25 @@ msgstr "Categoría" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:391 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:527 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:308 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:275 -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:54 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:286 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:58 msgid "Comments" msgstr "Comentarios" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:280 #: /home/kovid/work/calibre/src/calibre/gui2/library.py:97 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:264 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:825 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:889 -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:56 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:275 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:836 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:900 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:60 #: /home/kovid/work/calibre/src/calibre/gui2/tags.py:42 msgid "Tags" msgstr "Etiquetas" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:281 #: /home/kovid/work/calibre/src/calibre/gui2/library.py:98 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:280 -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:55 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:291 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:59 #: /home/kovid/work/calibre/src/calibre/gui2/tags.py:42 msgid "Series" msgstr "Series" @@ -1471,7 +1471,7 @@ msgstr "Uso: %s archivo.lit" msgid "Cover saved to" msgstr "Portada guardada en" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:939 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:938 msgid "Set the dc:language field" msgstr "" @@ -1612,9 +1612,9 @@ msgstr "Ver libro en dispositvo" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:84 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:85 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:86 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:271 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:820 -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:52 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:282 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:831 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:56 msgid "Path" msgstr "Ruta" @@ -1622,8 +1622,8 @@ msgstr "Ruta" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:88 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:89 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:92 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:270 -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:53 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:281 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:57 #: /home/kovid/work/calibre/src/calibre/gui2/tags.py:42 msgid "Formats" msgstr "Formatos" @@ -1730,49 +1730,49 @@ msgid "" "Server" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:161 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:162 msgid "Error log:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:165 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:166 msgid "Access log:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:187 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:339 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:188 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:341 msgid "Failed to start content server" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:227 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:228 msgid "Invalid size" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:227 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:228 msgid "The size %s is invalid. must be of the form widthxheight" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:269 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:273 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:270 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:274 msgid "Invalid database location" msgstr "Ubicación no válida" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:270 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:271 msgid "
                          Must be a directory." msgstr "
                          Debe ser un directorio." -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:270 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:271 msgid "Invalid database location " msgstr "Ubicación no válida " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:274 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:275 msgid "Invalid database location.
                          Cannot write to " msgstr "Ubicación no válida.
                          Imposible escribir en " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:286 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:287 msgid "Compacting database. This may take a while." msgstr "Compactando base de datos. Esto podría durar un rato" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:286 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:287 msgid "Compacting..." msgstr "Compactando..." @@ -1798,7 +1798,7 @@ msgstr "Navegar a la nueva ubicación de la base de datos" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:389 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:399 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:400 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:374 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:373 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:509 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:282 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:288 @@ -2140,7 +2140,7 @@ msgid " is not a valid picture" msgstr " no es una imagen válida" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub.py:227 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:908 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:910 msgid "Cannot convert" msgstr "No se puede convertir" @@ -2181,22 +2181,22 @@ msgid "Book Cover" msgstr "Portada" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:371 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:510 -msgid "Use cover from &source file" -msgstr "Usar portada del archivo &fuente" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:372 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:507 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:316 msgid "Change &cover image:" msgstr "Cambia la imagen de &portada:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:373 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:372 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:508 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:317 msgid "Browse for an image to use as the cover of this book." msgstr "Localizar una imagen a utilizar como portada de este libro." +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:374 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:510 +msgid "Use cover from &source file" +msgstr "Usar portada del archivo &fuente" + #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:375 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:511 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:279 @@ -2211,14 +2211,14 @@ msgstr "Cambiar el título del libro" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:377 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:513 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:124 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:128 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:283 msgid "&Author(s): " msgstr "&Autor(es): " #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:378 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:514 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:125 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:129 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:284 msgid "" "Change the author(s) of this book. Multiple authors should be separated by " @@ -2241,14 +2241,14 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:381 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:517 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:132 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:136 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:293 msgid "&Publisher: " msgstr "&Editorial: " #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:382 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:518 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:133 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:137 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:294 msgid "Change the publisher of this book" msgstr "Cambia la editorial del libro" @@ -2261,7 +2261,7 @@ msgstr "Etique&tas: " #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:384 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:520 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:135 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:139 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:296 msgid "" "Tags categorize the book. This is particularly useful while searching. " @@ -2272,7 +2272,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:385 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:521 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:140 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:144 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:299 msgid "&Series:" msgstr "&Series:" @@ -2281,8 +2281,8 @@ msgstr "&Series:" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:387 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:522 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:523 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:141 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:142 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:145 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:146 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:300 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:301 msgid "List of known series. You can add new series." @@ -2708,35 +2708,25 @@ msgid "" "\n" "

                          " +"margin-left:0px; margin-right:0px; -qt-block-indent:0; text-" +"indent:0px;\">

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

                          " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:122 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:126 msgid "Edit Meta information" msgstr "Editar Meta-información" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:123 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:127 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:278 msgid "Meta information" msgstr "Meta-información" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:126 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:130 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:285 msgid "Author S&ort: " msgstr "&Ordenar autores: " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:127 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:131 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:286 msgid "" "Specify how the author(s) of this book should be sorted. For example Charles " @@ -2745,47 +2735,51 @@ msgstr "" "Especificar cómo ordenar el(los) autor(es) de este libro. Por ejemplo,ordena " "Federico García Lorca como Lorca, Federico" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:128 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:132 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:289 msgid "&Rating:" msgstr "&Valoración:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:129 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:130 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:133 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:134 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:290 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:291 msgid "Rating of this book. 0-5 stars" msgstr "Valora este libro: 0-5 estrellas" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:131 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:135 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:292 msgid " stars" msgstr " estrellas" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:134 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:138 msgid "Add Ta&gs: " msgstr "Aña&dir las etiquetas: " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:136 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:137 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:140 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:141 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:297 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:298 msgid "Open Tag Editor" msgstr "Abrir editor de etiquetas" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:138 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:142 msgid "&Remove tags:" msgstr "&Quitar etiquetas" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:139 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:143 msgid "Comma separated list of tags to remove from the books. " msgstr "Lista de etiquetas separadas por comas para eliminar de los libros " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:143 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:147 msgid "Remove &format:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:264 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:148 +msgid "A&utomatically set author sort" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:265 msgid "" "

                          Enter your username and password for LibraryThing.com.
                          If you " "do not have one, you can register " @@ -2795,19 +2789,19 @@ msgstr "" "LibraryThing.com.
                          Si no dispone de una cuenta, puede regisrarse de manera gratuita.

                          " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:294 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:295 msgid "Could not fetch cover.
                          " msgstr "No se puede descargar la portada.
                          " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:294 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:295 msgid "Could not fetch cover" msgstr "No se puede descargar la portada." -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:300 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:301 msgid "Cannot fetch cover" msgstr "No se puede descargar la portada" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:300 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:301 msgid "You must specify the ISBN identifier for this book." msgstr "Especifique primero un ISBN válido para el libro." @@ -2916,14 +2910,14 @@ msgstr "Añadir nueva fuente de noticias" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:335 #: /home/kovid/work/calibre/src/calibre/gui2/tags.py:42 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:757 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:760 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1057 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:761 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:765 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1064 msgid "News" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:137 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:221 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:222 msgid "Recipes" msgstr "Recetas" @@ -3136,25 +3130,25 @@ msgstr "Este Feed ya se ha añadido a la receta" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:163 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:172 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:228 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:229 msgid "Invalid input" msgstr "Entrada incorrecta" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:164 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:173 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:229 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:230 msgid "

                          Could not create recipe. Error:
                          %s" msgstr "

                          No se puede crear la receta. Error:
                          %s" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:179 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:210 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:234 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:211 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:235 msgid "Replace recipe?" msgstr "Reemplazar la receta?" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:180 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:211 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:235 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:212 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:236 msgid "A custom recipe named %s already exists. Do you want to replace it?" msgstr "una receta personalizada llamada %s ya existe. Quiere reemplazarla?" @@ -3166,7 +3160,7 @@ msgstr "" msgid "Pick the recipe to customize" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:221 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:222 msgid "Choose a recipe file" msgstr "Seleccionar un archivo de receta" @@ -3423,12 +3417,12 @@ msgid "Job has already run" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/library.py:93 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:887 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:898 msgid "Size (MB)" msgstr "Tamaño (MB)" #: /home/kovid/work/calibre/src/calibre/gui2/library.py:94 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:888 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:899 msgid "Date" msgstr "Fecha" @@ -3436,25 +3430,25 @@ msgstr "Fecha" msgid "Rating" msgstr "Valoración" -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:263 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:269 #: /home/kovid/work/calibre/src/calibre/gui2/library.py:274 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:280 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:285 msgid "None" msgstr "Ninguno" -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:280 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:291 msgid "Book %s of %s." msgstr "Libro %s de %s." -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:819 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:830 msgid "Format" msgstr "Formato" -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:824 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:835 msgid "Timestamp" msgstr "Marca de tiempo" -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:922 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:933 msgid "Search (For Advanced Search click the button to the left)" msgstr "" "Búsqueda (Para Busqueda Avanzada, haga click en el boton de la izquierda)" @@ -3620,7 +3614,7 @@ msgid "Save to disk in a single directory" msgstr "Guardar en el disco, en un único directorio" #: /home/kovid/work/calibre/src/calibre/gui2/main.py:192 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1106 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1108 msgid "Save only %s format to disk" msgstr "Guardar solamente el formato %s en disco" @@ -3654,7 +3648,7 @@ msgid "Bad database location" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/main.py:262 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1262 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1264 msgid "Choose a location for your ebook library." msgstr "" @@ -3662,23 +3656,23 @@ msgstr "" msgid "Migrating database" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:416 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:418 msgid "Device: " msgstr "Dispositivo: " -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:417 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:419 msgid " detected." msgstr " detectado." -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:439 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:441 msgid "Connected " msgstr "Conectado " -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:450 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:452 msgid "Device database corrupted" msgstr "Base de datos del dispositivo corrupta" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:451 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:453 msgid "" "\n" "

                          The database of books on the reader is corrupted. Try the " @@ -3708,8 +3702,8 @@ msgstr "" " \n" " " -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:503 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:599 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:505 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:601 msgid "" "

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

                            " @@ -3717,103 +3711,103 @@ msgstr "" "

                            Ya existen libros con el mismo título en la base de datos. ¿Añadirlo de " "todas formas?

                              " -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:506 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:602 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:508 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:604 msgid "Duplicates found!" msgstr "¡Duplicados encontrados!" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:539 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:563 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:541 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:565 msgid "Uploading books to device." msgstr "Enviando libros al dispositivo" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:547 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:549 msgid "Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:548 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:550 msgid "EPUB Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:549 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:551 msgid "LRF Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:550 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:552 msgid "HTML Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:551 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:553 msgid "LIT Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:552 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:554 msgid "MOBI Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:553 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:555 msgid "Text books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:554 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:556 msgid "PDF Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:555 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:557 msgid "Comics" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:556 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:558 msgid "Archives" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:634 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:636 msgid "No space on device" msgstr "No hay espacio en el dispositivo" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:635 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:637 msgid "" "

                              Cannot upload books to device there is no more free space available " msgstr "" "

                              No se pueden guardar los libros porque no hay espacio en el dispositivo " -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:665 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:667 msgid "Confirm delete" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:666 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:668 msgid "Are you sure you want to delete these %d books?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:678 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:680 msgid "Deleting books from device." msgstr "Eliminando libros del dispositivo" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:708 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:730 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:710 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:732 msgid "Cannot edit metadata" msgstr "No se pueden editar los metadatos" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:708 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:730 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:849 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:908 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:710 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:732 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:851 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:910 msgid "No books selected" msgstr "No hay libros seleccionados" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:777 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:779 msgid "Sending news to device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:829 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:831 msgid "Sending books to device." msgstr "Enviando libros al dispositivo" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:832 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:834 msgid "No suitable formats" msgstr "No hay formatos adecuados" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:833 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:835 msgid "" "Could not upload the following books to the device, as no suitable formats " "were found:

                                %s
                              " @@ -3821,15 +3815,15 @@ msgstr "" "No se pudieron enviar los siguientes libros al dispositivo, ya que no se " "hallaron formatos adecuados:
                                %s
                              " -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:849 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:851 msgid "Cannot save to disk" msgstr "No se puede guardar en disco" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:853 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:855 msgid "Choose destination directory" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:860 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:862 msgid "" "

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

                                " @@ -3837,64 +3831,64 @@ msgstr "" "

                                No se pudieron guardar los siguientes libros en disco, porque el formato " "%s no está disponible para ellos:

                                  " -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:864 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:866 msgid "Could not save some ebooks" msgstr "No se pudieron guardar algunos ebooks" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:884 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:886 msgid "Fetching news from " msgstr "Buscando noticias de " -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:898 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:900 msgid " fetched." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1012 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1030 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1042 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1014 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1032 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1044 msgid "No book selected" msgstr "Seleccione un libro" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1012 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1042 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1058 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1014 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1044 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1060 msgid "Cannot view" msgstr "No se puede visualizar" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1018 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1063 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1020 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1065 msgid "Choose the format to view" msgstr "Elija el formato para visualizar" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1030 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1032 msgid "Cannot open folder" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1059 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1061 msgid "%s has no available formats." msgstr "%s no tiene formatos disponibles" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1097 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1099 msgid "Cannot configure" msgstr "No se puede configurar" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1097 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1099 msgid "Cannot configure while there are running jobs." msgstr "No se puede configurar con trabajos en proceso." -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1116 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1118 msgid "Copying database" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1118 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1120 msgid "Copying library to " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1128 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1130 msgid "Invalid database" msgstr "Base de datos no valida" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1129 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1131 msgid "" "

                                  An invalid database already exists at %s, delete it before trying to move " "the existing database.
                                  Error: %s" @@ -3902,24 +3896,24 @@ msgstr "" "

                                  Ya existe una base de datos no valida en %s, bórrela antes de intentar " "mover la base de datos existente.
                                  Error: %s" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1135 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1137 msgid "Could not move database" msgstr "No se puede mover la base de datos" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1155 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1157 msgid "No detailed info available" msgstr "No hay información detallada disponible" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1156 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1158 msgid "No detailed information is available for books on the device." msgstr "" "No hay información detallada disponible para los libros en el dispositivo" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1199 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1201 msgid "Error talking to device" msgstr "Error de comunicación con el dispositivo" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1200 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1202 msgid "" "There was a temporary error talking to the device. Please unplug and " "reconnect the device and or reboot." @@ -3927,23 +3921,23 @@ msgstr "" "Hubo un error de comunicación con el dispositivo. Desconecte, vuelva a " "conectar el dispositivo y reinicie la aplicación." -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1213 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1228 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1232 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1215 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1230 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1234 msgid "Conversion Error" msgstr "Error de conversión" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1214 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1216 msgid "" "

                                  Could not convert: %s

                                  It is a DRMed book. You must " "first remove the DRM using 3rd party tools." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1248 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1250 msgid "Database does not exist" msgstr "No existe la base de datos" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1249 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1251 msgid "" "The directory in which the database should be: %s no longer exists. Please " "choose a new database location." @@ -3951,38 +3945,38 @@ msgstr "" "El directorio en el que se debería encontrar la base de datos, %s ya no " "existe. Por favor seleccióne una nueva ruta para la base de datos." -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1251 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1253 msgid "Choose new location for database" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1304 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1306 msgid "" "is the result of the efforts of many volunteers from all over the world. If " "you find it useful, please consider donating to support its development." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1325 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1327 msgid "There are active jobs. Are you sure you want to quit?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1327 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1329 msgid "" " is communicating with the device!
                                  \n" " 'Quitting may cause corruption on the device.
                                  \n" " 'Are you sure you want to quit?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1331 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1333 msgid "WARNING: Active jobs" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1360 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1362 msgid "" "will keep running in the system tray. To close it, choose Quit in the " "context menu of the system tray." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1373 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1375 msgid "" "Latest version: %s" @@ -3990,7 +3984,7 @@ msgstr "" "Última versión: %s" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1378 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1380 msgid "" "%s has been updated to version %s. See the new features. " @@ -4000,15 +3994,15 @@ msgstr "" "href=\"http://calibre.kovidgoyal.net/wiki/Changelog\">nuevas " "características. Visita la página de descarga?" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1378 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1380 msgid "Update available" msgstr "Actualización disponible" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1393 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1395 msgid "Use the library located at the specified path." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1395 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1397 msgid "Log debugging information to console" msgstr "" @@ -4134,23 +4128,23 @@ msgstr "" msgid "ERROR: Unhandled exception" msgstr "ERROR: Excepción no Contemplada" -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:108 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:115 msgid "Jobs:" msgstr "Trabajos:" -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:117 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:124 msgid "Click to see list of active jobs." msgstr "Haga click para ver los trabajos activos." -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:146 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:153 msgid "Click to browse books by their covers" msgstr "Haga click para explorar los libros por sus cubiertas" -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:146 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:153 msgid "Click to turn off Cover Browsing" msgstr "Haga click para desactivar la exploración de cubiertas" -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:151 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:158 msgid "" "

                                  Browsing books by their covers is disabled.
                                  Import of pictureflow " "module failed:
                                  " @@ -4158,7 +4152,7 @@ msgstr "" "

                                  La exploración de los libros por sus cubiertas está desactivada.
                                  La " "importación del módulo de pictureflow ha fallado:
                                  " -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:159 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:166 msgid "Click to browse books by tags" msgstr "" @@ -4436,35 +4430,36 @@ msgstr "Expresión regular no válida" msgid "Invalid regular expression: %s" msgstr "Expresión regular no valida: %s" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:178 -msgid "Library" -msgstr "Biblioteca" +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:139 +msgid "" +"Library\n" +"%d\n" +"books" +msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:179 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:140 msgid "" "Reader\n" -"%s available" +"%s\n" +"available" msgstr "" -"Sony Reader\n" -"%s disponible" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:180 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:141 msgid "" "Card\n" -"%s available" +"%s\n" +"available" msgstr "" -"Tarjeta\n" -"%s disponible" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:184 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:146 msgid "Click to see the list of books available on your computer" msgstr "Haga click para ver la lista de libros disponibles en su ordenador" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:185 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:147 msgid "Click to see the list of books in the main memory of your reader" msgstr "Haga click para ver la lista de libros disponibles en su lector" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:186 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:148 msgid "Click to see the list of books on the storage card in your reader" msgstr "" "Haga click para ver la lista de libros en la tarjeta de almacenamiento de su " @@ -4759,20 +4754,20 @@ msgid "" "For help on an individual command: %%prog command --help\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1137 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1144 msgid "

                                  Copying books to %s

                                  " msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1150 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1262 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1157 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1266 msgid "Copying %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1233 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1237 msgid "

                                  Migrating old database to ebook library in %s

                                  " msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1279 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1283 msgid "Compacting database" msgstr "" @@ -4780,7 +4775,7 @@ msgstr "" msgid "Password to access your calibre library. Username is " msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server.py:380 +#: /home/kovid/work/calibre/src/calibre/library/server.py:382 msgid "" "[options]\n" "\n" @@ -4855,13 +4850,13 @@ msgstr "No se ha podido negociar período de sesiones SSH: " msgid "Failed to authenticate with server: %s" msgstr "No se ha podido autenticar con el servidor: %s" -#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:63 -#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:84 +#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:76 +#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:97 msgid "Unknown feed" msgstr "Newsfeed desconocido" -#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:102 -#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:124 +#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:115 +#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:137 msgid "Untitled article" msgstr "Artículo sin título" @@ -5063,70 +5058,70 @@ msgid "Dont show the progress bar" msgstr "No mostrar la barra de progreso" #: /home/kovid/work/calibre/src/calibre/web/feeds/main.py:118 -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:668 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:674 msgid "Fetching feeds..." msgstr "Buscando newsfeeds..." -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:34 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:40 msgid "Unknown News Source" msgstr "Fuente de noticias desconocida" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:549 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:555 msgid "Download finished" msgstr "Descarga finalizada" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:551 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:557 msgid "Failed to download the following articles:" msgstr "Error al descargar los siguientes artículos:" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:553 #: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:559 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:565 msgid " from " msgstr " de " -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:557 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:563 msgid "Failed to download parts of the following articles:" msgstr "Error al descargar partes de los siguientes artículos" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:561 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:567 msgid "\tFailed links:" msgstr "\tEnlaces erroneos:" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:647 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:653 msgid "Could not fetch article. Run with --debug to see the reason" msgstr "" "No se pudo obtener el artículo. Ejecute con la opción --debug para encontrar " "la causa del fallo" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:672 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:678 msgid "Got feeds from index page" msgstr "Feeds obtenidos de página índice" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:678 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:684 msgid "Trying to download cover..." msgstr "Intentando descargar la portada" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:731 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:737 msgid "Starting download [%d thread(s)]..." msgstr "Iniciando la descarga [%d hilo(s)]" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:747 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:753 msgid "Feeds downloaded to %s" msgstr "Feeds descargados a %s" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:757 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:763 msgid "Could not download cover: %s" msgstr "No fué posible descargar la portada: %s" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:762 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:768 msgid "Downloading cover from %s" msgstr "Descargando portada desde %s" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:802 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:895 msgid "Untitled Article" msgstr "Artículo sin título" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:857 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:950 msgid "" "\n" "Downloaded article %s from %s\n" @@ -5136,19 +5131,19 @@ msgstr "" "Artículo %s descargado desde %s\n" "%s" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:863 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:956 msgid "Article downloaded: %s" msgstr "Artículo descargado: %s" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:869 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:962 msgid "Failed to download article: %s from %s\n" msgstr "No se ha podido descargar el artículo: %s de %s\n" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:874 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:967 msgid "Article download failed: %s" msgstr "Error en la descarga del artículo: %s" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:889 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:982 msgid "Fetching feed" msgstr "Buscando newsfeed" @@ -5327,6 +5322,23 @@ msgstr "Mostrar información de salida detallada. Útil para depuración" #~ msgid "Custom news sources" #~ msgstr "Nueva fuente de noticias personalizada" +#~ msgid "Library" +#~ msgstr "Biblioteca" + +#~ msgid "" +#~ "Reader\n" +#~ "%s available" +#~ msgstr "" +#~ "Sony Reader\n" +#~ "%s disponible" + +#~ msgid "" +#~ "Card\n" +#~ "%s available" +#~ msgstr "" +#~ "Tarjeta\n" +#~ "%s disponible" + #~ msgid "Job killed by user" #~ msgstr "Trabajo detenido por el usuario" @@ -5410,6 +5422,29 @@ msgstr "Mostrar información de salida detallada. Útil para depuración" #~ msgid " does not allow copying of text." #~ msgstr " no permite copiar texto." +#~ msgid "" +#~ "\n" +#~ "\n" +#~ "

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

                                  " + #~ msgid "" #~ "Path to the calibre database. Default is to use the path stored in the " #~ "settings." diff --git a/src/calibre/translations/fr.po b/src/calibre/translations/fr.po index 86a0bd5788..cf8feb00a0 100644 --- a/src/calibre/translations/fr.po +++ b/src/calibre/translations/fr.po @@ -6,25 +6,25 @@ msgid "" msgstr "" "Project-Id-Version: calibre 0.4.22\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2008-12-06 07:37+0000\n" +"POT-Creation-Date: 2008-12-15 02:49+0000\n" "PO-Revision-Date: 2008-08-28 13:18+0000\n" "Last-Translator: Anthony Guéchoum \n" "Language-Team: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2008-12-07 21:41+0000\n" +"X-Launchpad-Export-Date: 2008-12-15 18:24+0000\n" "X-Generator: Launchpad (build Unknown)\n" "Generated-By: pygettext.py 1.5\n" -#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:135 -#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:153 -#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:191 -#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:219 +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:137 +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:155 +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:193 +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:221 msgid "Unable to detect the %s disk drive. Try rebooting." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:407 +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:409 msgid "The reader has no storage card connected." msgstr "Le lecteur n'a pas de carte de stockage connectée." @@ -219,13 +219,13 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:226 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:229 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:274 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:64 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:66 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:99 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:101 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf.py:321 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf.py:436 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:794 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:65 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:67 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:100 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:102 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf.py:334 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf.py:449 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:793 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/pdf.py:12 #: /home/kovid/work/calibre/src/calibre/ebooks/odt/to_oeb.py:46 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf.py:48 @@ -234,12 +234,12 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:365 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:37 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:38 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:317 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:331 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:815 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:581 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:818 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:821 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:328 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:342 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:826 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:583 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:820 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:823 #: /home/kovid/work/calibre/src/calibre/gui2/tools.py:52 #: /home/kovid/work/calibre/src/calibre/gui2/tools.py:112 #: /home/kovid/work/calibre/src/calibre/library/cli.py:245 @@ -248,10 +248,10 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/library/database.py:1423 #: /home/kovid/work/calibre/src/calibre/library/database.py:1452 #: /home/kovid/work/calibre/src/calibre/library/database.py:1564 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:473 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:485 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:810 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:843 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:477 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:489 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:817 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:850 msgid "Unknown" msgstr "Inconnu" @@ -263,11 +263,11 @@ msgid "" "formats are: %s\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/from_html.py:99 +#: /home/kovid/work/calibre/src/calibre/ebooks/epub/from_html.py:98 msgid "Could not find an ebook inside the archive" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/from_html.py:157 +#: /home/kovid/work/calibre/src/calibre/ebooks/epub/from_html.py:156 msgid "" "%prog [options] file.html|opf\n" "\n" @@ -278,7 +278,7 @@ msgid "" "the element of the OPF file. \n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/from_html.py:386 +#: /home/kovid/work/calibre/src/calibre/ebooks/epub/from_html.py:385 #: /home/kovid/work/calibre/src/calibre/ebooks/html.py:1035 msgid "You must specify an input HTML file" msgstr "" @@ -292,7 +292,7 @@ msgid "" "Could not find reasonable point at which to split: %s Sub-tree size: %d KB" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/split.py:109 +#: /home/kovid/work/calibre/src/calibre/ebooks/epub/split.py:136 msgid "" "\t\tToo much markup. Re-splitting without structure preservation. This may " "cause incorrect rendering." @@ -1021,11 +1021,11 @@ msgstr "Ne peut lire l'image de couverture: %s" msgid "Cannot read from: %s" msgstr "Ne peut lire depuis: %s" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:2000 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1997 msgid "Failed to process opf file" msgstr "Tentative de traitement du fichier opf échouée" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:2006 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:2003 msgid "" "Usage: %prog [options] mybook.html\n" "\n" @@ -1264,16 +1264,16 @@ msgstr "Configurer les commentaires." #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:70 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:36 #: /home/kovid/work/calibre/src/calibre/gui2/library.py:91 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:314 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:885 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:325 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:896 msgid "Title" msgstr "Titre" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:274 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:37 #: /home/kovid/work/calibre/src/calibre/gui2/library.py:92 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:319 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:886 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:330 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:897 msgid "Author(s)" msgstr "Auteur(s)" @@ -1292,25 +1292,25 @@ msgstr "Catégorie" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:391 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:527 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:308 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:275 -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:54 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:286 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:58 msgid "Comments" msgstr "Commentaires" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:280 #: /home/kovid/work/calibre/src/calibre/gui2/library.py:97 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:264 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:825 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:889 -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:56 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:275 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:836 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:900 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:60 #: /home/kovid/work/calibre/src/calibre/gui2/tags.py:42 msgid "Tags" msgstr "Tags" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:281 #: /home/kovid/work/calibre/src/calibre/gui2/library.py:98 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:280 -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:55 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:291 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:59 #: /home/kovid/work/calibre/src/calibre/gui2/tags.py:42 msgid "Series" msgstr "Séries" @@ -1432,7 +1432,7 @@ msgstr "Usage: %s file.lit" msgid "Cover saved to" msgstr "Couverture sauvée sur" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:939 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:938 msgid "Set the dc:language field" msgstr "" @@ -1572,9 +1572,9 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:84 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:85 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:86 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:271 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:820 -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:52 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:282 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:831 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:56 msgid "Path" msgstr "Chemin" @@ -1582,8 +1582,8 @@ msgstr "Chemin" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:88 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:89 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:92 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:270 -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:53 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:281 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:57 #: /home/kovid/work/calibre/src/calibre/gui2/tags.py:42 msgid "Formats" msgstr "Formats" @@ -1690,49 +1690,49 @@ msgid "" "Server" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:161 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:162 msgid "Error log:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:165 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:166 msgid "Access log:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:187 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:339 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:188 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:341 msgid "Failed to start content server" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:227 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:228 msgid "Invalid size" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:227 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:228 msgid "The size %s is invalid. must be of the form widthxheight" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:269 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:273 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:270 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:274 msgid "Invalid database location" msgstr "Chemin de la database invalide" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:270 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:271 msgid "
                                  Must be a directory." msgstr "
                                  Doit être un répertoire." -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:270 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:271 msgid "Invalid database location " msgstr "Chemin de la database invalide " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:274 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:275 msgid "Invalid database location.
                                  Cannot write to " msgstr "Chemin de la database invalide.
                                  Erreur en écriture " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:286 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:287 msgid "Compacting database. This may take a while." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:286 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:287 msgid "Compacting..." msgstr "" @@ -1756,7 +1756,7 @@ msgstr "Choisir un nouvel emplacement pour la base de données" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:389 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:399 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:400 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:374 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:373 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:509 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:282 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:288 @@ -2097,7 +2097,7 @@ msgid " is not a valid picture" msgstr " n'est pas une image vailde" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub.py:227 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:908 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:910 msgid "Cannot convert" msgstr "Conversion impossible" @@ -2140,22 +2140,22 @@ msgid "Book Cover" msgstr "Couverture du livre" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:371 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:510 -msgid "Use cover from &source file" -msgstr "Utilise l'image de couverture du fichier &source" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:372 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:507 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:316 msgid "Change &cover image:" msgstr "Modifie l'image &cover :" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:373 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:372 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:508 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:317 msgid "Browse for an image to use as the cover of this book." msgstr "Rechercher une image à utiliser en tant que couverture du livre." +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:374 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:510 +msgid "Use cover from &source file" +msgstr "Utilise l'image de couverture du fichier &source" + #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:375 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:511 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:279 @@ -2170,14 +2170,14 @@ msgstr "Modifie le titre du livre" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:377 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:513 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:124 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:128 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:283 msgid "&Author(s): " msgstr "&Auteurs : " #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:378 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:514 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:125 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:129 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:284 msgid "" "Change the author(s) of this book. Multiple authors should be separated by " @@ -2200,14 +2200,14 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:381 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:517 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:132 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:136 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:293 msgid "&Publisher: " msgstr "&Editeur : " #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:382 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:518 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:133 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:137 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:294 msgid "Change the publisher of this book" msgstr "Modifie l'éditeur du livre" @@ -2220,7 +2220,7 @@ msgstr "Ta&gs : " #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:384 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:520 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:135 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:139 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:296 msgid "" "Tags categorize the book. This is particularly useful while searching. " @@ -2231,7 +2231,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:385 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:521 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:140 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:144 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:299 msgid "&Series:" msgstr "&Séries :" @@ -2240,8 +2240,8 @@ msgstr "&Séries :" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:387 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:522 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:523 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:141 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:142 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:145 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:146 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:300 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:301 msgid "List of known series. You can add new series." @@ -2671,25 +2671,25 @@ msgid "" "\n" "

                                  " +"margin-left:0px; margin-right:0px; -qt-block-indent:0; text-" +"indent:0px;\">

                                  " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:122 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:126 msgid "Edit Meta information" msgstr "Editer les informations Metadata" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:123 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:127 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:278 msgid "Meta information" msgstr "Informations (metadata)" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:126 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:130 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:285 msgid "Author S&ort: " msgstr "Clé de tr&i de l'auteur : " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:127 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:131 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:286 msgid "" "Specify how the author(s) of this book should be sorted. For example Charles " @@ -2698,47 +2698,51 @@ msgstr "" "Définit comment l'auteur de ce livre doit être classé. Par exemple, Charles " "Dickens peut être classé comme Dickens, Charles." -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:128 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:132 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:289 msgid "&Rating:" msgstr "&Note :" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:129 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:130 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:133 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:134 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:290 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:291 msgid "Rating of this book. 0-5 stars" msgstr "Note de ce livre. de 0 à 5 étoiles" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:131 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:135 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:292 msgid " stars" msgstr " étoiles" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:134 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:138 msgid "Add Ta&gs: " msgstr "Ajout de Ta&gs : " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:136 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:137 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:140 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:141 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:297 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:298 msgid "Open Tag Editor" msgstr "Ouvre l'éditeur de mots-clefs" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:138 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:142 msgid "&Remove tags:" msgstr "&Supprime des mots-clefs :" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:139 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:143 msgid "Comma separated list of tags to remove from the books. " msgstr "Liste de mots-clefs séparés par des virgules à retirer des livres. " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:143 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:147 msgid "Remove &format:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:264 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:148 +msgid "A&utomatically set author sort" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:265 msgid "" "

                                  Enter your username and password for LibraryThing.com.
                                  If you " "do not have one, you can register " @@ -2748,19 +2752,19 @@ msgstr "" "LibraryThing.com.
                                  Si vous n'en avez pas, vous pouvez y créer un compte gratuitement !

                                  " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:294 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:295 msgid "Could not fetch cover.
                                  " msgstr "Erreur à la récupération de l'image de couverture.
                                  " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:294 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:295 msgid "Could not fetch cover" msgstr "Erreur à la récupération de l'image de couverture" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:300 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:301 msgid "Cannot fetch cover" msgstr "Erreur à la récupération de l'image de couverture" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:300 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:301 msgid "You must specify the ISBN identifier for this book." msgstr "Vous devez fournir l'identifiant ISBN de ce livre." @@ -2869,14 +2873,14 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:335 #: /home/kovid/work/calibre/src/calibre/gui2/tags.py:42 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:757 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:760 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1057 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:761 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:765 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1064 msgid "News" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:137 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:221 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:222 msgid "Recipes" msgstr "" @@ -3083,25 +3087,25 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:163 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:172 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:228 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:229 msgid "Invalid input" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:164 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:173 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:229 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:230 msgid "

                                  Could not create recipe. Error:
                                  %s" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:179 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:210 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:234 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:211 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:235 msgid "Replace recipe?" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:180 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:211 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:235 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:212 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:236 msgid "A custom recipe named %s already exists. Do you want to replace it?" msgstr "" @@ -3113,7 +3117,7 @@ msgstr "" msgid "Pick the recipe to customize" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:221 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:222 msgid "Choose a recipe file" msgstr "" @@ -3357,12 +3361,12 @@ msgid "Job has already run" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/library.py:93 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:887 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:898 msgid "Size (MB)" msgstr "Taille (MB)" #: /home/kovid/work/calibre/src/calibre/gui2/library.py:94 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:888 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:899 msgid "Date" msgstr "Date" @@ -3370,25 +3374,25 @@ msgstr "Date" msgid "Rating" msgstr "Note" -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:263 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:269 #: /home/kovid/work/calibre/src/calibre/gui2/library.py:274 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:280 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:285 msgid "None" msgstr "Aucun" -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:280 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:291 msgid "Book %s of %s." msgstr "Livre %s of %s." -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:819 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:830 msgid "Format" msgstr "Format" -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:824 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:835 msgid "Timestamp" msgstr "Horodatage" -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:922 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:933 msgid "Search (For Advanced Search click the button to the left)" msgstr "" @@ -3551,7 +3555,7 @@ msgid "Save to disk in a single directory" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/main.py:192 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1106 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1108 msgid "Save only %s format to disk" msgstr "" @@ -3585,7 +3589,7 @@ msgid "Bad database location" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/main.py:262 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1262 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1264 msgid "Choose a location for your ebook library." msgstr "" @@ -3593,23 +3597,23 @@ msgstr "" msgid "Migrating database" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:416 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:418 msgid "Device: " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:417 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:419 msgid " detected." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:439 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:441 msgid "Connected " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:450 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:452 msgid "Device database corrupted" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:451 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:453 msgid "" "\n" "

                                  The database of books on the reader is corrupted. Try the " @@ -3625,8 +3629,8 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:503 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:599 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:505 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:601 msgid "" "

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

                                    " @@ -3634,181 +3638,181 @@ msgstr "" "

                                    Des livres ayant le même titre existent déjà dans la base de données. Les " "ajouter quand même ?

                                      " -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:506 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:602 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:508 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:604 msgid "Duplicates found!" msgstr "Des doublons ont été détectés !" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:539 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:563 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:541 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:565 msgid "Uploading books to device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:547 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:549 msgid "Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:548 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:550 msgid "EPUB Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:549 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:551 msgid "LRF Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:550 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:552 msgid "HTML Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:551 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:553 msgid "LIT Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:552 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:554 msgid "MOBI Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:553 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:555 msgid "Text books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:554 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:556 msgid "PDF Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:555 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:557 msgid "Comics" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:556 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:558 msgid "Archives" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:634 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:636 msgid "No space on device" msgstr "Le lecteur électronique n'a plus d'espace mémoire disponible" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:635 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:637 msgid "" "

                                      Cannot upload books to device there is no more free space available " msgstr "" "

                                      Impossible d'envoyer les livres sur le lecteur : il n'y a plus assez " "d'espace mémoire disponible " -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:665 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:667 msgid "Confirm delete" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:666 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:668 msgid "Are you sure you want to delete these %d books?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:678 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:680 msgid "Deleting books from device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:708 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:730 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:710 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:732 msgid "Cannot edit metadata" msgstr "Erreur à l'édition des metadat" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:708 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:730 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:849 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:908 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:710 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:732 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:851 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:910 msgid "No books selected" msgstr "Aucun livre sélectionné" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:777 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:779 msgid "Sending news to device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:829 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:831 msgid "Sending books to device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:832 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:834 msgid "No suitable formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:833 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:835 msgid "" "Could not upload the following books to the device, as no suitable formats " "were found:

                                        %s
                                      " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:849 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:851 msgid "Cannot save to disk" msgstr "Ne peut pas enregistrer sur le disque" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:853 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:855 msgid "Choose destination directory" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:860 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:862 msgid "" "

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

                                        " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:864 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:866 msgid "Could not save some ebooks" msgstr "Impossible de sauvegarder des livres électroniques" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:884 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:886 msgid "Fetching news from " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:898 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:900 msgid " fetched." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1012 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1030 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1042 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1014 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1032 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1044 msgid "No book selected" msgstr "Aucun livre sélectionné" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1012 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1042 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1058 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1014 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1044 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1060 msgid "Cannot view" msgstr "Impossible de visualiser" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1018 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1063 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1020 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1065 msgid "Choose the format to view" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1030 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1032 msgid "Cannot open folder" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1059 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1061 msgid "%s has no available formats." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1097 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1099 msgid "Cannot configure" msgstr "Configuration impossible" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1097 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1099 msgid "Cannot configure while there are running jobs." msgstr "Impossible de configurer pendant que des travaux sont en cours." -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1116 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1118 msgid "Copying database" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1118 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1120 msgid "Copying library to " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1128 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1130 msgid "Invalid database" msgstr "Base de données invalide" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1129 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1131 msgid "" "

                                        An invalid database already exists at %s, delete it before trying to move " "the existing database.
                                        Error: %s" @@ -3816,23 +3820,23 @@ msgstr "" "

                                        Une base de données invalide existe déjà ici : %s, spprimez la avant " "d'essayer de déplacer la base de données existante.
                                        Erreur : %s" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1135 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1137 msgid "Could not move database" msgstr "Déplacement de la base de données impossible" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1155 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1157 msgid "No detailed info available" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1156 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1158 msgid "No detailed information is available for books on the device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1199 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1201 msgid "Error talking to device" msgstr "Erreur pendant la communication avec le lecteur électronique" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1200 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1202 msgid "" "There was a temporary error talking to the device. Please unplug and " "reconnect the device and or reboot." @@ -3841,81 +3845,81 @@ msgstr "" "lecteur électronique. Veuillez déconnecter et reconnecter le lecteur " "électronique et redémarrer." -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1213 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1228 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1232 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1215 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1230 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1234 msgid "Conversion Error" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1214 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1216 msgid "" "

                                        Could not convert: %s

                                        It is a DRMed book. You must " "first remove the DRM using 3rd party tools." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1248 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1250 msgid "Database does not exist" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1249 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1251 msgid "" "The directory in which the database should be: %s no longer exists. Please " "choose a new database location." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1251 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1253 msgid "Choose new location for database" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1304 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1306 msgid "" "is the result of the efforts of many volunteers from all over the world. If " "you find it useful, please consider donating to support its development." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1325 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1327 msgid "There are active jobs. Are you sure you want to quit?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1327 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1329 msgid "" " is communicating with the device!
                                        \n" " 'Quitting may cause corruption on the device.
                                        \n" " 'Are you sure you want to quit?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1331 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1333 msgid "WARNING: Active jobs" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1360 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1362 msgid "" "will keep running in the system tray. To close it, choose Quit in the " "context menu of the system tray." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1373 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1375 msgid "" "Latest version: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1378 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1380 msgid "" "%s has been updated to version %s. See the new features. " "Visit the download page?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1378 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1380 msgid "Update available" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1393 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1395 msgid "Use the library located at the specified path." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1395 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1397 msgid "Log debugging information to console" msgstr "" @@ -4038,29 +4042,29 @@ msgstr "" msgid "ERROR: Unhandled exception" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:108 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:115 msgid "Jobs:" msgstr "Travaux :" -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:117 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:124 msgid "Click to see list of active jobs." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:146 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:153 msgid "Click to browse books by their covers" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:146 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:153 msgid "Click to turn off Cover Browsing" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:151 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:158 msgid "" "

                                        Browsing books by their covers is disabled.
                                        Import of pictureflow " "module failed:
                                        " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:159 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:166 msgid "Click to browse books by tags" msgstr "" @@ -4338,35 +4342,36 @@ msgstr "" msgid "Invalid regular expression: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:178 -msgid "Library" -msgstr "Librairie" +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:139 +msgid "" +"Library\n" +"%d\n" +"books" +msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:179 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:140 msgid "" "Reader\n" -"%s available" +"%s\n" +"available" msgstr "" -"Lecteur \n" -"%s disponible" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:180 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:141 msgid "" "Card\n" -"%s available" +"%s\n" +"available" msgstr "" -"Carte\n" -"%s disponible" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:184 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:146 msgid "Click to see the list of books available on your computer" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:185 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:147 msgid "Click to see the list of books in the main memory of your reader" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:186 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:148 msgid "Click to see the list of books on the storage card in your reader" msgstr "" @@ -4625,20 +4630,20 @@ msgid "" "For help on an individual command: %%prog command --help\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1137 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1144 msgid "

                                        Copying books to %s

                                        " msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1150 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1262 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1157 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1266 msgid "Copying %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1233 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1237 msgid "

                                        Migrating old database to ebook library in %s

                                        " msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1279 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1283 msgid "Compacting database" msgstr "" @@ -4646,7 +4651,7 @@ msgstr "" msgid "Password to access your calibre library. Username is " msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server.py:380 +#: /home/kovid/work/calibre/src/calibre/library/server.py:382 msgid "" "[options]\n" "\n" @@ -4721,13 +4726,13 @@ msgstr "" msgid "Failed to authenticate with server: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:63 -#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:84 +#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:76 +#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:97 msgid "Unknown feed" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:102 -#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:124 +#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:115 +#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:137 msgid "Untitled article" msgstr "" @@ -4876,87 +4881,87 @@ msgid "Dont show the progress bar" msgstr "" #: /home/kovid/work/calibre/src/calibre/web/feeds/main.py:118 -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:668 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:674 msgid "Fetching feeds..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:34 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:40 msgid "Unknown News Source" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:549 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:555 msgid "Download finished" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:551 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:557 msgid "Failed to download the following articles:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:553 #: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:559 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:565 msgid " from " msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:557 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:563 msgid "Failed to download parts of the following articles:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:561 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:567 msgid "\tFailed links:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:647 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:653 msgid "Could not fetch article. Run with --debug to see the reason" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:672 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:678 msgid "Got feeds from index page" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:678 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:684 msgid "Trying to download cover..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:731 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:737 msgid "Starting download [%d thread(s)]..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:747 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:753 msgid "Feeds downloaded to %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:757 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:763 msgid "Could not download cover: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:762 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:768 msgid "Downloading cover from %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:802 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:895 msgid "Untitled Article" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:857 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:950 msgid "" "\n" "Downloaded article %s from %s\n" "%s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:863 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:956 msgid "Article downloaded: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:869 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:962 msgid "Failed to download article: %s from %s\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:874 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:967 msgid "Article download failed: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:889 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:982 msgid "Fetching feed" msgstr "" @@ -5061,6 +5066,23 @@ msgstr "" #~ "Les modifications ne seront prises en compte qu'après avoir relancé le " #~ "programme." +#~ msgid "Library" +#~ msgstr "Librairie" + +#~ msgid "" +#~ "Reader\n" +#~ "%s available" +#~ msgstr "" +#~ "Lecteur \n" +#~ "%s disponible" + +#~ msgid "" +#~ "Card\n" +#~ "%s available" +#~ msgstr "" +#~ "Carte\n" +#~ "%s disponible" + #~ msgid "%s is not available in LRF format. Please convert it first." #~ msgstr "%s n'est pas disponible au format LRF. Veuillez le convertir avant." diff --git a/src/calibre/translations/gl.po b/src/calibre/translations/gl.po index 9cd4ca3d26..50628a03f3 100644 --- a/src/calibre/translations/gl.po +++ b/src/calibre/translations/gl.po @@ -7,24 +7,24 @@ msgid "" msgstr "" "Project-Id-Version: calibre\n" "Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2008-12-06 07:37+0000\n" +"POT-Creation-Date: 2008-12-15 02:49+0000\n" "PO-Revision-Date: 2008-09-30 12:33+0000\n" "Last-Translator: Calidonia \n" "Language-Team: Galician \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2008-12-07 21:41+0000\n" +"X-Launchpad-Export-Date: 2008-12-15 18:24+0000\n" "X-Generator: Launchpad (build Unknown)\n" -#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:135 -#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:153 -#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:191 -#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:219 +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:137 +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:155 +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:193 +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:221 msgid "Unable to detect the %s disk drive. Try rebooting." msgstr "Non se puido detectar a unidade de disco %s. Probe a reiniciar." -#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:407 +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:409 msgid "The reader has no storage card connected." msgstr "O lector non ten conectada tarxeta de almacenamento ningunha" @@ -224,13 +224,13 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:226 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:229 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:274 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:64 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:66 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:99 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:101 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf.py:321 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf.py:436 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:794 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:65 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:67 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:100 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:102 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf.py:334 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf.py:449 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:793 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/pdf.py:12 #: /home/kovid/work/calibre/src/calibre/ebooks/odt/to_oeb.py:46 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf.py:48 @@ -239,12 +239,12 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:365 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:37 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:38 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:317 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:331 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:815 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:581 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:818 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:821 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:328 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:342 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:826 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:583 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:820 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:823 #: /home/kovid/work/calibre/src/calibre/gui2/tools.py:52 #: /home/kovid/work/calibre/src/calibre/gui2/tools.py:112 #: /home/kovid/work/calibre/src/calibre/library/cli.py:245 @@ -253,10 +253,10 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/library/database.py:1423 #: /home/kovid/work/calibre/src/calibre/library/database.py:1452 #: /home/kovid/work/calibre/src/calibre/library/database.py:1564 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:473 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:485 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:810 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:843 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:477 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:489 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:817 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:850 msgid "Unknown" msgstr "" @@ -268,11 +268,11 @@ msgid "" "formats are: %s\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/from_html.py:99 +#: /home/kovid/work/calibre/src/calibre/ebooks/epub/from_html.py:98 msgid "Could not find an ebook inside the archive" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/from_html.py:157 +#: /home/kovid/work/calibre/src/calibre/ebooks/epub/from_html.py:156 msgid "" "%prog [options] file.html|opf\n" "\n" @@ -283,7 +283,7 @@ msgid "" "the element of the OPF file. \n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/from_html.py:386 +#: /home/kovid/work/calibre/src/calibre/ebooks/epub/from_html.py:385 #: /home/kovid/work/calibre/src/calibre/ebooks/html.py:1035 msgid "You must specify an input HTML file" msgstr "" @@ -297,7 +297,7 @@ msgid "" "Could not find reasonable point at which to split: %s Sub-tree size: %d KB" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/split.py:109 +#: /home/kovid/work/calibre/src/calibre/ebooks/epub/split.py:136 msgid "" "\t\tToo much markup. Re-splitting without structure preservation. This may " "cause incorrect rendering." @@ -939,11 +939,11 @@ msgstr "" msgid "Cannot read from: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:2000 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1997 msgid "Failed to process opf file" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:2006 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:2003 msgid "" "Usage: %prog [options] mybook.html\n" "\n" @@ -1143,16 +1143,16 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:70 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:36 #: /home/kovid/work/calibre/src/calibre/gui2/library.py:91 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:314 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:885 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:325 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:896 msgid "Title" msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:274 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:37 #: /home/kovid/work/calibre/src/calibre/gui2/library.py:92 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:319 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:886 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:330 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:897 msgid "Author(s)" msgstr "" @@ -1171,25 +1171,25 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:391 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:527 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:308 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:275 -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:54 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:286 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:58 msgid "Comments" msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:280 #: /home/kovid/work/calibre/src/calibre/gui2/library.py:97 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:264 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:825 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:889 -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:56 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:275 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:836 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:900 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:60 #: /home/kovid/work/calibre/src/calibre/gui2/tags.py:42 msgid "Tags" msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:281 #: /home/kovid/work/calibre/src/calibre/gui2/library.py:98 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:280 -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:55 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:291 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:59 #: /home/kovid/work/calibre/src/calibre/gui2/tags.py:42 msgid "Series" msgstr "" @@ -1293,7 +1293,7 @@ msgstr "" msgid "Cover saved to" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:939 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:938 msgid "Set the dc:language field" msgstr "" @@ -1433,9 +1433,9 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:84 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:85 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:86 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:271 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:820 -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:52 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:282 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:831 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:56 msgid "Path" msgstr "" @@ -1443,8 +1443,8 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:88 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:89 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:92 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:270 -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:53 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:281 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:57 #: /home/kovid/work/calibre/src/calibre/gui2/tags.py:42 msgid "Formats" msgstr "" @@ -1551,49 +1551,49 @@ msgid "" "Server" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:161 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:162 msgid "Error log:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:165 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:166 msgid "Access log:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:187 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:339 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:188 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:341 msgid "Failed to start content server" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:227 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:228 msgid "Invalid size" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:227 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:228 msgid "The size %s is invalid. must be of the form widthxheight" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:269 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:273 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:270 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:274 msgid "Invalid database location" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:270 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:271 msgid "
                                        Must be a directory." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:270 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:271 msgid "Invalid database location " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:274 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:275 msgid "Invalid database location.
                                        Cannot write to " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:286 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:287 msgid "Compacting database. This may take a while." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:286 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:287 msgid "Compacting..." msgstr "" @@ -1617,7 +1617,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:389 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:399 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:400 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:374 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:373 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:509 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:282 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:288 @@ -1957,7 +1957,7 @@ msgid " is not a valid picture" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub.py:227 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:908 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:910 msgid "Cannot convert" msgstr "" @@ -1998,22 +1998,22 @@ msgid "Book Cover" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:371 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:510 -msgid "Use cover from &source file" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:372 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:507 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:316 msgid "Change &cover image:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:373 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:372 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:508 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:317 msgid "Browse for an image to use as the cover of this book." msgstr "" +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:374 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:510 +msgid "Use cover from &source file" +msgstr "" + #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:375 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:511 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:279 @@ -2028,14 +2028,14 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:377 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:513 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:124 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:128 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:283 msgid "&Author(s): " msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:378 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:514 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:125 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:129 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:284 msgid "" "Change the author(s) of this book. Multiple authors should be separated by " @@ -2056,14 +2056,14 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:381 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:517 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:132 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:136 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:293 msgid "&Publisher: " msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:382 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:518 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:133 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:137 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:294 msgid "Change the publisher of this book" msgstr "" @@ -2076,7 +2076,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:384 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:520 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:135 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:139 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:296 msgid "" "Tags categorize the book. This is particularly useful while searching. " @@ -2085,7 +2085,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:385 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:521 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:140 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:144 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:299 msgid "&Series:" msgstr "" @@ -2094,8 +2094,8 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:387 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:522 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:523 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:141 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:142 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:145 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:146 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:300 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:301 msgid "List of known series. You can add new series." @@ -2508,91 +2508,95 @@ msgid "" "\n" "

                                        " +"margin-left:0px; margin-right:0px; -qt-block-indent:0; text-" +"indent:0px;\">

                                        " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:122 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:126 msgid "Edit Meta information" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:123 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:127 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:278 msgid "Meta information" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:126 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:130 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:285 msgid "Author S&ort: " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:127 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:131 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:286 msgid "" "Specify how the author(s) of this book should be sorted. For example Charles " "Dickens should be sorted as Dickens, Charles." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:128 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:132 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:289 msgid "&Rating:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:129 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:130 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:133 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:134 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:290 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:291 msgid "Rating of this book. 0-5 stars" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:131 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:135 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:292 msgid " stars" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:134 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:138 msgid "Add Ta&gs: " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:136 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:137 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:140 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:141 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:297 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:298 msgid "Open Tag Editor" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:138 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:142 msgid "&Remove tags:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:139 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:143 msgid "Comma separated list of tags to remove from the books. " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:143 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:147 msgid "Remove &format:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:264 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:148 +msgid "A&utomatically set author sort" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:265 msgid "" "

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

                                        " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:294 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:295 msgid "Could not fetch cover.
                                        " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:294 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:295 msgid "Could not fetch cover" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:300 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:301 msgid "Cannot fetch cover" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:300 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:301 msgid "You must specify the ISBN identifier for this book." msgstr "" @@ -2698,14 +2702,14 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:335 #: /home/kovid/work/calibre/src/calibre/gui2/tags.py:42 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:757 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:760 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1057 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:761 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:765 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1064 msgid "News" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:137 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:221 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:222 msgid "Recipes" msgstr "" @@ -2909,25 +2913,25 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:163 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:172 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:228 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:229 msgid "Invalid input" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:164 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:173 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:229 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:230 msgid "

                                        Could not create recipe. Error:
                                        %s" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:179 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:210 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:234 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:211 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:235 msgid "Replace recipe?" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:180 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:211 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:235 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:212 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:236 msgid "A custom recipe named %s already exists. Do you want to replace it?" msgstr "" @@ -2939,7 +2943,7 @@ msgstr "" msgid "Pick the recipe to customize" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:221 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:222 msgid "Choose a recipe file" msgstr "" @@ -3183,12 +3187,12 @@ msgid "Job has already run" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/library.py:93 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:887 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:898 msgid "Size (MB)" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/library.py:94 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:888 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:899 msgid "Date" msgstr "" @@ -3196,25 +3200,25 @@ msgstr "" msgid "Rating" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:263 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:269 #: /home/kovid/work/calibre/src/calibre/gui2/library.py:274 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:280 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:285 msgid "None" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:280 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:291 msgid "Book %s of %s." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:819 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:830 msgid "Format" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:824 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:835 msgid "Timestamp" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:922 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:933 msgid "Search (For Advanced Search click the button to the left)" msgstr "" @@ -3373,7 +3377,7 @@ msgid "Save to disk in a single directory" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/main.py:192 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1106 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1108 msgid "Save only %s format to disk" msgstr "" @@ -3407,7 +3411,7 @@ msgid "Bad database location" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/main.py:262 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1262 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1264 msgid "Choose a location for your ebook library." msgstr "" @@ -3415,23 +3419,23 @@ msgstr "" msgid "Migrating database" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:416 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:418 msgid "Device: " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:417 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:419 msgid " detected." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:439 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:441 msgid "Connected " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:450 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:452 msgid "Device database corrupted" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:451 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:453 msgid "" "\n" "

                                        The database of books on the reader is corrupted. Try the " @@ -3447,288 +3451,288 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:503 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:599 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:505 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:601 msgid "" "

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

                                          " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:506 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:602 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:508 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:604 msgid "Duplicates found!" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:539 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:563 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:541 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:565 msgid "Uploading books to device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:547 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:549 msgid "Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:548 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:550 msgid "EPUB Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:549 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:551 msgid "LRF Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:550 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:552 msgid "HTML Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:551 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:553 msgid "LIT Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:552 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:554 msgid "MOBI Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:553 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:555 msgid "Text books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:554 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:556 msgid "PDF Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:555 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:557 msgid "Comics" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:556 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:558 msgid "Archives" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:634 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:636 msgid "No space on device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:635 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:637 msgid "" "

                                          Cannot upload books to device there is no more free space available " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:665 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:667 msgid "Confirm delete" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:666 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:668 msgid "Are you sure you want to delete these %d books?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:678 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:680 msgid "Deleting books from device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:708 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:730 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:710 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:732 msgid "Cannot edit metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:708 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:730 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:849 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:908 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:710 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:732 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:851 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:910 msgid "No books selected" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:777 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:779 msgid "Sending news to device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:829 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:831 msgid "Sending books to device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:832 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:834 msgid "No suitable formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:833 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:835 msgid "" "Could not upload the following books to the device, as no suitable formats " "were found:

                                            %s
                                          " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:849 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:851 msgid "Cannot save to disk" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:853 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:855 msgid "Choose destination directory" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:860 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:862 msgid "" "

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

                                            " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:864 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:866 msgid "Could not save some ebooks" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:884 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:886 msgid "Fetching news from " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:898 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:900 msgid " fetched." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1012 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1030 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1042 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1014 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1032 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1044 msgid "No book selected" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1012 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1042 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1058 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1014 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1044 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1060 msgid "Cannot view" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1018 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1063 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1020 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1065 msgid "Choose the format to view" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1030 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1032 msgid "Cannot open folder" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1059 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1061 msgid "%s has no available formats." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1097 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1099 msgid "Cannot configure" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1097 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1099 msgid "Cannot configure while there are running jobs." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1116 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1118 msgid "Copying database" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1118 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1120 msgid "Copying library to " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1128 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1130 msgid "Invalid database" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1129 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1131 msgid "" "

                                            An invalid database already exists at %s, delete it before trying to move " "the existing database.
                                            Error: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1135 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1137 msgid "Could not move database" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1155 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1157 msgid "No detailed info available" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1156 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1158 msgid "No detailed information is available for books on the device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1199 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1201 msgid "Error talking to device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1200 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1202 msgid "" "There was a temporary error talking to the device. Please unplug and " "reconnect the device and or reboot." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1213 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1228 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1232 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1215 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1230 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1234 msgid "Conversion Error" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1214 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1216 msgid "" "

                                            Could not convert: %s

                                            It is a DRMed book. You must " "first remove the DRM using 3rd party tools." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1248 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1250 msgid "Database does not exist" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1249 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1251 msgid "" "The directory in which the database should be: %s no longer exists. Please " "choose a new database location." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1251 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1253 msgid "Choose new location for database" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1304 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1306 msgid "" "is the result of the efforts of many volunteers from all over the world. If " "you find it useful, please consider donating to support its development." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1325 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1327 msgid "There are active jobs. Are you sure you want to quit?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1327 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1329 msgid "" " is communicating with the device!
                                            \n" " 'Quitting may cause corruption on the device.
                                            \n" " 'Are you sure you want to quit?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1331 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1333 msgid "WARNING: Active jobs" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1360 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1362 msgid "" "will keep running in the system tray. To close it, choose Quit in the " "context menu of the system tray." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1373 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1375 msgid "" "Latest version: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1378 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1380 msgid "" "%s has been updated to version %s. See the new features. " "Visit the download page?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1378 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1380 msgid "Update available" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1393 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1395 msgid "Use the library located at the specified path." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1395 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1397 msgid "Log debugging information to console" msgstr "" @@ -3847,29 +3851,29 @@ msgstr "" msgid "ERROR: Unhandled exception" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:108 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:115 msgid "Jobs:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:117 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:124 msgid "Click to see list of active jobs." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:146 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:153 msgid "Click to browse books by their covers" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:146 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:153 msgid "Click to turn off Cover Browsing" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:151 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:158 msgid "" "

                                            Browsing books by their covers is disabled.
                                            Import of pictureflow " "module failed:
                                            " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:159 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:166 msgid "Click to browse books by tags" msgstr "" @@ -4147,31 +4151,36 @@ msgstr "" msgid "Invalid regular expression: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:178 -msgid "Library" +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:139 +msgid "" +"Library\n" +"%d\n" +"books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:179 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:140 msgid "" "Reader\n" -"%s available" +"%s\n" +"available" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:180 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:141 msgid "" "Card\n" -"%s available" +"%s\n" +"available" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:184 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:146 msgid "Click to see the list of books available on your computer" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:185 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:147 msgid "Click to see the list of books in the main memory of your reader" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:186 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:148 msgid "Click to see the list of books on the storage card in your reader" msgstr "" @@ -4430,20 +4439,20 @@ msgid "" "For help on an individual command: %%prog command --help\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1137 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1144 msgid "

                                            Copying books to %s

                                            " msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1150 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1262 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1157 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1266 msgid "Copying %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1233 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1237 msgid "

                                            Migrating old database to ebook library in %s

                                            " msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1279 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1283 msgid "Compacting database" msgstr "" @@ -4451,7 +4460,7 @@ msgstr "" msgid "Password to access your calibre library. Username is " msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server.py:380 +#: /home/kovid/work/calibre/src/calibre/library/server.py:382 msgid "" "[options]\n" "\n" @@ -4526,13 +4535,13 @@ msgstr "" msgid "Failed to authenticate with server: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:63 -#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:84 +#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:76 +#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:97 msgid "Unknown feed" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:102 -#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:124 +#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:115 +#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:137 msgid "Untitled article" msgstr "" @@ -4681,87 +4690,87 @@ msgid "Dont show the progress bar" msgstr "" #: /home/kovid/work/calibre/src/calibre/web/feeds/main.py:118 -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:668 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:674 msgid "Fetching feeds..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:34 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:40 msgid "Unknown News Source" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:549 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:555 msgid "Download finished" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:551 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:557 msgid "Failed to download the following articles:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:553 #: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:559 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:565 msgid " from " msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:557 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:563 msgid "Failed to download parts of the following articles:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:561 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:567 msgid "\tFailed links:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:647 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:653 msgid "Could not fetch article. Run with --debug to see the reason" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:672 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:678 msgid "Got feeds from index page" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:678 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:684 msgid "Trying to download cover..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:731 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:737 msgid "Starting download [%d thread(s)]..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:747 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:753 msgid "Feeds downloaded to %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:757 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:763 msgid "Could not download cover: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:762 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:768 msgid "Downloading cover from %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:802 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:895 msgid "Untitled Article" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:857 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:950 msgid "" "\n" "Downloaded article %s from %s\n" "%s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:863 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:956 msgid "Article downloaded: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:869 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:962 msgid "Failed to download article: %s from %s\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:874 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:967 msgid "Article download failed: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:889 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:982 msgid "Fetching feed" msgstr "" diff --git a/src/calibre/translations/it.po b/src/calibre/translations/it.po index 6aa9d0b27c..17cee61773 100644 --- a/src/calibre/translations/it.po +++ b/src/calibre/translations/it.po @@ -8,25 +8,25 @@ msgid "" msgstr "" "Project-Id-Version: calibre_calibre-it\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2008-12-06 07:37+0000\n" -"PO-Revision-Date: 2008-12-05 09:30+0000\n" +"POT-Creation-Date: 2008-12-15 02:49+0000\n" +"PO-Revision-Date: 2008-12-11 22:41+0000\n" "Last-Translator: Iacopo Benesperi \n" "Language-Team: italiano\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2008-12-07 21:42+0000\n" +"X-Launchpad-Export-Date: 2008-12-15 18:24+0000\n" "X-Generator: Launchpad (build Unknown)\n" "Generated-By: pygettext.py 1.5\n" -#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:135 -#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:153 -#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:191 -#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:219 +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:137 +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:155 +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:193 +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:221 msgid "Unable to detect the %s disk drive. Try rebooting." msgstr "Impossibile individuare il disco %s. Provare a riavviare." -#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:407 +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:409 msgid "The reader has no storage card connected." msgstr "Il lettore non ha una scheda di memoria connessa." @@ -276,13 +276,13 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:226 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:229 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:274 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:64 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:66 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:99 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:101 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf.py:321 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf.py:436 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:794 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:65 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:67 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:100 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:102 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf.py:334 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf.py:449 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:793 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/pdf.py:12 #: /home/kovid/work/calibre/src/calibre/ebooks/odt/to_oeb.py:46 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf.py:48 @@ -291,12 +291,12 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:365 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:37 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:38 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:317 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:331 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:815 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:581 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:818 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:821 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:328 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:342 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:826 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:583 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:820 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:823 #: /home/kovid/work/calibre/src/calibre/gui2/tools.py:52 #: /home/kovid/work/calibre/src/calibre/gui2/tools.py:112 #: /home/kovid/work/calibre/src/calibre/library/cli.py:245 @@ -305,10 +305,10 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/library/database.py:1423 #: /home/kovid/work/calibre/src/calibre/library/database.py:1452 #: /home/kovid/work/calibre/src/calibre/library/database.py:1564 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:473 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:485 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:810 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:843 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:477 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:489 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:817 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:850 msgid "Unknown" msgstr "Sconosciuto" @@ -324,11 +324,11 @@ msgstr "" "Converte uno qualsiasi di una vasta gamma di formati di libri in un file " "epub. Formati supportati: %s\n" -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/from_html.py:99 +#: /home/kovid/work/calibre/src/calibre/ebooks/epub/from_html.py:98 msgid "Could not find an ebook inside the archive" msgstr "Impossibile trovare un libro dentro l'archivio" -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/from_html.py:157 +#: /home/kovid/work/calibre/src/calibre/ebooks/epub/from_html.py:156 msgid "" "%prog [options] file.html|opf\n" "\n" @@ -346,7 +346,7 @@ msgstr "" "presa\n" "dall'elemento del file OPF. \n" -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/from_html.py:386 +#: /home/kovid/work/calibre/src/calibre/ebooks/epub/from_html.py:385 #: /home/kovid/work/calibre/src/calibre/ebooks/html.py:1035 msgid "You must specify an input HTML file" msgstr "È necessario specificare un file HTML" @@ -362,7 +362,7 @@ msgstr "" "Impossibile trovare un buon punto dove dividere: %s Dimensione sotto-albero: " "%d KB" -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/split.py:109 +#: /home/kovid/work/calibre/src/calibre/ebooks/epub/split.py:136 msgid "" "\t\tToo much markup. Re-splitting without structure preservation. This may " "cause incorrect rendering." @@ -1161,11 +1161,11 @@ msgstr "Impossibile leggere l'immagine di copertina: %s" msgid "Cannot read from: %s" msgstr "Impossibile leggere da: %s" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:2000 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1997 msgid "Failed to process opf file" msgstr "Processamento del file OPF fallito" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:2006 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:2003 msgid "" "Usage: %prog [options] mybook.html\n" "\n" @@ -1412,16 +1412,16 @@ msgstr "Imposta il commento" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:70 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:36 #: /home/kovid/work/calibre/src/calibre/gui2/library.py:91 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:314 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:885 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:325 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:896 msgid "Title" msgstr "Titolo" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:274 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:37 #: /home/kovid/work/calibre/src/calibre/gui2/library.py:92 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:319 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:886 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:330 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:897 msgid "Author(s)" msgstr "Autore(i)" @@ -1440,25 +1440,25 @@ msgstr "Categoria" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:391 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:527 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:308 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:275 -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:54 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:286 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:58 msgid "Comments" msgstr "Commenti" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:280 #: /home/kovid/work/calibre/src/calibre/gui2/library.py:97 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:264 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:825 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:889 -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:56 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:275 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:836 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:900 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:60 #: /home/kovid/work/calibre/src/calibre/gui2/tags.py:42 msgid "Tags" msgstr "Tag" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:281 #: /home/kovid/work/calibre/src/calibre/gui2/library.py:98 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:280 -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:55 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:291 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:59 #: /home/kovid/work/calibre/src/calibre/gui2/tags.py:42 msgid "Series" msgstr "Serie" @@ -1580,7 +1580,7 @@ msgstr "Uso: %s file.lit" msgid "Cover saved to" msgstr "Copertina salvata in" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:939 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:938 msgid "Set the dc:language field" msgstr "Imposta il campo dc:language" @@ -1687,7 +1687,8 @@ msgstr "Carica le notizie scaricate sul dispositivo" #: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:59 msgid "Delete books from library after uploading to device" -msgstr "Elimina i libri dalla libreria dopo averle caricate sul dispositivo" +msgstr "" +"Elimina i libri dalla biblioteca dopo averle caricate sul dispositivo" #: /home/kovid/work/calibre/src/calibre/gui2/device.py:72 msgid "Device no longer connected." @@ -1724,9 +1725,9 @@ msgstr "Visualizza libro sul dispositivo" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:84 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:85 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:86 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:271 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:820 -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:52 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:282 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:831 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:56 msgid "Path" msgstr "Percorso" @@ -1734,8 +1735,8 @@ msgstr "Percorso" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:88 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:89 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:92 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:270 -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:53 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:281 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:57 #: /home/kovid/work/calibre/src/calibre/gui2/tags.py:42 msgid "Formats" msgstr "Formati" @@ -1845,49 +1846,50 @@ msgstr "" "Server dei\n" "contenuti" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:161 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:162 msgid "Error log:" msgstr "File di log degli errori:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:165 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:166 msgid "Access log:" msgstr "File di log degli accessi:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:187 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:339 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:188 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:341 msgid "Failed to start content server" msgstr "Avvio del server dei contenuti fallito" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:227 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:228 msgid "Invalid size" -msgstr "" +msgstr "Dimensione non valida" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:227 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:228 msgid "The size %s is invalid. must be of the form widthxheight" msgstr "" +"La dimensione %s non è valida. Deve essere nella forma larghezzaxaltezza" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:269 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:273 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:270 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:274 msgid "Invalid database location" msgstr "Percorso database non valido" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:270 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:271 msgid "
                                            Must be a directory." msgstr "
                                            Deve essere una cartella" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:270 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:271 msgid "Invalid database location " msgstr "Percorso database non valido " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:274 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:275 msgid "Invalid database location.
                                            Cannot write to " msgstr "Percorso database non valido.
                                            Impossibile scrivere su " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:286 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:287 msgid "Compacting database. This may take a while." msgstr "Compattazione database. Poterbbe richiedere un po' di tempo" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:286 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:287 msgid "Compacting..." msgstr "Compattazione..." @@ -1913,7 +1915,7 @@ msgstr "Sfoglia per specificare una nuova posizione del database" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:389 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:399 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:400 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:374 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:373 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:509 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:282 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:288 @@ -1998,19 +2000,19 @@ msgstr "&Formato in uscita:" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:381 msgid "Normal" -msgstr "" +msgstr "Normale" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:382 msgid "High" -msgstr "" +msgstr "Massima" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:383 msgid "Low" -msgstr "" +msgstr "Minima" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:384 msgid "Job &priority:" -msgstr "" +msgstr "&Priorità lavoro:" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:386 msgid "Add a directory to the frequently used directories list" @@ -2072,7 +2074,7 @@ msgstr "Invia automaticamente le noti&zie scaricate al lettore di libri" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:404 msgid "&Delete news from library when it is sent to reader" -msgstr "&Elimina le notizie dalla libreria dopo averle inviate al lettore" +msgstr "&Elimina le notizie dalla biblioteca dopo averle inviate al lettore" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:405 msgid "Free unused diskspace from the database" @@ -2132,10 +2134,12 @@ msgid "" "The maximum size (widthxheight) for displayed covers. Larger covers are " "resized. " msgstr "" +"La dimensione massima (larghezzaxaltezza) per le copertine visualizzate. Le " +"copertine più larghe vengono ridimensionate. " #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:415 msgid "Max. &cover size:" -msgstr "" +msgstr "Dimensi&one massima copertina:" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:416 msgid "&Start Server" @@ -2278,7 +2282,7 @@ msgid " is not a valid picture" msgstr " non è un'immagine valida" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub.py:227 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:908 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:910 msgid "Cannot convert" msgstr "Impossibile convertire" @@ -2320,23 +2324,23 @@ msgid "Book Cover" msgstr "Copertina del libro" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:371 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:510 -msgid "Use cover from &source file" -msgstr "Usa copertina del file di &origine" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:372 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:507 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:316 msgid "Change &cover image:" msgstr "Ca&mbia l'immagine di copertina:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:373 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:372 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:508 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:317 msgid "Browse for an image to use as the cover of this book." msgstr "" "Sfoglia per trovare un'immagine da usare come copertina per questo libro" +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:374 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:510 +msgid "Use cover from &source file" +msgstr "Usa copertina del file di &origine" + #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:375 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:511 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:279 @@ -2351,14 +2355,14 @@ msgstr "Cambia il titolo di questo libro" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:377 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:513 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:124 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:128 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:283 msgid "&Author(s): " msgstr "A&utore(i): " #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:378 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:514 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:125 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:129 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:284 msgid "" "Change the author(s) of this book. Multiple authors should be separated by " @@ -2384,14 +2388,14 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:381 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:517 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:132 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:136 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:293 msgid "&Publisher: " msgstr "&Editore: " #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:382 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:518 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:133 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:137 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:294 msgid "Change the publisher of this book" msgstr "Cambia l'editore di questo libro" @@ -2404,7 +2408,7 @@ msgstr "T&ag: " #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:384 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:520 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:135 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:139 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:296 msgid "" "Tags categorize the book. This is particularly useful while searching. " @@ -2416,7 +2420,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:385 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:521 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:140 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:144 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:299 msgid "&Series:" msgstr "&Serie:" @@ -2425,8 +2429,8 @@ msgstr "&Serie:" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:387 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:522 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:523 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:141 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:142 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:145 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:146 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:300 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:301 msgid "List of known series. You can add new series." @@ -2871,8 +2875,8 @@ msgid "" "\n" "

                                            " +"margin-left:0px; margin-right:0px; -qt-block-indent:0; text-" +"indent:0px;\">

                                            " msgstr "" "\n" @@ -2882,24 +2886,24 @@ msgstr "" "\n" "

                                            " +"margin-left:0px; margin-right:0px; -qt-block-indent:0; text-" +"indent:0px;\">

                                            " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:122 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:126 msgid "Edit Meta information" msgstr "Modifica metadati" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:123 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:127 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:278 msgid "Meta information" msgstr "Metadati" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:126 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:130 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:285 msgid "Author S&ort: " msgstr "&Classificazione autore: " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:127 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:131 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:286 msgid "" "Specify how the author(s) of this book should be sorted. For example Charles " @@ -2908,47 +2912,51 @@ msgstr "" "Specifica come deve essere classificato l'autore di questo libro. Ad " "esempio, Charles Dickens deve essere classificato come Dickens, Charles." -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:128 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:132 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:289 msgid "&Rating:" msgstr "&Giudizio:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:129 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:130 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:133 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:134 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:290 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:291 msgid "Rating of this book. 0-5 stars" msgstr "Giudizio su questo libro. 0-5 stelle" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:131 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:135 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:292 msgid " stars" msgstr " stelle" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:134 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:138 msgid "Add Ta&gs: " msgstr "&Aggiungi tag: " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:136 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:137 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:140 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:141 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:297 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:298 msgid "Open Tag Editor" msgstr "Apri l'editor dei tag" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:138 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:142 msgid "&Remove tags:" msgstr "&Rimuovi tag:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:139 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:143 msgid "Comma separated list of tags to remove from the books. " msgstr "Lista separata da virgole dei tag da rimuovere dal libro " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:143 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:147 msgid "Remove &format:" msgstr "Rimuovi for&mato:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:264 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:148 +msgid "A&utomatically set author sort" +msgstr "Imposta a&utomaticamente la Classificazione autore" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:265 msgid "" "

                                            Enter your username and password for LibraryThing.com.
                                            If you " "do not have one, you can register " @@ -2958,19 +2966,19 @@ msgstr "" "
                                            Se non se ne possiede uno, è possibile registrarsi gratuitamente!

                                            " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:294 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:295 msgid "Could not fetch cover.
                                            " msgstr "Impossibile scaricare la copertina
                                            " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:294 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:295 msgid "Could not fetch cover" msgstr "Impossibile scaricare la copertina" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:300 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:301 msgid "Cannot fetch cover" msgstr "Impossibile scaricare la copertina" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:300 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:301 msgid "You must specify the ISBN identifier for this book." msgstr "È necessario specificare il codice ISBN di questo libro" @@ -3046,7 +3054,7 @@ msgstr "Cerca" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:234 msgid "%d recipes" -msgstr "" +msgstr "%d formule" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:263 msgid "Must set account information" @@ -3079,14 +3087,14 @@ msgstr "Aggiungi una fonte di notizie personalizzata" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:335 #: /home/kovid/work/calibre/src/calibre/gui2/tags.py:42 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:757 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:760 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1057 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:761 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:765 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1064 msgid "News" msgstr "Notizie" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:137 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:221 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:222 msgid "Recipes" msgstr "Formule" @@ -3303,25 +3311,25 @@ msgstr "Questo feed è già stato aggiunto alla formula" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:163 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:172 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:228 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:229 msgid "Invalid input" msgstr "Input non valido" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:164 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:173 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:229 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:230 msgid "

                                            Could not create recipe. Error:
                                            %s" msgstr "

                                            Impossibile creare la formula. Errore:
                                            %s" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:179 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:210 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:234 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:211 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:235 msgid "Replace recipe?" msgstr "Sovrascrivere la formula?" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:180 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:211 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:235 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:212 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:236 msgid "A custom recipe named %s already exists. Do you want to replace it?" msgstr "Esiste già una formula personalizzata di nome %s. Sovrascriverla?" @@ -3333,7 +3341,7 @@ msgstr "Prendi formula" msgid "Pick the recipe to customize" msgstr "Prende la formula per personalizzarla" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:221 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:222 msgid "Choose a recipe file" msgstr "Scegliere un file di formula" @@ -3611,12 +3619,12 @@ msgid "Job has already run" msgstr "Il lavoro è già stato avviato" #: /home/kovid/work/calibre/src/calibre/gui2/library.py:93 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:887 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:898 msgid "Size (MB)" msgstr "Dimensione (MB)" #: /home/kovid/work/calibre/src/calibre/gui2/library.py:94 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:888 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:899 msgid "Date" msgstr "Data" @@ -3624,25 +3632,25 @@ msgstr "Data" msgid "Rating" msgstr "Giudizio" -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:263 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:269 #: /home/kovid/work/calibre/src/calibre/gui2/library.py:274 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:280 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:285 msgid "None" msgstr "Nessuno" -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:280 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:291 msgid "Book %s of %s." msgstr "Libro %s di %s" -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:819 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:830 msgid "Format" msgstr "Formato" -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:824 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:835 msgid "Timestamp" msgstr "Timestamp" -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:922 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:933 msgid "Search (For Advanced Search click the button to the left)" msgstr "Cerca (Per la ricerca avanzata fare clic sul bottone a sinistra)" @@ -3736,7 +3744,7 @@ msgstr "& Esci" #: /home/kovid/work/calibre/src/calibre/gui2/main.py:102 msgid "&Restart" -msgstr "" +msgstr "&Riavvia" #: /home/kovid/work/calibre/src/calibre/gui2/main.py:131 msgid "" @@ -3763,7 +3771,7 @@ msgstr "Invia alla scheda di memoria" #: /home/kovid/work/calibre/src/calibre/gui2/main.py:152 #: /home/kovid/work/calibre/src/calibre/gui2/main.py:153 msgid "and delete from library" -msgstr "e elimina dalla libreria" +msgstr "ed elimina dalla biblioteca" #: /home/kovid/work/calibre/src/calibre/gui2/main.py:155 msgid "Send to storage card by default" @@ -3807,7 +3815,7 @@ msgid "Save to disk in a single directory" msgstr "Salva su disco in una singola cartella" #: /home/kovid/work/calibre/src/calibre/gui2/main.py:192 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1106 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1108 msgid "Save only %s format to disk" msgstr "Salva sul disco solo il formato %s" @@ -3841,31 +3849,31 @@ msgid "Bad database location" msgstr "Percorso del database sbagliato" #: /home/kovid/work/calibre/src/calibre/gui2/main.py:262 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1262 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1264 msgid "Choose a location for your ebook library." -msgstr "Scegliere un percorso per la propria libreria." +msgstr "Scegliere un percorso per la propria biblioteca." #: /home/kovid/work/calibre/src/calibre/gui2/main.py:274 msgid "Migrating database" msgstr "Esportazione database" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:416 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:418 msgid "Device: " msgstr "Dispositivo: " -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:417 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:419 msgid " detected." msgstr " individuato." -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:439 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:441 msgid "Connected " msgstr "Connesso " -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:450 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:452 msgid "Device database corrupted" msgstr "Database del dispositivo corrotto" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:451 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:453 msgid "" "\n" "

                                            The database of books on the reader is corrupted. Try the " @@ -3894,8 +3902,8 @@ msgstr "" " \n" " " -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:503 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:599 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:505 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:601 msgid "" "

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

                                              " @@ -3903,104 +3911,104 @@ msgstr "" "

                                              Nel database sono già presenti libri con i seguenti titoli. Aggiungerli " "ugualmente?

                                                " -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:506 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:602 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:508 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:604 msgid "Duplicates found!" msgstr "Scoperti duplicati!" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:539 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:563 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:541 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:565 msgid "Uploading books to device." msgstr "Caricamento libri nel dispositivo." -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:547 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:549 msgid "Books" msgstr "Libri" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:548 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:550 msgid "EPUB Books" msgstr "Libri EPUB" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:549 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:551 msgid "LRF Books" msgstr "Libri LRF" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:550 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:552 msgid "HTML Books" msgstr "Libri HTML" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:551 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:553 msgid "LIT Books" msgstr "Libri LIT" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:552 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:554 msgid "MOBI Books" msgstr "Libri MOBI" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:553 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:555 msgid "Text books" msgstr "Libri TXT" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:554 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:556 msgid "PDF Books" msgstr "Libri PDF" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:555 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:557 msgid "Comics" msgstr "Fumetti" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:556 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:558 msgid "Archives" msgstr "Archivi" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:634 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:636 msgid "No space on device" msgstr "Spazio insufficiente sul dispositivo" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:635 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:637 msgid "" "

                                                Cannot upload books to device there is no more free space available " msgstr "" "

                                                Impossibile salvare libri sul dispositivo perché non c'è più spazio " "disponibile " -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:665 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:667 msgid "Confirm delete" msgstr "Conferma elininazione" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:666 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:668 msgid "Are you sure you want to delete these %d books?" msgstr "Si è sicuri di voler eliminare questi %d libri?" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:678 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:680 msgid "Deleting books from device." msgstr "Cancellamento libri dal dispositivo." -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:708 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:730 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:710 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:732 msgid "Cannot edit metadata" msgstr "Impossibile modificare i metadati" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:708 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:730 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:849 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:908 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:710 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:732 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:851 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:910 msgid "No books selected" msgstr "Nessun libro selezionato" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:777 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:779 msgid "Sending news to device." msgstr "Invio notizie al dispositivo in corso." -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:829 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:831 msgid "Sending books to device." msgstr "Invio libri al dispositivo." -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:832 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:834 msgid "No suitable formats" msgstr "Nessun formato adatto" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:833 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:835 msgid "" "Could not upload the following books to the device, as no suitable formats " "were found:

                                                  %s
                                                " @@ -4008,15 +4016,15 @@ msgstr "" "Impossibile caricare i seguenti libri nel dispositivo, perché non è stato " "trovato nessun formato adatto:
                                                  %s
                                                " -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:849 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:851 msgid "Cannot save to disk" msgstr "Impossibile salvare sul disco" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:853 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:855 msgid "Choose destination directory" msgstr "Scegliere la cartella di destinazione" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:860 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:862 msgid "" "

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

                                                  " @@ -4024,64 +4032,64 @@ msgstr "" "

                                                  Impossibile salvare i libri seguenti su disco, perché il formato %s non è " "disponibile per loro:

                                                    " -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:864 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:866 msgid "Could not save some ebooks" msgstr "Impossibile salvare alcuni libri" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:884 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:886 msgid "Fetching news from " msgstr "Scaricamento notizie da " -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:898 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:900 msgid " fetched." msgstr " preso." -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1012 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1030 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1042 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1014 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1032 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1044 msgid "No book selected" msgstr "Nessun libro selezionato" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1012 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1042 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1058 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1014 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1044 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1060 msgid "Cannot view" msgstr "Impossibile leggere" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1018 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1063 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1020 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1065 msgid "Choose the format to view" msgstr "Scegliere il formato da leggere" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1030 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1032 msgid "Cannot open folder" msgstr "Impossibile aprire la cartella" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1059 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1061 msgid "%s has no available formats." msgstr "%s non ha formati disponibili" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1097 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1099 msgid "Cannot configure" msgstr "Impossibile configurare" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1097 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1099 msgid "Cannot configure while there are running jobs." msgstr "Impossibile configurare mentre ci sono lavori in esecuzione" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1116 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1118 msgid "Copying database" msgstr "Sto copiando il database" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1118 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1120 msgid "Copying library to " msgstr "Copia biblioteca in " -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1128 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1130 msgid "Invalid database" msgstr "Database non valido" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1129 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1131 msgid "" "

                                                    An invalid database already exists at %s, delete it before trying to move " "the existing database.
                                                    Error: %s" @@ -4089,25 +4097,25 @@ msgstr "" "

                                                    Esiste già un database non valido in %s, eliminarlo prima di provare a " "spostare il database esistente.
                                                    Errore: %s" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1135 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1137 msgid "Could not move database" msgstr "Impossibile spostare il database" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1155 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1157 msgid "No detailed info available" msgstr "Nessuna informazione dettagliata disponibile" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1156 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1158 msgid "No detailed information is available for books on the device." msgstr "" "Non è disponibile alcuna informazione dettagliata per i libri nel " "dispositivo." -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1199 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1201 msgid "Error talking to device" msgstr "Errore di comunicazione col dispositivo" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1200 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1202 msgid "" "There was a temporary error talking to the device. Please unplug and " "reconnect the device and or reboot." @@ -4115,13 +4123,13 @@ msgstr "" "Si è verificato un errore di comunicazione temporaneo col dispositivo. " "Disconnettere e riconnettere il dispositivo e/o riavviare" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1213 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1228 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1232 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1215 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1230 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1234 msgid "Conversion Error" msgstr "Errore di conversione" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1214 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1216 msgid "" "

                                                    Could not convert: %s

                                                    It is a DRMed book. You must " "first remove the DRM using 3rd party tools." @@ -4130,11 +4138,11 @@ msgstr "" "href=\"%s\">DRM. È necessario rimuovere prima il DRM usando programmi di " "terze parti." -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1248 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1250 msgid "Database does not exist" msgstr "Il database non esiste" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1249 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1251 msgid "" "The directory in which the database should be: %s no longer exists. Please " "choose a new database location." @@ -4142,11 +4150,11 @@ msgstr "" "La cartella in cui il database dovrebbe essere: %s non esiste più. Scegliere " "una nuova posizione per il database." -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1251 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1253 msgid "Choose new location for database" msgstr "Selezionare una nuova posizione per il database" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1304 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1306 msgid "" "is the result of the efforts of many volunteers from all over the world. If " "you find it useful, please consider donating to support its development." @@ -4154,11 +4162,11 @@ msgstr "" "è il risultato degli sforzi di tanti volontari da tutto il mondo. Se lo " "trovi utile, puoi fare una donazione per supportare il suo sviluppo." -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1325 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1327 msgid "There are active jobs. Are you sure you want to quit?" msgstr "Ci sono lavori attivi. Uscire comunque?" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1327 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1329 msgid "" " is communicating with the device!
                                                    \n" " 'Quitting may cause corruption on the device.
                                                    \n" @@ -4169,11 +4177,11 @@ msgstr "" "dispositivo.
                                                    \n" " 'Uscire comunque?" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1331 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1333 msgid "WARNING: Active jobs" msgstr "ATTENZIONE: Lavori attivi" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1360 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1362 msgid "" "will keep running in the system tray. To close it, choose Quit in the " "context menu of the system tray." @@ -4181,7 +4189,7 @@ msgstr "" "continuerà a lavorare nel vassoio di sistema. Per chiuderlo, selezionare " "Esci nel menu contestuale del vassoio di sistema." -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1373 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1375 msgid "" "Latest version: %s" @@ -4189,7 +4197,7 @@ msgstr "" "Ultima versione: %s" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1378 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1380 msgid "" "%s has been updated to version %s. See the new features. " @@ -4199,15 +4207,15 @@ msgstr "" "href=\"http://calibre.kovidgoyal.net/wiki/Changelog\">nuove " "funzionalità. Una visita alla pagina del download?" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1378 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1380 msgid "Update available" msgstr "Aggiornamento disponibile" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1393 -msgid "Use the library located at the specified path." -msgstr "Usa la libreria collocata nel percorso specificato." - #: /home/kovid/work/calibre/src/calibre/gui2/main.py:1395 +msgid "Use the library located at the specified path." +msgstr "Usa la biblioteca collocata nel percorso specificato." + +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1397 msgid "Log debugging information to console" msgstr "Invia le informazioni di debug alla console" @@ -4318,7 +4326,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:320 msgid "Show book details" -msgstr "" +msgstr "Visualizza i dettagli del libro" #: /home/kovid/work/calibre/src/calibre/gui2/main_window.py:17 msgid "" @@ -4332,23 +4340,23 @@ msgstr "" msgid "ERROR: Unhandled exception" msgstr "ERRORE: eccezione non gestita" -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:108 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:115 msgid "Jobs:" msgstr "Lavori:" -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:117 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:124 msgid "Click to see list of active jobs." msgstr "Fare clic per vedere una lista dei lavori attivi" -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:146 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:153 msgid "Click to browse books by their covers" msgstr "Fare clic per sfogliare i libri per copertine" -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:146 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:153 msgid "Click to turn off Cover Browsing" msgstr "Fare clic per disattivare la navigazione per copertina" -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:151 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:158 msgid "" "

                                                    Browsing books by their covers is disabled.
                                                    Import of pictureflow " "module failed:
                                                    " @@ -4356,7 +4364,7 @@ msgstr "" "

                                                    La navigazione per copertina è disabilitata.
                                                    Caricamento del modulo " "pictureflow fallito:
                                                    " -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:159 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:166 msgid "Click to browse books by tags" msgstr "Fare clic per sfogliare i libri per tag" @@ -4643,38 +4651,48 @@ msgstr "Espressione regolare non valida" msgid "Invalid regular expression: %s" msgstr "Espressione regolare non valida: %s" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:178 -msgid "Library" -msgstr "Biblioteca" +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:139 +msgid "" +"Library\n" +"%d\n" +"books" +msgstr "" +"Biblioteca\n" +"%d\n" +"libri" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:179 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:140 msgid "" "Reader\n" -"%s available" +"%s\n" +"available" msgstr "" "Lettore\n" -"%s disponibili" +"%s\n" +"disponibile" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:180 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:141 msgid "" "Card\n" -"%s available" +"%s\n" +"available" msgstr "" "Scheda\n" -"%s disponibili" +"%s\n" +"disponibile" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:184 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:146 msgid "Click to see the list of books available on your computer" msgstr "" "Fare clic per vedere la lista di libri disponibili sul proprio computer" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:185 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:147 msgid "Click to see the list of books in the main memory of your reader" msgstr "" "Fare clic per vedere la lista di libri nella memoria principale del proprio " "lettore" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:186 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:148 msgid "Click to see the list of books on the storage card in your reader" msgstr "" "Fare clic per vedere la lista di libri nella scheda di memoria del proprio " @@ -4709,14 +4727,14 @@ msgstr "Nome utente per l'accesso. Predefinito: %default" #: /home/kovid/work/calibre/src/calibre/library/__init__.py:32 msgid "The maximum size for displayed covers" -msgstr "" +msgstr "La dimensione massima per le copertine visualizzate" #: /home/kovid/work/calibre/src/calibre/library/cli.py:95 msgid "" "Path to the calibre library. Default is to use the path stored in the " "settings." msgstr "" -"Percorso alla libreria di calibre. L'impostazione predefinita è quella di " +"Percorso alla biblioteca di calibre. L'impostazione predefinita è quella di " "usare il percorso salvato nelle impostazioni." #: /home/kovid/work/calibre/src/calibre/library/cli.py:172 @@ -4786,7 +4804,7 @@ msgid "" "folder." msgstr "" "Il prefisso per tutti i percorsi. L'impostazione predefinita è il percorso " -"alla cartella della libreria." +"alla cartella della biblioteca." #: /home/kovid/work/calibre/src/calibre/library/cli.py:193 msgid "" @@ -5018,30 +5036,30 @@ msgstr "" "\n" "Per aiuto su un comando particolare: %%prog command --help\n" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1137 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1144 msgid "

                                                    Copying books to %s

                                                    " msgstr "

                                                    Sto copiando i libri in %s

                                                    " -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1150 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1262 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1157 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1266 msgid "Copying %s" msgstr "Sto copiando %s" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1233 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1237 msgid "

                                                    Migrating old database to ebook library in %s

                                                    " msgstr "" -"

                                                    Sto migrando il vecchio database nella nuova libreria in %s

                                                    " +"

                                                    Sto migrando il vecchio database nella nuova biblioteca in %s

                                                    " -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1279 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1283 msgid "Compacting database" msgstr "Compattazione database" #: /home/kovid/work/calibre/src/calibre/library/server.py:139 msgid "Password to access your calibre library. Username is " msgstr "" -"Password per accedere alla propria libreria di calibre. Il nome utente è " +"Password per accedere alla propria biblioteca di calibre. Il nome utente è " -#: /home/kovid/work/calibre/src/calibre/library/server.py:380 +#: /home/kovid/work/calibre/src/calibre/library/server.py:382 msgid "" "[options]\n" "\n" @@ -5085,7 +5103,7 @@ msgstr "Timeout predefinito per le operazioni di rete (secondi)" #: /home/kovid/work/calibre/src/calibre/utils/config.py:532 msgid "Path to directory in which your library of books is stored" -msgstr "Percorso alla cartella in cui è salvata la libreria" +msgstr "Percorso alla cartella in cui è salvata la biblioteca" #: /home/kovid/work/calibre/src/calibre/utils/config.py:534 msgid "The language in which to display the user interface" @@ -5097,11 +5115,11 @@ msgstr "Leggi metadati dai file" #: /home/kovid/work/calibre/src/calibre/utils/config.py:540 msgid "The priority of worker processes" -msgstr "" +msgstr "La priorità dei processi di lavoro" #: /home/kovid/work/calibre/src/calibre/utils/fontconfig.py:169 msgid "Could not initialize the fontconfig library" -msgstr "Impossibile inizializzare la libreria fontconfig" +msgstr "Impossibile inizializzare la biblioteca fontconfig" #: /home/kovid/work/calibre/src/calibre/utils/sftp.py:53 msgid "URL must have the scheme sftp" @@ -5119,13 +5137,13 @@ msgstr "Negoziazione della sessione SSH fallita: " msgid "Failed to authenticate with server: %s" msgstr "Autenticazione fallita col server: %s" -#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:63 -#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:84 +#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:76 +#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:97 msgid "Unknown feed" msgstr "Feed sconosciuto" -#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:102 -#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:124 +#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:115 +#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:137 msgid "Untitled article" msgstr "Articolo senza titolo" @@ -5327,69 +5345,69 @@ msgid "Dont show the progress bar" msgstr "Non mostrare la barra di progresso" #: /home/kovid/work/calibre/src/calibre/web/feeds/main.py:118 -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:668 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:674 msgid "Fetching feeds..." msgstr "Scaricamento feed..." -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:34 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:40 msgid "Unknown News Source" msgstr "Sorgente di notizie sconosciuta" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:549 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:555 msgid "Download finished" msgstr "Scaricamento completato" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:551 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:557 msgid "Failed to download the following articles:" msgstr "Scaricamento dei seguenti articoli fallito:" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:553 #: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:559 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:565 msgid " from " msgstr " da " -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:557 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:563 msgid "Failed to download parts of the following articles:" msgstr "Scaricamento dei seguenti articoli fallito parzialmente:" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:561 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:567 msgid "\tFailed links:" msgstr "\tLink falliti:" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:647 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:653 msgid "Could not fetch article. Run with --debug to see the reason" msgstr "" "Impossibile scaricare l'articolo. Eseguire con --debug per vedere la ragione" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:672 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:678 msgid "Got feeds from index page" msgstr "Ricevuti feed dalla pagina principale" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:678 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:684 msgid "Trying to download cover..." msgstr "Tentativo di scaricamento della copertina..." -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:731 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:737 msgid "Starting download [%d thread(s)]..." msgstr "Inizio scaricamento [%d articolo(i)]..." -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:747 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:753 msgid "Feeds downloaded to %s" msgstr "Feed scaricati in %s" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:757 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:763 msgid "Could not download cover: %s" msgstr "Impossibile scaricare la copertina: %s" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:762 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:768 msgid "Downloading cover from %s" msgstr "Scaricamento copertina da %s" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:802 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:895 msgid "Untitled Article" msgstr "Articolo senza titolo" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:857 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:950 msgid "" "\n" "Downloaded article %s from %s\n" @@ -5399,19 +5417,19 @@ msgstr "" "Scaricato articolo %s da %s\n" "%s" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:863 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:956 msgid "Article downloaded: %s" msgstr "Articolo scaricato: %s" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:869 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:962 msgid "Failed to download article: %s from %s\n" msgstr "Scaricamento fallito dell'articolo: %s da %s\n" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:874 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:967 msgid "Article download failed: %s" msgstr "Scaricamento fallito dell'articolo: %s" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:889 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:982 msgid "Fetching feed" msgstr "Scaricamento feed" @@ -5519,6 +5537,46 @@ msgstr "Mostra un output dettagliato. Utile per il debugging" #~ msgid "Custom news sources" #~ msgstr "Fonti di notizie personalizzate" +#~ msgid "Library" +#~ msgstr "Biblioteca" + +#~ msgid "" +#~ "Reader\n" +#~ "%s available" +#~ msgstr "" +#~ "Lettore\n" +#~ "%s disponibili" + +#~ msgid "" +#~ "Card\n" +#~ "%s available" +#~ msgstr "" +#~ "Scheda\n" +#~ "%s disponibili" + +#~ msgid "" +#~ "\n" +#~ "\n" +#~ "

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

                                                    " + #~ msgid "" #~ "The fields to display when listing books in the database. Should be a comma " #~ "separated list of fields.\n" diff --git a/src/calibre/translations/nb.po b/src/calibre/translations/nb.po index e1d3a4bf85..7eb819dce6 100644 --- a/src/calibre/translations/nb.po +++ b/src/calibre/translations/nb.po @@ -7,24 +7,24 @@ msgid "" msgstr "" "Project-Id-Version: calibre\n" "Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2008-12-06 07:37+0000\n" +"POT-Creation-Date: 2008-12-15 02:49+0000\n" "PO-Revision-Date: 2008-12-05 23:40+0000\n" "Last-Translator: Helene Klungvik \n" "Language-Team: Norwegian Bokmal \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2008-12-07 21:42+0000\n" +"X-Launchpad-Export-Date: 2008-12-15 18:24+0000\n" "X-Generator: Launchpad (build Unknown)\n" -#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:135 -#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:153 -#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:191 -#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:219 +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:137 +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:155 +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:193 +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:221 msgid "Unable to detect the %s disk drive. Try rebooting." msgstr "Finner ikke %s lagringsenheten. Venligst prøv å restarte." -#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:407 +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:409 msgid "The reader has no storage card connected." msgstr "Lesebrettet har ikke et lagringskort tilknyttet seg." @@ -259,13 +259,13 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:226 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:229 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:274 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:64 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:66 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:99 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:101 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf.py:321 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf.py:436 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:794 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:65 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:67 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:100 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:102 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf.py:334 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf.py:449 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:793 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/pdf.py:12 #: /home/kovid/work/calibre/src/calibre/ebooks/odt/to_oeb.py:46 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf.py:48 @@ -274,12 +274,12 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:365 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:37 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:38 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:317 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:331 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:815 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:581 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:818 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:821 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:328 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:342 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:826 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:583 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:820 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:823 #: /home/kovid/work/calibre/src/calibre/gui2/tools.py:52 #: /home/kovid/work/calibre/src/calibre/gui2/tools.py:112 #: /home/kovid/work/calibre/src/calibre/library/cli.py:245 @@ -288,10 +288,10 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/library/database.py:1423 #: /home/kovid/work/calibre/src/calibre/library/database.py:1452 #: /home/kovid/work/calibre/src/calibre/library/database.py:1564 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:473 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:485 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:810 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:843 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:477 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:489 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:817 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:850 msgid "Unknown" msgstr "Ukjent" @@ -303,11 +303,11 @@ msgid "" "formats are: %s\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/from_html.py:99 +#: /home/kovid/work/calibre/src/calibre/ebooks/epub/from_html.py:98 msgid "Could not find an ebook inside the archive" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/from_html.py:157 +#: /home/kovid/work/calibre/src/calibre/ebooks/epub/from_html.py:156 msgid "" "%prog [options] file.html|opf\n" "\n" @@ -318,7 +318,7 @@ msgid "" "the element of the OPF file. \n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/from_html.py:386 +#: /home/kovid/work/calibre/src/calibre/ebooks/epub/from_html.py:385 #: /home/kovid/work/calibre/src/calibre/ebooks/html.py:1035 msgid "You must specify an input HTML file" msgstr "" @@ -332,7 +332,7 @@ msgid "" "Could not find reasonable point at which to split: %s Sub-tree size: %d KB" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/split.py:109 +#: /home/kovid/work/calibre/src/calibre/ebooks/epub/split.py:136 msgid "" "\t\tToo much markup. Re-splitting without structure preservation. This may " "cause incorrect rendering." @@ -1069,11 +1069,11 @@ msgstr "Kunne ikke lese omslagsbilde: %s" msgid "Cannot read from: %s" msgstr "Kan ikke lese fra: %s" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:2000 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1997 msgid "Failed to process opf file" msgstr "Behandlingen av opf filen feilet" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:2006 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:2003 msgid "" "Usage: %prog [options] mybook.html\n" "\n" @@ -1301,16 +1301,16 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:70 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:36 #: /home/kovid/work/calibre/src/calibre/gui2/library.py:91 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:314 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:885 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:325 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:896 msgid "Title" msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:274 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:37 #: /home/kovid/work/calibre/src/calibre/gui2/library.py:92 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:319 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:886 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:330 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:897 msgid "Author(s)" msgstr "" @@ -1329,25 +1329,25 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:391 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:527 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:308 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:275 -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:54 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:286 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:58 msgid "Comments" msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:280 #: /home/kovid/work/calibre/src/calibre/gui2/library.py:97 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:264 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:825 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:889 -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:56 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:275 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:836 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:900 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:60 #: /home/kovid/work/calibre/src/calibre/gui2/tags.py:42 msgid "Tags" msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:281 #: /home/kovid/work/calibre/src/calibre/gui2/library.py:98 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:280 -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:55 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:291 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:59 #: /home/kovid/work/calibre/src/calibre/gui2/tags.py:42 msgid "Series" msgstr "" @@ -1451,7 +1451,7 @@ msgstr "Bruksmåte: %s fil.lit" msgid "Cover saved to" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:939 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:938 msgid "Set the dc:language field" msgstr "" @@ -1591,9 +1591,9 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:84 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:85 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:86 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:271 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:820 -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:52 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:282 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:831 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:56 msgid "Path" msgstr "" @@ -1601,8 +1601,8 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:88 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:89 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:92 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:270 -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:53 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:281 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:57 #: /home/kovid/work/calibre/src/calibre/gui2/tags.py:42 msgid "Formats" msgstr "" @@ -1709,49 +1709,49 @@ msgid "" "Server" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:161 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:162 msgid "Error log:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:165 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:166 msgid "Access log:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:187 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:339 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:188 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:341 msgid "Failed to start content server" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:227 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:228 msgid "Invalid size" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:227 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:228 msgid "The size %s is invalid. must be of the form widthxheight" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:269 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:273 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:270 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:274 msgid "Invalid database location" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:270 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:271 msgid "
                                                    Must be a directory." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:270 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:271 msgid "Invalid database location " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:274 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:275 msgid "Invalid database location.
                                                    Cannot write to " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:286 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:287 msgid "Compacting database. This may take a while." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:286 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:287 msgid "Compacting..." msgstr "" @@ -1775,7 +1775,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:389 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:399 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:400 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:374 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:373 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:509 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:282 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:288 @@ -2115,7 +2115,7 @@ msgid " is not a valid picture" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub.py:227 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:908 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:910 msgid "Cannot convert" msgstr "" @@ -2156,22 +2156,22 @@ msgid "Book Cover" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:371 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:510 -msgid "Use cover from &source file" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:372 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:507 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:316 msgid "Change &cover image:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:373 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:372 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:508 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:317 msgid "Browse for an image to use as the cover of this book." msgstr "" +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:374 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:510 +msgid "Use cover from &source file" +msgstr "" + #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:375 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:511 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:279 @@ -2186,14 +2186,14 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:377 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:513 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:124 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:128 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:283 msgid "&Author(s): " msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:378 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:514 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:125 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:129 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:284 msgid "" "Change the author(s) of this book. Multiple authors should be separated by " @@ -2214,14 +2214,14 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:381 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:517 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:132 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:136 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:293 msgid "&Publisher: " msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:382 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:518 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:133 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:137 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:294 msgid "Change the publisher of this book" msgstr "" @@ -2234,7 +2234,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:384 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:520 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:135 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:139 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:296 msgid "" "Tags categorize the book. This is particularly useful while searching. " @@ -2243,7 +2243,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:385 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:521 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:140 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:144 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:299 msgid "&Series:" msgstr "" @@ -2252,8 +2252,8 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:387 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:522 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:523 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:141 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:142 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:145 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:146 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:300 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:301 msgid "List of known series. You can add new series." @@ -2666,91 +2666,95 @@ msgid "" "\n" "

                                                    " +"margin-left:0px; margin-right:0px; -qt-block-indent:0; text-" +"indent:0px;\">

                                                    " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:122 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:126 msgid "Edit Meta information" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:123 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:127 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:278 msgid "Meta information" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:126 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:130 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:285 msgid "Author S&ort: " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:127 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:131 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:286 msgid "" "Specify how the author(s) of this book should be sorted. For example Charles " "Dickens should be sorted as Dickens, Charles." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:128 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:132 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:289 msgid "&Rating:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:129 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:130 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:133 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:134 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:290 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:291 msgid "Rating of this book. 0-5 stars" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:131 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:135 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:292 msgid " stars" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:134 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:138 msgid "Add Ta&gs: " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:136 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:137 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:140 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:141 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:297 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:298 msgid "Open Tag Editor" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:138 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:142 msgid "&Remove tags:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:139 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:143 msgid "Comma separated list of tags to remove from the books. " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:143 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:147 msgid "Remove &format:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:264 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:148 +msgid "A&utomatically set author sort" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:265 msgid "" "

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

                                                    " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:294 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:295 msgid "Could not fetch cover.
                                                    " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:294 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:295 msgid "Could not fetch cover" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:300 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:301 msgid "Cannot fetch cover" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:300 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:301 msgid "You must specify the ISBN identifier for this book." msgstr "" @@ -2856,14 +2860,14 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:335 #: /home/kovid/work/calibre/src/calibre/gui2/tags.py:42 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:757 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:760 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1057 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:761 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:765 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1064 msgid "News" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:137 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:221 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:222 msgid "Recipes" msgstr "" @@ -3067,25 +3071,25 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:163 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:172 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:228 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:229 msgid "Invalid input" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:164 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:173 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:229 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:230 msgid "

                                                    Could not create recipe. Error:
                                                    %s" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:179 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:210 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:234 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:211 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:235 msgid "Replace recipe?" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:180 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:211 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:235 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:212 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:236 msgid "A custom recipe named %s already exists. Do you want to replace it?" msgstr "" @@ -3097,7 +3101,7 @@ msgstr "" msgid "Pick the recipe to customize" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:221 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:222 msgid "Choose a recipe file" msgstr "" @@ -3341,12 +3345,12 @@ msgid "Job has already run" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/library.py:93 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:887 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:898 msgid "Size (MB)" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/library.py:94 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:888 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:899 msgid "Date" msgstr "" @@ -3354,25 +3358,25 @@ msgstr "" msgid "Rating" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:263 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:269 #: /home/kovid/work/calibre/src/calibre/gui2/library.py:274 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:280 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:285 msgid "None" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:280 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:291 msgid "Book %s of %s." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:819 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:830 msgid "Format" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:824 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:835 msgid "Timestamp" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:922 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:933 msgid "Search (For Advanced Search click the button to the left)" msgstr "" @@ -3531,7 +3535,7 @@ msgid "Save to disk in a single directory" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/main.py:192 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1106 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1108 msgid "Save only %s format to disk" msgstr "" @@ -3565,7 +3569,7 @@ msgid "Bad database location" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/main.py:262 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1262 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1264 msgid "Choose a location for your ebook library." msgstr "" @@ -3573,23 +3577,23 @@ msgstr "" msgid "Migrating database" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:416 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:418 msgid "Device: " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:417 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:419 msgid " detected." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:439 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:441 msgid "Connected " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:450 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:452 msgid "Device database corrupted" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:451 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:453 msgid "" "\n" "

                                                    The database of books on the reader is corrupted. Try the " @@ -3605,288 +3609,288 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:503 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:599 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:505 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:601 msgid "" "

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

                                                      " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:506 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:602 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:508 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:604 msgid "Duplicates found!" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:539 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:563 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:541 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:565 msgid "Uploading books to device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:547 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:549 msgid "Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:548 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:550 msgid "EPUB Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:549 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:551 msgid "LRF Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:550 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:552 msgid "HTML Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:551 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:553 msgid "LIT Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:552 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:554 msgid "MOBI Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:553 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:555 msgid "Text books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:554 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:556 msgid "PDF Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:555 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:557 msgid "Comics" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:556 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:558 msgid "Archives" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:634 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:636 msgid "No space on device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:635 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:637 msgid "" "

                                                      Cannot upload books to device there is no more free space available " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:665 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:667 msgid "Confirm delete" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:666 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:668 msgid "Are you sure you want to delete these %d books?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:678 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:680 msgid "Deleting books from device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:708 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:730 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:710 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:732 msgid "Cannot edit metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:708 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:730 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:849 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:908 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:710 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:732 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:851 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:910 msgid "No books selected" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:777 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:779 msgid "Sending news to device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:829 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:831 msgid "Sending books to device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:832 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:834 msgid "No suitable formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:833 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:835 msgid "" "Could not upload the following books to the device, as no suitable formats " "were found:

                                                        %s
                                                      " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:849 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:851 msgid "Cannot save to disk" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:853 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:855 msgid "Choose destination directory" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:860 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:862 msgid "" "

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

                                                        " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:864 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:866 msgid "Could not save some ebooks" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:884 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:886 msgid "Fetching news from " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:898 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:900 msgid " fetched." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1012 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1030 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1042 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1014 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1032 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1044 msgid "No book selected" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1012 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1042 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1058 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1014 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1044 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1060 msgid "Cannot view" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1018 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1063 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1020 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1065 msgid "Choose the format to view" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1030 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1032 msgid "Cannot open folder" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1059 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1061 msgid "%s has no available formats." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1097 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1099 msgid "Cannot configure" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1097 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1099 msgid "Cannot configure while there are running jobs." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1116 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1118 msgid "Copying database" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1118 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1120 msgid "Copying library to " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1128 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1130 msgid "Invalid database" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1129 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1131 msgid "" "

                                                        An invalid database already exists at %s, delete it before trying to move " "the existing database.
                                                        Error: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1135 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1137 msgid "Could not move database" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1155 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1157 msgid "No detailed info available" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1156 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1158 msgid "No detailed information is available for books on the device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1199 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1201 msgid "Error talking to device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1200 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1202 msgid "" "There was a temporary error talking to the device. Please unplug and " "reconnect the device and or reboot." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1213 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1228 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1232 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1215 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1230 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1234 msgid "Conversion Error" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1214 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1216 msgid "" "

                                                        Could not convert: %s

                                                        It is a DRMed book. You must " "first remove the DRM using 3rd party tools." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1248 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1250 msgid "Database does not exist" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1249 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1251 msgid "" "The directory in which the database should be: %s no longer exists. Please " "choose a new database location." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1251 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1253 msgid "Choose new location for database" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1304 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1306 msgid "" "is the result of the efforts of many volunteers from all over the world. If " "you find it useful, please consider donating to support its development." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1325 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1327 msgid "There are active jobs. Are you sure you want to quit?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1327 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1329 msgid "" " is communicating with the device!
                                                        \n" " 'Quitting may cause corruption on the device.
                                                        \n" " 'Are you sure you want to quit?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1331 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1333 msgid "WARNING: Active jobs" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1360 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1362 msgid "" "will keep running in the system tray. To close it, choose Quit in the " "context menu of the system tray." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1373 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1375 msgid "" "Latest version: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1378 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1380 msgid "" "%s has been updated to version %s. See the new features. " "Visit the download page?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1378 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1380 msgid "Update available" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1393 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1395 msgid "Use the library located at the specified path." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1395 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1397 msgid "Log debugging information to console" msgstr "" @@ -4005,29 +4009,29 @@ msgstr "" msgid "ERROR: Unhandled exception" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:108 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:115 msgid "Jobs:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:117 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:124 msgid "Click to see list of active jobs." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:146 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:153 msgid "Click to browse books by their covers" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:146 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:153 msgid "Click to turn off Cover Browsing" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:151 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:158 msgid "" "

                                                        Browsing books by their covers is disabled.
                                                        Import of pictureflow " "module failed:
                                                        " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:159 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:166 msgid "Click to browse books by tags" msgstr "" @@ -4305,31 +4309,36 @@ msgstr "" msgid "Invalid regular expression: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:178 -msgid "Library" +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:139 +msgid "" +"Library\n" +"%d\n" +"books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:179 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:140 msgid "" "Reader\n" -"%s available" +"%s\n" +"available" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:180 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:141 msgid "" "Card\n" -"%s available" +"%s\n" +"available" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:184 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:146 msgid "Click to see the list of books available on your computer" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:185 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:147 msgid "Click to see the list of books in the main memory of your reader" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:186 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:148 msgid "Click to see the list of books on the storage card in your reader" msgstr "" @@ -4588,20 +4597,20 @@ msgid "" "For help on an individual command: %%prog command --help\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1137 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1144 msgid "

                                                        Copying books to %s

                                                        " msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1150 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1262 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1157 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1266 msgid "Copying %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1233 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1237 msgid "

                                                        Migrating old database to ebook library in %s

                                                        " msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1279 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1283 msgid "Compacting database" msgstr "" @@ -4609,7 +4618,7 @@ msgstr "" msgid "Password to access your calibre library. Username is " msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server.py:380 +#: /home/kovid/work/calibre/src/calibre/library/server.py:382 msgid "" "[options]\n" "\n" @@ -4684,13 +4693,13 @@ msgstr "" msgid "Failed to authenticate with server: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:63 -#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:84 +#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:76 +#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:97 msgid "Unknown feed" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:102 -#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:124 +#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:115 +#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:137 msgid "Untitled article" msgstr "" @@ -4839,87 +4848,87 @@ msgid "Dont show the progress bar" msgstr "" #: /home/kovid/work/calibre/src/calibre/web/feeds/main.py:118 -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:668 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:674 msgid "Fetching feeds..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:34 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:40 msgid "Unknown News Source" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:549 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:555 msgid "Download finished" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:551 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:557 msgid "Failed to download the following articles:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:553 #: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:559 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:565 msgid " from " msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:557 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:563 msgid "Failed to download parts of the following articles:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:561 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:567 msgid "\tFailed links:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:647 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:653 msgid "Could not fetch article. Run with --debug to see the reason" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:672 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:678 msgid "Got feeds from index page" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:678 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:684 msgid "Trying to download cover..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:731 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:737 msgid "Starting download [%d thread(s)]..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:747 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:753 msgid "Feeds downloaded to %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:757 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:763 msgid "Could not download cover: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:762 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:768 msgid "Downloading cover from %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:802 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:895 msgid "Untitled Article" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:857 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:950 msgid "" "\n" "Downloaded article %s from %s\n" "%s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:863 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:956 msgid "Article downloaded: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:869 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:962 msgid "Failed to download article: %s from %s\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:874 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:967 msgid "Article download failed: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:889 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:982 msgid "Fetching feed" msgstr "" diff --git a/src/calibre/translations/nds.po b/src/calibre/translations/nds.po index 9b639f5094..7ea1f964bb 100644 --- a/src/calibre/translations/nds.po +++ b/src/calibre/translations/nds.po @@ -7,25 +7,25 @@ msgid "" msgstr "" "Project-Id-Version: de\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2008-12-06 07:37+0000\n" -"PO-Revision-Date: 2008-12-06 14:15+0000\n" +"POT-Creation-Date: 2008-12-15 02:49+0000\n" +"PO-Revision-Date: 2008-12-11 10:01+0000\n" "Last-Translator: S. Dorscht \n" "Language-Team: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2008-12-07 21:42+0000\n" +"X-Launchpad-Export-Date: 2008-12-15 18:24+0000\n" "X-Generator: Launchpad (build Unknown)\n" "Generated-By: pygettext.py 1.5\n" -#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:135 -#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:153 -#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:191 -#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:219 +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:137 +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:155 +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:193 +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:221 msgid "Unable to detect the %s disk drive. Try rebooting." msgstr "Konnte das Laufwerk %s nicht finden. Versuchen Sie einen Neustart." -#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:407 +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:409 msgid "The reader has no storage card connected." msgstr "Im Reader ist keine Speicherkarte eingesteckt." @@ -284,13 +284,13 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:226 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:229 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:274 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:64 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:66 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:99 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:101 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf.py:321 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf.py:436 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:794 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:65 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:67 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:100 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:102 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf.py:334 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf.py:449 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:793 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/pdf.py:12 #: /home/kovid/work/calibre/src/calibre/ebooks/odt/to_oeb.py:46 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf.py:48 @@ -299,12 +299,12 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:365 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:37 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:38 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:317 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:331 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:815 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:581 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:818 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:821 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:328 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:342 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:826 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:583 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:820 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:823 #: /home/kovid/work/calibre/src/calibre/gui2/tools.py:52 #: /home/kovid/work/calibre/src/calibre/gui2/tools.py:112 #: /home/kovid/work/calibre/src/calibre/library/cli.py:245 @@ -313,10 +313,10 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/library/database.py:1423 #: /home/kovid/work/calibre/src/calibre/library/database.py:1452 #: /home/kovid/work/calibre/src/calibre/library/database.py:1564 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:473 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:485 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:810 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:843 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:477 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:489 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:817 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:850 msgid "Unknown" msgstr "Unbekannt" @@ -332,11 +332,11 @@ msgstr "" "Konvertiert eine große Anzahl von eBook Formaten in eine EPUB Datei. " "Unterstützte Formate: %s\n" -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/from_html.py:99 +#: /home/kovid/work/calibre/src/calibre/ebooks/epub/from_html.py:98 msgid "Could not find an ebook inside the archive" msgstr "Konnte kein eBook im Archiv finden" -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/from_html.py:157 +#: /home/kovid/work/calibre/src/calibre/ebooks/epub/from_html.py:156 msgid "" "%prog [options] file.html|opf\n" "\n" @@ -354,7 +354,7 @@ msgstr "" "Verknüpfungen aus dem\n" " Element der OPF Datei verwendet. \n" -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/from_html.py:386 +#: /home/kovid/work/calibre/src/calibre/ebooks/epub/from_html.py:385 #: /home/kovid/work/calibre/src/calibre/ebooks/html.py:1035 msgid "You must specify an input HTML file" msgstr "Geben Sie eine Eingabedatei im HTML Format an." @@ -370,7 +370,7 @@ msgstr "" "Konnte keinen vernünftige Stelle zur Trennung finden: %s Unterbaumgröße: %d " "KB" -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/split.py:109 +#: /home/kovid/work/calibre/src/calibre/ebooks/epub/split.py:136 msgid "" "\t\tToo much markup. Re-splitting without structure preservation. This may " "cause incorrect rendering." @@ -1177,11 +1177,11 @@ msgstr "Konnte Umschlagbild nicht lesen: %s" msgid "Cannot read from: %s" msgstr "Lesen nicht möglich von: %s" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:2000 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1997 msgid "Failed to process opf file" msgstr "Verarbeitung der OPF Datei schlug fehl" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:2006 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:2003 msgid "" "Usage: %prog [options] mybook.html\n" "\n" @@ -1431,16 +1431,16 @@ msgstr "Gebe Kommentar ein" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:70 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:36 #: /home/kovid/work/calibre/src/calibre/gui2/library.py:91 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:314 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:885 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:325 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:896 msgid "Title" msgstr "Titel" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:274 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:37 #: /home/kovid/work/calibre/src/calibre/gui2/library.py:92 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:319 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:886 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:330 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:897 msgid "Author(s)" msgstr "Autor(en)" @@ -1459,25 +1459,25 @@ msgstr "Kategorie" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:391 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:527 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:308 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:275 -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:54 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:286 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:58 msgid "Comments" msgstr "Bemerkung" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:280 #: /home/kovid/work/calibre/src/calibre/gui2/library.py:97 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:264 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:825 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:889 -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:56 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:275 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:836 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:900 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:60 #: /home/kovid/work/calibre/src/calibre/gui2/tags.py:42 msgid "Tags" msgstr "Etiketten" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:281 #: /home/kovid/work/calibre/src/calibre/gui2/library.py:98 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:280 -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:55 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:291 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:59 #: /home/kovid/work/calibre/src/calibre/gui2/tags.py:42 msgid "Series" msgstr "Serie" @@ -1601,7 +1601,7 @@ msgstr "Benutzung: %s dateiname.lit" msgid "Cover saved to" msgstr "Umschlagbild gespeichert unter" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:939 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:938 msgid "Set the dc:language field" msgstr "Geben Sie das Feld dc:language an" @@ -1747,9 +1747,9 @@ msgstr "Buch auf dem Gerät ansehen" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:84 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:85 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:86 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:271 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:820 -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:52 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:282 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:831 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:56 msgid "Path" msgstr "Pfad" @@ -1757,8 +1757,8 @@ msgstr "Pfad" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:88 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:89 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:92 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:270 -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:53 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:281 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:57 #: /home/kovid/work/calibre/src/calibre/gui2/tags.py:42 msgid "Formats" msgstr "Formate" @@ -1868,50 +1868,50 @@ msgstr "" "Content\n" "Server" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:161 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:162 msgid "Error log:" msgstr "Fehler-Protokolldatei:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:165 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:166 msgid "Access log:" msgstr "Zugriffs-Protokolldatei:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:187 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:339 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:188 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:341 msgid "Failed to start content server" msgstr "Content Server konnte nicht gestartet werden" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:227 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:228 msgid "Invalid size" msgstr "Ungültige Größe" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:227 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:228 msgid "The size %s is invalid. must be of the form widthxheight" msgstr "" "Die Größe %s ist ungültig. Sie muss der Form BreitexHöhe entsprechen." -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:269 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:273 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:270 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:274 msgid "Invalid database location" msgstr "Ortsangabe der Datenbank ungültig" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:270 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:271 msgid "
                                                        Must be a directory." msgstr "
                                                        Muss ein Verzeichnis sein." -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:270 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:271 msgid "Invalid database location " msgstr "Ortsangabe der Datenbank ungültig " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:274 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:275 msgid "Invalid database location.
                                                        Cannot write to " msgstr "Ortsangabe der Datenbank ungültig.
                                                        Speichern nicht möglich " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:286 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:287 msgid "Compacting database. This may take a while." msgstr "Komprimiere Datenbank. Das kann etwas dauern..." -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:286 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:287 msgid "Compacting..." msgstr "Komprimiere Datenbank..." @@ -1938,7 +1938,7 @@ msgstr "Zu einem neuen Ort der Datenbank wechseln" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:389 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:399 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:400 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:374 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:373 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:509 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:282 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:288 @@ -2306,7 +2306,7 @@ msgid " is not a valid picture" msgstr " ist kein gültiges Bild" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub.py:227 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:908 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:910 msgid "Cannot convert" msgstr "Konvertierung nicht möglich" @@ -2349,22 +2349,22 @@ msgid "Book Cover" msgstr "Umschlagbild" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:371 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:510 -msgid "Use cover from &source file" -msgstr "Um&schlagbild der Quelldatei verwenden" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:372 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:507 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:316 msgid "Change &cover image:" msgstr "&Umschlagbild ändern:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:373 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:372 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:508 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:317 msgid "Browse for an image to use as the cover of this book." msgstr "Nach Umschlagbild durchsuchen..." +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:374 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:510 +msgid "Use cover from &source file" +msgstr "Um&schlagbild der Quelldatei verwenden" + #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:375 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:511 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:279 @@ -2379,14 +2379,14 @@ msgstr "Titel dieses Buches ändern" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:377 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:513 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:124 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:128 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:283 msgid "&Author(s): " msgstr "&Autor(en): " #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:378 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:514 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:125 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:129 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:284 msgid "" "Change the author(s) of this book. Multiple authors should be separated by " @@ -2412,14 +2412,14 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:381 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:517 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:132 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:136 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:293 msgid "&Publisher: " msgstr "&Herausgeber: " #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:382 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:518 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:133 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:137 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:294 msgid "Change the publisher of this book" msgstr "Herausgeber dieses Buches ändern" @@ -2432,7 +2432,7 @@ msgstr "&Etiketten: " #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:384 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:520 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:135 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:139 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:296 msgid "" "Tags categorize the book. This is particularly useful while searching. " @@ -2444,7 +2444,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:385 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:521 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:140 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:144 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:299 msgid "&Series:" msgstr "&Serien:" @@ -2453,8 +2453,8 @@ msgstr "&Serien:" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:387 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:522 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:523 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:141 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:142 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:145 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:146 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:300 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:301 msgid "List of known series. You can add new series." @@ -2904,8 +2904,8 @@ msgid "" "\n" "

                                                        " +"margin-left:0px; margin-right:0px; -qt-block-indent:0; text-" +"indent:0px;\">

                                                        " msgstr "" "\n" @@ -2915,24 +2915,24 @@ msgstr "" "\n" "

                                                        " +"margin-left:0px; margin-right:0px; -qt-block-indent:0; text-" +"indent:0px;\">

                                                        " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:122 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:126 msgid "Edit Meta information" msgstr "Meta-Informationen bearbeiten" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:123 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:127 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:278 msgid "Meta information" msgstr "Meta-Informationen" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:126 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:130 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:285 msgid "Author S&ort: " msgstr "S&ortierung nach Autor: " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:127 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:131 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:286 msgid "" "Specify how the author(s) of this book should be sorted. For example Charles " @@ -2941,49 +2941,53 @@ msgstr "" "Geben Sie an, wie der Autor dieses Buches sortiert werden soll. \"Charles " "Dickens\" zum Beispiel als \"Dickens, Charles\"." -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:128 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:132 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:289 msgid "&Rating:" msgstr "&Bewertung:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:129 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:130 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:133 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:134 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:290 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:291 msgid "Rating of this book. 0-5 stars" msgstr "Bewertung dieses Buches: 0-5 Sterne" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:131 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:135 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:292 msgid " stars" msgstr " Sterne" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:134 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:138 msgid "Add Ta&gs: " msgstr "&Etiketten hinzufügen: " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:136 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:137 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:140 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:141 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:297 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:298 msgid "Open Tag Editor" msgstr "Etiketten-Editor öffnen" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:138 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:142 msgid "&Remove tags:" msgstr "Etiketten entfe&rnen:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:139 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:143 msgid "Comma separated list of tags to remove from the books. " msgstr "" "Durch Kommata getrennte Liste der Etiketten, die von den Büchern entfernt " "werden. " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:143 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:147 msgid "Remove &format:" msgstr "&Format entfernen:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:264 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:148 +msgid "A&utomatically set author sort" +msgstr "Automatisch Sortierung nach Autor setzen" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:265 msgid "" "

                                                        Enter your username and password for LibraryThing.com.
                                                        If you " "do not have one, you can register " @@ -2993,19 +2997,19 @@ msgstr "" "LibraryThing.com an.
                                                        Insofern Sie dies nicht besitzen, können " "Sie sich kostenlos anmelden!

                                                        " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:294 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:295 msgid "Could not fetch cover.
                                                        " msgstr "Konnte kein Umschlagbild abrufen.
                                                        " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:294 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:295 msgid "Could not fetch cover" msgstr "Konnte kein Umschlagbild abrufen" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:300 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:301 msgid "Cannot fetch cover" msgstr "Kann kein Umschlagbild abrufen" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:300 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:301 msgid "You must specify the ISBN identifier for this book." msgstr "Sie müssen die ISBN für dieses Buch angeben." @@ -3114,14 +3118,14 @@ msgstr "Neue individuelle Nachrichtenquelle hinzufügen" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:335 #: /home/kovid/work/calibre/src/calibre/gui2/tags.py:42 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:757 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:760 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1057 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:761 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:765 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1064 msgid "News" msgstr "Nachrichten" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:137 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:221 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:222 msgid "Recipes" msgstr "Rezepte" @@ -3342,25 +3346,25 @@ msgstr "Dieser Feed wurde schon zu diesem Rezept hinzugefügt" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:163 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:172 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:228 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:229 msgid "Invalid input" msgstr "Ungültige Eingabe" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:164 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:173 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:229 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:230 msgid "

                                                        Could not create recipe. Error:
                                                        %s" msgstr "

                                                        Konnte Rezept nicht erstellen. Fehler:
                                                        %s" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:179 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:210 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:234 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:211 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:235 msgid "Replace recipe?" msgstr "Rezept ersetzen?" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:180 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:211 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:235 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:212 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:236 msgid "A custom recipe named %s already exists. Do you want to replace it?" msgstr "" "Es gibt schon ein erstelltes Rezept mit dem Namen %s. Soll es ersetzt werden?" @@ -3373,7 +3377,7 @@ msgstr "Rezept wählen" msgid "Pick the recipe to customize" msgstr "Rezept zum Anpassen auswählen" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:221 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:222 msgid "Choose a recipe file" msgstr "Eine Rezept Datei auswählen" @@ -3653,12 +3657,12 @@ msgid "Job has already run" msgstr "Auftrag wird schon ausgeführt" #: /home/kovid/work/calibre/src/calibre/gui2/library.py:93 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:887 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:898 msgid "Size (MB)" msgstr "Größe (MB)" #: /home/kovid/work/calibre/src/calibre/gui2/library.py:94 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:888 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:899 msgid "Date" msgstr "Datum" @@ -3666,25 +3670,25 @@ msgstr "Datum" msgid "Rating" msgstr "Bewertung" -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:263 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:269 #: /home/kovid/work/calibre/src/calibre/gui2/library.py:274 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:280 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:285 msgid "None" msgstr "Keine" -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:280 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:291 msgid "Book %s of %s." msgstr "Buch %s von %s." -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:819 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:830 msgid "Format" msgstr "Format" -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:824 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:835 msgid "Timestamp" msgstr "Zeitstempel" -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:922 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:933 msgid "Search (For Advanced Search click the button to the left)" msgstr "Suche (Zur erweiterten Suche die Schaltfläche links klicken)" @@ -3849,7 +3853,7 @@ msgid "Save to disk in a single directory" msgstr "Auf Festplatte in ein einziges Verzeichnis speichern" #: /home/kovid/work/calibre/src/calibre/gui2/main.py:192 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1106 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1108 msgid "Save only %s format to disk" msgstr "Nur das %s Format auf Festplatte speichern" @@ -3883,7 +3887,7 @@ msgid "Bad database location" msgstr "Schlechter Datenbank Standort" #: /home/kovid/work/calibre/src/calibre/gui2/main.py:262 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1262 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1264 msgid "Choose a location for your ebook library." msgstr "Wählen Sie einen Speicherort für Ihre eBook Bibliothek." @@ -3891,23 +3895,23 @@ msgstr "Wählen Sie einen Speicherort für Ihre eBook Bibliothek." msgid "Migrating database" msgstr "Migriere Datenbank" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:416 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:418 msgid "Device: " msgstr "Gerät: " -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:417 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:419 msgid " detected." msgstr " gefunden." -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:439 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:441 msgid "Connected " msgstr "Angeschlossen: " -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:450 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:452 msgid "Device database corrupted" msgstr "Gerätedatenbank ist beschädigt" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:451 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:453 msgid "" "\n" "

                                                        The database of books on the reader is corrupted. Try the " @@ -3938,8 +3942,8 @@ msgstr "" " \n" " " -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:503 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:599 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:505 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:601 msgid "" "

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

                                                          " @@ -3947,104 +3951,104 @@ msgstr "" "

                                                          Es existieren bereits Bücher mit dem selben Titel in der Datenbank. " "Sollen die folgenden Bücher trotzdem hinzugefügt werden?

                                                            " -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:506 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:602 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:508 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:604 msgid "Duplicates found!" msgstr "Duplikate gefunden!" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:539 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:563 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:541 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:565 msgid "Uploading books to device." msgstr "Lade Bücher auf das Gerät." -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:547 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:549 msgid "Books" msgstr "Bücher" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:548 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:550 msgid "EPUB Books" msgstr "EPUB Bücher" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:549 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:551 msgid "LRF Books" msgstr "LRF Bücher" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:550 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:552 msgid "HTML Books" msgstr "HTML Bücher" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:551 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:553 msgid "LIT Books" msgstr "LIT Bücher" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:552 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:554 msgid "MOBI Books" msgstr "MOBI Bücher" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:553 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:555 msgid "Text books" msgstr "Text Bücher" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:554 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:556 msgid "PDF Books" msgstr "PDF Bücher" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:555 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:557 msgid "Comics" msgstr "Comics" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:556 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:558 msgid "Archives" msgstr "Archive" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:634 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:636 msgid "No space on device" msgstr "Gerätespeicher voll" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:635 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:637 msgid "" "

                                                            Cannot upload books to device there is no more free space available " msgstr "" "

                                                            Es können keine Bücher mehr auf das Gerät geladen werden, da der " "Gerätespeicher voll ist " -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:665 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:667 msgid "Confirm delete" msgstr "Bestätigen Sie das Löschen" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:666 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:668 msgid "Are you sure you want to delete these %d books?" msgstr "Sind Sie sicher, dass Sie diese %d Bücher löschen wollen?" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:678 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:680 msgid "Deleting books from device." msgstr "Lösche Bücher vom Gerät." -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:708 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:730 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:710 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:732 msgid "Cannot edit metadata" msgstr "Kann Metadaten nicht bearbeiten" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:708 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:730 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:849 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:908 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:710 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:732 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:851 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:910 msgid "No books selected" msgstr "Keine Bücher ausgewählt" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:777 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:779 msgid "Sending news to device." msgstr "Sende Nachrichten an das Gerät." -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:829 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:831 msgid "Sending books to device." msgstr "Sende Bücher an das Gerät." -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:832 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:834 msgid "No suitable formats" msgstr "Keine geeigneten Formate" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:833 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:835 msgid "" "Could not upload the following books to the device, as no suitable formats " "were found:

                                                              %s
                                                            " @@ -4052,15 +4056,15 @@ msgstr "" "Die folgenden Bücher konnten nicht auf das Gerät geladen werden, da keine " "geeigneten Formate vorhanden sind:
                                                              %s
                                                            " -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:849 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:851 msgid "Cannot save to disk" msgstr "Speichern auf Festplatte nicht möglich" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:853 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:855 msgid "Choose destination directory" msgstr "Zielverzeichnis auswählen" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:860 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:862 msgid "" "

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

                                                              " @@ -4068,64 +4072,64 @@ msgstr "" "

                                                              Die folgenden Bücher konnten nicht auf die Festplatte gespeichert werden, " "da das %s Format für sie nicht verfügbar ist:

                                                                " -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:864 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:866 msgid "Could not save some ebooks" msgstr "Konnte einige eBooks nicht speichern" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:884 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:886 msgid "Fetching news from " msgstr "Rufe Nachrichten ab von " -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:898 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:900 msgid " fetched." msgstr " abgerufen." -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1012 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1030 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1042 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1014 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1032 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1044 msgid "No book selected" msgstr "Kein Buch ausgewählt" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1012 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1042 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1058 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1014 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1044 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1060 msgid "Cannot view" msgstr "Ansehen nicht möglich" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1018 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1063 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1020 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1065 msgid "Choose the format to view" msgstr "Format zur Vorschau wählen" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1030 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1032 msgid "Cannot open folder" msgstr "Konnte Verzeichnis nicht öffnen" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1059 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1061 msgid "%s has no available formats." msgstr "%s hat keine verfügbaren Formate." -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1097 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1099 msgid "Cannot configure" msgstr "Konfiguration nicht möglich" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1097 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1099 msgid "Cannot configure while there are running jobs." msgstr "Konfiguration nicht möglich während Aufträge abgearbeitet werden." -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1116 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1118 msgid "Copying database" msgstr "Kopiere Datenbank" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1118 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1120 msgid "Copying library to " msgstr "Kopiere Bibliothek nach " -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1128 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1130 msgid "Invalid database" msgstr "Ungültige Datenbank" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1129 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1131 msgid "" "

                                                                An invalid database already exists at %s, delete it before trying to move " "the existing database.
                                                                Error: %s" @@ -4133,23 +4137,23 @@ msgstr "" "

                                                                Es existiert bereits eine ungültige Datenbank in %s, bitte löschen Sie " "diese, bevor sie die bestehende Datenbank verschieben.
                                                                Fehler: %s" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1135 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1137 msgid "Could not move database" msgstr "Konnte Datenbank nicht verschieben" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1155 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1157 msgid "No detailed info available" msgstr "Es ist keine weitere Information verfügbar" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1156 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1158 msgid "No detailed information is available for books on the device." msgstr "Es ist keine weitere Information über Bücher auf dem Gerät verfügbar" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1199 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1201 msgid "Error talking to device" msgstr "Fehler in der Kommunikation zum Gerät" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1200 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1202 msgid "" "There was a temporary error talking to the device. Please unplug and " "reconnect the device and or reboot." @@ -4157,13 +4161,13 @@ msgstr "" "Es trat ein Fehler in der Kommunikation mit dem Gerät auf. Bitte entfernen " "und schließen Sie das Gerät wieder an und - oder starten Sie neu." -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1213 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1228 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1232 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1215 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1230 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1234 msgid "Conversion Error" msgstr "Konvertierungsfehler" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1214 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1216 msgid "" "

                                                                Could not convert: %s

                                                                It is a DRMed book. You must " "first remove the DRM using 3rd party tools." @@ -4172,11 +4176,11 @@ msgstr "" "href=\"%s\">DRM geschützt. Sie müssen zunächst das DRM mit einem anderen " "Programm entfernen." -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1248 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1250 msgid "Database does not exist" msgstr "Datenbank existiert nicht" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1249 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1251 msgid "" "The directory in which the database should be: %s no longer exists. Please " "choose a new database location." @@ -4184,11 +4188,11 @@ msgstr "" "Das Verzeichnis, in dem die Datenbank sein sollte: %s existiert nicht mehr. " "Bitte wählen Sie einen neuen Ort für die Datenbank aus." -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1251 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1253 msgid "Choose new location for database" msgstr "Wählen Sie einen neuen Speicherort für die Datenbank" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1304 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1306 msgid "" "is the result of the efforts of many volunteers from all over the world. If " "you find it useful, please consider donating to support its development." @@ -4197,12 +4201,12 @@ msgstr "" "Falls Sie es nützlich finden, sollten Sie eine Spende zur Unterstützung " "seiner Entwicklung in Betracht ziehen." -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1325 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1327 msgid "There are active jobs. Are you sure you want to quit?" msgstr "" "Es bestehen aktive Aufträge. Sind Sie sicher, dass sie es beenden wollen?" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1327 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1329 msgid "" " is communicating with the device!
                                                                \n" " 'Quitting may cause corruption on the device.
                                                                \n" @@ -4212,11 +4216,11 @@ msgstr "" " 'Ein Beenden kann das Gerät beschädigen.
                                                                \n" " 'Sind Sie sicher, dass sie es beenden wollen?" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1331 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1333 msgid "WARNING: Active jobs" msgstr "WARNUNG: Aktive Aufträge" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1360 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1362 msgid "" "will keep running in the system tray. To close it, choose Quit in the " "context menu of the system tray." @@ -4224,7 +4228,7 @@ msgstr "" "wird im System Tray weiter laufen. Zum Schließen wählen Sie Beenden " "im Kontextmenü des System Tray." -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1373 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1375 msgid "" "Latest version: %s" @@ -4232,7 +4236,7 @@ msgstr "" "Letzte Version: %s" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1378 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1380 msgid "" "%s has been updated to version %s. See the new features. " @@ -4242,15 +4246,15 @@ msgstr "" "href=\"http://calibre.kovidgoyal.net/wiki/Changelog\">neuen Features an. " "Möchten Sie die Download Seite besuchen?" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1378 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1380 msgid "Update available" msgstr "Neue Version verfügbar" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1393 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1395 msgid "Use the library located at the specified path." msgstr "Die im angegebenen Pfad sich befindende Bibliothek verwenden" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1395 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1397 msgid "Log debugging information to console" msgstr "Informationen zur Fehlersuche in Konsole aufzeichnen" @@ -4377,23 +4381,23 @@ msgstr "" msgid "ERROR: Unhandled exception" msgstr "FEHLER: Unbehandelte Ausnahme" -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:108 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:115 msgid "Jobs:" msgstr "Aufträge:" -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:117 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:124 msgid "Click to see list of active jobs." msgstr "Ein Klick zeigt die aktiven Aufträge." -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:146 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:153 msgid "Click to browse books by their covers" msgstr "Klicken Sie, um die Bücher in der Cover-Ansicht zu durchsuchen" -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:146 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:153 msgid "Click to turn off Cover Browsing" msgstr "Klicken Sie, um die Cover-Ansicht zu verlassen" -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:151 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:158 msgid "" "

                                                                Browsing books by their covers is disabled.
                                                                Import of pictureflow " "module failed:
                                                                " @@ -4401,7 +4405,7 @@ msgstr "" "

                                                                Die Cover-Ansicht ist gesperrt.
                                                                Der Import des Pictureflow Moduls " "schlug fehl:
                                                                " -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:159 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:166 msgid "Click to browse books by tags" msgstr "Klicken Sie, um die Bücher anhand von Etiketten zu durchsuchen" @@ -4688,36 +4692,46 @@ msgstr "Ungültiger regulärer Ausdruck" msgid "Invalid regular expression: %s" msgstr "Ungültiger regulärer Ausdruck: %s" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:178 -msgid "Library" -msgstr "Bibliothek" +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:139 +msgid "" +"Library\n" +"%d\n" +"books" +msgstr "" +"Bibliothek\n" +"%d\n" +"Bücher" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:179 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:140 msgid "" "Reader\n" -"%s available" +"%s\n" +"available" msgstr "" "Reader\n" -"%s verfügbar" +"%s\n" +"verfügbar" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:180 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:141 msgid "" "Card\n" -"%s available" +"%s\n" +"available" msgstr "" "Karte\n" -"%s verfügbar" +"%s\n" +"verfügbar" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:184 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:146 msgid "Click to see the list of books available on your computer" msgstr "Ein Klick zeigt die Liste der auf dem Computer vorhandenen Bücher" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:185 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:147 msgid "Click to see the list of books in the main memory of your reader" msgstr "" "Ein Klick zeigt die Liste der im Hauptspeicher des Geräts vorhandenen Bücher" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:186 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:148 msgid "Click to see the list of books on the storage card in your reader" msgstr "" "Ein Klick zeigt die Liste der auf der Speicherkarte des Geräts vorhandenen " @@ -5069,20 +5083,20 @@ msgstr "" "\n" "Sie erhalten Hilfe zu einem bestimmten Befehl mit: %%prog command --help\n" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1137 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1144 msgid "

                                                                Copying books to %s

                                                                " msgstr "

                                                                Kopiere Bücher nach %s

                                                                " -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1150 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1262 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1157 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1266 msgid "Copying %s" msgstr "Kopiere %s" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1233 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1237 msgid "

                                                                Migrating old database to ebook library in %s

                                                                " msgstr "

                                                                Migriere alte Datenbank zu eBook Bibliothek in %s

                                                                " -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1279 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1283 msgid "Compacting database" msgstr "Komprimiere Datenbank" @@ -5091,7 +5105,7 @@ msgid "Password to access your calibre library. Username is " msgstr "" "Kennwort für den Zugriff auf die calibre Bibliothek. Benutzername ist " -#: /home/kovid/work/calibre/src/calibre/library/server.py:380 +#: /home/kovid/work/calibre/src/calibre/library/server.py:382 msgid "" "[options]\n" "\n" @@ -5170,13 +5184,13 @@ msgstr "Konnte SSH Sitzung nicht abschließen: " msgid "Failed to authenticate with server: %s" msgstr "Authentifizierung schlug fehl am Server: %s" -#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:63 -#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:84 +#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:76 +#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:97 msgid "Unknown feed" msgstr "Feed unbekannt" -#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:102 -#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:124 +#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:115 +#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:137 msgid "Untitled article" msgstr "Artikel ohne Titel" @@ -5377,70 +5391,70 @@ msgid "Dont show the progress bar" msgstr "Fortschrittsbalken nicht anzeigen" #: /home/kovid/work/calibre/src/calibre/web/feeds/main.py:118 -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:668 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:674 msgid "Fetching feeds..." msgstr "Rufe Feeds ab..." -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:34 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:40 msgid "Unknown News Source" msgstr "Nachrichtenquelle unbekannt" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:549 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:555 msgid "Download finished" msgstr "Download beendet" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:551 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:557 msgid "Failed to download the following articles:" msgstr "Der Download der folgenden Artikel schlug fehl:" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:553 #: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:559 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:565 msgid " from " msgstr " von " -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:557 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:563 msgid "Failed to download parts of the following articles:" msgstr "Der Download von Teilen der folgenden Artikel schlug fehl:" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:561 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:567 msgid "\tFailed links:" msgstr "\tFehlgeschlagene Verknüpfungen:" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:647 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:653 msgid "Could not fetch article. Run with --debug to see the reason" msgstr "" "Konnte Artikel nicht abrufen. Der erneute Start mit --debug zeigt mögliche " "Gründe an" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:672 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:678 msgid "Got feeds from index page" msgstr "Feeds der Index Seite erhalten" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:678 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:684 msgid "Trying to download cover..." msgstr "Versuche Umschlagbild zu laden..." -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:731 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:737 msgid "Starting download [%d thread(s)]..." msgstr "Starte Download von [%d Thread(s)]..." -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:747 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:753 msgid "Feeds downloaded to %s" msgstr "Feeds wurden nach %s heruntergeladen" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:757 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:763 msgid "Could not download cover: %s" msgstr "Konnte Umschlagbild nicht laden: %s" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:762 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:768 msgid "Downloading cover from %s" msgstr "Lade Umschlagbild von %s" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:802 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:895 msgid "Untitled Article" msgstr "Artikel ohne Titel" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:857 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:950 msgid "" "\n" "Downloaded article %s from %s\n" @@ -5450,19 +5464,19 @@ msgstr "" "Artikel %s von %s geladen\n" "%s" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:863 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:956 msgid "Article downloaded: %s" msgstr "Artikel geladen: %s" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:869 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:962 msgid "Failed to download article: %s from %s\n" msgstr "Laden der Artikel fehlgeschlagen: %s von %s\n" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:874 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:967 msgid "Article download failed: %s" msgstr "Laden der Artikel schlug fehl: %s" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:889 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:982 msgid "Fetching feed" msgstr "Rufe Feed ab" @@ -5634,6 +5648,23 @@ msgstr "Zeige detailierte Ausgabeinformation. Hilfreich zur Fehlersuche." #~ msgid "Custom news sources" #~ msgstr "Individuelle Nachrichtenquellen" +#~ msgid "Library" +#~ msgstr "Bibliothek" + +#~ msgid "" +#~ "Reader\n" +#~ "%s available" +#~ msgstr "" +#~ "Reader\n" +#~ "%s verfügbar" + +#~ msgid "" +#~ "Card\n" +#~ "%s available" +#~ msgstr "" +#~ "Karte\n" +#~ "%s verfügbar" + #~ msgid "Job killed by user" #~ msgstr "Auftrag durch Benutzer abgebrochen" @@ -5650,6 +5681,29 @@ msgstr "Zeige detailierte Ausgabeinformation. Hilfreich zur Fehlersuche." #~ msgid " does not allow copying of text." #~ msgstr " lässt das Kopieren von Text nicht zu." +#~ msgid "" +#~ "\n" +#~ "\n" +#~ "

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

                                                                " + #~ msgid "" #~ "Path to the calibre database. Default is to use the path stored in the " #~ "settings." diff --git a/src/calibre/translations/nl.po b/src/calibre/translations/nl.po index d05bb468c8..c8873c7bd6 100644 --- a/src/calibre/translations/nl.po +++ b/src/calibre/translations/nl.po @@ -7,24 +7,24 @@ msgid "" msgstr "" "Project-Id-Version: calibre\n" "Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2008-12-06 07:37+0000\n" +"POT-Creation-Date: 2008-12-15 02:49+0000\n" "PO-Revision-Date: 2008-09-04 01:49+0000\n" "Last-Translator: Marc van den Dikkenberg \n" "Language-Team: Dutch \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2008-12-07 21:42+0000\n" +"X-Launchpad-Export-Date: 2008-12-15 18:24+0000\n" "X-Generator: Launchpad (build Unknown)\n" -#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:135 -#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:153 -#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:191 -#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:219 +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:137 +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:155 +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:193 +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:221 msgid "Unable to detect the %s disk drive. Try rebooting." msgstr "Schijf %s is niet gevonden. Probeer te herstarten." -#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:407 +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:409 msgid "The reader has no storage card connected." msgstr "Er is geen geheugen kaart verbonden met de reader." @@ -221,13 +221,13 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:226 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:229 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:274 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:64 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:66 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:99 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:101 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf.py:321 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf.py:436 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:794 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:65 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:67 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:100 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:102 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf.py:334 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf.py:449 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:793 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/pdf.py:12 #: /home/kovid/work/calibre/src/calibre/ebooks/odt/to_oeb.py:46 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf.py:48 @@ -236,12 +236,12 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:365 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:37 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:38 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:317 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:331 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:815 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:581 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:818 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:821 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:328 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:342 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:826 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:583 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:820 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:823 #: /home/kovid/work/calibre/src/calibre/gui2/tools.py:52 #: /home/kovid/work/calibre/src/calibre/gui2/tools.py:112 #: /home/kovid/work/calibre/src/calibre/library/cli.py:245 @@ -250,10 +250,10 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/library/database.py:1423 #: /home/kovid/work/calibre/src/calibre/library/database.py:1452 #: /home/kovid/work/calibre/src/calibre/library/database.py:1564 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:473 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:485 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:810 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:843 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:477 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:489 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:817 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:850 msgid "Unknown" msgstr "Onbekend" @@ -265,11 +265,11 @@ msgid "" "formats are: %s\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/from_html.py:99 +#: /home/kovid/work/calibre/src/calibre/ebooks/epub/from_html.py:98 msgid "Could not find an ebook inside the archive" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/from_html.py:157 +#: /home/kovid/work/calibre/src/calibre/ebooks/epub/from_html.py:156 msgid "" "%prog [options] file.html|opf\n" "\n" @@ -280,7 +280,7 @@ msgid "" "the element of the OPF file. \n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/from_html.py:386 +#: /home/kovid/work/calibre/src/calibre/ebooks/epub/from_html.py:385 #: /home/kovid/work/calibre/src/calibre/ebooks/html.py:1035 msgid "You must specify an input HTML file" msgstr "Een bron HTML bestand is nodig" @@ -294,7 +294,7 @@ msgid "" "Could not find reasonable point at which to split: %s Sub-tree size: %d KB" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/split.py:109 +#: /home/kovid/work/calibre/src/calibre/ebooks/epub/split.py:136 msgid "" "\t\tToo much markup. Re-splitting without structure preservation. This may " "cause incorrect rendering." @@ -1054,11 +1054,11 @@ msgstr "Omslag afbeelding kan niet worden ingelezen: %s" msgid "Cannot read from: %s" msgstr "Kan niet lezen van: %s" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:2000 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1997 msgid "Failed to process opf file" msgstr "Verwerking van OPF bestand is niet gelukt." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:2006 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:2003 msgid "" "Usage: %prog [options] mybook.html\n" "\n" @@ -1305,16 +1305,16 @@ msgstr "Geef de omschrijving" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:70 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:36 #: /home/kovid/work/calibre/src/calibre/gui2/library.py:91 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:314 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:885 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:325 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:896 msgid "Title" msgstr "Titel" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:274 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:37 #: /home/kovid/work/calibre/src/calibre/gui2/library.py:92 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:319 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:886 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:330 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:897 msgid "Author(s)" msgstr "Auteur(s)" @@ -1333,25 +1333,25 @@ msgstr "Categorie" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:391 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:527 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:308 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:275 -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:54 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:286 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:58 msgid "Comments" msgstr "Opmerkingen" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:280 #: /home/kovid/work/calibre/src/calibre/gui2/library.py:97 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:264 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:825 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:889 -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:56 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:275 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:836 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:900 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:60 #: /home/kovid/work/calibre/src/calibre/gui2/tags.py:42 msgid "Tags" msgstr "Tags" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:281 #: /home/kovid/work/calibre/src/calibre/gui2/library.py:98 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:280 -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:55 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:291 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:59 #: /home/kovid/work/calibre/src/calibre/gui2/tags.py:42 msgid "Series" msgstr "Serie" @@ -1472,7 +1472,7 @@ msgstr "Gebruik: %s bestand.lit" msgid "Cover saved to" msgstr "omslag weggeschreven naar" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:939 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:938 msgid "Set the dc:language field" msgstr "" @@ -1614,9 +1614,9 @@ msgstr "Bekijk book op apparaat" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:84 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:85 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:86 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:271 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:820 -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:52 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:282 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:831 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:56 msgid "Path" msgstr "Pad" @@ -1624,8 +1624,8 @@ msgstr "Pad" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:88 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:89 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:92 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:270 -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:53 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:281 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:57 #: /home/kovid/work/calibre/src/calibre/gui2/tags.py:42 msgid "Formats" msgstr "Formaten" @@ -1732,49 +1732,49 @@ msgid "" "Server" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:161 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:162 msgid "Error log:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:165 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:166 msgid "Access log:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:187 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:339 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:188 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:341 msgid "Failed to start content server" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:227 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:228 msgid "Invalid size" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:227 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:228 msgid "The size %s is invalid. must be of the form widthxheight" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:269 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:273 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:270 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:274 msgid "Invalid database location" msgstr "Foutieve database locatie" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:270 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:271 msgid "
                                                                Must be a directory." msgstr "
                                                                Moet een folder zijn." -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:270 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:271 msgid "Invalid database location " msgstr "Foutieve database locatie " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:274 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:275 msgid "Invalid database location.
                                                                Cannot write to " msgstr "Foutieve database locatie.
                                                                Kan niet schrijven naar " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:286 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:287 msgid "Compacting database. This may take a while." msgstr "Database aan het comprimeren. Dit kan even duren." -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:286 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:287 msgid "Compacting..." msgstr "Comprimeren..." @@ -1800,7 +1800,7 @@ msgstr "Blader naar de nieuwe database locatie" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:389 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:399 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:400 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:374 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:373 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:509 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:282 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:288 @@ -2142,7 +2142,7 @@ msgid " is not a valid picture" msgstr " is geen geldige afbeelding" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub.py:227 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:908 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:910 msgid "Cannot convert" msgstr "Kan niet converteren" @@ -2184,22 +2184,22 @@ msgid "Book Cover" msgstr "Boek Omslag" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:371 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:510 -msgid "Use cover from &source file" -msgstr "Gebruik omslag van &bron bestand" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:372 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:507 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:316 msgid "Change &cover image:" msgstr "Verander &Omslag Afbeelding" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:373 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:372 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:508 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:317 msgid "Browse for an image to use as the cover of this book." msgstr "Zoek een afbeelding om als omslag voor dit boek te gebruiken." +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:374 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:510 +msgid "Use cover from &source file" +msgstr "Gebruik omslag van &bron bestand" + #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:375 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:511 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:279 @@ -2214,14 +2214,14 @@ msgstr "Verander de titel van dit boek" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:377 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:513 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:124 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:128 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:283 msgid "&Author(s): " msgstr "&Auteur(s) " #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:378 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:514 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:125 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:129 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:284 msgid "" "Change the author(s) of this book. Multiple authors should be separated by " @@ -2244,14 +2244,14 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:381 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:517 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:132 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:136 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:293 msgid "&Publisher: " msgstr "&Uitgeverij " #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:382 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:518 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:133 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:137 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:294 msgid "Change the publisher of this book" msgstr "Verander de uitgever van dit boek" @@ -2264,7 +2264,7 @@ msgstr "Ta&gs " #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:384 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:520 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:135 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:139 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:296 msgid "" "Tags categorize the book. This is particularly useful while searching. " @@ -2276,7 +2276,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:385 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:521 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:140 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:144 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:299 msgid "&Series:" msgstr "&Series:" @@ -2285,8 +2285,8 @@ msgstr "&Series:" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:387 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:522 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:523 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:141 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:142 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:145 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:146 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:300 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:301 msgid "List of known series. You can add new series." @@ -2718,35 +2718,25 @@ msgid "" "\n" "

                                                                " +"margin-left:0px; margin-right:0px; -qt-block-indent:0; text-" +"indent:0px;\">

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

                                                                " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:122 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:126 msgid "Edit Meta information" msgstr "Verander Meta informatie" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:123 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:127 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:278 msgid "Meta information" msgstr "Meta informatie" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:126 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:130 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:285 msgid "Author S&ort: " msgstr "Auteur S&ortering: " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:127 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:131 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:286 msgid "" "Specify how the author(s) of this book should be sorted. For example Charles " @@ -2755,48 +2745,52 @@ msgstr "" "Geef aan hoe de auteur(s) van dit boeken dienen te worden gesorteerd. " "Bijvoorbeeld: Charles Dickens moet worden gesorteerd als: Dickens, Charles" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:128 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:132 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:289 msgid "&Rating:" msgstr "&Rangschikking" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:129 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:130 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:133 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:134 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:290 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:291 msgid "Rating of this book. 0-5 stars" msgstr "Rangschikking van dit boek. 0-5 sterren" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:131 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:135 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:292 msgid " stars" msgstr " sterren" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:134 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:138 msgid "Add Ta&gs: " msgstr "Voeg Ta&gs Toe: " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:136 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:137 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:140 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:141 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:297 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:298 msgid "Open Tag Editor" msgstr "Open Tag Editor" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:138 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:142 msgid "&Remove tags:" msgstr "&Verwijder tags:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:139 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:143 msgid "Comma separated list of tags to remove from the books. " msgstr "" "Lijst van tags die moeten worden verwijderd, gescheiden met komma's. " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:143 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:147 msgid "Remove &format:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:264 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:148 +msgid "A&utomatically set author sort" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:265 msgid "" "

                                                                Enter your username and password for LibraryThing.com.
                                                                If you " "do not have one, you can register " @@ -2806,19 +2800,19 @@ msgstr "" "
                                                                Als u deze niet heeft, dan kunt u er gratis een krijgen door te registreren

                                                                " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:294 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:295 msgid "Could not fetch cover.
                                                                " msgstr "Omslag kon niet worden gedownload
                                                                " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:294 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:295 msgid "Could not fetch cover" msgstr "Omslag kon niet worden gedownload" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:300 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:301 msgid "Cannot fetch cover" msgstr "Kan omslag niet downloaden" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:300 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:301 msgid "You must specify the ISBN identifier for this book." msgstr "Het ISBN nummer voor dit boek moet worden opgegeven." @@ -2926,14 +2920,14 @@ msgstr "Voeg een persoonlijke nieuwsbron toe" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:335 #: /home/kovid/work/calibre/src/calibre/gui2/tags.py:42 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:757 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:760 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1057 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:761 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:765 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1064 msgid "News" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:137 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:221 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:222 msgid "Recipes" msgstr "Recepten" @@ -3146,25 +3140,25 @@ msgstr "Deze feed is al aan een recept toegevoegd" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:163 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:172 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:228 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:229 msgid "Invalid input" msgstr "Ongeldige invoer" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:164 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:173 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:229 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:230 msgid "

                                                                Could not create recipe. Error:
                                                                %s" msgstr "

                                                                Een recept kon niet worden aangemaakt. Foutmelding:
                                                                %s" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:179 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:210 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:234 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:211 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:235 msgid "Replace recipe?" msgstr "Recept vervangen?" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:180 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:211 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:235 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:212 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:236 msgid "A custom recipe named %s already exists. Do you want to replace it?" msgstr "Een persoonlijk recept genaat %s bestaat al. Wilt u deze vervangen?" @@ -3176,7 +3170,7 @@ msgstr "" msgid "Pick the recipe to customize" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:221 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:222 msgid "Choose a recipe file" msgstr "Kies een recept" @@ -3435,12 +3429,12 @@ msgid "Job has already run" msgstr "Taak is al uitgevoerd" #: /home/kovid/work/calibre/src/calibre/gui2/library.py:93 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:887 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:898 msgid "Size (MB)" msgstr "Grootte (MB)" #: /home/kovid/work/calibre/src/calibre/gui2/library.py:94 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:888 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:899 msgid "Date" msgstr "Datum" @@ -3448,25 +3442,25 @@ msgstr "Datum" msgid "Rating" msgstr "Waardering" -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:263 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:269 #: /home/kovid/work/calibre/src/calibre/gui2/library.py:274 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:280 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:285 msgid "None" msgstr "Geen" -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:280 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:291 msgid "Book %s of %s." msgstr "Boek %s van %s." -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:819 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:830 msgid "Format" msgstr "Formaat" -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:824 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:835 msgid "Timestamp" msgstr "Tijdsaanduiding" -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:922 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:933 msgid "Search (For Advanced Search click the button to the left)" msgstr "Zoeken (Voor geavanceerd zoeken klik op de knop links)" @@ -3633,7 +3627,7 @@ msgid "Save to disk in a single directory" msgstr "Opslaan op schijf in een enkele folder" #: /home/kovid/work/calibre/src/calibre/gui2/main.py:192 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1106 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1108 msgid "Save only %s format to disk" msgstr "Bewaar alleen %s formaat op schijf" @@ -3667,7 +3661,7 @@ msgid "Bad database location" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/main.py:262 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1262 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1264 msgid "Choose a location for your ebook library." msgstr "Kies een locatie voor de eboek bibliotheek" @@ -3675,23 +3669,23 @@ msgstr "Kies een locatie voor de eboek bibliotheek" msgid "Migrating database" msgstr "Migratie database" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:416 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:418 msgid "Device: " msgstr "Apparaat: " -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:417 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:419 msgid " detected." msgstr " gedetecteerd" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:439 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:441 msgid "Connected " msgstr "Verbonden " -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:450 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:452 msgid "Device database corrupted" msgstr "Apparaat Database Beschadigd" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:451 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:453 msgid "" "\n" "

                                                                The database of books on the reader is corrupted. Try the " @@ -3720,8 +3714,8 @@ msgstr "" " \n" " " -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:503 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:599 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:505 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:601 msgid "" "

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

                                                                  " @@ -3729,104 +3723,104 @@ msgstr "" "

                                                                  Boeken met de volgende titels bestaan al in de database. Wil je ze echt " "toevoegen?

                                                                    " -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:506 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:602 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:508 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:604 msgid "Duplicates found!" msgstr "Duplicaten gevonden!" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:539 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:563 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:541 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:565 msgid "Uploading books to device." msgstr "Boeken worden geupload naar de lezer." -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:547 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:549 msgid "Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:548 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:550 msgid "EPUB Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:549 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:551 msgid "LRF Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:550 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:552 msgid "HTML Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:551 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:553 msgid "LIT Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:552 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:554 msgid "MOBI Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:553 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:555 msgid "Text books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:554 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:556 msgid "PDF Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:555 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:557 msgid "Comics" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:556 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:558 msgid "Archives" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:634 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:636 msgid "No space on device" msgstr "Geen schijfruimte op de lezer." -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:635 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:637 msgid "" "

                                                                    Cannot upload books to device there is no more free space available " msgstr "" "

                                                                    De boeken kunnen niet worden geupload naar de lezer, omdat er onvoldoende " "schijfruimte beschikbaar is " -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:665 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:667 msgid "Confirm delete" msgstr "Bevesting verwijdering" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:666 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:668 msgid "Are you sure you want to delete these %d books?" msgstr "Weet u zeker dat u deze %d bestanden wilt verwijderen?" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:678 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:680 msgid "Deleting books from device." msgstr "Boeken worden verwijderd van de lezer." -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:708 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:730 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:710 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:732 msgid "Cannot edit metadata" msgstr "Metedata kan niet worden gewijzigd" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:708 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:730 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:849 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:908 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:710 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:732 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:851 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:910 msgid "No books selected" msgstr "Geen boeken geselecteerd" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:777 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:779 msgid "Sending news to device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:829 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:831 msgid "Sending books to device." msgstr "Boeken worden naar de lezer verzonden." -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:832 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:834 msgid "No suitable formats" msgstr "Geen geschikte formaten" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:833 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:835 msgid "" "Could not upload the following books to the device, as no suitable formats " "were found:

                                                                      %s
                                                                    " @@ -3834,15 +3828,15 @@ msgstr "" "De volgende boeken konden niet naar de lezer worden deupload, omdat geen " "geschikt formaat werd gevonden:
                                                                      %s
                                                                    " -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:849 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:851 msgid "Cannot save to disk" msgstr "Kan niet naar schijf worden opgeslagen" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:853 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:855 msgid "Choose destination directory" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:860 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:862 msgid "" "

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

                                                                      " @@ -3850,64 +3844,64 @@ msgstr "" "

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

                                                                        " -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:864 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:866 msgid "Could not save some ebooks" msgstr "Sommige boeken konden niet worden opgeslagen" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:884 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:886 msgid "Fetching news from " msgstr "Downloading nieuws van " -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:898 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:900 msgid " fetched." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1012 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1030 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1042 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1014 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1032 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1044 msgid "No book selected" msgstr "Geen boek geselecteerd" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1012 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1042 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1058 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1014 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1044 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1060 msgid "Cannot view" msgstr "Kan niet bekijken" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1018 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1063 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1020 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1065 msgid "Choose the format to view" msgstr "Kies het te bekijken formaat" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1030 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1032 msgid "Cannot open folder" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1059 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1061 msgid "%s has no available formats." msgstr "%s heeft geen beschikbare formaten" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1097 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1099 msgid "Cannot configure" msgstr "Kan niet configureren" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1097 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1099 msgid "Cannot configure while there are running jobs." msgstr "Can niet configueren terwijl bestaande opdrachten bezig zijn" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1116 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1118 msgid "Copying database" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1118 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1120 msgid "Copying library to " msgstr "Copieer bibliotheek naar " -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1128 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1130 msgid "Invalid database" msgstr "ongeldige database" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1129 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1131 msgid "" "

                                                                        An invalid database already exists at %s, delete it before trying to move " "the existing database.
                                                                        Error: %s" @@ -3915,23 +3909,23 @@ msgstr "" "

                                                                        Een ongeldige database bestaat op %s, verwijder deze voordat je probeert " "de bestaande database te verplaatsen.
                                                                        Foutmelding: %s" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1135 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1137 msgid "Could not move database" msgstr "Database kon niet worden verplaatst" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1155 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1157 msgid "No detailed info available" msgstr "Geen details beschikbaar" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1156 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1158 msgid "No detailed information is available for books on the device." msgstr "Geen details zijn beschikbaar voor de boeken op de lezer." -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1199 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1201 msgid "Error talking to device" msgstr "Fout bij communicatie met lezer" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1200 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1202 msgid "" "There was a temporary error talking to the device. Please unplug and " "reconnect the device and or reboot." @@ -3939,23 +3933,23 @@ msgstr "" "Er is een tijdelijke fout opgetreden tijdens de communicatie met de lezer. " "verwijzer de lezer en plug hem opnieuw in, of herstart." -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1213 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1228 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1232 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1215 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1230 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1234 msgid "Conversion Error" msgstr "Converteer Fout" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1214 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1216 msgid "" "

                                                                        Could not convert: %s

                                                                        It is a DRMed book. You must " "first remove the DRM using 3rd party tools." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1248 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1250 msgid "Database does not exist" msgstr "database bestaat niet" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1249 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1251 msgid "" "The directory in which the database should be: %s no longer exists. Please " "choose a new database location." @@ -3963,38 +3957,38 @@ msgstr "" "De folder waarin de database zou moetten zijn: %s bestaat niet meer. Kies " "een nieuwe database locatie." -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1251 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1253 msgid "Choose new location for database" msgstr "Kies een nieuwe locatie voor de database" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1304 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1306 msgid "" "is the result of the efforts of many volunteers from all over the world. If " "you find it useful, please consider donating to support its development." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1325 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1327 msgid "There are active jobs. Are you sure you want to quit?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1327 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1329 msgid "" " is communicating with the device!
                                                                        \n" " 'Quitting may cause corruption on the device.
                                                                        \n" " 'Are you sure you want to quit?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1331 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1333 msgid "WARNING: Active jobs" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1360 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1362 msgid "" "will keep running in the system tray. To close it, choose Quit in the " "context menu of the system tray." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1373 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1375 msgid "" "Latest version: %s" @@ -4002,7 +3996,7 @@ msgstr "" "Laatste versie: %s" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1378 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1380 msgid "" "%s has been updated to version %s. See the new features. " @@ -4012,15 +4006,15 @@ msgstr "" "href=\"http://calibre.kovidgoyal.net/wiki/Changelog\">nieuwe functies " "Bezoek download pagina?" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1378 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1380 msgid "Update available" msgstr "Update beschikbaar" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1393 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1395 msgid "Use the library located at the specified path." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1395 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1397 msgid "Log debugging information to console" msgstr "" @@ -4145,23 +4139,23 @@ msgstr "" msgid "ERROR: Unhandled exception" msgstr "FOUT: Niet-verwerkte uitzondering" -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:108 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:115 msgid "Jobs:" msgstr "Opdrachten" -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:117 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:124 msgid "Click to see list of active jobs." msgstr "Klik om een lijst met actieve opdrachten te zien" -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:146 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:153 msgid "Click to browse books by their covers" msgstr "Klik om boeken bij hun omslag te bekijken" -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:146 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:153 msgid "Click to turn off Cover Browsing" msgstr "Klik om zoeken op omslag uit te schakelen" -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:151 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:158 msgid "" "

                                                                        Browsing books by their covers is disabled.
                                                                        Import of pictureflow " "module failed:
                                                                        " @@ -4169,7 +4163,7 @@ msgstr "" "

                                                                        Bekijken van boeken op omslag is uitgeschakeld.
                                                                        Importeren van " "pictureflow module is mislukt:
                                                                        " -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:159 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:166 msgid "Click to browse books by tags" msgstr "" @@ -4449,36 +4443,37 @@ msgstr "Ongeldige reguliere expressie" msgid "Invalid regular expression: %s" msgstr "Ongeldige reguliere expressie: %s" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:178 -msgid "Library" -msgstr "Bibliotheek" +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:139 +msgid "" +"Library\n" +"%d\n" +"books" +msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:179 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:140 msgid "" "Reader\n" -"%s available" +"%s\n" +"available" msgstr "" -"Lezer\n" -"%s beschikbaar" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:180 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:141 msgid "" "Card\n" -"%s available" +"%s\n" +"available" msgstr "" -"Kaart\n" -"%s beschikbaar" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:184 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:146 msgid "Click to see the list of books available on your computer" msgstr "Klik om een de lijst met boeken op uw computer te zien" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:185 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:147 msgid "Click to see the list of books in the main memory of your reader" msgstr "" "Klik om de lijst met boeken in het hoofdgeheugen van uw lezer te zien" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:186 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:148 msgid "Click to see the list of books on the storage card in your reader" msgstr "Klik om de lijst met boeken op de opslag kaart van uw lezer te zien" @@ -4806,20 +4801,20 @@ msgstr "" "\n" "Voor help met een specifiek commando: %%prog command --help\n" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1137 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1144 msgid "

                                                                        Copying books to %s

                                                                        " msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1150 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1262 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1157 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1266 msgid "Copying %s" msgstr "Copieer %s" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1233 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1237 msgid "

                                                                        Migrating old database to ebook library in %s

                                                                        " msgstr "

                                                                        Migreer oude database naar eboek bibliotheek in %s

                                                                        " -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1279 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1283 msgid "Compacting database" msgstr "Comprimeren database" @@ -4827,7 +4822,7 @@ msgstr "Comprimeren database" msgid "Password to access your calibre library. Username is " msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server.py:380 +#: /home/kovid/work/calibre/src/calibre/library/server.py:382 msgid "" "[options]\n" "\n" @@ -4902,13 +4897,13 @@ msgstr "SSH sessie kon niet tot stand worden gebracht: " msgid "Failed to authenticate with server: %s" msgstr "Authenticatie met server mislukt: %s" -#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:63 -#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:84 +#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:76 +#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:97 msgid "Unknown feed" msgstr "Onbekende feed" -#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:102 -#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:124 +#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:115 +#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:137 msgid "Untitled article" msgstr "Artikel zonder naam" @@ -5105,69 +5100,69 @@ msgid "Dont show the progress bar" msgstr "Laat geen progressie zien" #: /home/kovid/work/calibre/src/calibre/web/feeds/main.py:118 -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:668 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:674 msgid "Fetching feeds..." msgstr "Downloading feeds..." -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:34 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:40 msgid "Unknown News Source" msgstr "Onbekende Nieuwe Bron" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:549 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:555 msgid "Download finished" msgstr "Download voltooid" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:551 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:557 msgid "Failed to download the following articles:" msgstr "De volgende artikelen konden niet worden gedownload:" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:553 #: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:559 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:565 msgid " from " msgstr " van " -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:557 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:563 msgid "Failed to download parts of the following articles:" msgstr "Delen van de volgende artikelen konden niet worden gedownload:" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:561 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:567 msgid "\tFailed links:" msgstr "\tMislukte links:" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:647 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:653 msgid "Could not fetch article. Run with --debug to see the reason" msgstr "" "Artikel kon niet worden gedownload. Draai met --debug om de reden te zien" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:672 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:678 msgid "Got feeds from index page" msgstr "feeds van index pagina" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:678 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:684 msgid "Trying to download cover..." msgstr "Probeer omslag te downloaden" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:731 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:737 msgid "Starting download [%d thread(s)]..." msgstr "Begin download [%d thread(s)]..." -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:747 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:753 msgid "Feeds downloaded to %s" msgstr "Feeds gedownload tot %s" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:757 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:763 msgid "Could not download cover: %s" msgstr "Kon omslag niet downloaden: %s" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:762 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:768 msgid "Downloading cover from %s" msgstr "Download omslag van %s" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:802 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:895 msgid "Untitled Article" msgstr "Artikel zonder Naam" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:857 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:950 msgid "" "\n" "Downloaded article %s from %s\n" @@ -5177,19 +5172,19 @@ msgstr "" "Artikel %s van %s gedownload\n" "%s" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:863 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:956 msgid "Article downloaded: %s" msgstr "Artikel gedownload: %s" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:869 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:962 msgid "Failed to download article: %s from %s\n" msgstr "Artikel %s van %s kon niet worden gedownload\n" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:874 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:967 msgid "Article download failed: %s" msgstr "Artikel download mislukt: %s" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:889 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:982 msgid "Fetching feed" msgstr "Downloading feed" @@ -5358,6 +5353,23 @@ msgstr "" #~ msgid "Custom news sources" #~ msgstr "Persoonlijke nieuws bronnen" +#~ msgid "Library" +#~ msgstr "Bibliotheek" + +#~ msgid "" +#~ "Reader\n" +#~ "%s available" +#~ msgstr "" +#~ "Lezer\n" +#~ "%s beschikbaar" + +#~ msgid "" +#~ "Card\n" +#~ "%s available" +#~ msgstr "" +#~ "Kaart\n" +#~ "%s beschikbaar" + #~ msgid "Job killed by user" #~ msgstr "Opdracht beëindigd door gebruiker" @@ -5374,6 +5386,29 @@ msgstr "" #~ msgid " does not allow copying of text." #~ msgstr " staat copieren van tekst niet toe." +#~ msgid "" +#~ "\n" +#~ "\n" +#~ "

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

                                                                        " + #~ msgid "" #~ "Path to the calibre database. Default is to use the path stored in the " #~ "settings." diff --git a/src/calibre/translations/pl.po b/src/calibre/translations/pl.po index 14b19775ff..08d6daea13 100644 --- a/src/calibre/translations/pl.po +++ b/src/calibre/translations/pl.po @@ -7,24 +7,24 @@ msgid "" msgstr "" "Project-Id-Version: calibre\n" "Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2008-12-06 07:37+0000\n" -"PO-Revision-Date: 2008-12-07 20:51+0000\n" +"POT-Creation-Date: 2008-12-15 02:49+0000\n" +"PO-Revision-Date: 2008-12-15 11:28+0000\n" "Last-Translator: Bartosz Kaszubowski \n" "Language-Team: Polish \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2008-12-07 21:42+0000\n" +"X-Launchpad-Export-Date: 2008-12-15 18:24+0000\n" "X-Generator: Launchpad (build Unknown)\n" -#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:135 -#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:153 -#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:191 -#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:219 +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:137 +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:155 +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:193 +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:221 msgid "Unable to detect the %s disk drive. Try rebooting." msgstr "Wykrycie dysku %s niemożliwe. Spróbuj ponownie uruchomić komputer." -#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:407 +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:409 msgid "The reader has no storage card connected." msgstr "Brak karty pamięci w czytniku." @@ -46,6 +46,9 @@ msgid "" "device independent EPUB. The profile is used for device specific " "restrictions on the EPUB. Choices are: " msgstr "" +"Profil docelowego urządzenia dla tego pliku EPUB. Wybranie \"Żadne\" " +"skutkuje utworzeniem pliku niezależnego od urządzenia. Profile są używane do " +"ustalenia zależnych od urządzenia restrykcji EPUB. Możliwe wybory: " #: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:107 msgid "" @@ -72,6 +75,16 @@ msgid "" "for further\n" "help on using this feature.\n" msgstr "" +"Wyrażenie XPath używane do wykrywania rozdziałów. Domyślnie za tytuły " +"rozdziałów uważane są\n" +"etykiety

                                                                        lub

                                                                        zawierające słowa \"rozdział\", \"książka\", " +"\"sekcja\" lub \"część\". To samo dotyczy dowolnych\n" +"etykiet zawierających klasę rozdziału (class=\"chapter\"). \n" +"Użyte wyrażenie musi określać listę elementów. Aby wyłączyć wykrywanie " +"rozdziałów,\n" +"użyj wyrażenia \"/\". Samouczek XPath w Instrukcji użytkownika calibre " +"porusza to\n" +"zagadnienie dokładniej.\n" #: /home/kovid/work/calibre/src/calibre/ebooks/epub/__init__.py:119 msgid "" @@ -253,13 +266,13 @@ msgstr "Wypakuj zawartość utworzonego pliku EPUB do podanego katalogu." #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:226 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:229 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:274 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:64 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:66 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:99 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:101 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf.py:321 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf.py:436 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:794 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:65 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:67 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:100 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:102 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf.py:334 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf.py:449 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:793 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/pdf.py:12 #: /home/kovid/work/calibre/src/calibre/ebooks/odt/to_oeb.py:46 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf.py:48 @@ -268,12 +281,12 @@ msgstr "Wypakuj zawartość utworzonego pliku EPUB do podanego katalogu." #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:365 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:37 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:38 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:317 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:331 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:815 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:581 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:818 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:821 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:328 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:342 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:826 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:583 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:820 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:823 #: /home/kovid/work/calibre/src/calibre/gui2/tools.py:52 #: /home/kovid/work/calibre/src/calibre/gui2/tools.py:112 #: /home/kovid/work/calibre/src/calibre/library/cli.py:245 @@ -282,10 +295,10 @@ msgstr "Wypakuj zawartość utworzonego pliku EPUB do podanego katalogu." #: /home/kovid/work/calibre/src/calibre/library/database.py:1423 #: /home/kovid/work/calibre/src/calibre/library/database.py:1452 #: /home/kovid/work/calibre/src/calibre/library/database.py:1564 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:473 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:485 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:810 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:843 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:477 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:489 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:817 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:850 msgid "Unknown" msgstr "Nieznany" @@ -300,11 +313,11 @@ msgstr "" "\n" "Konwertuj dowolny format e-booka do formatu epub. Wspierane typy plików: %s\n" -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/from_html.py:99 +#: /home/kovid/work/calibre/src/calibre/ebooks/epub/from_html.py:98 msgid "Could not find an ebook inside the archive" msgstr "Nie znaleziono e-book'a w archiwum" -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/from_html.py:157 +#: /home/kovid/work/calibre/src/calibre/ebooks/epub/from_html.py:156 msgid "" "%prog [options] file.html|opf\n" "\n" @@ -319,7 +332,7 @@ msgstr "" "Jeśli wybierzesz plik OPF zamiast pliku HTML, lista odnośników będzie brana " "z elementu w pliku OPF. \n" -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/from_html.py:386 +#: /home/kovid/work/calibre/src/calibre/ebooks/epub/from_html.py:385 #: /home/kovid/work/calibre/src/calibre/ebooks/html.py:1035 msgid "You must specify an input HTML file" msgstr "Musisz podać wejściowy plik HTML" @@ -335,7 +348,7 @@ msgstr "" "Nie można znaleźć odpowiedniego punktu do podziału %s. Rozmiar pod-drzewa: " "%d KB" -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/split.py:109 +#: /home/kovid/work/calibre/src/calibre/ebooks/epub/split.py:136 msgid "" "\t\tToo much markup. Re-splitting without structure preservation. This may " "cause incorrect rendering." @@ -394,7 +407,7 @@ msgstr "Ustaw tytuł ksiązki. Domyślnie jest on wykrywny automatycznie." #: /home/kovid/work/calibre/src/calibre/ebooks/html.py:843 msgid "The author(s) of the ebook, as a comma separated list." -msgstr "Autor(zy) eksiążki, jako lista rozdzielona przecinkami." +msgstr "Autor(rzy) książki, jako lista rozdzielona przecinkami." #: /home/kovid/work/calibre/src/calibre/ebooks/html.py:845 msgid "The subject(s) of this book, as a comma separated list." @@ -402,7 +415,7 @@ msgstr "Temat(y) tej książki, jako lista rozdzielona przecinkami." #: /home/kovid/work/calibre/src/calibre/ebooks/html.py:847 msgid "Set the publisher of this book." -msgstr "Ustaw wydawcę tego e-booka." +msgstr "Ustaw wydawcę tej książki" #: /home/kovid/work/calibre/src/calibre/ebooks/html.py:849 msgid "A summary of this book." @@ -421,10 +434,12 @@ msgid "" "Be more verbose while processing. Can be specified multiple times to " "increase verbosity." msgstr "" +"Wyświetlaj szczegółowe komunikaty w czasie pracy. Zaznaczenie w wielu " +"miejscach zwiększa liczbę szczegółów." #: /home/kovid/work/calibre/src/calibre/ebooks/html.py:857 msgid "Output HTML is \"pretty printed\" for easier parsing by humans" -msgstr "" +msgstr "Wyjściowy HTML jest \"ładnie drukowany\" dla łatwiejszej analizy" #: /home/kovid/work/calibre/src/calibre/ebooks/html.py:863 msgid "" @@ -711,10 +726,12 @@ msgid "" "You must add this option if processing files generated by pdftohtml, " "otherwise conversion will fail." msgstr "" +"Musisz dodać tą opcję jeśli generowałeś plik przez pdftohtml, w innym " +"przypadku konwersja nie powiedzie się." #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:192 msgid "Use this option on html0 files from Book Designer." -msgstr "" +msgstr "Użyj tej opcji dla plików html0 z Book Designer." #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:195 msgid "" @@ -726,23 +743,23 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:203 msgid "The serif family of fonts to embed" -msgstr "" +msgstr "Rodzina czcionek szeryfowych do umieszczenia" #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:206 msgid "The sans-serif family of fonts to embed" -msgstr "" +msgstr "Rodzina czcionek sans-serif do umieszczenia" #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:209 msgid "The monospace family of fonts to embed" -msgstr "" +msgstr "Rodzina czcionek monospace do umieszczenia" #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:213 msgid "Be verbose while processing" -msgstr "" +msgstr "Wyświetlaj szczegółowe kominukaty w czasie pracy" #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:215 msgid "Convert to LRS" -msgstr "" +msgstr "Konwertuj do LRS" #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:217 msgid "" @@ -762,7 +779,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/any/convert_from.py:161 msgid "Converting from %s to LRF is not supported." -msgstr "" +msgstr "Konwersja z %s do LRF nie jest wspierana." #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/any/convert_from.py:171 msgid "" @@ -774,6 +791,13 @@ msgid "" "ZIP archive, looking for an ebook inside the archive.\n" " " msgstr "" +"any2lrf [opcje] mój_plik\n" +"\n" +"Konwersja dowolnego formatu e-booka do LRF. Wspierane formaty:\n" +"LIT, RTF, TXT, HTML, EPUB, MOBI, PRC i PDF. any2lrf przetworzy również " +"archiwa RAR czy\n" +"ZIP szukając pliku e-booka wewnątrz archiwum.\n" +" " #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/any/convert_from.py:186 msgid "No file to convert specified." @@ -810,15 +834,19 @@ msgstr "Tytuł tworzonego e-booka. Domyślnie używana jest nazwa pliku." msgid "" "Set the author in the metadata of the generated ebook. Default is %default" msgstr "" +"Ustawienia autora w metadanych generowanego e-booka. Domyślna wartość to " +"%default" #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/comic/convert_from.py:293 msgid "" "Path to output file. By default a file is created in the current directory." msgstr "" +"Ścieżka do pliku wyjściowego. Domyślnie jest on tworzony w katalogu bieżącym." #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/comic/convert_from.py:295 msgid "Number of colors for grayscale image conversion. Default: %default" msgstr "" +"Liczba kolorów dla konwersji grafiki na czarno-białą. Domyślnie: %default" #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/comic/convert_from.py:297 msgid "" @@ -831,11 +859,11 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/comic/convert_from.py:301 msgid "Disable sharpening." -msgstr "" +msgstr "Wyłącz wyostrzanie" #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/comic/convert_from.py:303 msgid "Don't split landscape images into two portrait images" -msgstr "" +msgstr "Nie dziel grafik panoramicznych na dwie części" #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/comic/convert_from.py:305 msgid "" @@ -873,6 +901,8 @@ msgid "" "Be verbose, useful for debugging. Can be specified multiple times for " "greater verbosity." msgstr "" +"Wyświetlaj szczegółowe komunikaty przydatne przy debugowaniu. Zaznaczenie w " +"wielu miejscach zwiększa liczbę szczegółów." #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/comic/convert_from.py:317 msgid "Don't show progress bar." @@ -884,6 +914,9 @@ msgid "" "\n" "Convert a comic in a CBZ or CBR file to an ebook. \n" msgstr "" +"%prog [opcje] komiks.cb[z|r]\n" +"\n" +"Konwersja komiksu w formacie CBR lub CBZ do e-booka. \n" #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/comic/convert_from.py:382 msgid "Output written to" @@ -891,7 +924,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/comic/convert_from.py:423 msgid "Rendering comic pages..." -msgstr "" +msgstr "Przetwarzanie stron komiksu..." #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/epub/convert_from.py:17 msgid "" @@ -900,6 +933,10 @@ msgid "" " \n" "%prog converts mybook.epub to mybook.lrf" msgstr "" +"Użycie: %prog [opcje] mój_e-book.epub\n" +" \n" +" \n" +"%prog konwertuje mój_e-book.epub do mój_e-book.lrf" #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/fb2/convert_from.py:23 msgid "" @@ -908,6 +945,10 @@ msgid "" "\n" "%prog converts mybook.fb2 to mybook.lrf" msgstr "" +"%prog [opcje] mój_e-book.fb2\n" +" \n" +" \n" +"%prog konwertuje mój_e-book.fb2 do mój_e-book.lrf" #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/fb2/convert_from.py:28 #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/txt/convert_from.py:24 @@ -932,15 +973,15 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:316 msgid "\tBook Designer file detected." -msgstr "" +msgstr "\twykryto plik Book Designer." #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:318 msgid "\tParsing HTML..." -msgstr "" +msgstr "\tAnalizowanie HTML..." #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:340 msgid "\tBaen file detected. Re-parsing..." -msgstr "" +msgstr "\tWykryto plik Baen. Ponowna analiza..." #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:356 msgid "Written preprocessed HTML to " @@ -965,15 +1006,15 @@ msgstr "%s jest pustym plikiem" #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:559 msgid "Failed to parse link %s %s" -msgstr "" +msgstr "Analiza odnośnika %s %s nie powiodła się" #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:603 msgid "Cannot add link %s to TOC" -msgstr "" +msgstr "Nie można dodać odnośnika %s do spisu treści" #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:955 msgid "Unable to process image %s. Error: %s" -msgstr "" +msgstr "Nie można przetworzyć obrazu %s. Błąd: %s" #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:993 msgid "Unable to process interlaced PNG %s" @@ -1010,17 +1051,17 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1862 msgid "Could not read cover image: %s" -msgstr "" +msgstr "Nie można odczytać grafiki okładki: %s" #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1865 msgid "Cannot read from: %s" -msgstr "" +msgstr "Nie można odczytać z: %s" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:2000 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1997 msgid "Failed to process opf file" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:2006 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:2003 msgid "" "Usage: %prog [options] mybook.html\n" "\n" @@ -1078,7 +1119,7 @@ msgstr "Ścieżka do pliku wyjściowego" #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/lrs/convert_from.py:272 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/isbndb.py:115 msgid "Verbose processing" -msgstr "" +msgstr "Szczegółowe komunikaty w czasie pracy" #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/lrs/convert_from.py:274 msgid "Convert LRS to LRS, useful for debugging." @@ -1181,7 +1222,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/pdf/reflow.py:405 msgid "Be more verbose." -msgstr "" +msgstr "Wyświetlaj szczegółowe kominukaty." #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/pdf/reflow.py:417 msgid "You must specify a single PDF file." @@ -1222,18 +1263,18 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:70 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:36 #: /home/kovid/work/calibre/src/calibre/gui2/library.py:91 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:314 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:885 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:325 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:896 msgid "Title" msgstr "Tytuł" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:274 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:37 #: /home/kovid/work/calibre/src/calibre/gui2/library.py:92 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:319 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:886 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:330 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:897 msgid "Author(s)" -msgstr "Autor(zy)" +msgstr "Autor(rzy)" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:276 msgid "Producer" @@ -1250,25 +1291,25 @@ msgstr "Kategoria" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:391 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:527 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:308 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:275 -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:54 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:286 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:58 msgid "Comments" msgstr "Komentarze" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:280 #: /home/kovid/work/calibre/src/calibre/gui2/library.py:97 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:264 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:825 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:889 -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:56 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:275 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:836 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:900 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:60 #: /home/kovid/work/calibre/src/calibre/gui2/tags.py:42 msgid "Tags" msgstr "Etykiety" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:281 #: /home/kovid/work/calibre/src/calibre/gui2/library.py:98 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:280 -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:55 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:291 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:59 #: /home/kovid/work/calibre/src/calibre/gui2/tags.py:42 msgid "Series" msgstr "Seria" @@ -1354,7 +1395,7 @@ msgstr " nie znaleziono" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/library_thing.py:51 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/library_thing.py:82 msgid "LibraryThing.com server error. Try again later." -msgstr "" +msgstr "Błąd serwera LibraryThing.com. Spróbuj ponownie poźniej." #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/library_thing.py:60 msgid "" @@ -1372,7 +1413,7 @@ msgstr "" msgid "Cover saved to" msgstr "Okładka zapisana do" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:939 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:938 msgid "Set the dc:language field" msgstr "" @@ -1471,11 +1512,11 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:58 msgid "Upload downloaded news to device" -msgstr "" +msgstr "Prześlij pobrane aktualności na urządzenie" #: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:59 msgid "Delete books from library after uploading to device" -msgstr "" +msgstr "Usuń książki z biblioteki po przesłaniu ich na urządzenie" #: /home/kovid/work/calibre/src/calibre/gui2/device.py:72 msgid "Device no longer connected." @@ -1491,7 +1532,7 @@ msgstr "Pozyskaj listę książek na urządzeniu" #: /home/kovid/work/calibre/src/calibre/gui2/device.py:137 msgid "Send metadata to device" -msgstr "" +msgstr "Prześlij metadane do urządzenia" #: /home/kovid/work/calibre/src/calibre/gui2/device.py:144 msgid "Upload %d books to device" @@ -1507,14 +1548,14 @@ msgstr "Pobierz książki z urządzenia" #: /home/kovid/work/calibre/src/calibre/gui2/device.py:184 msgid "View book on device" -msgstr "" +msgstr "Zobacz ksiązki na urządzeniu" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:84 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:85 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:86 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:271 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:820 -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:52 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:282 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:831 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:56 msgid "Path" msgstr "Ścieżka" @@ -1522,8 +1563,8 @@ msgstr "Ścieżka" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:88 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:89 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:92 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:270 -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:53 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:281 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:57 #: /home/kovid/work/calibre/src/calibre/gui2/tags.py:42 msgid "Formats" msgstr "Formaty" @@ -1568,7 +1609,7 @@ msgstr "&Tytuł:" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf_ui.py:90 msgid "&Author(s):" -msgstr "" +msgstr "&Autor(rzy):" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf_ui.py:91 msgid "&Number of Colors:" @@ -1630,49 +1671,49 @@ msgid "" "Server" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:161 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:162 msgid "Error log:" msgstr "Dziennik błędów:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:165 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:166 msgid "Access log:" msgstr "Dziennik dostępów:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:187 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:339 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:188 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:341 msgid "Failed to start content server" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:227 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:228 msgid "Invalid size" msgstr "Niewłaściwy rozmiar" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:227 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:228 msgid "The size %s is invalid. must be of the form widthxheight" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:269 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:273 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:270 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:274 msgid "Invalid database location" msgstr "Niewłaściwa lokalizacja bazy danych" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:270 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:271 msgid "
                                                                        Must be a directory." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:270 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:271 msgid "Invalid database location " msgstr "Niewłaściwa lokalizacja bazy danych " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:274 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:275 msgid "Invalid database location.
                                                                        Cannot write to " msgstr "Niewłaściwa lokalizacja bazy danych.
                                                                        Nie można zapisać do " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:286 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:287 msgid "Compacting database. This may take a while." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:286 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:287 msgid "Compacting..." msgstr "" @@ -1696,7 +1737,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:389 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:399 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:400 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:374 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:373 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:509 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:282 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:288 @@ -1734,7 +1775,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:371 msgid "Read &metadata from files" -msgstr "" +msgstr "Wczytytuj &metadane z plików" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:372 msgid "Format for &single file save:" @@ -1756,12 +1797,12 @@ msgstr " sekund" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:376 msgid "Choose &language (requires restart):" -msgstr "" +msgstr "Wybierz &język (wymaga restartu):" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:377 #: /home/kovid/work/calibre/src/calibre/utils/config.py:536 msgid "The default output format for ebook conversions." -msgstr "" +msgstr "Domyślny format wyjściowy dla konwersji e-książek" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:378 msgid "LRF" @@ -1773,23 +1814,23 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:380 msgid "&Output format:" -msgstr "" +msgstr "Format &wyjściowy:" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:381 msgid "Normal" -msgstr "" +msgstr "Normalny" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:382 msgid "High" -msgstr "" +msgstr "Wysoki" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:383 msgid "Low" -msgstr "" +msgstr "Niski" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:384 msgid "Job &priority:" -msgstr "" +msgstr "&Priorytet zdań:" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:386 msgid "Add a directory to the frequently used directories list" @@ -1825,19 +1866,19 @@ msgstr "Małe" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:396 msgid "&Button size in toolbar" -msgstr "" +msgstr "&Rozmiar przycisków na pasku narzędzi" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:397 msgid "Show &text in toolbar buttons" -msgstr "" +msgstr "Pokazuj &tekst pod przyciskami na pasku narzędzi" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:398 msgid "Select visible &columns in library view" -msgstr "" +msgstr "Wybierz &kolumny pokazywane w widoku biblioteki:" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:401 msgid "Use internal &viewer for the following formats:" -msgstr "" +msgstr "Użyj wewnętrznej &przeglądarki do wyświetlania poniższych formatów:" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:402 msgid "Enable system &tray icon (needs restart)" @@ -1861,7 +1902,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:407 msgid "&Metadata from file name" -msgstr "" +msgstr "&Metadane z nazwy pliku" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:408 msgid "" @@ -1939,7 +1980,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/conversion_error_ui.py:41 msgid "ERROR" -msgstr "" +msgstr "BŁĄD" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub.py:50 msgid "Bulk convert to EPUB" @@ -1956,7 +1997,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:143 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:155 msgid "Metadata" -msgstr "" +msgstr "Metadane" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub.py:59 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub.py:85 @@ -2004,13 +2045,13 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub.py:93 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:167 msgid "Choose cover for " -msgstr "" +msgstr "Wybierz okładkę dla " #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub.py:100 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:174 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:50 msgid "Cannot read" -msgstr "" +msgstr "Nie można odczytać" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub.py:101 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:175 @@ -2022,7 +2063,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:183 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:59 msgid "Error reading file" -msgstr "" +msgstr "Błąd przy odczycie pliku" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub.py:110 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:184 @@ -2036,9 +2077,9 @@ msgid " is not a valid picture" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub.py:227 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:908 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:910 msgid "Cannot convert" -msgstr "" +msgstr "Nie można przekonwertować" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub.py:228 msgid "This book has no available formats" @@ -2074,30 +2115,30 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:506 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:315 msgid "Book Cover" -msgstr "" +msgstr "Okładka książki" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:371 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:510 -msgid "Use cover from &source file" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:372 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:507 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:316 msgid "Change &cover image:" -msgstr "" +msgstr "Zmień grafikę &okładki:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:373 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:372 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:508 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:317 msgid "Browse for an image to use as the cover of this book." msgstr "" +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:374 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:510 +msgid "Use cover from &source file" +msgstr "" + #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:375 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:511 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:279 msgid "&Title: " -msgstr "" +msgstr "&Tytuł: " #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:376 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:512 @@ -2107,14 +2148,14 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:377 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:513 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:124 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:128 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:283 msgid "&Author(s): " -msgstr "" +msgstr "&Autor(rzy): " #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:378 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:514 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:125 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:129 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:284 msgid "" "Change the author(s) of this book. Multiple authors should be separated by " @@ -2135,17 +2176,17 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:381 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:517 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:132 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:136 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:293 msgid "&Publisher: " -msgstr "" +msgstr "&Wydawca: " #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:382 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:518 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:133 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:137 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:294 msgid "Change the publisher of this book" -msgstr "" +msgstr "Zmień wydawcę tej ksiązki" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:383 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:519 @@ -2155,7 +2196,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:384 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:520 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:135 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:139 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:296 msgid "" "Tags categorize the book. This is particularly useful while searching. " @@ -2164,7 +2205,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:385 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:521 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:140 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:144 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:299 msgid "&Series:" msgstr "" @@ -2173,8 +2214,8 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:387 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:522 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:523 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:141 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:142 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:145 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:146 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:300 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:301 msgid "List of known series. You can add new series." @@ -2313,7 +2354,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:104 msgid "Cannot connect" -msgstr "" +msgstr "Nie można połączyć się" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:105 msgid "You must specify a valid access key for isbndb.com" @@ -2321,11 +2362,11 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:139 msgid "Error fetching metadata" -msgstr "" +msgstr "Błąd podczas pobierania metadanych" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:144 msgid "No metadata found" -msgstr "" +msgstr "Nie znaleziono metadanych" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:144 msgid "" @@ -2334,11 +2375,11 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata_ui.py:77 msgid "Fetch metadata" -msgstr "" +msgstr "Pobierz metadane" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata_ui.py:78 msgid "Fetching metadata for %1" -msgstr "" +msgstr "Pobierz metadane dla %1" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata_ui.py:79 msgid "" @@ -2352,7 +2393,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata_ui.py:81 msgid "Fetch" -msgstr "" +msgstr "Pobierz" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata_ui.py:82 msgid "Matches" @@ -2373,15 +2414,15 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/jobs.py:38 msgid " - Jobs" -msgstr "" +msgstr " - Zadania" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/jobs_ui.py:38 msgid "Active Jobs" -msgstr "" +msgstr "Aktywne zadanie" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/jobs_ui.py:39 msgid "&Stop selected job" -msgstr "" +msgstr "&Zatrzymaj zaznaczone zadanie" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:98 msgid "Choose the format to convert into LRF" @@ -2415,6 +2456,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:263 msgid "
                                                                      • book-designer - HTML0 files from Book Designer
                                                                      • " msgstr "" +"
                                                                      • book-designer - pliki HTML0 stworzone w Book Designer
                                                                      • " #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:296 msgid "" @@ -2587,110 +2629,105 @@ msgid "" "\n" "

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

                                                                        " - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:122 -msgid "Edit Meta information" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:123 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:278 -msgid "Meta information" +"margin-left:0px; margin-right:0px; -qt-block-indent:0; text-" +"indent:0px;\">

                                                                        " msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:126 +msgid "Edit Meta information" +msgstr "Edytuj metadane" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:127 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:278 +msgid "Meta information" +msgstr "Metadane" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:130 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:285 msgid "Author S&ort: " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:127 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:131 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:286 msgid "" "Specify how the author(s) of this book should be sorted. For example Charles " "Dickens should be sorted as Dickens, Charles." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:128 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:132 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:289 msgid "&Rating:" msgstr "&Ocena:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:129 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:130 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:133 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:134 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:290 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:291 msgid "Rating of this book. 0-5 stars" msgstr "Ocena tej książki. 0-5 gwiazdek" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:131 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:135 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:292 msgid " stars" msgstr " gwiazdek" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:134 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:138 msgid "Add Ta&gs: " msgstr "Dodaj ta&gi: " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:136 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:137 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:140 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:141 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:297 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:298 msgid "Open Tag Editor" -msgstr "Otwórz edytor tagów" +msgstr "Otwórz edytor etykiet" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:138 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:142 msgid "&Remove tags:" -msgstr "&Usuń tagi:" +msgstr "&Usuń etykiety:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:139 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:143 msgid "Comma separated list of tags to remove from the books. " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:143 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:147 msgid "Remove &format:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:264 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:148 +msgid "A&utomatically set author sort" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:265 msgid "" "

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

                                                                        " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:294 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:295 msgid "Could not fetch cover.
                                                                        " -msgstr "" +msgstr "Nie można pobrać okładki.
                                                                        " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:294 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:295 msgid "Could not fetch cover" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:300 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:301 msgid "Cannot fetch cover" -msgstr "" +msgstr "Nie można pobrać okładki" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:300 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:301 msgid "You must specify the ISBN identifier for this book." msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:277 msgid "Edit Meta Information" -msgstr "" +msgstr "Edytuj metadane" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:281 msgid "Swap the author and title" -msgstr "" +msgstr "Zamień autora z tytułem" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:287 msgid "" @@ -2778,7 +2815,7 @@ msgstr "Ostatnio pobrano: nigdy" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:325 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:136 msgid "Schedule news download" -msgstr "" +msgstr "Zaplanuj pobieranie aktualności" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:328 msgid "Add a custom news source" @@ -2786,14 +2823,14 @@ msgstr "Dodaj własne źródło aktualności" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:335 #: /home/kovid/work/calibre/src/calibre/gui2/tags.py:42 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:757 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:760 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1057 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:761 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:765 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1064 msgid "News" msgstr "Aktualności" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:137 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:221 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:222 msgid "Recipes" msgstr "" @@ -2878,7 +2915,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_ui.py:87 msgid "Advanced Search" -msgstr "" +msgstr "Zaawansowane wyszukiwanie" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_ui.py:88 msgid "Find entries that have..." @@ -2914,21 +2951,23 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_editor_ui.py:123 msgid "Tag Editor" -msgstr "" +msgstr "Edytor etykiet" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_editor_ui.py:124 msgid "A&vailable tags" -msgstr "" +msgstr "&Dostępne etykiety" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_editor_ui.py:125 msgid "" "Delete tag from database. This will unapply the tag from all books and then " "remove it from the database." msgstr "" +"Usuń etykietę z bazy danych. To działanie usunie tą etykietę ze wszystkich " +"książek i usunie ją z bazy danych." #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_editor_ui.py:127 msgid "Apply tag to current book" -msgstr "" +msgstr "Przypisz etykietę do tej książki" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_editor_ui.py:129 msgid "A&pplied tags" @@ -2936,11 +2975,11 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_editor_ui.py:130 msgid "Unapply (remove) tag from current book" -msgstr "" +msgstr "Usuń etykietę z tej książki" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_editor_ui.py:132 msgid "&Add tag:" -msgstr "" +msgstr "Dodaj etykietę:" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_editor_ui.py:133 msgid "" @@ -2950,7 +2989,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_editor_ui.py:134 msgid "Add tag to available tags and apply it to current book" -msgstr "" +msgstr "Dodaj etykietę do dostępnych etykiet i przypisz ją do tej książki" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:63 msgid "No recipe selected" @@ -2968,7 +3007,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:97 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:221 msgid "Switch to Advanced mode" -msgstr "" +msgstr "Przełącz na zaawansowany tryb" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:92 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:100 @@ -3001,25 +3040,25 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:163 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:172 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:228 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:229 msgid "Invalid input" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:164 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:173 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:229 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:230 msgid "

                                                                        Could not create recipe. Error:
                                                                        %s" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:179 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:210 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:234 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:211 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:235 msgid "Replace recipe?" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:180 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:211 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:235 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:212 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:236 msgid "A custom recipe named %s already exists. Do you want to replace it?" msgstr "" @@ -3031,13 +3070,13 @@ msgstr "" msgid "Pick the recipe to customize" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:221 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:222 msgid "Choose a recipe file" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:214 msgid "Add custom news source" -msgstr "" +msgstr "Dodaj własne źródło aktualności" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:215 msgid "Available user recipes" @@ -3227,7 +3266,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/jobs2.py:46 msgid "Job" -msgstr "" +msgstr "Zadanie" #: /home/kovid/work/calibre/src/calibre/gui2/jobs2.py:47 msgid "Status" @@ -3235,15 +3274,15 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/jobs2.py:48 msgid "Progress" -msgstr "" +msgstr "Postęp" #: /home/kovid/work/calibre/src/calibre/gui2/jobs2.py:49 msgid "Running time" -msgstr "" +msgstr "Czas pracy" #: /home/kovid/work/calibre/src/calibre/gui2/jobs2.py:65 msgid "Unknown job" -msgstr "" +msgstr "Nieznane zadanie" #: /home/kovid/work/calibre/src/calibre/gui2/jobs2.py:70 msgid "Finished" @@ -3251,7 +3290,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/jobs2.py:72 msgid "Error" -msgstr "" +msgstr "Błąd" #: /home/kovid/work/calibre/src/calibre/gui2/jobs2.py:74 msgid "Waiting" @@ -3264,7 +3303,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/jobs2.py:162 #: /home/kovid/work/calibre/src/calibre/gui2/jobs2.py:166 msgid "Cannot kill job" -msgstr "" +msgstr "Nie można przerwać zadania" #: /home/kovid/work/calibre/src/calibre/gui2/jobs2.py:163 msgid "Cannot kill jobs that communicate with the device" @@ -3275,12 +3314,12 @@ msgid "Job has already run" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/library.py:93 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:887 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:898 msgid "Size (MB)" msgstr "Rozmiar (MB)" #: /home/kovid/work/calibre/src/calibre/gui2/library.py:94 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:888 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:899 msgid "Date" msgstr "Data" @@ -3288,27 +3327,28 @@ msgstr "Data" msgid "Rating" msgstr "Ocena" -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:263 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:269 #: /home/kovid/work/calibre/src/calibre/gui2/library.py:274 -msgid "None" -msgstr "" - #: /home/kovid/work/calibre/src/calibre/gui2/library.py:280 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:285 +msgid "None" +msgstr "Brak" + +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:291 msgid "Book %s of %s." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:819 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:830 msgid "Format" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:824 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:835 msgid "Timestamp" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:922 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:933 msgid "Search (For Advanced Search click the button to the left)" msgstr "" +"Szukaj (Aby użyć zaawansowanego wyszukiwania kliknij przycisk po lewej)" #: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/config_ui.py:47 msgid "Configure Viewer" @@ -3384,11 +3424,11 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/main.py:86 msgid "Error communicating with device" -msgstr "" +msgstr "Błąd podczas komunikacji z urządzeniem" #: /home/kovid/work/calibre/src/calibre/gui2/main.py:98 msgid "&Restore" -msgstr "" +msgstr "&Przywróć" #: /home/kovid/work/calibre/src/calibre/gui2/main.py:99 msgid "&Donate" @@ -3413,6 +3453,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/main.py:132 msgid "%s: %s by Kovid Goyal %%(version)s
                                                                        %%(device)s

                                                                        " msgstr "" +"%s: %s stworzył Kovid Goyal %%(version)s
                                                                        %%(device)s

                                                                        " #: /home/kovid/work/calibre/src/calibre/gui2/main.py:150 #: /home/kovid/work/calibre/src/calibre/gui2/main.py:152 @@ -3427,7 +3468,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/main.py:152 #: /home/kovid/work/calibre/src/calibre/gui2/main.py:153 msgid "and delete from library" -msgstr "" +msgstr "i usuń z biblioteki" #: /home/kovid/work/calibre/src/calibre/gui2/main.py:155 msgid "Send to storage card by default" @@ -3435,7 +3476,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/main.py:168 msgid "Edit metadata individually" -msgstr "" +msgstr "Edytuj metadane pjedyńczo" #: /home/kovid/work/calibre/src/calibre/gui2/main.py:170 msgid "Edit metadata in bulk" @@ -3443,7 +3484,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/main.py:173 msgid "Add books from a single directory" -msgstr "" +msgstr "Dodaj książki z pojedyńczego folderu" #: /home/kovid/work/calibre/src/calibre/gui2/main.py:174 msgid "" @@ -3460,29 +3501,29 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/main.py:190 #: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:311 msgid "Save to disk" -msgstr "" +msgstr "Zapisz na dysku" #: /home/kovid/work/calibre/src/calibre/gui2/main.py:191 msgid "Save to disk in a single directory" -msgstr "" +msgstr "Zapisz na dysku w pojedyńczym folderze" #: /home/kovid/work/calibre/src/calibre/gui2/main.py:192 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1106 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1108 msgid "Save only %s format to disk" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/main.py:195 #: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:317 msgid "View" -msgstr "" +msgstr "Wyświetl" #: /home/kovid/work/calibre/src/calibre/gui2/main.py:196 msgid "View specific format" -msgstr "" +msgstr "Wyświetl określony format" #: /home/kovid/work/calibre/src/calibre/gui2/main.py:212 msgid "Convert individually" -msgstr "Przekształcaj pojedyndczo" +msgstr "Konwertuj pojedynczo" #: /home/kovid/work/calibre/src/calibre/gui2/main.py:213 msgid "Bulk convert" @@ -3501,7 +3542,7 @@ msgid "Bad database location" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/main.py:262 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1262 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1264 msgid "Choose a location for your ebook library." msgstr "" @@ -3509,23 +3550,23 @@ msgstr "" msgid "Migrating database" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:416 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:418 msgid "Device: " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:417 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:419 msgid " detected." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:439 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:441 msgid "Connected " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:450 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:452 msgid "Device database corrupted" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:451 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:453 msgid "" "\n" "

                                                                        The database of books on the reader is corrupted. Try the " @@ -3541,288 +3582,293 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:503 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:599 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:505 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:601 msgid "" "

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

                                                                          " msgstr "" +"

                                                                          Książki o takim samym tytule jak poniższe znajdują już się bazie danych. " +"Dodać je mimo to?

                                                                            " -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:506 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:602 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:508 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:604 msgid "Duplicates found!" -msgstr "" +msgstr "Znleziono duplikaty!" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:539 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:563 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:541 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:565 msgid "Uploading books to device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:547 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:549 msgid "Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:548 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:550 msgid "EPUB Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:549 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:551 msgid "LRF Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:550 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:552 msgid "HTML Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:551 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:553 msgid "LIT Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:552 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:554 msgid "MOBI Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:553 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:555 msgid "Text books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:554 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:556 msgid "PDF Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:555 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:557 msgid "Comics" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:556 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:558 msgid "Archives" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:634 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:636 msgid "No space on device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:635 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:637 msgid "" "

                                                                            Cannot upload books to device there is no more free space available " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:665 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:667 msgid "Confirm delete" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:666 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:668 msgid "Are you sure you want to delete these %d books?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:678 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:680 msgid "Deleting books from device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:708 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:730 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:710 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:732 msgid "Cannot edit metadata" -msgstr "" +msgstr "Nie można edytować metadanych" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:708 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:730 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:849 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:908 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:710 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:732 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:851 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:910 msgid "No books selected" msgstr "Nie wybrano ksiązek" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:777 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:779 msgid "Sending news to device." -msgstr "" +msgstr "Przesyłanie aktualności na urządzenie." -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:829 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:831 msgid "Sending books to device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:832 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:834 msgid "No suitable formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:833 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:835 msgid "" "Could not upload the following books to the device, as no suitable formats " "were found:

                                                                              %s
                                                                            " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:849 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:851 msgid "Cannot save to disk" -msgstr "" +msgstr "Nie można zapisać na dysku" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:853 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:855 msgid "Choose destination directory" -msgstr "" +msgstr "Wyberz folder docelowy" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:860 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:862 msgid "" "

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

                                                                              " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:864 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:866 msgid "Could not save some ebooks" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:884 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:886 msgid "Fetching news from " -msgstr "" +msgstr "Pobieranie aktualności z " -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:898 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:900 msgid " fetched." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1012 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1030 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1042 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1014 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1032 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1044 msgid "No book selected" msgstr "Nie wybrano ksiązki" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1012 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1042 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1058 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1014 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1044 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1060 msgid "Cannot view" -msgstr "" +msgstr "Nie można wyświetlić" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1018 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1063 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1020 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1065 msgid "Choose the format to view" -msgstr "" +msgstr "Wybierz format do wyświetlenia" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1030 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1032 msgid "Cannot open folder" -msgstr "" +msgstr "Nie można otworzyć folderu" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1059 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1061 msgid "%s has no available formats." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1097 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1099 msgid "Cannot configure" -msgstr "" +msgstr "Nie można skonfigurować" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1097 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1099 msgid "Cannot configure while there are running jobs." -msgstr "" +msgstr "Nie można skonfigurować, gdy są aktywne jakieś zadania." -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1116 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1118 msgid "Copying database" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1118 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1120 msgid "Copying library to " -msgstr "" +msgstr "Kopiowanie biblioteki do " -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1128 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1130 msgid "Invalid database" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1129 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1131 msgid "" "

                                                                              An invalid database already exists at %s, delete it before trying to move " "the existing database.
                                                                              Error: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1135 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1137 msgid "Could not move database" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1155 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1157 msgid "No detailed info available" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1156 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1158 msgid "No detailed information is available for books on the device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1199 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1201 msgid "Error talking to device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1200 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1202 msgid "" "There was a temporary error talking to the device. Please unplug and " "reconnect the device and or reboot." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1213 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1228 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1232 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1215 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1230 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1234 msgid "Conversion Error" -msgstr "" +msgstr "Błąd podczas konwersji" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1214 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1216 msgid "" "

                                                                              Could not convert: %s

                                                                              It is a DRMed book. You must " "first remove the DRM using 3rd party tools." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1248 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1250 msgid "Database does not exist" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1249 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1251 msgid "" "The directory in which the database should be: %s no longer exists. Please " "choose a new database location." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1251 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1253 msgid "Choose new location for database" -msgstr "" +msgstr "Wybierz nową lokalizację dla bazy danych" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1304 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1306 msgid "" "is the result of the efforts of many volunteers from all over the world. If " "you find it useful, please consider donating to support its development." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1325 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1327 msgid "There are active jobs. Are you sure you want to quit?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1327 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1329 msgid "" " is communicating with the device!
                                                                              \n" " 'Quitting may cause corruption on the device.
                                                                              \n" " 'Are you sure you want to quit?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1331 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1333 msgid "WARNING: Active jobs" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1360 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1362 msgid "" "will keep running in the system tray. To close it, choose Quit in the " "context menu of the system tray." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1373 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1375 msgid "" "Latest version: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1378 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1380 msgid "" "%s has been updated to version %s. See the new features. " "Visit the download page?" msgstr "" +"%s został uaktualniony do wersji %s. Zobacz listę zmian i " +"poprawek. Otworzyć stronę pobierania?" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1378 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1380 msgid "Update available" msgstr "Aktualizacja dostępna" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1393 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1395 msgid "Use the library located at the specified path." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1395 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1397 msgid "Log debugging information to console" msgstr "" @@ -3832,7 +3878,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:290 msgid "Advanced search" -msgstr "" +msgstr "Zaawansowane wyszukiwanie" #: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:292 msgid "Alt+S" @@ -3840,7 +3886,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:293 msgid "&Search:" -msgstr "" +msgstr "&Szukaj:" #: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:294 msgid "" @@ -3856,7 +3902,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:296 msgid "Reset Quick Search" -msgstr "" +msgstr "Wyczyść pasek wyszukiwania" #: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:300 msgid "Match any" @@ -3868,11 +3914,11 @@ msgstr "Dopasuj wszystkie" #: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:302 msgid "Sort by &popularity" -msgstr "Sorduj według &popularności" +msgstr "Sortuj według &popularności" #: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:303 msgid "Add books" -msgstr "" +msgstr "Dodaj książki" #: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:304 msgid "A" @@ -3881,7 +3927,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:305 #: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:306 msgid "Remove books" -msgstr "" +msgstr "Usuń książki" #: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:307 msgid "Del" @@ -3889,7 +3935,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:308 msgid "Edit meta information" -msgstr "" +msgstr "Edytuj metadane" #: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:309 msgid "E" @@ -3897,7 +3943,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:310 msgid "Send to device" -msgstr "" +msgstr "Preślij na urządzenie" #: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:312 msgid "S" @@ -3905,7 +3951,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:313 msgid "Fetch news" -msgstr "" +msgstr "Pobierz aktualności" #: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:314 msgid "F" @@ -3913,7 +3959,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:315 msgid "Convert E-books" -msgstr "" +msgstr "Konwertuj e-ksiązki" #: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:316 msgid "C" @@ -3925,11 +3971,11 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:319 msgid "Open containing folder" -msgstr "" +msgstr "Otwórz folder zawierający" #: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:320 msgid "Show book details" -msgstr "" +msgstr "Pokaż szczegóły ksiązki" #: /home/kovid/work/calibre/src/calibre/gui2/main_window.py:17 msgid "" @@ -3941,31 +3987,31 @@ msgstr "" msgid "ERROR: Unhandled exception" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:108 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:115 msgid "Jobs:" msgstr "Zadań:" -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:117 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:124 msgid "Click to see list of active jobs." -msgstr "" +msgstr "Kliknij, aby zobaczyć listę aktywnych zadań." -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:146 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:153 msgid "Click to browse books by their covers" -msgstr "" +msgstr "Kliknij, aby przeglądać książki po okładkach" -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:146 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:153 msgid "Click to turn off Cover Browsing" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:151 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:158 msgid "" "

                                                                              Browsing books by their covers is disabled.
                                                                              Import of pictureflow " "module failed:
                                                                              " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:159 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:166 msgid "Click to browse books by tags" -msgstr "" +msgstr "Kliknij, aby przeglądać ksiązki po etykietach" #: /home/kovid/work/calibre/src/calibre/gui2/tags.py:42 msgid "Authors" @@ -4012,7 +4058,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/tools.py:360 #: /home/kovid/work/calibre/src/calibre/gui2/tools.py:375 msgid "Fetch news from " -msgstr "" +msgstr "Pobierz aktualności z " #: /home/kovid/work/calibre/src/calibre/gui2/tools.py:372 msgid "You must set a username and password for %s" @@ -4241,31 +4287,39 @@ msgstr "" msgid "Invalid regular expression: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:178 -msgid "Library" +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:139 +msgid "" +"Library\n" +"%d\n" +"books" msgstr "" +"Biblioteka\n" +"%d\n" +"książek" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:179 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:140 msgid "" "Reader\n" -"%s available" +"%s\n" +"available" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:180 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:141 msgid "" "Card\n" -"%s available" +"%s\n" +"available" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:184 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:146 msgid "Click to see the list of books available on your computer" -msgstr "" +msgstr "Kliknij, aby zobaczyć listę książek dostepnych na twoim komputerze" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:185 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:147 msgid "Click to see the list of books in the main memory of your reader" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:186 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:148 msgid "Click to see the list of books on the storage card in your reader" msgstr "" @@ -4397,6 +4451,8 @@ msgid "" "Add books to database even if they already exist. Comparison is done based " "on book titles." msgstr "" +"Dodaj książki do bazy danych nawet jeśli już są w niej. Porównanie odbywa " +"się na podstawie tytułów." #: /home/kovid/work/calibre/src/calibre/library/cli.py:316 msgid "You must specify at least one file to add" @@ -4524,20 +4580,20 @@ msgid "" "For help on an individual command: %%prog command --help\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1137 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1144 msgid "

                                                                              Copying books to %s

                                                                              " msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1150 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1262 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1157 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1266 msgid "Copying %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1233 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1237 msgid "

                                                                              Migrating old database to ebook library in %s

                                                                              " msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1279 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1283 msgid "Compacting database" msgstr "" @@ -4545,7 +4601,7 @@ msgstr "" msgid "Password to access your calibre library. Username is " msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server.py:380 +#: /home/kovid/work/calibre/src/calibre/library/server.py:382 msgid "" "[options]\n" "\n" @@ -4594,7 +4650,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/utils/config.py:538 msgid "Read metadata from files" -msgstr "" +msgstr "Wczytaj metadane z plików" #: /home/kovid/work/calibre/src/calibre/utils/config.py:540 msgid "The priority of worker processes" @@ -4620,13 +4676,13 @@ msgstr "" msgid "Failed to authenticate with server: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:63 -#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:84 +#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:76 +#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:97 msgid "Unknown feed" msgstr "Nieznany kanał" -#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:102 -#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:124 +#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:115 +#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:137 msgid "Untitled article" msgstr "Artukył bez tytułu" @@ -4695,7 +4751,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/web/feeds/main.py:37 #: /home/kovid/work/calibre/src/calibre/web/feeds/main.py:92 msgid "Be more verbose while processing." -msgstr "" +msgstr "Wyświetlaj szczegółowe kominukaty w czasie pracy." #: /home/kovid/work/calibre/src/calibre/web/feeds/main.py:39 #: /home/kovid/work/calibre/src/calibre/web/feeds/main.py:94 @@ -4735,7 +4791,7 @@ msgstr "Ukryj pasek postępu" #: /home/kovid/work/calibre/src/calibre/web/feeds/main.py:55 #: /home/kovid/work/calibre/src/calibre/web/feeds/main.py:105 msgid "Very verbose output, useful for debugging." -msgstr "" +msgstr "Bardzo szczegółowy wynik. Przydatny do debugowania." #: /home/kovid/work/calibre/src/calibre/web/feeds/main.py:57 #: /home/kovid/work/calibre/src/calibre/web/feeds/main.py:107 @@ -4775,68 +4831,68 @@ msgid "Dont show the progress bar" msgstr "Ukryj pasek postępu" #: /home/kovid/work/calibre/src/calibre/web/feeds/main.py:118 -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:668 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:674 msgid "Fetching feeds..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:34 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:40 msgid "Unknown News Source" msgstr "Nieznane źródło informacji" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:549 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:555 msgid "Download finished" msgstr "Pobranie zakończone" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:551 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:557 msgid "Failed to download the following articles:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:553 #: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:559 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:565 msgid " from " msgstr " z " -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:557 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:563 msgid "Failed to download parts of the following articles:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:561 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:567 msgid "\tFailed links:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:647 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:653 msgid "Could not fetch article. Run with --debug to see the reason" msgstr "Nie mozna pobrac artukułu. Uruchom z --debug żeby poznać powód" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:672 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:678 msgid "Got feeds from index page" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:678 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:684 msgid "Trying to download cover..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:731 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:737 msgid "Starting download [%d thread(s)]..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:747 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:753 msgid "Feeds downloaded to %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:757 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:763 msgid "Could not download cover: %s" msgstr "Nie można pobrać okładki: %s" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:762 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:768 msgid "Downloading cover from %s" msgstr "Pobieranie okładki z %s" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:802 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:895 msgid "Untitled Article" msgstr "Artykuł bez tytułu" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:857 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:950 msgid "" "\n" "Downloaded article %s from %s\n" @@ -4846,19 +4902,19 @@ msgstr "" "Pobrano artukuł %s z %s\n" "%s" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:863 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:956 msgid "Article downloaded: %s" msgstr "Artykuł pobrany: %s" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:869 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:962 msgid "Failed to download article: %s from %s\n" msgstr "Nie udało się pobrać artukułu: %s z %s\n" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:874 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:967 msgid "Article download failed: %s" msgstr "Pobieranie artykułu nie powiodło się: %s" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:889 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:982 msgid "Fetching feed" msgstr "" @@ -4892,3 +4948,6 @@ msgstr "" msgid "Show detailed output information. Useful for debugging" msgstr "" "Pokazuj szczegółowową informację wyjściową. Przydatne przy debugowaniu." + +#~ msgid "Library" +#~ msgstr "Biblioteka" diff --git a/src/calibre/translations/pt.po b/src/calibre/translations/pt.po index 5a26d21057..edb6759fac 100644 --- a/src/calibre/translations/pt.po +++ b/src/calibre/translations/pt.po @@ -7,24 +7,24 @@ msgid "" msgstr "" "Project-Id-Version: calibre\n" "Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2008-12-06 07:37+0000\n" +"POT-Creation-Date: 2008-12-15 02:49+0000\n" "PO-Revision-Date: 2008-07-05 03:33+0000\n" "Last-Translator: Tiago Silva \n" "Language-Team: Portuguese \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2008-12-07 21:42+0000\n" +"X-Launchpad-Export-Date: 2008-12-15 18:24+0000\n" "X-Generator: Launchpad (build Unknown)\n" -#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:135 -#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:153 -#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:191 -#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:219 +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:137 +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:155 +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:193 +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:221 msgid "Unable to detect the %s disk drive. Try rebooting." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:407 +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:409 msgid "The reader has no storage card connected." msgstr "" @@ -219,13 +219,13 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:226 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:229 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:274 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:64 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:66 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:99 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:101 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf.py:321 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf.py:436 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:794 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:65 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:67 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:100 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:102 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf.py:334 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf.py:449 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:793 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/pdf.py:12 #: /home/kovid/work/calibre/src/calibre/ebooks/odt/to_oeb.py:46 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf.py:48 @@ -234,12 +234,12 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:365 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:37 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:38 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:317 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:331 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:815 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:581 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:818 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:821 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:328 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:342 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:826 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:583 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:820 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:823 #: /home/kovid/work/calibre/src/calibre/gui2/tools.py:52 #: /home/kovid/work/calibre/src/calibre/gui2/tools.py:112 #: /home/kovid/work/calibre/src/calibre/library/cli.py:245 @@ -248,10 +248,10 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/library/database.py:1423 #: /home/kovid/work/calibre/src/calibre/library/database.py:1452 #: /home/kovid/work/calibre/src/calibre/library/database.py:1564 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:473 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:485 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:810 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:843 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:477 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:489 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:817 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:850 msgid "Unknown" msgstr "" @@ -263,11 +263,11 @@ msgid "" "formats are: %s\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/from_html.py:99 +#: /home/kovid/work/calibre/src/calibre/ebooks/epub/from_html.py:98 msgid "Could not find an ebook inside the archive" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/from_html.py:157 +#: /home/kovid/work/calibre/src/calibre/ebooks/epub/from_html.py:156 msgid "" "%prog [options] file.html|opf\n" "\n" @@ -278,7 +278,7 @@ msgid "" "the element of the OPF file. \n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/from_html.py:386 +#: /home/kovid/work/calibre/src/calibre/ebooks/epub/from_html.py:385 #: /home/kovid/work/calibre/src/calibre/ebooks/html.py:1035 msgid "You must specify an input HTML file" msgstr "" @@ -292,7 +292,7 @@ msgid "" "Could not find reasonable point at which to split: %s Sub-tree size: %d KB" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/split.py:109 +#: /home/kovid/work/calibre/src/calibre/ebooks/epub/split.py:136 msgid "" "\t\tToo much markup. Re-splitting without structure preservation. This may " "cause incorrect rendering." @@ -934,11 +934,11 @@ msgstr "" msgid "Cannot read from: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:2000 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1997 msgid "Failed to process opf file" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:2006 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:2003 msgid "" "Usage: %prog [options] mybook.html\n" "\n" @@ -1138,16 +1138,16 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:70 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:36 #: /home/kovid/work/calibre/src/calibre/gui2/library.py:91 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:314 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:885 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:325 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:896 msgid "Title" msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:274 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:37 #: /home/kovid/work/calibre/src/calibre/gui2/library.py:92 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:319 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:886 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:330 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:897 msgid "Author(s)" msgstr "" @@ -1166,25 +1166,25 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:391 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:527 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:308 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:275 -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:54 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:286 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:58 msgid "Comments" msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:280 #: /home/kovid/work/calibre/src/calibre/gui2/library.py:97 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:264 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:825 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:889 -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:56 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:275 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:836 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:900 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:60 #: /home/kovid/work/calibre/src/calibre/gui2/tags.py:42 msgid "Tags" msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:281 #: /home/kovid/work/calibre/src/calibre/gui2/library.py:98 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:280 -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:55 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:291 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:59 #: /home/kovid/work/calibre/src/calibre/gui2/tags.py:42 msgid "Series" msgstr "" @@ -1288,7 +1288,7 @@ msgstr "" msgid "Cover saved to" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:939 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:938 msgid "Set the dc:language field" msgstr "" @@ -1428,9 +1428,9 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:84 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:85 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:86 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:271 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:820 -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:52 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:282 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:831 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:56 msgid "Path" msgstr "" @@ -1438,8 +1438,8 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:88 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:89 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:92 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:270 -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:53 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:281 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:57 #: /home/kovid/work/calibre/src/calibre/gui2/tags.py:42 msgid "Formats" msgstr "" @@ -1546,49 +1546,49 @@ msgid "" "Server" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:161 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:162 msgid "Error log:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:165 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:166 msgid "Access log:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:187 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:339 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:188 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:341 msgid "Failed to start content server" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:227 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:228 msgid "Invalid size" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:227 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:228 msgid "The size %s is invalid. must be of the form widthxheight" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:269 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:273 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:270 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:274 msgid "Invalid database location" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:270 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:271 msgid "
                                                                              Must be a directory." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:270 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:271 msgid "Invalid database location " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:274 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:275 msgid "Invalid database location.
                                                                              Cannot write to " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:286 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:287 msgid "Compacting database. This may take a while." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:286 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:287 msgid "Compacting..." msgstr "" @@ -1612,7 +1612,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:389 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:399 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:400 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:374 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:373 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:509 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:282 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:288 @@ -1952,7 +1952,7 @@ msgid " is not a valid picture" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub.py:227 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:908 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:910 msgid "Cannot convert" msgstr "" @@ -1993,22 +1993,22 @@ msgid "Book Cover" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:371 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:510 -msgid "Use cover from &source file" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:372 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:507 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:316 msgid "Change &cover image:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:373 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:372 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:508 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:317 msgid "Browse for an image to use as the cover of this book." msgstr "" +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:374 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:510 +msgid "Use cover from &source file" +msgstr "" + #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:375 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:511 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:279 @@ -2023,14 +2023,14 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:377 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:513 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:124 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:128 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:283 msgid "&Author(s): " msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:378 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:514 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:125 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:129 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:284 msgid "" "Change the author(s) of this book. Multiple authors should be separated by " @@ -2051,14 +2051,14 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:381 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:517 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:132 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:136 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:293 msgid "&Publisher: " msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:382 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:518 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:133 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:137 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:294 msgid "Change the publisher of this book" msgstr "" @@ -2071,7 +2071,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:384 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:520 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:135 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:139 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:296 msgid "" "Tags categorize the book. This is particularly useful while searching. " @@ -2080,7 +2080,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:385 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:521 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:140 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:144 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:299 msgid "&Series:" msgstr "" @@ -2089,8 +2089,8 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/epub_ui.py:387 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:522 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:523 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:141 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:142 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:145 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:146 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:300 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:301 msgid "List of known series. You can add new series." @@ -2503,91 +2503,95 @@ msgid "" "\n" "

                                                                              " +"margin-left:0px; margin-right:0px; -qt-block-indent:0; text-" +"indent:0px;\">

                                                                              " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:122 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:126 msgid "Edit Meta information" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:123 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:127 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:278 msgid "Meta information" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:126 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:130 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:285 msgid "Author S&ort: " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:127 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:131 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:286 msgid "" "Specify how the author(s) of this book should be sorted. For example Charles " "Dickens should be sorted as Dickens, Charles." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:128 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:132 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:289 msgid "&Rating:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:129 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:130 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:133 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:134 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:290 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:291 msgid "Rating of this book. 0-5 stars" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:131 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:135 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:292 msgid " stars" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:134 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:138 msgid "Add Ta&gs: " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:136 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:137 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:140 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:141 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:297 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:298 msgid "Open Tag Editor" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:138 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:142 msgid "&Remove tags:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:139 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:143 msgid "Comma separated list of tags to remove from the books. " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:143 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:147 msgid "Remove &format:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:264 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:148 +msgid "A&utomatically set author sort" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:265 msgid "" "

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

                                                                              " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:294 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:295 msgid "Could not fetch cover.
                                                                              " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:294 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:295 msgid "Could not fetch cover" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:300 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:301 msgid "Cannot fetch cover" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:300 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:301 msgid "You must specify the ISBN identifier for this book." msgstr "" @@ -2693,14 +2697,14 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:335 #: /home/kovid/work/calibre/src/calibre/gui2/tags.py:42 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:757 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:760 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1057 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:761 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:765 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1064 msgid "News" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:137 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:221 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:222 msgid "Recipes" msgstr "" @@ -2904,25 +2908,25 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:163 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:172 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:228 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:229 msgid "Invalid input" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:164 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:173 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:229 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:230 msgid "

                                                                              Could not create recipe. Error:
                                                                              %s" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:179 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:210 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:234 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:211 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:235 msgid "Replace recipe?" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:180 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:211 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:235 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:212 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:236 msgid "A custom recipe named %s already exists. Do you want to replace it?" msgstr "" @@ -2934,7 +2938,7 @@ msgstr "" msgid "Pick the recipe to customize" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:221 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:222 msgid "Choose a recipe file" msgstr "" @@ -3178,12 +3182,12 @@ msgid "Job has already run" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/library.py:93 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:887 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:898 msgid "Size (MB)" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/library.py:94 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:888 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:899 msgid "Date" msgstr "" @@ -3191,25 +3195,25 @@ msgstr "" msgid "Rating" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:263 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:269 #: /home/kovid/work/calibre/src/calibre/gui2/library.py:274 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:280 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:285 msgid "None" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:280 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:291 msgid "Book %s of %s." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:819 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:830 msgid "Format" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:824 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:835 msgid "Timestamp" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:922 +#: /home/kovid/work/calibre/src/calibre/gui2/library.py:933 msgid "Search (For Advanced Search click the button to the left)" msgstr "" @@ -3368,7 +3372,7 @@ msgid "Save to disk in a single directory" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/main.py:192 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1106 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1108 msgid "Save only %s format to disk" msgstr "" @@ -3402,7 +3406,7 @@ msgid "Bad database location" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/main.py:262 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1262 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1264 msgid "Choose a location for your ebook library." msgstr "" @@ -3410,23 +3414,23 @@ msgstr "" msgid "Migrating database" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:416 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:418 msgid "Device: " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:417 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:419 msgid " detected." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:439 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:441 msgid "Connected " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:450 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:452 msgid "Device database corrupted" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:451 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:453 msgid "" "\n" "

                                                                              The database of books on the reader is corrupted. Try the " @@ -3442,288 +3446,288 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:503 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:599 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:505 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:601 msgid "" "

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

    -
  • +
  • ${article.title} -

    - ${Markup(cutoff(article.summary))} -

    +
    + ${Markup(cutoff(article.text_summary))} +
diff --git a/todo-2.6 b/todo-2.6 index 00ed1d0e26..33b5a5e428 100644 --- a/todo-2.6 +++ b/todo-2.6 @@ -5,5 +5,3 @@ * Use multiprocessing for cpu_count instead of QThread -* Windows build: - * Compile all dependencies with MSVC 2008 since this is what python now uses diff --git a/upload.py b/upload.py index d005c6dbbd..583b32677c 100644 --- a/upload.py +++ b/upload.py @@ -102,15 +102,12 @@ def build_osx(shutdown=True): return os.path.basename(installer) -def build_linux(shutdown=True): +def build_linux(*args, **kwargs): installer = installer_name('tar.bz2') - vm = '/vmware/linux/libprs500-gentoo.vmx' - start_vm(vm, 'linux', (BUILD_SCRIPT%('sudo python setup.py develop', 'python','installer/linux/freeze.py')).replace('rm ', 'sudo rm '), sleep=120) - subprocess.check_call(('scp', 'linux:/tmp/%s'%os.path.basename(installer), 'dist')) + exec open('installer/linux/freeze.py') + freeze() if not os.path.exists(installer): raise Exception('Failed to build installer '+installer) - if shutdown: - subprocess.Popen(('ssh', 'linux', 'sudo', '/sbin/poweroff')) return os.path.basename(installer) def build_installers(): @@ -238,7 +235,11 @@ def stage_three(): print 'Uploading to PyPI...' check_call('rm -f dist/*') check_call('python setup.py register') + check_call('sudo rm -rf build') + os.mkdir('build') check_call('python2.5 setup.py bdist_egg --exclude-source-files upload') + shutil.rmtree('build') + os.mkdir('build') check_call('python setup.py bdist_egg --exclude-source-files upload') check_call('python setup.py sdist upload') upload_src_tarball()