From 53cbf3c9ad19f89470bf74e5d3595a62c112fe9c Mon Sep 17 00:00:00 2001 From: Translators <> Date: Sat, 5 Jun 2010 04:34:51 +0100 Subject: [PATCH 001/112] Launchpad automatic translations update. --- src/calibre/translations/ar.po | 5868 ++++++++++++++++------------ src/calibre/translations/de.po | 1079 +++--- src/calibre/translations/el.po | 5870 ++++++++++++++++------------ src/calibre/translations/es.po | 1079 +++--- src/calibre/translations/fr.po | 1079 +++--- src/calibre/translations/gl.po | 1104 +++--- src/calibre/translations/he.po | 5859 ++++++++++++++++------------ src/calibre/translations/lv.po | 5861 ++++++++++++++++------------ src/calibre/translations/pl.po | 5947 +++++++++++++++++------------ src/calibre/translations/pt_BR.po | 1095 +++--- src/calibre/translations/ru.po | 5947 +++++++++++++++++------------ src/calibre/translations/sq.po | 5858 ++++++++++++++++------------ src/calibre/translations/sr.po | 1079 +++--- src/calibre/translations/sv.po | 1079 +++--- src/calibre/translations/tr.po | 5864 ++++++++++++++++------------ src/calibre/translations/zh_CN.po | 5939 ++++++++++++++++------------ src/calibre/translations/zh_TW.po | 5929 ++++++++++++++++------------ 17 files changed, 37996 insertions(+), 28540 deletions(-) diff --git a/src/calibre/translations/ar.po b/src/calibre/translations/ar.po index 5b8f1235fe..525bab5d47 100644 --- a/src/calibre/translations/ar.po +++ b/src/calibre/translations/ar.po @@ -7,166 +7,166 @@ msgid "" msgstr "" "Project-Id-Version: calibre\n" "Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2010-05-29 18:54+0000\n" -"PO-Revision-Date: 2010-05-28 23:23+0000\n" +"POT-Creation-Date: 2010-06-05 01:06+0000\n" +"PO-Revision-Date: 2010-06-04 16:43+0000\n" "Last-Translator: Kovid Goyal \n" "Language-Team: Arabic \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2010-05-30 03:40+0000\n" +"X-Launchpad-Export-Date: 2010-06-05 03:32+0000\n" "X-Generator: Launchpad (build Unknown)\n" -#: /home/kovid/work/trunk/src/calibre/customize/__init__.py:43 +#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:43 msgid "Does absolutely nothing" msgstr "لا يفعل شيءً" -#: /home/kovid/work/trunk/src/calibre/customize/__init__.py:46 -#: /home/kovid/work/trunk/src/calibre/devices/jetbook/driver.py:72 -#: /home/kovid/work/trunk/src/calibre/devices/kindle/driver.py:54 -#: /home/kovid/work/trunk/src/calibre/devices/nook/driver.py:70 -#: /home/kovid/work/trunk/src/calibre/devices/nook/driver.py:71 -#: /home/kovid/work/trunk/src/calibre/devices/prs500/books.py:267 -#: /home/kovid/work/trunk/src/calibre/devices/prs505/books.py:58 -#: /home/kovid/work/trunk/src/calibre/devices/prs505/books.py:199 -#: /home/kovid/work/trunk/src/calibre/devices/usbms/driver.py:204 -#: /home/kovid/work/trunk/src/calibre/ebooks/chm/input.py:98 -#: /home/kovid/work/trunk/src/calibre/ebooks/chm/input.py:101 -#: /home/kovid/work/trunk/src/calibre/ebooks/chm/metadata.py:56 -#: /home/kovid/work/trunk/src/calibre/ebooks/comic/input.py:428 -#: /home/kovid/work/trunk/src/calibre/ebooks/fb2/input.py:67 -#: /home/kovid/work/trunk/src/calibre/ebooks/fb2/input.py:69 -#: /home/kovid/work/trunk/src/calibre/ebooks/html/input.py:329 -#: /home/kovid/work/trunk/src/calibre/ebooks/html/input.py:332 -#: /home/kovid/work/trunk/src/calibre/ebooks/lrf/html/convert_from.py:1894 -#: /home/kovid/work/trunk/src/calibre/ebooks/lrf/html/convert_from.py:1896 -#: /home/kovid/work/trunk/src/calibre/ebooks/lrf/output.py:24 -#: /home/kovid/work/trunk/src/calibre/ebooks/metadata/__init__.py:230 -#: /home/kovid/work/trunk/src/calibre/ebooks/metadata/__init__.py:261 -#: /home/kovid/work/trunk/src/calibre/ebooks/metadata/__init__.py:264 -#: /home/kovid/work/trunk/src/calibre/ebooks/metadata/__init__.py:364 -#: /home/kovid/work/trunk/src/calibre/ebooks/metadata/ereader.py:36 -#: /home/kovid/work/trunk/src/calibre/ebooks/metadata/ereader.py:61 -#: /home/kovid/work/trunk/src/calibre/ebooks/metadata/fb2.py:46 -#: /home/kovid/work/trunk/src/calibre/ebooks/metadata/meta.py:36 -#: /home/kovid/work/trunk/src/calibre/ebooks/metadata/meta.py:62 -#: /home/kovid/work/trunk/src/calibre/ebooks/metadata/meta.py:64 -#: /home/kovid/work/trunk/src/calibre/ebooks/metadata/meta.py:118 -#: /home/kovid/work/trunk/src/calibre/ebooks/metadata/meta.py:120 -#: /home/kovid/work/trunk/src/calibre/ebooks/metadata/opf.py:329 -#: /home/kovid/work/trunk/src/calibre/ebooks/metadata/opf.py:444 -#: /home/kovid/work/trunk/src/calibre/ebooks/metadata/opf2.py:921 -#: /home/kovid/work/trunk/src/calibre/ebooks/metadata/pdb.py:39 -#: /home/kovid/work/trunk/src/calibre/ebooks/metadata/pdf.py:28 -#: /home/kovid/work/trunk/src/calibre/ebooks/metadata/pml.py:23 -#: /home/kovid/work/trunk/src/calibre/ebooks/metadata/pml.py:49 -#: /home/kovid/work/trunk/src/calibre/ebooks/metadata/txt.py:14 -#: /home/kovid/work/trunk/src/calibre/ebooks/mobi/reader.py:38 -#: /home/kovid/work/trunk/src/calibre/ebooks/mobi/reader.py:64 -#: /home/kovid/work/trunk/src/calibre/ebooks/mobi/reader.py:77 -#: /home/kovid/work/trunk/src/calibre/ebooks/mobi/reader.py:118 -#: /home/kovid/work/trunk/src/calibre/ebooks/mobi/reader.py:152 -#: /home/kovid/work/trunk/src/calibre/ebooks/mobi/reader.py:610 -#: /home/kovid/work/trunk/src/calibre/ebooks/mobi/reader.py:816 -#: /home/kovid/work/trunk/src/calibre/ebooks/mobi/reader.py:818 -#: /home/kovid/work/trunk/src/calibre/ebooks/odt/input.py:49 -#: /home/kovid/work/trunk/src/calibre/ebooks/odt/input.py:51 -#: /home/kovid/work/trunk/src/calibre/ebooks/oeb/base.py:909 -#: /home/kovid/work/trunk/src/calibre/ebooks/oeb/base.py:914 -#: /home/kovid/work/trunk/src/calibre/ebooks/oeb/base.py:980 -#: /home/kovid/work/trunk/src/calibre/ebooks/oeb/reader.py:137 -#: /home/kovid/work/trunk/src/calibre/ebooks/oeb/reader.py:139 -#: /home/kovid/work/trunk/src/calibre/ebooks/oeb/transforms/jacket.py:108 -#: /home/kovid/work/trunk/src/calibre/ebooks/pdb/ereader/writer.py:173 -#: /home/kovid/work/trunk/src/calibre/ebooks/pdb/ereader/writer.py:174 -#: /home/kovid/work/trunk/src/calibre/ebooks/pdb/input.py:39 -#: /home/kovid/work/trunk/src/calibre/ebooks/pdb/palmdoc/writer.py:29 -#: /home/kovid/work/trunk/src/calibre/ebooks/pdb/ztxt/writer.py:27 -#: /home/kovid/work/trunk/src/calibre/ebooks/pdf/manipulate/crop.py:82 -#: /home/kovid/work/trunk/src/calibre/ebooks/pdf/manipulate/crop.py:83 -#: /home/kovid/work/trunk/src/calibre/ebooks/pdf/manipulate/decrypt.py:73 -#: /home/kovid/work/trunk/src/calibre/ebooks/pdf/manipulate/decrypt.py:74 -#: /home/kovid/work/trunk/src/calibre/ebooks/pdf/manipulate/encrypt.py:63 -#: /home/kovid/work/trunk/src/calibre/ebooks/pdf/manipulate/encrypt.py:64 -#: /home/kovid/work/trunk/src/calibre/ebooks/pdf/manipulate/info.py:52 -#: /home/kovid/work/trunk/src/calibre/ebooks/pdf/manipulate/merge.py:65 -#: /home/kovid/work/trunk/src/calibre/ebooks/pdf/manipulate/merge.py:66 -#: /home/kovid/work/trunk/src/calibre/ebooks/pdf/manipulate/reverse.py:63 -#: /home/kovid/work/trunk/src/calibre/ebooks/pdf/manipulate/reverse.py:64 -#: /home/kovid/work/trunk/src/calibre/ebooks/pdf/manipulate/rotate.py:62 -#: /home/kovid/work/trunk/src/calibre/ebooks/pdf/manipulate/rotate.py:63 -#: /home/kovid/work/trunk/src/calibre/ebooks/pdf/manipulate/split.py:81 -#: /home/kovid/work/trunk/src/calibre/ebooks/pdf/manipulate/split.py:82 -#: /home/kovid/work/trunk/src/calibre/ebooks/pdf/writer.py:97 -#: /home/kovid/work/trunk/src/calibre/ebooks/pdf/writer.py:98 -#: /home/kovid/work/trunk/src/calibre/ebooks/rtf/input.py:233 -#: /home/kovid/work/trunk/src/calibre/ebooks/rtf/input.py:235 -#: /home/kovid/work/trunk/src/calibre/gui2/__init__.py:279 -#: /home/kovid/work/trunk/src/calibre/gui2/__init__.py:286 -#: /home/kovid/work/trunk/src/calibre/gui2/add.py:170 -#: /home/kovid/work/trunk/src/calibre/gui2/add.py:177 -#: /home/kovid/work/trunk/src/calibre/gui2/convert/__init__.py:21 -#: /home/kovid/work/trunk/src/calibre/gui2/convert/metadata.py:107 -#: /home/kovid/work/trunk/src/calibre/gui2/convert/metadata.py:132 -#: /home/kovid/work/trunk/src/calibre/gui2/convert/metadata.py:134 -#: /home/kovid/work/trunk/src/calibre/gui2/device.py:574 -#: /home/kovid/work/trunk/src/calibre/gui2/device.py:583 -#: /home/kovid/work/trunk/src/calibre/gui2/device.py:862 -#: /home/kovid/work/trunk/src/calibre/gui2/device.py:865 -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/comicconf.py:48 -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/fetch_metadata.py:123 -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/fetch_metadata.py:158 -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/metadata_single.py:460 -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/scheduler.py:173 -#: /home/kovid/work/trunk/src/calibre/gui2/library.py:419 -#: /home/kovid/work/trunk/src/calibre/gui2/library.py:441 -#: /home/kovid/work/trunk/src/calibre/gui2/library.py:969 -#: /home/kovid/work/trunk/src/calibre/gui2/library.py:1096 -#: /home/kovid/work/trunk/src/calibre/gui2/ui.py:1694 -#: /home/kovid/work/trunk/src/calibre/gui2/ui.py:1697 -#: /home/kovid/work/trunk/src/calibre/gui2/viewer/main.py:185 -#: /home/kovid/work/trunk/src/calibre/library/cli.py:311 -#: /home/kovid/work/trunk/src/calibre/library/database.py:913 -#: /home/kovid/work/trunk/src/calibre/library/database2.py:248 -#: /home/kovid/work/trunk/src/calibre/library/database2.py:260 -#: /home/kovid/work/trunk/src/calibre/library/database2.py:680 -#: /home/kovid/work/trunk/src/calibre/library/database2.py:717 -#: /home/kovid/work/trunk/src/calibre/library/database2.py:1111 -#: /home/kovid/work/trunk/src/calibre/library/database2.py:1113 -#: /home/kovid/work/trunk/src/calibre/library/database2.py:1235 -#: /home/kovid/work/trunk/src/calibre/library/server.py:671 -#: /home/kovid/work/trunk/src/calibre/library/server.py:747 -#: /home/kovid/work/trunk/src/calibre/library/server.py:794 -#: /home/kovid/work/trunk/src/calibre/utils/localization.py:114 -#: /home/kovid/work/trunk/src/calibre/utils/podofo/__init__.py:45 -#: /home/kovid/work/trunk/src/calibre/utils/podofo/__init__.py:63 -#: /home/kovid/work/trunk/src/calibre/utils/podofo/__init__.py:77 -#: /home/kovid/work/trunk/src/calibre/web/feeds/recipes/collection.py:47 -#: /home/kovid/work/trunk/src/calibre/web/feeds/recipes/collection.py:50 +#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:46 +#: /home/kovid/work/calibre/src/calibre/devices/jetbook/driver.py:72 +#: /home/kovid/work/calibre/src/calibre/devices/kindle/driver.py:54 +#: /home/kovid/work/calibre/src/calibre/devices/nook/driver.py:70 +#: /home/kovid/work/calibre/src/calibre/devices/nook/driver.py:71 +#: /home/kovid/work/calibre/src/calibre/devices/prs500/books.py:267 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:347 +#: /home/kovid/work/calibre/src/calibre/ebooks/chm/input.py:98 +#: /home/kovid/work/calibre/src/calibre/ebooks/chm/input.py:101 +#: /home/kovid/work/calibre/src/calibre/ebooks/chm/metadata.py:56 +#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:428 +#: /home/kovid/work/calibre/src/calibre/ebooks/fb2/input.py:67 +#: /home/kovid/work/calibre/src/calibre/ebooks/fb2/input.py:69 +#: /home/kovid/work/calibre/src/calibre/ebooks/html/input.py:329 +#: /home/kovid/work/calibre/src/calibre/ebooks/html/input.py:332 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1894 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1896 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/output.py:24 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:230 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:270 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:273 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:373 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:19 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:20 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/ereader.py:36 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/ereader.py:61 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/fb2.py:46 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:36 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:62 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:64 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:118 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:120 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:943 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:1055 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/pdb.py:39 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/pdf.py:28 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/pml.py:23 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/pml.py:49 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/txt.py:14 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:38 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:64 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:77 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:118 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:152 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:610 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:816 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:818 +#: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:49 +#: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:51 +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:908 +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:913 +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:979 +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/reader.py:137 +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/reader.py:139 +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/jacket.py:108 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdb/ereader/writer.py:173 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdb/ereader/writer.py:174 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdb/input.py:39 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdb/palmdoc/writer.py:29 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdb/ztxt/writer.py:27 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/crop.py:82 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/crop.py:83 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/decrypt.py:73 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/decrypt.py:74 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/encrypt.py:63 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/encrypt.py:64 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/info.py:52 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/merge.py:65 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/merge.py:66 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/reverse.py:63 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/reverse.py:64 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/rotate.py:62 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/rotate.py:63 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/split.py:81 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/split.py:82 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/writer.py:97 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/writer.py:98 +#: /home/kovid/work/calibre/src/calibre/ebooks/rtf/input.py:233 +#: /home/kovid/work/calibre/src/calibre/ebooks/rtf/input.py:235 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:273 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:280 +#: /home/kovid/work/calibre/src/calibre/gui2/add.py:170 +#: /home/kovid/work/calibre/src/calibre/gui2/add.py:177 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/__init__.py:21 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:107 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:132 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:134 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:657 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:666 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:946 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:949 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf.py:47 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:123 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:158 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:489 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:172 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:338 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:358 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:823 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:986 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1797 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1800 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:185 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:213 +#: /home/kovid/work/calibre/src/calibre/library/database.py:913 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:308 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:320 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:884 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:921 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1400 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1402 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1524 +#: /home/kovid/work/calibre/src/calibre/library/server/mobile.py:268 +#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:131 +#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:134 +#: /home/kovid/work/calibre/src/calibre/library/server/xml.py:68 +#: /home/kovid/work/calibre/src/calibre/utils/localization.py:114 +#: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:45 +#: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:63 +#: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:77 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/collection.py:47 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/collection.py:50 msgid "Unknown" msgstr "مجهول" -#: /home/kovid/work/trunk/src/calibre/customize/__init__.py:64 +#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:64 msgid "Base" msgstr "قاعدة" -#: /home/kovid/work/trunk/src/calibre/customize/__init__.py:172 +#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:172 msgid "File type" msgstr "نوع الملف" -#: /home/kovid/work/trunk/src/calibre/customize/__init__.py:206 +#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:206 msgid "Metadata reader" msgstr "قارئ دليل المعلومات" -#: /home/kovid/work/trunk/src/calibre/customize/__init__.py:237 +#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:235 msgid "Metadata writer" msgstr "كاتب دليل المعلومات" -#: /home/kovid/work/trunk/src/calibre/customize/__init__.py:267 +#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:263 msgid "Catalog generator" msgstr "مولد الكاتالوج" -#: /home/kovid/work/trunk/src/calibre/customize/builtins.py:15 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:15 msgid "" "Follow all local links in an HTML file and create a ZIP file containing all " "linked files. This plugin is run every time you add an HTML file to the " @@ -175,7 +175,7 @@ msgstr "" "إلتحاق بكل الوصلات المحلية في ملف HTML وإنشاء ملف ZIP ليحتوي كل الملفات " "الموصولة. هذا الملحق ينفّذ كل مرة تضيف ملف HTML إلى المكتبة." -#: /home/kovid/work/trunk/src/calibre/customize/builtins.py:50 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:50 msgid "" "Character encoding for the input HTML files. Common choices include: cp1252, " "latin1, iso-8859-1 and utf-8." @@ -183,7 +183,7 @@ msgstr "" "رمزالحروف لاجل ملفات HTML المدخلة, تشتمل على الخيارات التالية : cp1252, " "latin1, iso-8859-1 وutf-8" -#: /home/kovid/work/trunk/src/calibre/customize/builtins.py:57 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:57 msgid "" "Create a PMLZ archive containing the PML file and all images in the " "directory pmlname_img or images. This plugin is run every time you add a PML " @@ -193,57 +193,57 @@ msgstr "" "pmlname_img او صور. هذا المضاف يتم تشغيله كل مرة اضيف فيها ملف PML الى " "المكتبة" -#: /home/kovid/work/trunk/src/calibre/customize/builtins.py:89 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:89 msgid "Extract cover from comic files" msgstr "استخرج الغلاف من ملف الرسومات" -#: /home/kovid/work/trunk/src/calibre/customize/builtins.py:116 -#: /home/kovid/work/trunk/src/calibre/customize/builtins.py:127 -#: /home/kovid/work/trunk/src/calibre/customize/builtins.py:139 -#: /home/kovid/work/trunk/src/calibre/customize/builtins.py:149 -#: /home/kovid/work/trunk/src/calibre/customize/builtins.py:159 -#: /home/kovid/work/trunk/src/calibre/customize/builtins.py:170 -#: /home/kovid/work/trunk/src/calibre/customize/builtins.py:180 -#: /home/kovid/work/trunk/src/calibre/customize/builtins.py:190 -#: /home/kovid/work/trunk/src/calibre/customize/builtins.py:200 -#: /home/kovid/work/trunk/src/calibre/customize/builtins.py:210 -#: /home/kovid/work/trunk/src/calibre/customize/builtins.py:220 -#: /home/kovid/work/trunk/src/calibre/customize/builtins.py:231 -#: /home/kovid/work/trunk/src/calibre/customize/builtins.py:242 -#: /home/kovid/work/trunk/src/calibre/customize/builtins.py:254 -#: /home/kovid/work/trunk/src/calibre/customize/builtins.py:275 -#: /home/kovid/work/trunk/src/calibre/customize/builtins.py:286 -#: /home/kovid/work/trunk/src/calibre/customize/builtins.py:296 -#: /home/kovid/work/trunk/src/calibre/customize/builtins.py:306 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:116 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:127 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:139 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:149 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:159 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:170 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:180 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:190 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:200 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:210 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:220 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:231 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:242 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:254 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:275 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:286 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:296 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:306 msgid "Read metadata from %s files" msgstr "يقرأ دليل المعلومات من الملفات %s" -#: /home/kovid/work/trunk/src/calibre/customize/builtins.py:265 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:265 msgid "Read metadata from ebooks in RAR archives" msgstr "إقرأ دليل المعلومات لكتب في أرشيفات RAR" -#: /home/kovid/work/trunk/src/calibre/customize/builtins.py:317 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:317 msgid "Read metadata from ebooks in ZIP archives" msgstr "إقرأ ميتاداتا لكتب في أرشيفات ZIP" -#: /home/kovid/work/trunk/src/calibre/customize/builtins.py:328 -#: /home/kovid/work/trunk/src/calibre/customize/builtins.py:338 -#: /home/kovid/work/trunk/src/calibre/customize/builtins.py:348 -#: /home/kovid/work/trunk/src/calibre/customize/builtins.py:370 -#: /home/kovid/work/trunk/src/calibre/customize/builtins.py:381 -#: /home/kovid/work/trunk/src/calibre/customize/builtins.py:391 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:328 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:338 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:348 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:370 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:381 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:391 msgid "Set metadata in %s files" msgstr "ضبط دليل المعلومات في الملفات %s" -#: /home/kovid/work/trunk/src/calibre/customize/builtins.py:359 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:359 msgid "Set metadata from %s files" msgstr "ضبط دليل المعلومات من ملفات %s" -#: /home/kovid/work/trunk/src/calibre/customize/conversion.py:102 +#: /home/kovid/work/calibre/src/calibre/customize/conversion.py:102 msgid "Conversion Input" msgstr "دخل التحويل" -#: /home/kovid/work/trunk/src/calibre/customize/conversion.py:125 +#: /home/kovid/work/calibre/src/calibre/customize/conversion.py:125 msgid "" "Specify the character encoding of the input document. If set this option " "will override any encoding declared by the document itself. Particularly " @@ -254,11 +254,11 @@ msgstr "" "متجاوزاً خيارات المستند, هذا الخيار للمستندان التي لا تعلن عن ترميزها أو " "التي ليس لها ترميز خاطىء." -#: /home/kovid/work/trunk/src/calibre/customize/conversion.py:241 +#: /home/kovid/work/calibre/src/calibre/customize/conversion.py:241 msgid "Conversion Output" msgstr "خرج التحويل" -#: /home/kovid/work/trunk/src/calibre/customize/conversion.py:255 +#: /home/kovid/work/calibre/src/calibre/customize/conversion.py:255 msgid "" "If specified, the output plugin will try to create output that is as human " "readable as possible. May not have any effect for some output plugins." @@ -266,11 +266,11 @@ msgstr "" "اذا تم اختيارها , سوف يتم جعل المخرجات مقروءة بشرياً قدر الامكان, و قد لا " "يكون لا تأثير لبعض المخرجات ." -#: /home/kovid/work/trunk/src/calibre/customize/profiles.py:45 +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:45 msgid "Input profile" msgstr "طور الدخل" -#: /home/kovid/work/trunk/src/calibre/customize/profiles.py:49 +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:49 msgid "" "This profile tries to provide sane defaults and is useful if you know " "nothing about the input document." @@ -278,83 +278,83 @@ msgstr "" "ملف تعريف هذا يحاول تقديم افتراضات عاقلة ومفيدة إذا كنت لا تعرف شيئا عن " "وثيقة الإدخال." -#: /home/kovid/work/trunk/src/calibre/customize/profiles.py:57 -#: /home/kovid/work/trunk/src/calibre/customize/profiles.py:258 +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:57 +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:266 msgid "" "This profile is intended for the SONY PRS line. The 500/505/600/700 etc." msgstr "" "ملف التعريف هذا هو المقصود لجهاز سوني من خط إنتاج PRS . الـ500/505/600/700 " "إلخ." -#: /home/kovid/work/trunk/src/calibre/customize/profiles.py:69 +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:69 msgid "This profile is intended for the SONY PRS 300." msgstr "ملف التعريف هذا هو المقصود لجهاز سوني PRS 300." -#: /home/kovid/work/trunk/src/calibre/customize/profiles.py:78 -#: /home/kovid/work/trunk/src/calibre/customize/profiles.py:292 +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:78 +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:300 msgid "This profile is intended for the SONY PRS-900." msgstr "ملف التعريف هذا هو المقصود لجهاز سوني PRS 900." -#: /home/kovid/work/trunk/src/calibre/customize/profiles.py:86 -#: /home/kovid/work/trunk/src/calibre/customize/profiles.py:322 +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:86 +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:330 msgid "This profile is intended for the Microsoft Reader." msgstr "هذا الطور يستخدم مع Microsoft Reader" -#: /home/kovid/work/trunk/src/calibre/customize/profiles.py:97 -#: /home/kovid/work/trunk/src/calibre/customize/profiles.py:333 +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:97 +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:341 msgid "This profile is intended for the Mobipocket books." msgstr "ملف التعريف هذا يستخدم مع كتب Mobipocket ." -#: /home/kovid/work/trunk/src/calibre/customize/profiles.py:110 -#: /home/kovid/work/trunk/src/calibre/customize/profiles.py:346 +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:110 +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:354 msgid "This profile is intended for the Hanlin V3 and its clones." msgstr "ملف التعريف هذا يستخدم مع Hanlin V3 وأمثاله." -#: /home/kovid/work/trunk/src/calibre/customize/profiles.py:122 -#: /home/kovid/work/trunk/src/calibre/customize/profiles.py:358 +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:122 +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:366 msgid "This profile is intended for the Hanlin V5 and its clones." msgstr "ملف التعريف هذا يستخدم مع Hanlin V5 وأمثاله." -#: /home/kovid/work/trunk/src/calibre/customize/profiles.py:132 -#: /home/kovid/work/trunk/src/calibre/customize/profiles.py:366 +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:132 +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:374 msgid "This profile is intended for the Cybook G3." msgstr "ملف التعريف هذا يستخدم مع Cybook G3" -#: /home/kovid/work/trunk/src/calibre/customize/profiles.py:145 -#: /home/kovid/work/trunk/src/calibre/customize/profiles.py:379 +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:145 +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:387 msgid "This profile is intended for the Cybook Opus." msgstr "ملف التعريف هذا يستخدم مع Cybook Opus ." -#: /home/kovid/work/trunk/src/calibre/customize/profiles.py:157 -#: /home/kovid/work/trunk/src/calibre/customize/profiles.py:390 +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:157 +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:398 msgid "This profile is intended for the Amazon Kindle." msgstr "ملف التعريف هذا يستخدم مع Amazon Kindle ." -#: /home/kovid/work/trunk/src/calibre/customize/profiles.py:169 -#: /home/kovid/work/trunk/src/calibre/customize/profiles.py:425 +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:169 +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:433 msgid "This profile is intended for the Irex Illiad." msgstr "ملف التعريف هذا يستخدم مع Irex Illiad ." -#: /home/kovid/work/trunk/src/calibre/customize/profiles.py:181 -#: /home/kovid/work/trunk/src/calibre/customize/profiles.py:438 +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:181 +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:446 msgid "This profile is intended for the IRex Digital Reader 1000." msgstr "ملف التعريف هذا يستخدم مع IRex Digital Reader 1000 ." -#: /home/kovid/work/trunk/src/calibre/customize/profiles.py:194 -#: /home/kovid/work/trunk/src/calibre/customize/profiles.py:452 +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:194 +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:460 msgid "This profile is intended for the IRex Digital Reader 800." msgstr "" -#: /home/kovid/work/trunk/src/calibre/customize/profiles.py:206 -#: /home/kovid/work/trunk/src/calibre/customize/profiles.py:466 +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:206 +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:474 msgid "This profile is intended for the B&N Nook." msgstr "ملف التعريف هذا يستخدم مع B&N Nook ." -#: /home/kovid/work/trunk/src/calibre/customize/profiles.py:226 +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:226 msgid "Output profile" msgstr "المخرجات" -#: /home/kovid/work/trunk/src/calibre/customize/profiles.py:230 +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:230 msgid "" "This profile tries to provide sane defaults and is useful if you want to " "produce a document intended to be read at a computer or on a range of " @@ -363,24 +363,24 @@ msgstr "" "ملف التعريف هذا يحاول تقديم افتراضات عاقلة و مفيدة إذا كنت ترغب في إصدار " "وثيقة للقراءة في جهاز الكمبيوتر أو على مجموعة من الأجهزة." -#: /home/kovid/work/trunk/src/calibre/customize/profiles.py:248 +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:254 msgid "" "Intended for the iPad and similar devices with a resolution of 768x1024" msgstr "" -#: /home/kovid/work/trunk/src/calibre/customize/profiles.py:271 +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:279 msgid "This profile is intended for the Kobo Reader." msgstr "" -#: /home/kovid/work/trunk/src/calibre/customize/profiles.py:283 +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:291 msgid "This profile is intended for the SONY PRS-300." msgstr "ملف التعريف هذا يستخدم مع سوني PRS-300 ." -#: /home/kovid/work/trunk/src/calibre/customize/profiles.py:301 +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:309 msgid "This profile is intended for the 5-inch JetBook." msgstr "ملف التعريف هذا يستخدم مع الخمسة بوصة JetBook ." -#: /home/kovid/work/trunk/src/calibre/customize/profiles.py:310 +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:318 msgid "" "This profile is intended for the SONY PRS line. The 500/505/700 etc, in " "landscape mode. Mainly useful for comics." @@ -388,35 +388,35 @@ msgstr "" "ملف التعريف هذا يستخدم مع سوني خط إنتاج PRS . الـ500/505/700 الخ ، في وضع " "أفقي.غالباً مفيد للكاريكاتيرات." -#: /home/kovid/work/trunk/src/calibre/customize/profiles.py:408 +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:416 msgid "This profile is intended for the Amazon Kindle DX." msgstr "ملف التعريف هذا يستخدم مع Amazon Kindle DX" -#: /home/kovid/work/trunk/src/calibre/customize/ui.py:31 +#: /home/kovid/work/calibre/src/calibre/customize/ui.py:31 msgid "Installed plugins" msgstr "ملحقات مثبتة" -#: /home/kovid/work/trunk/src/calibre/customize/ui.py:32 +#: /home/kovid/work/calibre/src/calibre/customize/ui.py:32 msgid "Mapping for filetype plugins" msgstr "تعيين لملحقات أنواع الملفات" -#: /home/kovid/work/trunk/src/calibre/customize/ui.py:33 +#: /home/kovid/work/calibre/src/calibre/customize/ui.py:33 msgid "Local plugin customization" msgstr "تخصيص الملحقات المحلية" -#: /home/kovid/work/trunk/src/calibre/customize/ui.py:34 +#: /home/kovid/work/calibre/src/calibre/customize/ui.py:34 msgid "Disabled plugins" msgstr "ملحقات معطلة" -#: /home/kovid/work/trunk/src/calibre/customize/ui.py:77 +#: /home/kovid/work/calibre/src/calibre/customize/ui.py:77 msgid "No valid plugin found in " msgstr "لا يجد ملحق صالح " -#: /home/kovid/work/trunk/src/calibre/customize/ui.py:278 +#: /home/kovid/work/calibre/src/calibre/customize/ui.py:278 msgid "Initialization of plugin %s failed with traceback:" msgstr "فشل استهلال الملحق s% مع اقتفاء الأثر:" -#: /home/kovid/work/trunk/src/calibre/customize/ui.py:433 +#: /home/kovid/work/calibre/src/calibre/customize/ui.py:433 msgid "" " %prog options\n" "\n" @@ -428,209 +428,250 @@ msgstr "" " المقدرة على التخصيص بتحميل الملحقات الخارجية .\n" " " -#: /home/kovid/work/trunk/src/calibre/customize/ui.py:439 +#: /home/kovid/work/calibre/src/calibre/customize/ui.py:439 msgid "Add a plugin by specifying the path to the zip file containing it." msgstr "إضافة ملحق يتخصيص مسار إلى ملف zip الذي يحتويه." -#: /home/kovid/work/trunk/src/calibre/customize/ui.py:441 +#: /home/kovid/work/calibre/src/calibre/customize/ui.py:441 msgid "Remove a custom plugin by name. Has no effect on builtin plugins" msgstr "حذف الملحق المخصص عن طريق اسمه. لا يؤثر على الملحقات المضمنة" -#: /home/kovid/work/trunk/src/calibre/customize/ui.py:443 +#: /home/kovid/work/calibre/src/calibre/customize/ui.py:443 msgid "" "Customize plugin. Specify name of plugin and customization string separated " "by a comma." msgstr "تخصيص الملحق . حدد اسم الملحق وسلسلة التخصيص وفرقهما بفاصلة." -#: /home/kovid/work/trunk/src/calibre/customize/ui.py:445 +#: /home/kovid/work/calibre/src/calibre/customize/ui.py:445 msgid "List all installed plugins" msgstr "قائمة كل الملحقات المثبتة" -#: /home/kovid/work/trunk/src/calibre/customize/ui.py:447 +#: /home/kovid/work/calibre/src/calibre/customize/ui.py:447 msgid "Enable the named plugin" msgstr "تمكين الملحق المسمى" -#: /home/kovid/work/trunk/src/calibre/customize/ui.py:449 +#: /home/kovid/work/calibre/src/calibre/customize/ui.py:449 msgid "Disable the named plugin" msgstr "تعطيل الملحق المسمى" -#: /home/kovid/work/trunk/src/calibre/devices/android/driver.py:13 +#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:13 msgid "Communicate with Android phones." msgstr "التواصل مع هواتف أندرويد ." -#: /home/kovid/work/trunk/src/calibre/devices/android/driver.py:39 +#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:39 msgid "" "Comma separated list of directories to send e-books to on the device. The " "first one that exists will be used" msgstr "" -#: /home/kovid/work/trunk/src/calibre/devices/android/driver.py:68 +#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:68 msgid "Communicate with S60 phones." msgstr "" -#: /home/kovid/work/trunk/src/calibre/devices/binatone/driver.py:17 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:57 +msgid "Communicate with iBooks through iTunes." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:63 +msgid "Apple device detected, launching iTunes, please wait ..." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:125 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:143 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:146 +msgid "Updating device metadata listing..." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:211 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:242 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:827 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:964 +msgid "%d of %d" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:248 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:969 +msgid "finished" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:421 +msgid "" +"Some books not found in iTunes database.\n" +"Delete using the iBooks app.\n" +"Click 'Show Details' for a list." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:614 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/deviceconfig.py:28 +msgid "settings for device drivers" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:616 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/deviceconfig.py:30 +msgid "Ordered list of formats the device will accept" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:729 +msgid "" +"Some cover art could not be converted.\n" +"Click 'Show Details' for a list." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/binatone/driver.py:17 msgid "Communicate with the Binatone Readme eBook reader." msgstr "" -#: /home/kovid/work/trunk/src/calibre/devices/blackberry/driver.py:13 +#: /home/kovid/work/calibre/src/calibre/devices/blackberry/driver.py:13 msgid "Communicate with the Blackberry smart phone." msgstr "" -#: /home/kovid/work/trunk/src/calibre/devices/blackberry/driver.py:14 -#: /home/kovid/work/trunk/src/calibre/devices/nuut2/driver.py:18 -#: /home/kovid/work/trunk/src/calibre/devices/prs500/driver.py:90 +#: /home/kovid/work/calibre/src/calibre/devices/blackberry/driver.py:14 +#: /home/kovid/work/calibre/src/calibre/devices/nuut2/driver.py:18 +#: /home/kovid/work/calibre/src/calibre/devices/prs500/driver.py:90 msgid "Kovid Goyal" msgstr "Kovid Goyal" -#: /home/kovid/work/trunk/src/calibre/devices/cybook/driver.py:22 +#: /home/kovid/work/calibre/src/calibre/devices/cybook/driver.py:22 msgid "Communicate with the Cybook Gen 3 / Opus eBook reader." msgstr "" -#: /home/kovid/work/trunk/src/calibre/devices/eb600/driver.py:24 +#: /home/kovid/work/calibre/src/calibre/devices/eb600/driver.py:24 msgid "Communicate with the EB600 eBook reader." msgstr "التواصل مع القارئ الكتاب الاليكترونى EB600 ." -#: /home/kovid/work/trunk/src/calibre/devices/edge/driver.py:17 +#: /home/kovid/work/calibre/src/calibre/devices/edge/driver.py:17 msgid "Entourage Edge" msgstr "" -#: /home/kovid/work/trunk/src/calibre/devices/edge/driver.py:18 +#: /home/kovid/work/calibre/src/calibre/devices/edge/driver.py:18 msgid "Communicate with the Entourage Edge." msgstr "" -#: /home/kovid/work/trunk/src/calibre/devices/eslick/driver.py:16 +#: /home/kovid/work/calibre/src/calibre/devices/eslick/driver.py:16 msgid "Communicate with the ESlick eBook reader." msgstr "التواصل مع القارئ الكتاب الاليكترونى ESlick ." -#: /home/kovid/work/trunk/src/calibre/devices/hanlin/driver.py:19 -msgid "Communicate with Hanlin V3 eBook readers." -msgstr "التواصل مع القارئ الكتاب الاليكترونى Hanlin V3 ." - -#: /home/kovid/work/trunk/src/calibre/devices/hanlin/driver.py:78 -msgid "Communicate with Hanlin V5 eBook readers." -msgstr "التواصل مع القارئ الكتاب الاليكترونى Hanlin V5 ." - -#: /home/kovid/work/trunk/src/calibre/devices/hanlin/driver.py:97 -msgid "Communicate with the BOOX eBook reader." -msgstr "التواصل مع القارئ الكتاب الاليكترونى BOOX ." - -#: /home/kovid/work/trunk/src/calibre/devices/hanvon/driver.py:18 -msgid "Communicate with the Hanvon N520 eBook reader." -msgstr "التواصل مع القارئ الكتاب الاليكترونى Hanvon N520 ." - -#: /home/kovid/work/trunk/src/calibre/devices/hanvon/driver.py:40 -msgid "Communicate with The Book reader." +#: /home/kovid/work/calibre/src/calibre/devices/folder_device/driver.py:16 +#: /home/kovid/work/calibre/src/calibre/devices/folder_device/driver.py:30 +msgid "Use an arbitrary folder as a device." msgstr "" -#: /home/kovid/work/trunk/src/calibre/devices/hanvon/driver.py:51 -msgid "Communicate with the SpringDesign Alex eBook reader." -msgstr "" - -#: /home/kovid/work/trunk/src/calibre/devices/hanvon/driver.py:67 -msgid "Communicate with the Azbooka" -msgstr "" - -#: /home/kovid/work/trunk/src/calibre/devices/hanvon/driver.py:80 -msgid "Communicate with the Elonex EB 511 eBook reader." -msgstr "اﻹتصال مع الـElonex EB 511 القارئ اﻹلكتروني" - -#: /home/kovid/work/trunk/src/calibre/devices/iliad/driver.py:16 -msgid "Communicate with the IRex Iliad eBook reader." -msgstr "التواصل مع القارئ الكتاب الاليكترونى IRex Iliad ." - -#: /home/kovid/work/trunk/src/calibre/devices/iliad/driver.py:17 -#: /home/kovid/work/trunk/src/calibre/devices/irexdr/driver.py:18 -#: /home/kovid/work/trunk/src/calibre/devices/usbms/driver.py:29 -msgid "John Schember" -msgstr "John Schember" - -#: /home/kovid/work/trunk/src/calibre/devices/interface.py:23 +#: /home/kovid/work/calibre/src/calibre/devices/folder_device/driver.py:26 +#: /home/kovid/work/calibre/src/calibre/devices/interface.py:23 msgid "Device Interface" msgstr "واجهة الجهاز" -#: /home/kovid/work/trunk/src/calibre/devices/irexdr/driver.py:16 +#: /home/kovid/work/calibre/src/calibre/devices/hanlin/driver.py:19 +msgid "Communicate with Hanlin V3 eBook readers." +msgstr "التواصل مع القارئ الكتاب الاليكترونى Hanlin V3 ." + +#: /home/kovid/work/calibre/src/calibre/devices/hanlin/driver.py:90 +msgid "Communicate with Hanlin V5 eBook readers." +msgstr "التواصل مع القارئ الكتاب الاليكترونى Hanlin V5 ." + +#: /home/kovid/work/calibre/src/calibre/devices/hanlin/driver.py:109 +msgid "Communicate with the BOOX eBook reader." +msgstr "التواصل مع القارئ الكتاب الاليكترونى BOOX ." + +#: /home/kovid/work/calibre/src/calibre/devices/hanvon/driver.py:18 +msgid "Communicate with the Hanvon N520 eBook reader." +msgstr "التواصل مع القارئ الكتاب الاليكترونى Hanvon N520 ." + +#: /home/kovid/work/calibre/src/calibre/devices/hanvon/driver.py:40 +msgid "Communicate with The Book reader." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/hanvon/driver.py:51 +msgid "Communicate with the SpringDesign Alex eBook reader." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/hanvon/driver.py:67 +msgid "Communicate with the Azbooka" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/hanvon/driver.py:80 +msgid "Communicate with the Elonex EB 511 eBook reader." +msgstr "اﻹتصال مع الـElonex EB 511 القارئ اﻹلكتروني" + +#: /home/kovid/work/calibre/src/calibre/devices/iliad/driver.py:16 +msgid "Communicate with the IRex Iliad eBook reader." +msgstr "التواصل مع القارئ الكتاب الاليكترونى IRex Iliad ." + +#: /home/kovid/work/calibre/src/calibre/devices/iliad/driver.py:17 +#: /home/kovid/work/calibre/src/calibre/devices/irexdr/driver.py:18 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:29 +msgid "John Schember" +msgstr "John Schember" + +#: /home/kovid/work/calibre/src/calibre/devices/irexdr/driver.py:16 msgid "Communicate with the IRex Digital Reader 1000 eBook reader." msgstr "التواصل مع القارئ الكتاب الاليكترونى IRex Digital Reader 1000 ." -#: /home/kovid/work/trunk/src/calibre/devices/irexdr/driver.py:42 +#: /home/kovid/work/calibre/src/calibre/devices/irexdr/driver.py:42 msgid "Communicate with the IRex Digital Reader 800" msgstr "اﻹتصال مع الـ IRex Digital Reader 800" -#: /home/kovid/work/trunk/src/calibre/devices/iriver/driver.py:15 +#: /home/kovid/work/calibre/src/calibre/devices/iriver/driver.py:15 msgid "Communicate with the Iriver Story reader." msgstr "التواصل مع القارئ الكتاب الاليكترونى Iriver Story ." -#: /home/kovid/work/trunk/src/calibre/devices/jetbook/driver.py:20 +#: /home/kovid/work/calibre/src/calibre/devices/jetbook/driver.py:20 msgid "Communicate with the JetBook eBook reader." msgstr "التواصل مع القارئ الكتاب الاليكترونى JetBook ." -#: /home/kovid/work/trunk/src/calibre/devices/kindle/driver.py:21 +#: /home/kovid/work/calibre/src/calibre/devices/kindle/driver.py:21 msgid "Communicate with the Kindle eBook reader." msgstr "التواصل مع القارئ الكتاب الاليكترونى Kindle ." -#: /home/kovid/work/trunk/src/calibre/devices/kindle/driver.py:152 +#: /home/kovid/work/calibre/src/calibre/devices/kindle/driver.py:147 msgid "Communicate with the Kindle 2 eBook reader." msgstr "التواصل مع القارئ الكتاب الاليكترونى Kindle 2 ." -#: /home/kovid/work/trunk/src/calibre/devices/kindle/driver.py:162 +#: /home/kovid/work/calibre/src/calibre/devices/kindle/driver.py:157 msgid "Communicate with the Kindle DX eBook reader." msgstr "التواصل مع القارئ الكتاب الاليكترونى Kindle DX ." -#: /home/kovid/work/trunk/src/calibre/devices/kobo/driver.py:14 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:14 msgid "Communicate with the Kobo Reader" msgstr "" -#: /home/kovid/work/trunk/src/calibre/devices/misc.py:15 +#: /home/kovid/work/calibre/src/calibre/devices/misc.py:15 msgid "Communicate with the Palm Pre" msgstr "الإتصال مع جهاز البالم بري" -#: /home/kovid/work/trunk/src/calibre/devices/misc.py:35 +#: /home/kovid/work/calibre/src/calibre/devices/misc.py:35 msgid "Communicate with the Booq Avant" msgstr "" -#: /home/kovid/work/trunk/src/calibre/devices/nokia/driver.py:17 +#: /home/kovid/work/calibre/src/calibre/devices/nokia/driver.py:17 msgid "Communicate with the Nokia 770 internet tablet." msgstr "التواصل مع نوكيا 770" -#: /home/kovid/work/trunk/src/calibre/devices/nokia/driver.py:40 +#: /home/kovid/work/calibre/src/calibre/devices/nokia/driver.py:40 msgid "Communicate with the Nokia 810 internet tablet." msgstr "التواصل مع نوكيا 810" -#: /home/kovid/work/trunk/src/calibre/devices/nook/driver.py:20 +#: /home/kovid/work/calibre/src/calibre/devices/nook/driver.py:20 msgid "The Nook" msgstr "جهاز الـNook" -#: /home/kovid/work/trunk/src/calibre/devices/nook/driver.py:21 +#: /home/kovid/work/calibre/src/calibre/devices/nook/driver.py:21 msgid "Communicate with the Nook eBook reader." msgstr "التواصل مع القارئ الكتاب الاليكترونى Nook ." -#: /home/kovid/work/trunk/src/calibre/devices/nuut2/driver.py:17 +#: /home/kovid/work/calibre/src/calibre/devices/nuut2/driver.py:17 msgid "Communicate with the Nuut2 eBook reader." msgstr "التواصل مع القارئ الكتاب الاليكترونى Nuut2 ." -#: /home/kovid/work/trunk/src/calibre/devices/prs500/driver.py:89 +#: /home/kovid/work/calibre/src/calibre/devices/prs500/driver.py:89 msgid "Communicate with the Sony PRS-500 eBook reader." msgstr "التواصل مع قارئ الكتاب الاليكتروني سوني PRS-500 ." -#: /home/kovid/work/trunk/src/calibre/devices/prs505/books.py:150 -#: /home/kovid/work/trunk/src/calibre/devices/prs505/driver.py:104 -#: /home/kovid/work/trunk/src/calibre/devices/prs505/driver.py:107 -#: /home/kovid/work/trunk/src/calibre/devices/prs505/driver.py:110 -#: /home/kovid/work/trunk/src/calibre/devices/prs505/driver.py:121 -#: /home/kovid/work/trunk/src/calibre/devices/usbms/driver.py:44 -#: /home/kovid/work/trunk/src/calibre/devices/usbms/driver.py:47 -#: /home/kovid/work/trunk/src/calibre/devices/usbms/driver.py:50 -#: /home/kovid/work/trunk/src/calibre/devices/usbms/driver.py:70 -#: /home/kovid/work/trunk/src/calibre/devices/usbms/driver.py:80 -#: /home/kovid/work/trunk/src/calibre/devices/usbms/driver.py:89 -msgid "Getting list of books on device..." -msgstr "يجري إحصاء قائمة كتب من الجهاز..." +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:23 +msgid "Communicate with all the Sony eBook readers." +msgstr "" -#: /home/kovid/work/trunk/src/calibre/devices/prs505/driver.py:26 -msgid "Communicate with the Sony PRS-300/505/500 eBook reader." -msgstr "التواصل مع قارئات الكتاب الاليكتروني سوني PRS-300/505/500 ." - -#: /home/kovid/work/trunk/src/calibre/devices/prs505/driver.py:58 +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:61 msgid "" "Comma separated list of metadata fields to turn into collections on the " "device. Possibilities include: " @@ -638,216 +679,214 @@ msgstr "" "ضع علامة الفاصلة للفصل بين مجموعة من البيانات الوصفية لكي تكون مجموعة في " "الجهاز . و تشمل الاحتمالات التالية: " -#: /home/kovid/work/trunk/src/calibre/devices/prs505/driver.py:149 -#: /home/kovid/work/trunk/src/calibre/devices/prs505/driver.py:151 -#: /home/kovid/work/trunk/src/calibre/devices/usbms/driver.py:115 -#: /home/kovid/work/trunk/src/calibre/devices/usbms/driver.py:117 -msgid "Transferring books to device..." -msgstr "يجري تحويل الكتب إلى الجهاز..." +#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:140 +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/structure.py:68 +msgid "Unnamed" +msgstr "" -#: /home/kovid/work/trunk/src/calibre/devices/prs505/driver.py:189 -#: /home/kovid/work/trunk/src/calibre/devices/prs505/driver.py:196 -#: /home/kovid/work/trunk/src/calibre/devices/usbms/driver.py:144 -#: /home/kovid/work/trunk/src/calibre/devices/usbms/driver.py:161 -msgid "Removing books from device..." -msgstr "يجري حذف الكتب من الجهاز..." - -#: /home/kovid/work/trunk/src/calibre/devices/prs505/driver.py:224 -#: /home/kovid/work/trunk/src/calibre/devices/usbms/driver.py:176 -msgid "Sending metadata to device..." -msgstr "يجري إرسال دليل المعلومات. إلى الجهاز..." - -#: /home/kovid/work/trunk/src/calibre/devices/prs505/driver.py:230 -msgid "Communicate with the Sony PRS-600/700/900 eBook reader." -msgstr "التواصل مع قارئات الكتاب الاليكتروني سوني PRS-600/700/900 ." - -#: /home/kovid/work/trunk/src/calibre/devices/sne/driver.py:17 +#: /home/kovid/work/calibre/src/calibre/devices/sne/driver.py:17 msgid "Communicate with the Samsung SNE eBook reader." msgstr "الإتصال مع جهاز قارئ الكتب الالكترونية Samsung SNE ." -#: /home/kovid/work/trunk/src/calibre/devices/teclast/driver.py:11 +#: /home/kovid/work/calibre/src/calibre/devices/teclast/driver.py:11 msgid "Communicate with the Teclast K3 reader." msgstr "اﻹتصال مع الـ Teclast K3 reader ." -#: /home/kovid/work/trunk/src/calibre/devices/teclast/driver.py:37 +#: /home/kovid/work/calibre/src/calibre/devices/teclast/driver.py:37 msgid "Communicate with the Newsmy reader." msgstr "" -#: /home/kovid/work/trunk/src/calibre/devices/teclast/driver.py:49 +#: /home/kovid/work/calibre/src/calibre/devices/teclast/driver.py:49 msgid "Communicate with the iPapyrus reader." msgstr "" -#: /home/kovid/work/trunk/src/calibre/devices/usbms/device.py:246 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:247 msgid "Unable to detect the %s disk drive. Try rebooting." msgstr "لم يتمكن من كشف القرص %s. حاول إعادة التشغيل." -#: /home/kovid/work/trunk/src/calibre/devices/usbms/device.py:426 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:427 msgid "Unable to detect the %s mount point. Try rebooting." msgstr "غير قادر على الكشف عن %s نقطة التحميل. حاول إعادة التشغيل." -#: /home/kovid/work/trunk/src/calibre/devices/usbms/device.py:491 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:492 msgid "Unable to detect the %s disk drive." msgstr "%s غير قادر على اكتشاف عن الذاكرة" -#: /home/kovid/work/trunk/src/calibre/devices/usbms/device.py:584 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:585 msgid "Could not find mount helper: %s." msgstr "غير قادر على جلب المساعد : %s ." -#: /home/kovid/work/trunk/src/calibre/devices/usbms/device.py:596 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:597 msgid "" "Unable to detect the %s disk drive. Your kernel is probably exporting a " "deprecated version of SYSFS." msgstr "" -#: /home/kovid/work/trunk/src/calibre/devices/usbms/device.py:604 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:605 msgid "Unable to mount main memory (Error code: %d)" msgstr "" -#: /home/kovid/work/trunk/src/calibre/devices/usbms/device.py:741 -#: /home/kovid/work/trunk/src/calibre/devices/usbms/device.py:743 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:742 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:744 msgid "The reader has no storage card in this slot." msgstr "لا يوجد بطاقات تخزين في القارئ ." -#: /home/kovid/work/trunk/src/calibre/devices/usbms/device.py:745 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:746 msgid "Selected slot: %s is not supported." msgstr "الفتحة المختارة : %s ليست مدعومة ." -#: /home/kovid/work/trunk/src/calibre/devices/usbms/device.py:778 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:779 msgid "There is insufficient free space in main memory" msgstr "لا توجد مساحة كافية في الذاكرة الرئيسية" -#: /home/kovid/work/trunk/src/calibre/devices/usbms/device.py:780 -#: /home/kovid/work/trunk/src/calibre/devices/usbms/device.py:782 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:781 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:783 msgid "There is insufficient free space on the storage card" msgstr "لا توجد مساحة كافية في بطاقة التخزين" -#: /home/kovid/work/trunk/src/calibre/devices/usbms/device.py:812 -#: /home/kovid/work/trunk/src/calibre/devices/usbms/device.py:818 -#: /home/kovid/work/trunk/src/calibre/devices/usbms/device.py:843 -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/scheduler.py:240 -#: /home/kovid/work/trunk/src/calibre/gui2/tag_view.py:151 -#: /home/kovid/work/trunk/src/calibre/library/database2.py:589 -#: /home/kovid/work/trunk/src/calibre/library/database2.py:995 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:813 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:819 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:847 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:239 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:147 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:158 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1284 +#: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:120 msgid "News" msgstr "الأخبار" -#: /home/kovid/work/trunk/src/calibre/devices/usbms/deviceconfig.py:12 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/deviceconfig.py:12 msgid "Configure Device" msgstr "" -#: /home/kovid/work/trunk/src/calibre/devices/usbms/deviceconfig.py:28 -msgid "settings for device drivers" -msgstr "" - -#: /home/kovid/work/trunk/src/calibre/devices/usbms/deviceconfig.py:30 -msgid "Ordered list of formats the device will accept" -msgstr "" - -#: /home/kovid/work/trunk/src/calibre/devices/usbms/deviceconfig.py:32 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/deviceconfig.py:32 msgid "Place files in sub directories if the device supports them" msgstr "" -#: /home/kovid/work/trunk/src/calibre/devices/usbms/deviceconfig.py:34 -#: /home/kovid/work/trunk/src/calibre/gui2/device_drivers/configwidget_ui.py:78 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/deviceconfig.py:34 +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/configwidget_ui.py:78 msgid "Read metadata from files on device" msgstr "" -#: /home/kovid/work/trunk/src/calibre/devices/usbms/deviceconfig.py:36 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/deviceconfig.py:36 msgid "Template to control how books are saved" msgstr "" -#: /home/kovid/work/trunk/src/calibre/devices/usbms/deviceconfig.py:39 -#: /home/kovid/work/trunk/src/calibre/gui2/device_drivers/configwidget_ui.py:80 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/deviceconfig.py:39 +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/configwidget_ui.py:80 msgid "Extra customization" msgstr "" -#: /home/kovid/work/trunk/src/calibre/devices/usbms/driver.py:28 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:28 msgid "Communicate with an eBook reader." msgstr "الاتصال مع جهاز قارئ إلكتروني ." -#: /home/kovid/work/trunk/src/calibre/devices/usbms/driver.py:36 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:44 msgid "Get device information..." msgstr "يجري إحصاء معلومات الجهاز..." -#: /home/kovid/work/trunk/src/calibre/devices/usbms/driver.py:132 -#: /home/kovid/work/trunk/src/calibre/devices/usbms/driver.py:140 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:53 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:56 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:59 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:119 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:126 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:149 +msgid "Getting list of books on device..." +msgstr "يجري إحصاء قائمة كتب من الجهاز..." + +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:174 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:176 +msgid "Transferring books to device..." +msgstr "يجري تحويل الكتب إلى الجهاز..." + +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:191 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:220 msgid "Adding books to device metadata listing..." msgstr "إضافة كتب لقائمة للبيانات الوصفية للجهاز" -#: /home/kovid/work/trunk/src/calibre/devices/usbms/driver.py:165 -#: /home/kovid/work/trunk/src/calibre/devices/usbms/driver.py:170 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:224 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:242 +msgid "Removing books from device..." +msgstr "يجري حذف الكتب من الجهاز..." + +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:246 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:251 msgid "Removing books from device metadata listing..." msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/chm/reader.py:41 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:269 +msgid "Sending metadata to device..." +msgstr "يجري إرسال دليل المعلومات. إلى الجهاز..." + +#: /home/kovid/work/calibre/src/calibre/ebooks/chm/reader.py:41 msgid "%prog [options] mybook.chm" msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/chm/reader.py:42 +#: /home/kovid/work/calibre/src/calibre/ebooks/chm/reader.py:42 msgid "Output directory. Defaults to current directory" msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/chm/reader.py:45 -#: /home/kovid/work/trunk/src/calibre/ebooks/lrf/meta.py:589 +#: /home/kovid/work/calibre/src/calibre/ebooks/chm/reader.py:45 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:589 msgid "Set the book title" msgstr "تحديد عنوان الكتاب" -#: /home/kovid/work/trunk/src/calibre/ebooks/chm/reader.py:47 -#: /home/kovid/work/trunk/src/calibre/ebooks/lrf/meta.py:591 +#: /home/kovid/work/calibre/src/calibre/ebooks/chm/reader.py:47 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:591 msgid "Set sort key for the title" msgstr "ضبط مفتاح الترتيب للعنوان" -#: /home/kovid/work/trunk/src/calibre/ebooks/chm/reader.py:49 -#: /home/kovid/work/trunk/src/calibre/ebooks/lrf/meta.py:593 +#: /home/kovid/work/calibre/src/calibre/ebooks/chm/reader.py:49 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:593 msgid "Set the author" msgstr "تحديد المؤلف" -#: /home/kovid/work/trunk/src/calibre/ebooks/chm/reader.py:51 -#: /home/kovid/work/trunk/src/calibre/ebooks/lrf/meta.py:595 +#: /home/kovid/work/calibre/src/calibre/ebooks/chm/reader.py:51 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:595 msgid "Set sort key for the author" msgstr "ضبط مفتاح الترتيب للمؤلف" -#: /home/kovid/work/trunk/src/calibre/ebooks/chm/reader.py:53 -#: /home/kovid/work/trunk/src/calibre/ebooks/lrf/meta.py:597 +#: /home/kovid/work/calibre/src/calibre/ebooks/chm/reader.py:53 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:597 msgid "The category this book belongs to. E.g.: History" msgstr "تصنيف الكتاب. مثلاً: تاريخ" -#: /home/kovid/work/trunk/src/calibre/ebooks/chm/reader.py:56 -#: /home/kovid/work/trunk/src/calibre/ebooks/lrf/meta.py:600 +#: /home/kovid/work/calibre/src/calibre/ebooks/chm/reader.py:56 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:600 msgid "Path to a graphic that will be set as this files' thumbnail" msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/chm/reader.py:59 +#: /home/kovid/work/calibre/src/calibre/ebooks/chm/reader.py:59 msgid "Path to a txt file containing a comment." msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/chm/reader.py:62 -#: /home/kovid/work/trunk/src/calibre/ebooks/lrf/meta.py:607 +#: /home/kovid/work/calibre/src/calibre/ebooks/chm/reader.py:62 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:607 msgid "Extract thumbnail from LRF file" msgstr "استخراج الصورة المصغّرة من ملف LRF" -#: /home/kovid/work/trunk/src/calibre/ebooks/chm/reader.py:63 -#: /home/kovid/work/trunk/src/calibre/ebooks/lrf/meta.py:608 +#: /home/kovid/work/calibre/src/calibre/ebooks/chm/reader.py:63 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:608 msgid "Set the publisher" msgstr "تحديد الناشر" -#: /home/kovid/work/trunk/src/calibre/ebooks/chm/reader.py:64 -#: /home/kovid/work/trunk/src/calibre/ebooks/lrf/meta.py:609 +#: /home/kovid/work/calibre/src/calibre/ebooks/chm/reader.py:64 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:609 msgid "Set the book classification" msgstr "ضبط تصنيف الكتاب" -#: /home/kovid/work/trunk/src/calibre/ebooks/chm/reader.py:65 -#: /home/kovid/work/trunk/src/calibre/ebooks/lrf/meta.py:610 +#: /home/kovid/work/calibre/src/calibre/ebooks/chm/reader.py:65 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:610 msgid "Set the book creator" msgstr "ضبط منشئ الكتاب" -#: /home/kovid/work/trunk/src/calibre/ebooks/chm/reader.py:66 -#: /home/kovid/work/trunk/src/calibre/ebooks/lrf/meta.py:611 +#: /home/kovid/work/calibre/src/calibre/ebooks/chm/reader.py:66 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:611 msgid "Set the book producer" msgstr "تحديد منتج الكتاب" -#: /home/kovid/work/trunk/src/calibre/ebooks/chm/reader.py:68 -#: /home/kovid/work/trunk/src/calibre/ebooks/lrf/meta.py:613 +#: /home/kovid/work/calibre/src/calibre/ebooks/chm/reader.py:68 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:613 msgid "" "Extract cover from LRF file. Note that the LRF format has no defined cover, " "so we use some heuristics to guess the cover." @@ -855,24 +894,24 @@ msgstr "" "استخراج الغلاف من ملف LRF. لاحظ أن تهيئة LRF لا يستخدم غلاف مخصص، فنستخدم " "بعض الشروط لتخمينه." -#: /home/kovid/work/trunk/src/calibre/ebooks/chm/reader.py:70 -#: /home/kovid/work/trunk/src/calibre/ebooks/lrf/meta.py:615 +#: /home/kovid/work/calibre/src/calibre/ebooks/chm/reader.py:70 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:615 msgid "Set book ID" msgstr "تحديد هوية الكتاب" -#: /home/kovid/work/trunk/src/calibre/ebooks/chm/reader.py:72 +#: /home/kovid/work/calibre/src/calibre/ebooks/chm/reader.py:72 msgid "Set font delta" msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/comic/input.py:201 +#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:201 msgid "Rendered %s" msgstr "تم تصوير %s" -#: /home/kovid/work/trunk/src/calibre/ebooks/comic/input.py:204 +#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:204 msgid "Failed %s" msgstr "فشل %s" -#: /home/kovid/work/trunk/src/calibre/ebooks/comic/input.py:261 +#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:261 msgid "" "Failed to process comic: \n" "\n" @@ -882,44 +921,44 @@ msgstr "" "\n" "%s ." -#: /home/kovid/work/trunk/src/calibre/ebooks/comic/input.py:279 +#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:279 msgid "" "Number of colors for grayscale image conversion. Default: %default. Values " "of less than 256 may result in blurred text on your device if you are " "creating your comics in EPUB format." msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/comic/input.py:283 +#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:283 msgid "" "Disable normalize (improve contrast) color range for pictures. Default: False" msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/comic/input.py:286 +#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:286 msgid "Maintain picture aspect ratio. Default is to fill the screen." msgstr "حافظ على نسبة وضوح الصورة . افتراضياً يجب تملأ الشاشة ." -#: /home/kovid/work/trunk/src/calibre/ebooks/comic/input.py:288 +#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:288 msgid "Disable sharpening." msgstr "تعطيل التشحيذ." -#: /home/kovid/work/trunk/src/calibre/ebooks/comic/input.py:290 +#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:290 msgid "" "Disable trimming of comic pages. For some comics, trimming might remove " "content as well as borders." msgstr "" "تعطيل اقتصاص صفحات الرسم. لبعضهم، الاقتصاص قد يتسبب بحذف محتوى وحدود." -#: /home/kovid/work/trunk/src/calibre/ebooks/comic/input.py:293 +#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:293 msgid "Don't split landscape images into two portrait images" msgstr "لا تقسم صور عرضية إلى صورتين طوليتين." -#: /home/kovid/work/trunk/src/calibre/ebooks/comic/input.py:295 +#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:295 msgid "" "Keep aspect ratio and scale image using screen height as image width for " "viewing in landscape mode." msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/comic/input.py:298 +#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:298 msgid "" "Used for right-to-left publications like manga. Causes landscape pages to be " "split into portrait pages from right to left." @@ -927,13 +966,13 @@ msgstr "" "تستخدم لمنشورات يمين إلى يسار مثل المانغا اليابانية، إلخ. يتسبب بتقسيم صور " "عرضية إلى صور طولية من اليمين إلى اليسار." -#: /home/kovid/work/trunk/src/calibre/ebooks/comic/input.py:302 +#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:302 msgid "" "Enable Despeckle. Reduces speckle noise. May greatly increase processing " "time." msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/comic/input.py:305 +#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:305 msgid "" "Don't sort the files found in the comic alphabetically by name. Instead use " "the order they were added to the comic." @@ -941,27 +980,27 @@ msgstr "" "لا ترتّب ملفات موجودة في الرسومات أبجدياً، بل استخدم الترتيب المستخدم في " "الرسومات." -#: /home/kovid/work/trunk/src/calibre/ebooks/comic/input.py:309 +#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:309 msgid "" "The format that images in the created ebook are converted to. You can " "experiment to see which format gives you optimal size and look on your " "device." msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/comic/input.py:313 +#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:313 msgid "Apply no processing to the image" msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/comic/input.py:315 +#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:315 msgid "Do not convert the image to grayscale (black and white)" msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/comic/input.py:452 -#: /home/kovid/work/trunk/src/calibre/ebooks/comic/input.py:463 +#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:452 +#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:463 msgid "Page" msgstr "صفحة" -#: /home/kovid/work/trunk/src/calibre/ebooks/conversion/cli.py:19 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/cli.py:19 msgid "" "input_file output_file [options]\n" "\n" @@ -987,58 +1026,58 @@ msgid "" "For full documentation of the conversion system see\n" msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/conversion/cli.py:97 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/cli.py:97 msgid "INPUT OPTIONS" msgstr "خيارات الدخل" -#: /home/kovid/work/trunk/src/calibre/ebooks/conversion/cli.py:98 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/cli.py:98 msgid "Options to control the processing of the input %s file" msgstr "خيارات للتحكم في معالجة الملف المدخل %s ." -#: /home/kovid/work/trunk/src/calibre/ebooks/conversion/cli.py:104 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/cli.py:104 msgid "OUTPUT OPTIONS" msgstr "خيارات الخرج" -#: /home/kovid/work/trunk/src/calibre/ebooks/conversion/cli.py:105 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/cli.py:105 msgid "Options to control the processing of the output %s" msgstr "خيارات للتحكم في معالجة الملف المُخرج %s ." -#: /home/kovid/work/trunk/src/calibre/ebooks/conversion/cli.py:119 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/cli.py:119 msgid "Options to control the look and feel of the output" msgstr "خيارات للتحكم في الشكل و المظهر للمُخرجات ." -#: /home/kovid/work/trunk/src/calibre/ebooks/conversion/cli.py:135 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/cli.py:135 msgid "Control auto-detection of document structure." msgstr "تحكّم بالكشف الآلي لبناء المستند" -#: /home/kovid/work/trunk/src/calibre/ebooks/conversion/cli.py:145 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/cli.py:145 msgid "" "Control the automatic generation of a Table of Contents. By default, if the " "source file has a Table of Contents, it will be used in preference to the " "automatically generated one." msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/conversion/cli.py:155 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/cli.py:155 msgid "Options to set metadata in the output" msgstr "خيارات لوضع البيانات الوصفية في المُخرجات ." -#: /home/kovid/work/trunk/src/calibre/ebooks/conversion/cli.py:158 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/cli.py:158 msgid "Options to help with debugging the conversion" msgstr "خيارات للمساعدة في تصحيح التحويل ." -#: /home/kovid/work/trunk/src/calibre/ebooks/conversion/cli.py:183 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/cli.py:183 msgid "List builtin recipes" msgstr "قائمة من الوصفات المدمجة" -#: /home/kovid/work/trunk/src/calibre/ebooks/conversion/cli.py:256 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/cli.py:256 msgid "Output saved to" msgstr "المخرجات حُفِظت في" -#: /home/kovid/work/trunk/src/calibre/ebooks/conversion/plumber.py:95 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:95 msgid "Level of verbosity. Specify multiple times for greater verbosity." msgstr "مستوى الايضاح . حدد أوقات متعددة لزيادة الايضاح ." -#: /home/kovid/work/trunk/src/calibre/ebooks/conversion/plumber.py:102 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:102 msgid "" "Save the output from different stages of the conversion pipeline to the " "specified directory. Useful if you are unsure at which stage of the " @@ -1047,7 +1086,7 @@ msgstr "" "احفظ المخرجات في مراحل مختلفة من عملية التحويل إلى الدليل المقصود . مفيدة " "إذا كنت لا تعلم في أي مرحلة من مراحل التحويل تظهر العلة ." -#: /home/kovid/work/trunk/src/calibre/ebooks/conversion/plumber.py:111 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:111 msgid "" "Specify the input profile. The input profile gives the conversion system " "information on how to interpret various information in the input document. " @@ -1055,7 +1094,7 @@ msgid "" "are:" msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/conversion/plumber.py:122 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:122 msgid "" "Specify the output profile. The output profile tells the conversion system " "how to optimize the created document for the specified device. In some " @@ -1063,7 +1102,7 @@ msgid "" "a device. For example EPUB on the SONY reader. Choices are:" msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/conversion/plumber.py:133 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:133 msgid "" "The base font size in pts. All font sizes in the produced book will be " "rescaled based on this size. By choosing a larger size you can make the " @@ -1071,7 +1110,7 @@ msgid "" "chosen based on the output profile you chose." msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/conversion/plumber.py:143 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:143 msgid "" "Mapping from CSS font names to font sizes in pts. An example setting is " "12,12,14,16,18,20,22,24. These are the mappings for the sizes xx-small to xx-" @@ -1080,17 +1119,17 @@ msgid "" "use a mapping based on the output profile you chose." msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/conversion/plumber.py:155 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:155 msgid "Disable all rescaling of font sizes." msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/conversion/plumber.py:162 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:162 msgid "" "The line height in pts. Controls spacing between consecutive lines of text. " "By default no line height manipulation is performed." msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/conversion/plumber.py:170 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:170 msgid "" "Some badly designed documents use tables to control the layout of text on " "the page. When converted these documents often have text that runs off the " @@ -1098,28 +1137,28 @@ msgid "" "tables and present it in a linear fashion." msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/conversion/plumber.py:180 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:180 msgid "" "XPath expression that specifies all tags that should be added to the Table " "of Contents at level one. If this is specified, it takes precedence over " "other forms of auto-detection." msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/conversion/plumber.py:189 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:189 msgid "" "XPath expression that specifies all tags that should be added to the Table " "of Contents at level two. Each entry is added under the previous level one " "entry." msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/conversion/plumber.py:197 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:197 msgid "" "XPath expression that specifies all tags that should be added to the Table " "of Contents at level three. Each entry is added under the previous level two " "entry." msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/conversion/plumber.py:205 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:205 msgid "" "Normally, if the source file already has a Table of Contents, it is used in " "preference to the auto-generated one. With this option, the auto-generated " @@ -1128,11 +1167,11 @@ msgstr "" "عادةً، إذا يوجد قائمة محتويات في الملف المصدر، يتم استخدامه بدلاً من القائمة " "التي تم إنشاءه آلياً. بهذا الخيار، يتم استخدام القائمة المنشئة آلياً دوماً." -#: /home/kovid/work/trunk/src/calibre/ebooks/conversion/plumber.py:213 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:213 msgid "Don't add auto-detected chapters to the Table of Contents." msgstr "لا تضف الفصول المكشوفة آلياً إلى قائمة المحتويات." -#: /home/kovid/work/trunk/src/calibre/ebooks/conversion/plumber.py:220 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:220 msgid "" "If fewer than this number of chapters is detected, then links are added to " "the Table of Contents. Default: %default" @@ -1140,20 +1179,20 @@ msgstr "" "إذا يتم كشف عدد أقل من هذا بين الفصول فسوف يضيف وصلات إلى قائمة المحتويات. " "الإفتراضي هو: %default" -#: /home/kovid/work/trunk/src/calibre/ebooks/conversion/plumber.py:227 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:227 msgid "" "Maximum number of links to insert into the TOC. Set to 0 to disable. Default " "is: %default. Links are only added to the TOC if less than the threshold " "number of chapters were detected." msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/conversion/plumber.py:235 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:235 msgid "" "Remove entries from the Table of Contents whose titles match the specified " "regular expression. Matching entries and all their children are removed." msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/conversion/plumber.py:246 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:246 msgid "" "An XPath expression to detect chapter titles. The default is to consider " "

or

tags that contain the words \"chapter\",\"book\",\"section\" or " @@ -1163,7 +1202,7 @@ msgid "" "User Manual for further help on using this feature." msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/conversion/plumber.py:260 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:260 msgid "" "Specify how to mark detected chapters. A value of \"pagebreak\" will insert " "page breaks before chapters. A value of \"rule\" will insert a line before " @@ -1171,39 +1210,39 @@ msgid "" "\"both\" will use both page breaks and lines to mark chapters." msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/conversion/plumber.py:270 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:270 msgid "" "Either the path to a CSS stylesheet or raw CSS. This CSS will be appended to " "the style rules from the source file, so it can be used to override those " "rules." msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/conversion/plumber.py:279 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:279 msgid "" "An XPath expression. Page breaks are inserted before the specified elements." msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/conversion/plumber.py:285 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:285 msgid "" "Set the top margin in pts. Default is %default. Note: 72 pts equals 1 inch" msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/conversion/plumber.py:290 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:290 msgid "" "Set the bottom margin in pts. Default is %default. Note: 72 pts equals 1 inch" msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/conversion/plumber.py:295 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:295 msgid "" "Set the left margin in pts. Default is %default. Note: 72 pts equals 1 inch" msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/conversion/plumber.py:300 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:300 msgid "" "Set the right margin in pts. Default is %default. Note: 72 pts equals 1 inch" msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/conversion/plumber.py:306 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:306 msgid "" "Change text justification. A value of \"left\" converts all justified text " "in the source to left aligned (i.e. unjustified) text. A value of " @@ -1212,34 +1251,34 @@ msgid "" "Note that only some output formats support justification." msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/conversion/plumber.py:316 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:316 msgid "" "Remove spacing between paragraphs. Also sets an indent on paragraphs of " "1.5em. Spacing removal will not work if the source file does not use " "paragraphs (

or

tags)." msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/conversion/plumber.py:323 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:323 msgid "" "When calibre removes inter paragraph spacing, it automatically sets a " "paragraph indent, to ensure that paragraphs can be easily distinguished. " "This option controls the width of that indent." msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/conversion/plumber.py:330 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:330 msgid "" "Use the cover detected from the source file in preference to the specified " "cover." msgstr "" "استخدم الغلاف التي تم كشفه في ملف المصدر بدلاً من الغلاف الذي تم تخصيصه." -#: /home/kovid/work/trunk/src/calibre/ebooks/conversion/plumber.py:336 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:336 msgid "" "Insert a blank line between paragraphs. Will not work if the source file " "does not use paragraphs (

or

tags)." msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/conversion/plumber.py:343 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:343 msgid "" "Remove the first image from the input ebook. Useful if the first image in " "the source file is a cover and you are specifying an external cover." @@ -1247,41 +1286,41 @@ msgstr "" "حذف أول صورة من دخل الكتاب الإلكتروني. هذا يفيد حين تريد استخدام غلاف مختلف " "من الغلاف المضمون." -#: /home/kovid/work/trunk/src/calibre/ebooks/conversion/plumber.py:351 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:351 msgid "" "Insert the book metadata at the start of the book. This is useful if your " "ebook reader does not support displaying/searching metadata directly." msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/conversion/plumber.py:359 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:359 msgid "" "Attempt to detect and correct hard line breaks and other problems in the " "source file. This may make things worse, so use with care." msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/conversion/plumber.py:367 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:367 msgid "Use a regular expression to try and remove the header." msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/conversion/plumber.py:374 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:374 msgid "The regular expression to use to remove the header." msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/conversion/plumber.py:380 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:380 msgid "Use a regular expression to try and remove the footer." msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/conversion/plumber.py:387 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:387 msgid "The regular expression to use to remove the footer." msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/conversion/plumber.py:394 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:394 msgid "" "Read metadata from the specified OPF file. Metadata read from this file will " "override any metadata in the source file." msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/conversion/plumber.py:401 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:401 msgid "" "Transliterate unicode characters to an ASCII representation. Use with care " "because this will replace unicode characters with ASCII. For instance it " @@ -1291,7 +1330,7 @@ msgid "" "number of people will be used (Chinese in the previous example)." msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/conversion/plumber.py:416 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:416 msgid "" "Preserve ligatures present in the input document. A ligature is a special " "rendering of a pair of characters like ff, fi, fl et cetera. Most readers do " @@ -1301,111 +1340,111 @@ msgid "" "instead." msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/conversion/plumber.py:428 -#: /home/kovid/work/trunk/src/calibre/ebooks/metadata/cli.py:38 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:428 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:38 msgid "Set the title." msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/conversion/plumber.py:432 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:432 msgid "Set the authors. Multiple authors should be separated by ampersands." msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/conversion/plumber.py:437 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:437 msgid "The version of the title to be used for sorting. " msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/conversion/plumber.py:441 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:441 msgid "String to be used when sorting by author. " msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/conversion/plumber.py:445 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:445 msgid "Set the cover to the specified file or URL" msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/conversion/plumber.py:449 -#: /home/kovid/work/trunk/src/calibre/ebooks/metadata/cli.py:54 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:449 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:54 msgid "Set the ebook description." msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/conversion/plumber.py:453 -#: /home/kovid/work/trunk/src/calibre/ebooks/metadata/cli.py:56 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:453 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:56 msgid "Set the ebook publisher." msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/conversion/plumber.py:457 -#: /home/kovid/work/trunk/src/calibre/ebooks/metadata/cli.py:60 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:457 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:60 msgid "Set the series this ebook belongs to." msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/conversion/plumber.py:461 -#: /home/kovid/work/trunk/src/calibre/ebooks/metadata/cli.py:62 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:461 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:62 msgid "Set the index of the book in this series." msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/conversion/plumber.py:465 -#: /home/kovid/work/trunk/src/calibre/ebooks/metadata/cli.py:64 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:465 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:64 msgid "Set the rating. Should be a number between 1 and 5." msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/conversion/plumber.py:469 -#: /home/kovid/work/trunk/src/calibre/ebooks/metadata/cli.py:66 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:469 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:66 msgid "Set the ISBN of the book." msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/conversion/plumber.py:473 -#: /home/kovid/work/trunk/src/calibre/ebooks/metadata/cli.py:68 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:473 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:68 msgid "Set the tags for the book. Should be a comma separated list." msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/conversion/plumber.py:477 -#: /home/kovid/work/trunk/src/calibre/ebooks/metadata/cli.py:70 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:477 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:70 msgid "Set the book producer." msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/conversion/plumber.py:481 -#: /home/kovid/work/trunk/src/calibre/ebooks/metadata/cli.py:72 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:481 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:72 msgid "Set the language." msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/conversion/plumber.py:485 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:485 msgid "Set the publication date." msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/conversion/plumber.py:489 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:489 msgid "Set the book timestamp (used by the date column in calibre)." msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/conversion/plumber.py:589 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:589 msgid "Could not find an ebook inside the archive" msgstr "لم يتمكّن من الحصول على كتاب داخل الأرشيف" -#: /home/kovid/work/trunk/src/calibre/ebooks/conversion/plumber.py:647 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:647 msgid "Values of series index and rating must be numbers. Ignoring" msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/conversion/plumber.py:654 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:654 msgid "Failed to parse date/time" msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/conversion/plumber.py:802 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:802 msgid "Converting input to HTML..." msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/conversion/plumber.py:829 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:829 msgid "Running transforms on ebook..." msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/conversion/plumber.py:916 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:916 msgid "Creating" msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/epub/output.py:56 +#: /home/kovid/work/calibre/src/calibre/ebooks/epub/output.py:56 msgid "" "Extract the contents of the generated EPUB file to the specified directory. " "The contents of the directory are first deleted, so be careful." msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/epub/output.py:62 +#: /home/kovid/work/calibre/src/calibre/ebooks/epub/output.py:62 msgid "" "Turn off splitting at page breaks. Normally, input files are automatically " "split at every page break into two files. This gives an output ebook that " @@ -1414,21 +1453,21 @@ msgid "" "turn off splitting on page breaks." msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/epub/output.py:73 +#: /home/kovid/work/calibre/src/calibre/ebooks/epub/output.py:73 msgid "" "Split all HTML files larger than this size (in KB). This is necessary as " "most EPUB readers cannot handle large file sizes. The default of %defaultKB " "is the size required for Adobe Digital Editions." msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/epub/output.py:80 +#: /home/kovid/work/calibre/src/calibre/ebooks/epub/output.py:80 msgid "" "Normally, if the input file has no cover and you don't specify one, a " "default cover is generated with the title, authors, etc. This option " "disables the generation of this cover." msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/epub/output.py:86 +#: /home/kovid/work/calibre/src/calibre/ebooks/epub/output.py:86 msgid "" "Do not use SVG for the book cover. Use this option if your EPUB is going to " "be used ona device that does not support SVG, like the iPhone or the " @@ -1436,7 +1475,7 @@ msgid "" "blank page." msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/epub/output.py:94 +#: /home/kovid/work/calibre/src/calibre/ebooks/epub/output.py:94 msgid "" "When using an SVG cover, this option will cause the cover to scale to cover " "the available screen area, but still preserve its aspect ratio (ratio of " @@ -1445,42 +1484,42 @@ msgid "" "option the image may be slightly distorted, but there will be no borders." msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/epub/output.py:169 +#: /home/kovid/work/calibre/src/calibre/ebooks/epub/output.py:169 msgid "Start" msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/fb2/fb2ml.py:144 -#: /home/kovid/work/trunk/src/calibre/ebooks/rb/rbml.py:102 -#: /home/kovid/work/trunk/src/calibre/ebooks/txt/txtml.py:77 +#: /home/kovid/work/calibre/src/calibre/ebooks/fb2/fb2ml.py:144 +#: /home/kovid/work/calibre/src/calibre/ebooks/rb/rbml.py:102 +#: /home/kovid/work/calibre/src/calibre/ebooks/txt/txtml.py:77 msgid "Table of Contents:" msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/fb2/input.py:32 +#: /home/kovid/work/calibre/src/calibre/ebooks/fb2/input.py:32 msgid "Do not insert a Table of Contents at the beginning of the book." msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/fb2/output.py:21 -#: /home/kovid/work/trunk/src/calibre/ebooks/pdb/output.py:32 -#: /home/kovid/work/trunk/src/calibre/ebooks/pml/output.py:37 -#: /home/kovid/work/trunk/src/calibre/ebooks/rb/output.py:21 -#: /home/kovid/work/trunk/src/calibre/ebooks/txt/output.py:35 +#: /home/kovid/work/calibre/src/calibre/ebooks/fb2/output.py:21 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdb/output.py:32 +#: /home/kovid/work/calibre/src/calibre/ebooks/pml/output.py:37 +#: /home/kovid/work/calibre/src/calibre/ebooks/rb/output.py:21 +#: /home/kovid/work/calibre/src/calibre/ebooks/txt/output.py:35 msgid "Add Table of Contents to beginning of the book." msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/html/input.py:243 +#: /home/kovid/work/calibre/src/calibre/ebooks/html/input.py:243 msgid "" "Traverse links in HTML files breadth first. Normally, they are traversed " "depth first." msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/html/input.py:250 +#: /home/kovid/work/calibre/src/calibre/ebooks/html/input.py:250 msgid "" "Maximum levels of recursion when following links in HTML files. Must be non-" "negative. 0 implies that no links in the root HTML file are followed. " "Default is %default." msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/html/input.py:259 +#: /home/kovid/work/calibre/src/calibre/ebooks/html/input.py:259 msgid "" "Normally this input plugin re-arranges all the input files into a standard " "folder hierarchy. Only use this option if you know what you are doing as it " @@ -1488,66 +1527,66 @@ msgid "" "pipeline." msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/html/input.py:267 +#: /home/kovid/work/calibre/src/calibre/ebooks/html/input.py:267 msgid "" "Average line length for line breaking if the HTML is from a previous partial " "conversion of a PDF file. Default is %default which disables this." msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/lit/from_any.py:47 +#: /home/kovid/work/calibre/src/calibre/ebooks/lit/from_any.py:47 msgid "Creating LIT file from EPUB..." msgstr "إنشاء ملف LIT من EPUB..." -#: /home/kovid/work/trunk/src/calibre/ebooks/lrf/html/convert_from.py:320 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:320 msgid "\tBook Designer file detected." msgstr "\tتم اكتشاف ملف Book Designer." -#: /home/kovid/work/trunk/src/calibre/ebooks/lrf/html/convert_from.py:322 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:322 msgid "\tParsing HTML..." msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/lrf/html/convert_from.py:345 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:345 msgid "\tBaen file detected. Re-parsing..." msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/lrf/html/convert_from.py:361 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:361 msgid "Written preprocessed HTML to " msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/lrf/html/convert_from.py:379 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:379 msgid "Processing %s" msgstr "يعالج %s" -#: /home/kovid/work/trunk/src/calibre/ebooks/lrf/html/convert_from.py:393 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:393 msgid "\tConverting to BBeB..." msgstr "\tتحويل لـBBeB..." -#: /home/kovid/work/trunk/src/calibre/ebooks/lrf/html/convert_from.py:539 -#: /home/kovid/work/trunk/src/calibre/ebooks/lrf/html/convert_from.py:552 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:539 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:552 msgid "Could not parse file: %s" msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/lrf/html/convert_from.py:544 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:544 msgid "%s is an empty file" msgstr "%s ملف فارغ" -#: /home/kovid/work/trunk/src/calibre/ebooks/lrf/html/convert_from.py:564 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:564 msgid "Failed to parse link %s %s" msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/lrf/html/convert_from.py:608 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:608 msgid "Cannot add link %s to TOC" msgstr "لا يمكن إضافة وصلات %s لقائمة المحتويات" -#: /home/kovid/work/trunk/src/calibre/ebooks/lrf/html/convert_from.py:957 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:957 msgid "Unable to process image %s. Error: %s" msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/lrf/html/convert_from.py:1002 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1002 msgid "Unable to process interlaced PNG %s" msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/lrf/html/convert_from.py:1017 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1017 msgid "" "Could not process image: %s\n" "%s" @@ -1555,12 +1594,12 @@ msgstr "" "لم يتمكن من معالجة: %s\n" "%s" -#: /home/kovid/work/trunk/src/calibre/ebooks/lrf/html/convert_from.py:1772 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1772 msgid "" "An error occurred while processing a table: %s. Ignoring table markup." msgstr "حدث خطأ حين تنفيذ الجدول: %s. سيتم تجاهل توسيم الجدول." -#: /home/kovid/work/trunk/src/calibre/ebooks/lrf/html/convert_from.py:1774 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1774 msgid "" "Bad table:\n" "%s" @@ -1568,76 +1607,76 @@ msgstr "" "جدول غير صالح:\n" "%s" -#: /home/kovid/work/trunk/src/calibre/ebooks/lrf/html/convert_from.py:1796 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1796 msgid "Table has cell that is too large" msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/lrf/html/convert_from.py:1862 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1862 msgid "Could not read cover image: %s" msgstr "لم يتمكن من قراءة صورة الغلاف: %s" -#: /home/kovid/work/trunk/src/calibre/ebooks/lrf/html/convert_from.py:1865 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1865 msgid "Cannot read from: %s" msgstr "لا يمكن القراءة من: %s" -#: /home/kovid/work/trunk/src/calibre/ebooks/lrf/html/convert_from.py:1994 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1994 msgid "Failed to process opf file" msgstr "فشل في معالجة ملف opf" -#: /home/kovid/work/trunk/src/calibre/ebooks/lrf/lrfparser.py:136 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/lrfparser.py:136 msgid "" "%prog book.lrf\n" "Convert an LRF file into an LRS (XML UTF-8 encoded) file" msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/lrf/lrfparser.py:137 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/lrfparser.py:137 msgid "Output LRS file" msgstr "خرج ملف LRS" -#: /home/kovid/work/trunk/src/calibre/ebooks/lrf/lrfparser.py:139 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/lrfparser.py:139 msgid "Do not save embedded image and font files to disk" msgstr "لا تحفظ ملفات الصور والخظوظ المضمنة في القرص" -#: /home/kovid/work/trunk/src/calibre/ebooks/lrf/lrfparser.py:158 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/lrfparser.py:158 msgid "Parsing LRF..." msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/lrf/lrfparser.py:161 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/lrfparser.py:161 msgid "Creating XML..." msgstr "إنشاء XML..." -#: /home/kovid/work/trunk/src/calibre/ebooks/lrf/lrfparser.py:163 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/lrfparser.py:163 msgid "LRS written to " msgstr "تم كتابة LRS في " -#: /home/kovid/work/trunk/src/calibre/ebooks/lrf/lrs/convert_from.py:267 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/lrs/convert_from.py:267 msgid "Could not read from thumbnail file:" msgstr "لم يتمكّن من قراءة ملف الصورة المصغّرة:" -#: /home/kovid/work/trunk/src/calibre/ebooks/lrf/lrs/convert_from.py:287 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/lrs/convert_from.py:287 msgid "" "%prog [options] file.lrs\n" "Compile an LRS file into an LRF file." msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/lrf/lrs/convert_from.py:288 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/lrs/convert_from.py:288 msgid "Path to output file" msgstr "المسار إلى ملف الخرج" -#: /home/kovid/work/trunk/src/calibre/ebooks/lrf/lrs/convert_from.py:290 -#: /home/kovid/work/trunk/src/calibre/ebooks/metadata/isbndb.py:113 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/lrs/convert_from.py:290 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/isbndb.py:113 msgid "Verbose processing" msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/lrf/lrs/convert_from.py:292 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/lrs/convert_from.py:292 msgid "Convert LRS to LRS, useful for debugging." msgstr "تحويل LRS إلى LRS، يفيد في التنقيح." -#: /home/kovid/work/trunk/src/calibre/ebooks/lrf/meta.py:457 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:457 msgid "Invalid LRF file. Could not set metadata." msgstr "ملف LRF غير صالح. لم يتمكّن ضبط الميتاداتا." -#: /home/kovid/work/trunk/src/calibre/ebooks/lrf/meta.py:582 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:582 msgid "" "%prog [options] mybook.lrf\n" "\n" @@ -1651,40 +1690,40 @@ msgstr "" "إظهار/تحرير الميتاداتا في ملف LRF.\n" "\n" -#: /home/kovid/work/trunk/src/calibre/ebooks/lrf/meta.py:603 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:603 msgid "" "Path to a txt file containing the comment to be stored in the lrf file." msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/lrf/output.py:90 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/output.py:90 msgid "Enable autorotation of images that are wider than the screen width." msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/lrf/output.py:94 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/output.py:94 msgid "Set the space between words in pts. Default is %default" msgstr "ضبط المساحة بين الكلمات بنقاط. الإفتراضي هو %default" -#: /home/kovid/work/trunk/src/calibre/ebooks/lrf/output.py:97 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/output.py:97 msgid "Add a header to all the pages with title and author." msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/lrf/output.py:100 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/output.py:100 msgid "" "Set the format of the header. %a is replaced by the author and %t by the " "title. Default is %default" msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/lrf/output.py:104 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/output.py:104 msgid "Add extra spacing below the header. Default is %default pt." msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/lrf/output.py:107 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/output.py:107 msgid "" "Minimum paragraph indent (the indent of the first line of a paragraph) in " "pts. Default: %default" msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/lrf/output.py:112 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/output.py:112 msgid "" "Render tables in the HTML as images (useful if the document has large or " "complex tables)" @@ -1692,120 +1731,124 @@ msgstr "" "تحويل الجداول في الـHTML كصور (هذا يفيد إذا كان للمستند جداول كبيرة أو " "معقّدة)" -#: /home/kovid/work/trunk/src/calibre/ebooks/lrf/output.py:117 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/output.py:117 msgid "" "Multiply the size of text in rendered tables by this factor. Default is " "%default" msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/lrf/output.py:121 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/output.py:121 msgid "The serif family of fonts to embed" msgstr "ضم أسرة الخطوط بالترويس" -#: /home/kovid/work/trunk/src/calibre/ebooks/lrf/output.py:124 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/output.py:124 msgid "The sans-serif family of fonts to embed" msgstr "ضم أسرة الخطوط بدون الترويس" -#: /home/kovid/work/trunk/src/calibre/ebooks/lrf/output.py:127 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/output.py:127 msgid "The monospace family of fonts to embed" msgstr "ضم أسرة الخطوط أحادية القياس" -#: /home/kovid/work/trunk/src/calibre/ebooks/lrf/output.py:152 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/output.py:152 msgid "Comic" msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/metadata/__init__.py:363 -#: /home/kovid/work/trunk/src/calibre/ebooks/pdf/manipulate/info.py:45 -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/book_info.py:97 -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/book_info.py:98 -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/fetch_metadata.py:61 -#: /home/kovid/work/trunk/src/calibre/gui2/library.py:174 -#: /home/kovid/work/trunk/src/calibre/gui2/library.py:416 -#: /home/kovid/work/trunk/src/calibre/gui2/library.py:1159 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:372 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/info.py:45 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:97 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:98 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:61 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:46 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:335 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:828 +#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:538 msgid "Title" msgstr "العنوان" -#: /home/kovid/work/trunk/src/calibre/ebooks/metadata/__init__.py:364 -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/fetch_metadata.py:62 -#: /home/kovid/work/trunk/src/calibre/gui2/library.py:175 -#: /home/kovid/work/trunk/src/calibre/gui2/library.py:421 -#: /home/kovid/work/trunk/src/calibre/gui2/library.py:1160 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:373 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:62 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:48 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:340 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:829 msgid "Author(s)" msgstr "المؤلف أو المؤلفون" -#: /home/kovid/work/trunk/src/calibre/ebooks/metadata/__init__.py:365 -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/fetch_metadata.py:64 -#: /home/kovid/work/trunk/src/calibre/gui2/library.py:180 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:374 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:64 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:53 msgid "Publisher" msgstr "الناشر" -#: /home/kovid/work/trunk/src/calibre/ebooks/metadata/__init__.py:366 -#: /home/kovid/work/trunk/src/calibre/ebooks/pdf/manipulate/info.py:49 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:375 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/info.py:49 msgid "Producer" msgstr "المنتج" -#: /home/kovid/work/trunk/src/calibre/ebooks/metadata/__init__.py:367 -#: /home/kovid/work/trunk/src/calibre/gui2/convert/metadata_ui.py:184 -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/book_info.py:99 -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/book_info_ui.py:67 -#: /home/kovid/work/trunk/src/calibre/gui2/library.py:377 -#: /home/kovid/work/trunk/src/calibre/gui2/status.py:95 -#: /home/kovid/work/trunk/src/calibre/gui2/status.py:137 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:376 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:184 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:99 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info_ui.py:67 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:296 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1005 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:107 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:149 msgid "Comments" msgstr "التعليقات" -#: /home/kovid/work/trunk/src/calibre/ebooks/metadata/__init__.py:375 -#: /home/kovid/work/trunk/src/calibre/gui2/library.py:181 -#: /home/kovid/work/trunk/src/calibre/gui2/library.py:366 -#: /home/kovid/work/trunk/src/calibre/gui2/library.py:1104 -#: /home/kovid/work/trunk/src/calibre/gui2/library.py:1163 -#: /home/kovid/work/trunk/src/calibre/gui2/status.py:97 -#: /home/kovid/work/trunk/src/calibre/gui2/tag_view.py:151 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:384 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories.py:46 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:54 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:285 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1001 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:106 +#: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:130 msgid "Tags" msgstr "الوسوم" -#: /home/kovid/work/trunk/src/calibre/ebooks/metadata/__init__.py:377 -#: /home/kovid/work/trunk/src/calibre/gui2/library.py:182 -#: /home/kovid/work/trunk/src/calibre/gui2/library.py:382 -#: /home/kovid/work/trunk/src/calibre/gui2/status.py:96 -#: /home/kovid/work/trunk/src/calibre/gui2/tag_view.py:151 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:386 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories.py:46 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:55 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:301 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1010 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:105 +#: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:82 msgid "Series" msgstr "السلسلة" -#: /home/kovid/work/trunk/src/calibre/ebooks/metadata/__init__.py:378 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:387 msgid "Language" msgstr "اللغة" -#: /home/kovid/work/trunk/src/calibre/ebooks/metadata/__init__.py:380 -#: /home/kovid/work/trunk/src/calibre/gui2/library.py:1103 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:389 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:993 msgid "Timestamp" msgstr "ختم التوقيت" -#: /home/kovid/work/trunk/src/calibre/ebooks/metadata/__init__.py:382 -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/fetch_metadata.py:66 -#: /home/kovid/work/trunk/src/calibre/gui2/library.py:178 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:391 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:66 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:51 msgid "Published" msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/metadata/__init__.py:384 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:393 msgid "Rights" msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/metadata/amazon.py:85 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/amazon.py:85 msgid "EDITORIAL REVIEW" msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/metadata/archive.py:22 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/archive.py:22 msgid "" "Extract common e-book formats from archives (zip/rar) files. Also try to " "autodetect if they are actually cbz/cbr files." msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/metadata/cli.py:20 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:20 msgid "options" msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/metadata/cli.py:21 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:21 msgid "" "\n" "Read/Write metadata from/to ebook files.\n" @@ -1819,120 +1862,120 @@ msgid "" "silently ignored.\n" msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/metadata/cli.py:40 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:40 msgid "" "Set the authors. Multiple authors should be separated by the & character. " "Author names should be in the order Firstname Lastname." msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/metadata/cli.py:44 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:44 msgid "" "The version of the title to be used for sorting. If unspecified, and the " "title is specified, it will be auto-generated from the title." msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/metadata/cli.py:48 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:48 msgid "" "String to be used when sorting by author. If unspecified, and the author(s) " "are specified, it will be auto-generated from the author(s)." msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/metadata/cli.py:52 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:52 msgid "Set the cover to the specified file." msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/metadata/cli.py:58 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:58 msgid "Set the book category." msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/metadata/cli.py:74 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:74 msgid "Set the published date." msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/metadata/cli.py:77 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:77 msgid "Get the cover from the ebook and save it at as the specified file." msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/metadata/cli.py:80 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:80 msgid "" "Specify the name of an OPF file. The metadata will be written to the OPF " "file." msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/metadata/cli.py:83 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:83 msgid "" "Read metadata from the specified OPF file and use it to set metadata in the " "ebook. Metadata specified on the command line will override metadata read " "from the OPF file" msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/metadata/cli.py:88 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:88 msgid "Set the BookID in LRF files" msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/metadata/cli.py:153 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:153 msgid "No file specified" msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/metadata/cli.py:168 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:168 msgid "Original metadata" msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/metadata/cli.py:185 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:185 msgid "Changed metadata" msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/metadata/cli.py:197 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:197 msgid "OPF created in" msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/metadata/cli.py:203 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:203 msgid "Cover saved to" msgstr "تم حفظ الغلاف في" -#: /home/kovid/work/trunk/src/calibre/ebooks/metadata/cli.py:205 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:205 msgid "No cover found" msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/metadata/fetch.py:34 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/fetch.py:33 msgid "Metadata download" msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/metadata/fetch.py:111 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/fetch.py:110 msgid "ratings" msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/metadata/fetch.py:111 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/fetch.py:110 msgid "tags" msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/metadata/fetch.py:112 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/fetch.py:111 msgid "description/reviews" msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/metadata/fetch.py:113 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/fetch.py:112 msgid "Download %s from %s" msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/metadata/fetch.py:137 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/fetch.py:136 msgid "Downloads metadata from Google Books" msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/metadata/fetch.py:153 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/fetch.py:152 msgid "Downloads metadata from isbndb.com" msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/metadata/fetch.py:181 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/fetch.py:180 msgid "" "To use isbndb.com you must sign up for a %sfree account%s and enter your " "access key below." msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/metadata/fetch.py:189 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/fetch.py:188 msgid "Downloads social metadata from amazon.com" msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/metadata/isbndb.py:94 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/isbndb.py:94 msgid "" "\n" "%prog [options] key\n" @@ -1946,41 +1989,41 @@ msgid "" "\n" msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/metadata/isbndb.py:105 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/isbndb.py:105 msgid "The ISBN ID of the book you want metadata for." msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/metadata/isbndb.py:107 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/isbndb.py:107 msgid "The author whose book to search for." msgstr "المؤلف الذي تريد البحث عنه." -#: /home/kovid/work/trunk/src/calibre/ebooks/metadata/isbndb.py:109 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/isbndb.py:109 msgid "The title of the book to search for." msgstr "العنوان الذي تريد البحث عنه." -#: /home/kovid/work/trunk/src/calibre/ebooks/metadata/isbndb.py:111 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/isbndb.py:111 msgid "The publisher of the book to search for." msgstr "الناشر الذي تريد البحث عنه." -#: /home/kovid/work/trunk/src/calibre/ebooks/metadata/library_thing.py:53 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/library_thing.py:53 msgid "LibraryThing.com timed out. Try again later." msgstr "LibraryThing.com لم يرد. حاول لاحقاً." -#: /home/kovid/work/trunk/src/calibre/ebooks/metadata/library_thing.py:60 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/library_thing.py:60 msgid "" "Could not fetch cover as server is experiencing high load. Please try again " "later." msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/metadata/library_thing.py:61 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/library_thing.py:61 msgid " not found." msgstr " لم يوجد." -#: /home/kovid/work/trunk/src/calibre/ebooks/metadata/library_thing.py:64 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/library_thing.py:64 msgid "LibraryThing.com server error. Try again later." msgstr "خطأ في خادم LibraryThing.com. حاول لاحقاً." -#: /home/kovid/work/trunk/src/calibre/ebooks/metadata/library_thing.py:71 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/library_thing.py:71 msgid "" "\n" "%prog [options] ISBN\n" @@ -1988,166 +2031,162 @@ msgid "" "Fetch a cover image for the book identified by ISBN from LibraryThing.com\n" msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/metadata/opf2.py:1112 -#: /home/kovid/work/trunk/src/calibre/ebooks/oeb/base.py:1372 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:1220 +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1371 msgid "Cover" msgstr "الغلاف" -#: /home/kovid/work/trunk/src/calibre/ebooks/mobi/output.py:22 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/output.py:22 msgid "Modify images to meet Palm device size limitations." msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/mobi/output.py:26 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/output.py:26 msgid "When present, use author sort field as author." msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/mobi/output.py:30 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/output.py:30 msgid "" "Don't add Table of Contents to end of book. Useful if the book has its own " "table of contents." msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/mobi/output.py:33 -#: /home/kovid/work/trunk/src/calibre/ebooks/oeb/transforms/htmltoc.py:56 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/output.py:33 +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/htmltoc.py:56 msgid "Title for any generated in-line table of contents." msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/mobi/output.py:37 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/output.py:37 msgid "Disable compression of the file contents." msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/mobi/output.py:40 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/output.py:40 msgid "Tag marking book to be filed with Personal Docs" msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/mobi/output.py:108 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/output.py:108 msgid "All articles" msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/mobi/reader.py:258 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:258 msgid "This is an Amazon Topaz book. It cannot be processed." msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/oeb/base.py:1373 +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1372 msgid "Title Page" msgstr "صقحة العنوان" -#: /home/kovid/work/trunk/src/calibre/ebooks/oeb/base.py:1374 -#: /home/kovid/work/trunk/src/calibre/ebooks/oeb/transforms/htmltoc.py:15 -#: /home/kovid/work/trunk/src/calibre/gui2/viewer/main.py:53 -#: /home/kovid/work/trunk/src/calibre/gui2/viewer/main_ui.py:194 +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1373 +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/htmltoc.py:15 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:53 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:194 msgid "Table of Contents" msgstr "المحتويات" -#: /home/kovid/work/trunk/src/calibre/ebooks/oeb/base.py:1375 +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1374 msgid "Index" msgstr "الفهرس" -#: /home/kovid/work/trunk/src/calibre/ebooks/oeb/base.py:1376 +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1375 msgid "Glossary" msgstr "المسرد" -#: /home/kovid/work/trunk/src/calibre/ebooks/oeb/base.py:1377 +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1376 msgid "Acknowledgements" msgstr "شكر وتقدير" -#: /home/kovid/work/trunk/src/calibre/ebooks/oeb/base.py:1378 +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1377 msgid "Bibliography" msgstr "ببليوغرافيا" -#: /home/kovid/work/trunk/src/calibre/ebooks/oeb/base.py:1379 +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1378 msgid "Colophon" msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/oeb/base.py:1380 +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1379 msgid "Copyright" msgstr "حقوق المؤلف" -#: /home/kovid/work/trunk/src/calibre/ebooks/oeb/base.py:1381 +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1380 msgid "Dedication" msgstr "الإهداء" -#: /home/kovid/work/trunk/src/calibre/ebooks/oeb/base.py:1382 +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1381 msgid "Epigraph" msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/oeb/base.py:1383 +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1382 msgid "Foreword" msgstr "افتتاحية" -#: /home/kovid/work/trunk/src/calibre/ebooks/oeb/base.py:1384 +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1383 msgid "List of Illustrations" msgstr "قائمة الرسوم" -#: /home/kovid/work/trunk/src/calibre/ebooks/oeb/base.py:1385 +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1384 msgid "List of Tables" msgstr "قائمة الجداول" -#: /home/kovid/work/trunk/src/calibre/ebooks/oeb/base.py:1386 +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1385 msgid "Notes" msgstr "الملاحظات" -#: /home/kovid/work/trunk/src/calibre/ebooks/oeb/base.py:1387 +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1386 msgid "Preface" msgstr "افتتاحية" -#: /home/kovid/work/trunk/src/calibre/ebooks/oeb/base.py:1388 +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1387 msgid "Main Text" msgstr "النصّ الرئيسي" -#: /home/kovid/work/trunk/src/calibre/ebooks/oeb/iterator.py:41 +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/iterator.py:41 msgid "%s format books are not supported" msgstr "الكتب بتهيئة %s ليست مدعومة" -#: /home/kovid/work/trunk/src/calibre/ebooks/oeb/transforms/htmltoc.py:54 +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/htmltoc.py:54 msgid "HTML TOC generation options." msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/oeb/transforms/jacket.py:113 +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/jacket.py:113 msgid "Book Jacket" msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/oeb/transforms/split.py:34 +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/split.py:34 msgid "" "Could not find reasonable point at which to split: %s Sub-tree size: %d KB" msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/oeb/transforms/structure.py:68 -msgid "Unnamed" -msgstr "" - -#: /home/kovid/work/trunk/src/calibre/ebooks/oeb/writer.py:32 +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/writer.py:32 msgid "OPF/NCX/etc. generation options." msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/oeb/writer.py:35 +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/writer.py:35 msgid "OPF version to generate. Default is %default." msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/oeb/writer.py:37 +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/writer.py:37 msgid "" "Generate an Adobe \"page-map\" file if pagination information is available." msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/pdb/ereader/reader132.py:128 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdb/ereader/reader132.py:128 msgid "Footnotes" msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/pdb/ereader/reader132.py:135 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdb/ereader/reader132.py:135 msgid "Sidebar" msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/pdb/input.py:22 -#: /home/kovid/work/trunk/src/calibre/ebooks/tcr/input.py:23 -#: /home/kovid/work/trunk/src/calibre/ebooks/txt/input.py:22 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdb/input.py:22 +#: /home/kovid/work/calibre/src/calibre/ebooks/tcr/input.py:23 +#: /home/kovid/work/calibre/src/calibre/ebooks/txt/input.py:23 msgid "" "Normally calibre treats blank lines as paragraph markers. With this option " "it will assume that every line represents a paragraph instead." msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/pdb/input.py:26 -#: /home/kovid/work/trunk/src/calibre/ebooks/tcr/input.py:27 -#: /home/kovid/work/trunk/src/calibre/ebooks/txt/input.py:26 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdb/input.py:26 +#: /home/kovid/work/calibre/src/calibre/ebooks/tcr/input.py:27 +#: /home/kovid/work/calibre/src/calibre/ebooks/txt/input.py:27 msgid "" "Normally calibre treats blank lines as paragraph markers. With this option " "it will assume that every line starting with an indent (either a tab or 2+ " @@ -2155,32 +2194,32 @@ msgid "" "starts with an indent is reached." msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/pdb/output.py:23 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdb/output.py:23 msgid "Format to use inside the pdb container. Choices are:" msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/pdb/output.py:27 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdb/output.py:27 msgid "" "Specify the character encoding of the output document. The default is " "cp1252. Note: This option is not honored by all formats." msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/pdf/input.py:24 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/input.py:24 msgid "Do not extract images from the document" msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/pdf/input.py:26 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/input.py:26 msgid "" "Scale used to determine the length at which a line should be unwrapped. " "Valid values are a decimal between 0 and 1. The default is 0.5, this is the " "median line length." msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/pdf/input.py:30 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/input.py:30 msgid "Use the new PDF conversion engine." msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/pdf/manipulate/cli.py:31 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/cli.py:31 msgid "" "command ...\n" "\n" @@ -2192,114 +2231,114 @@ msgid "" "Manipulate a PDF.\n" msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/pdf/manipulate/crop.py:29 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/crop.py:29 msgid "" "[options] file.pdf\n" "\n" "Crop a PDF file.\n" msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/pdf/manipulate/crop.py:38 -#: /home/kovid/work/trunk/src/calibre/ebooks/pdf/manipulate/decrypt.py:32 -#: /home/kovid/work/trunk/src/calibre/ebooks/pdf/manipulate/encrypt.py:34 -#: /home/kovid/work/trunk/src/calibre/ebooks/pdf/manipulate/merge.py:36 -#: /home/kovid/work/trunk/src/calibre/ebooks/pdf/manipulate/reverse.py:34 -#: /home/kovid/work/trunk/src/calibre/ebooks/pdf/manipulate/rotate.py:33 -#: /home/kovid/work/trunk/src/calibre/ebooks/pdf/manipulate/split.py:41 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/crop.py:38 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/decrypt.py:32 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/encrypt.py:34 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/merge.py:36 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/reverse.py:34 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/rotate.py:33 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/split.py:41 msgid "" "Path to output file. By default a file is created in the current directory." msgstr "مسار إلى ملف الخرج. الإفتراضي أن يكون الملف منشئ في الدليل الحالي." -#: /home/kovid/work/trunk/src/calibre/ebooks/pdf/manipulate/crop.py:41 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/crop.py:41 msgid "Number of pixels to crop from the left most x (default is %s)" msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/pdf/manipulate/crop.py:44 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/crop.py:44 msgid "Number of pixels to crop from the left most y (default is %s)" msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/pdf/manipulate/crop.py:47 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/crop.py:47 msgid "Number of pixels to crop from the right most x (default is %s)" msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/pdf/manipulate/crop.py:50 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/crop.py:50 msgid "Number of pixels to crop from the right most y (default is %s)" msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/pdf/manipulate/crop.py:53 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/crop.py:53 msgid "" "A file generated by ghostscript which allows each page to be individually " "cropped `gs -dSAFER -dNOPAUSE -dBATCH -sDEVICE=bbox file.pdf 2> bounding`" msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/pdf/manipulate/crop.py:73 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/crop.py:73 msgid "Crop Options:" msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/pdf/manipulate/crop.py:73 -#: /home/kovid/work/trunk/src/calibre/ebooks/pdf/manipulate/decrypt.py:60 -#: /home/kovid/work/trunk/src/calibre/ebooks/pdf/manipulate/encrypt.py:54 -#: /home/kovid/work/trunk/src/calibre/ebooks/pdf/manipulate/merge.py:56 -#: /home/kovid/work/trunk/src/calibre/ebooks/pdf/manipulate/reverse.py:54 -#: /home/kovid/work/trunk/src/calibre/ebooks/pdf/manipulate/rotate.py:53 -#: /home/kovid/work/trunk/src/calibre/ebooks/pdf/manipulate/split.py:61 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/crop.py:73 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/decrypt.py:60 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/encrypt.py:54 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/merge.py:56 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/reverse.py:54 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/rotate.py:53 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/split.py:61 msgid "Options to control the transformation of pdf" msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/pdf/manipulate/decrypt.py:23 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/decrypt.py:23 msgid "" "[options] file.pdf password\n" "\n" "Decrypt a PDF.\n" msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/pdf/manipulate/decrypt.py:60 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/decrypt.py:60 msgid "Decrypt Options:" msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/pdf/manipulate/encrypt.py:25 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/encrypt.py:25 msgid "" "[options] file.pdf password\n" "\n" "Encrypt a PDF.\n" msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/pdf/manipulate/encrypt.py:54 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/encrypt.py:54 msgid "Encrypt Options:" msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/pdf/manipulate/info.py:21 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/info.py:21 msgid "" "file.pdf ...\n" "\n" "Get info about a PDF.\n" msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/pdf/manipulate/info.py:46 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/info.py:46 msgid "Author" msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/pdf/manipulate/info.py:47 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/info.py:47 msgid "Subject" msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/pdf/manipulate/info.py:48 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/info.py:48 msgid "Creator" msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/pdf/manipulate/info.py:50 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/info.py:50 msgid "Pages" msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/pdf/manipulate/info.py:51 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/info.py:51 msgid "File Size" msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/pdf/manipulate/info.py:52 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/info.py:52 msgid "PDF Version" msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/pdf/manipulate/merge.py:25 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/merge.py:25 msgid "" "[options] file1.pdf file2.pdf ...\n" "\n" @@ -2308,33 +2347,33 @@ msgid "" "Merges individual PDFs.\n" msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/pdf/manipulate/merge.py:56 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/merge.py:56 msgid "Merge Options:" msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/pdf/manipulate/reverse.py:25 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/reverse.py:25 msgid "" "[options] file.pdf\n" "\n" "Reverse a PDF.\n" msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/pdf/manipulate/reverse.py:54 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/reverse.py:54 msgid "Reverse Options:" msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/pdf/manipulate/rotate.py:24 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/rotate.py:24 msgid "" "file.pdf degrees\n" "\n" "Rotate pages of a PDF clockwise.\n" msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/pdf/manipulate/rotate.py:53 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/rotate.py:53 msgid "Rotate Options:" msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/pdf/manipulate/split.py:25 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/split.py:25 msgid "" "\n" "%prog %%name [options] file.pdf page_to_split_on ...\n" @@ -2349,90 +2388,96 @@ msgid "" "Split a PDF.\n" msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/pdf/manipulate/split.py:61 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/split.py:61 msgid "Split Options:" msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/pdf/output.py:31 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/output.py:31 msgid "" "The unit of measure. Default is inch. Choices are %s Note: This does not " "override the unit for margins!" msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/pdf/output.py:36 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/output.py:36 msgid "" "The size of the paper. This size will be overridden when an output profile " "is used. Default is letter. Choices are %s" msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/pdf/output.py:40 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/output.py:40 msgid "" "Custom size of the document. Use the form widthxheight EG. `123x321` to " "specify the width and height. This overrides any specified paper-size." msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/pdf/output.py:45 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/output.py:45 msgid "The orientation of the page. Default is portrait. Choices are %s" msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/pdf/output.py:49 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/output.py:49 msgid "" "Preserve the aspect ratio of the cover, instead of stretching it to fill the " "ull first page of the generated pdf." msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/pdf/pdftohtml.py:55 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/pdftohtml.py:55 msgid "Could not find pdftohtml, check it is in your PATH" msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/pml/output.py:33 +#: /home/kovid/work/calibre/src/calibre/ebooks/pml/output.py:33 msgid "" "Specify the character encoding of the output document. The default is cp1252." msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/rtf/input.py:199 +#: /home/kovid/work/calibre/src/calibre/ebooks/rtf/input.py:199 msgid "" "This RTF file has a feature calibre does not support. Convert it to HTML " "first and then try it.\n" "%s" msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/tcr/output.py:23 +#: /home/kovid/work/calibre/src/calibre/ebooks/tcr/output.py:23 msgid "" "Specify the character encoding of the output document. The default is utf-8." msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/tcr/output.py:27 +#: /home/kovid/work/calibre/src/calibre/ebooks/tcr/output.py:27 msgid "" "Specify the compression level to use. Scale 1 - 10. 1 being the lowest " "compression but the fastest and 10 being the highest compression but the " "slowest." msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/txt/input.py:32 +#: /home/kovid/work/calibre/src/calibre/ebooks/txt/input.py:33 +msgid "" +"Normally extra spaces are condensed into a single space. With this option " +"all spaces will be displayed." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/txt/input.py:36 msgid "" "Run the text input through the markdown pre-processor. To learn more about " "markdown see" msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/txt/input.py:35 +#: /home/kovid/work/calibre/src/calibre/ebooks/txt/input.py:39 msgid "Do not insert a Table of Contents into the output text." msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/txt/output.py:24 +#: /home/kovid/work/calibre/src/calibre/ebooks/txt/output.py:24 msgid "" "Type of newline to use. Options are %s. Default is 'system'. Use 'old_mac' " "for compatibility with Mac OS 9 and earlier. For Mac OS X use 'unix'. " "'system' will default to the newline type used by this OS." msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/txt/output.py:30 +#: /home/kovid/work/calibre/src/calibre/ebooks/txt/output.py:30 msgid "" "Specify the character encoding of the output document. The default is utf-8. " "Note: This option is not honored by all formats." msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/txt/output.py:38 +#: /home/kovid/work/calibre/src/calibre/ebooks/txt/output.py:38 msgid "" "The maximum number of characters per line. This splits on the first space " "before the specified value. If no space is found the line will be broken at " @@ -2440,296 +2485,443 @@ msgid "" "minimum of 25 characters. Use 0 to disable line splitting." msgstr "" -#: /home/kovid/work/trunk/src/calibre/ebooks/txt/output.py:45 +#: /home/kovid/work/calibre/src/calibre/ebooks/txt/output.py:45 msgid "" "Force splitting on the max-line-length value when no space is present. Also " "allows max-line-length to be below the minimum" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/__init__.py:31 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:33 msgid "Send file to storage card instead of main memory by default" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/__init__.py:33 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:35 msgid "Confirm before deleting" msgstr "تأكيد قبل الحذف" -#: /home/kovid/work/trunk/src/calibre/gui2/__init__.py:35 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:37 msgid "Toolbar icon size" msgstr "حجم أيقونات شريط الأدوات" -#: /home/kovid/work/trunk/src/calibre/gui2/__init__.py:37 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:39 msgid "Show button labels in the toolbar" msgstr "إظهار تسميات الأزرار في شريط الأدوات" -#: /home/kovid/work/trunk/src/calibre/gui2/__init__.py:39 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:41 msgid "Main window geometry" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/__init__.py:41 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:43 msgid "Notify when a new version is available" msgstr "Notify when a new version is available" -#: /home/kovid/work/trunk/src/calibre/gui2/__init__.py:43 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:45 msgid "Use Roman numerals for series number" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/__init__.py:45 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:47 msgid "Sort tags list by popularity" msgstr "ترتيب الوسوم حسب الشهرة" -#: /home/kovid/work/trunk/src/calibre/gui2/__init__.py:47 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:49 msgid "Number of covers to show in the cover browsing mode" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/__init__.py:49 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:51 msgid "Defaults for conversion to LRF" msgstr "الإفتراضي للتحويل إلى LRF" -#: /home/kovid/work/trunk/src/calibre/gui2/__init__.py:51 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:53 msgid "Options for the LRF ebook viewer" msgstr "الخيارات لمستعرض كتب LRF" -#: /home/kovid/work/trunk/src/calibre/gui2/__init__.py:54 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:56 msgid "Formats that are viewed using the internal viewer" msgstr "تهيئات التي تعرض عن طريق المستعرض الداخلي" -#: /home/kovid/work/trunk/src/calibre/gui2/__init__.py:56 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:58 msgid "Columns to be displayed in the book list" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/__init__.py:57 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:59 msgid "Automatically launch content server on application startup" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/__init__.py:58 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:60 msgid "Oldest news kept in database" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/__init__.py:59 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:61 msgid "Show system tray icon" msgstr "إظهار أيقونة صينية النظام" -#: /home/kovid/work/trunk/src/calibre/gui2/__init__.py:61 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:63 msgid "Upload downloaded news to device" msgstr "رفع أخبار تم تنزيلها إلى الجهاز" -#: /home/kovid/work/trunk/src/calibre/gui2/__init__.py:63 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:65 msgid "Delete books from library after uploading to device" msgstr "حذف كتب من المكتبة بعد رفعها إلى الجهاز" -#: /home/kovid/work/trunk/src/calibre/gui2/__init__.py:65 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:67 msgid "" "Show the cover flow in a separate window instead of in the main calibre " "window" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/__init__.py:67 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:69 msgid "Disable notifications from the system tray icon" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/__init__.py:69 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:71 msgid "Default action to perform when send to device button is clicked" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/__init__.py:91 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:93 msgid "Maximum number of waiting worker processes" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/__init__.py:93 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:95 msgid "Download social metadata (tags/rating/etc.)" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/__init__.py:95 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:97 msgid "Overwrite author and title with new metadata" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/__init__.py:97 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:99 msgid "Limit max simultaneous jobs to number of CPUs" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/__init__.py:135 -#: /home/kovid/work/trunk/src/calibre/gui2/wizard/__init__.py:482 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:101 +msgid "tag browser categories not to display" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:138 +#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:476 msgid "Copied" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/__init__.py:169 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:172 msgid "Copy" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/__init__.py:169 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:172 msgid "Copy to Clipboard" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/__init__.py:407 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:382 msgid "Choose Files" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/add.py:54 +#: /home/kovid/work/calibre/src/calibre/gui2/add.py:54 msgid "Searching in" msgstr "يتم البحث في" -#: /home/kovid/work/trunk/src/calibre/gui2/add.py:225 +#: /home/kovid/work/calibre/src/calibre/gui2/add.py:229 msgid "Adding..." msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/add.py:238 +#: /home/kovid/work/calibre/src/calibre/gui2/add.py:242 msgid "Searching in all sub-directories..." msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/add.py:251 +#: /home/kovid/work/calibre/src/calibre/gui2/add.py:255 msgid "Path error" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/add.py:252 +#: /home/kovid/work/calibre/src/calibre/gui2/add.py:256 msgid "The specified directory could not be processed." msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/add.py:256 -#: /home/kovid/work/trunk/src/calibre/gui2/device.py:517 +#: /home/kovid/work/calibre/src/calibre/gui2/add.py:260 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:599 msgid "No books" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/add.py:257 -#: /home/kovid/work/trunk/src/calibre/gui2/ui.py:1822 +#: /home/kovid/work/calibre/src/calibre/gui2/add.py:261 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1929 msgid "No books found" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/add.py:323 +#: /home/kovid/work/calibre/src/calibre/gui2/add.py:327 msgid "Added" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/add.py:336 +#: /home/kovid/work/calibre/src/calibre/gui2/add.py:340 msgid "Adding failed" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/add.py:337 +#: /home/kovid/work/calibre/src/calibre/gui2/add.py:341 msgid "" "The add books process seems to have hung. Try restarting calibre and adding " "the books in smaller increments, until you find the problem book." msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/add.py:349 +#: /home/kovid/work/calibre/src/calibre/gui2/add.py:353 msgid "Duplicates found!" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/add.py:350 +#: /home/kovid/work/calibre/src/calibre/gui2/add.py:354 msgid "" "Books with the same title as the following already exist in the database. " "Add them anyway?" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/add.py:353 +#: /home/kovid/work/calibre/src/calibre/gui2/add.py:357 msgid "Adding duplicates..." msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/add.py:419 +#: /home/kovid/work/calibre/src/calibre/gui2/add.py:423 msgid "Saving..." msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/add.py:472 +#: /home/kovid/work/calibre/src/calibre/gui2/add.py:476 msgid "Saved" msgstr "تم الحفظ" -#: /home/kovid/work/trunk/src/calibre/gui2/catalog/catalog_csv_xml.py:16 +#: /home/kovid/work/calibre/src/calibre/gui2/add_wizard/__init__.py:57 +msgid "Searching for sub-folders" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/add_wizard/__init__.py:62 +msgid "Searching for books" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/add_wizard/__init__.py:74 +msgid "Looking for duplicates based on file hash" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/add_wizard/__init__.py:109 +#: /home/kovid/work/calibre/src/calibre/gui2/add_wizard/welcome_ui.py:65 +msgid "Choose root folder" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/add_wizard/__init__.py:137 +msgid "Invalid root folder" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/add_wizard/__init__.py:138 +msgid "is not a valid root folder" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/add_wizard/__init__.py:148 +msgid "Add books to calibre" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/add_wizard/scan_ui.py:21 +#: /home/kovid/work/calibre/src/calibre/gui2/add_wizard/welcome_ui.py:57 +#: /home/kovid/work/calibre/src/calibre/gui2/wizard/finish_ui.py:45 +#: /home/kovid/work/calibre/src/calibre/gui2/wizard/kindle_ui.py:41 +#: /home/kovid/work/calibre/src/calibre/gui2/wizard/library_ui.py:49 +#: /home/kovid/work/calibre/src/calibre/gui2/wizard/stanza_ui.py:41 +msgid "WizardPage" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/add_wizard/scan_ui.py:22 +msgid "Scanning root folder for books" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/add_wizard/scan_ui.py:23 +msgid "This may take a few minutes" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/add_wizard/welcome_ui.py:58 +msgid "Choose the location to add books from" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/add_wizard/welcome_ui.py:59 +msgid "Select a folder on your hard disk" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/add_wizard/welcome_ui.py:60 +msgid "" +"

calibre can scan your computer for existing books automatically. These " +"books will then be copied into the calibre library. This wizard will " +"help you customize the scanning and import process for your existing book " +"collection.

\n" +"

Choose a root folder. Books will be searched for only inside this folder " +"and any sub-folders.

\n" +"

Make sure that the folder you chose for your calibre library is " +"not under the root folder you choose.

" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/add_wizard/welcome_ui.py:63 +msgid "&Root folder:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/add_wizard/welcome_ui.py:64 +msgid "" +"This folder and its sub-folders will be scanned for books to import into " +"calibre's library" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/add_wizard/welcome_ui.py:66 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/debug_ui.py:52 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/debug_ui.py:53 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:125 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:171 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/xexp_edit_ui.py:52 +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/configwidget_ui.py:76 +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/configwidget_ui.py:77 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:530 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:544 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:545 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:562 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:564 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:566 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:568 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:569 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:604 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:369 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:374 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:388 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:399 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:401 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:403 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:408 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:410 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/saved_search_editor_ui.py:87 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/saved_search_editor_ui.py:90 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories_ui.py:156 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories_ui.py:159 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories_ui.py:163 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories_ui.py:166 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_editor_ui.py:126 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_editor_ui.py:128 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_editor_ui.py:131 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_editor_ui.py:135 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor_ui.py:74 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor_ui.py:76 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:267 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:269 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:270 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:393 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:398 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:404 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:407 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:409 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:411 +#: /home/kovid/work/calibre/src/calibre/gui2/shortcuts_ui.py:75 +#: /home/kovid/work/calibre/src/calibre/gui2/shortcuts_ui.py:80 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:186 +msgid "..." +msgstr "..." + +#: /home/kovid/work/calibre/src/calibre/gui2/add_wizard/welcome_ui.py:67 +msgid "Handle multiple files per book" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/add_wizard/welcome_ui.py:68 +msgid "" +"&One book per folder, assumes every ebook file in a folder is the same book " +"in a different format" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/add_wizard/welcome_ui.py:69 +msgid "" +"&Multiple books per folder, assumes every ebook file is a different book" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_csv_xml.py:16 msgid "CSV/XML Options" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/catalog/catalog_csv_xml.py:17 -#: /home/kovid/work/trunk/src/calibre/gui2/catalog/catalog_epub_mobi.py:18 -#: /home/kovid/work/trunk/src/calibre/gui2/convert/comic_input.py:16 -#: /home/kovid/work/trunk/src/calibre/gui2/convert/epub_output.py:16 -#: /home/kovid/work/trunk/src/calibre/gui2/convert/fb2_input.py:13 -#: /home/kovid/work/trunk/src/calibre/gui2/convert/fb2_output.py:15 -#: /home/kovid/work/trunk/src/calibre/gui2/convert/lrf_output.py:20 -#: /home/kovid/work/trunk/src/calibre/gui2/convert/mobi_output.py:21 -#: /home/kovid/work/trunk/src/calibre/gui2/convert/pdb_input.py:13 -#: /home/kovid/work/trunk/src/calibre/gui2/convert/pdb_output.py:17 -#: /home/kovid/work/trunk/src/calibre/gui2/convert/pdf_input.py:13 -#: /home/kovid/work/trunk/src/calibre/gui2/convert/pdf_output.py:18 -#: /home/kovid/work/trunk/src/calibre/gui2/convert/rb_output.py:15 -#: /home/kovid/work/trunk/src/calibre/gui2/convert/txt_input.py:13 -#: /home/kovid/work/trunk/src/calibre/gui2/convert/txt_output.py:17 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_csv_xml.py:17 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:18 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input.py:16 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/epub_output.py:16 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/fb2_input.py:13 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/fb2_output.py:15 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/lrf_output.py:20 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output.py:21 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdb_input.py:13 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdb_output.py:17 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdf_input.py:13 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdf_output.py:18 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/rb_output.py:15 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/txt_input.py:13 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/txt_output.py:17 msgid "Options specific to" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/catalog/catalog_csv_xml.py:17 -#: /home/kovid/work/trunk/src/calibre/gui2/catalog/catalog_epub_mobi.py:18 -#: /home/kovid/work/trunk/src/calibre/gui2/convert/epub_output.py:16 -#: /home/kovid/work/trunk/src/calibre/gui2/convert/fb2_output.py:15 -#: /home/kovid/work/trunk/src/calibre/gui2/convert/lrf_output.py:20 -#: /home/kovid/work/trunk/src/calibre/gui2/convert/mobi_output.py:21 -#: /home/kovid/work/trunk/src/calibre/gui2/convert/pdb_output.py:17 -#: /home/kovid/work/trunk/src/calibre/gui2/convert/pdf_output.py:18 -#: /home/kovid/work/trunk/src/calibre/gui2/convert/rb_output.py:15 -#: /home/kovid/work/trunk/src/calibre/gui2/convert/txt_output.py:17 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_csv_xml.py:17 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:18 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/epub_output.py:16 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/fb2_output.py:15 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/lrf_output.py:20 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output.py:21 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdb_output.py:17 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdf_output.py:18 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/rb_output.py:15 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/txt_output.py:17 msgid "output" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/catalog/catalog_csv_xml_ui.py:37 -#: /home/kovid/work/trunk/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:68 -#: /home/kovid/work/trunk/src/calibre/gui2/catalog/catalog_tab_template_ui.py:27 -#: /home/kovid/work/trunk/src/calibre/gui2/convert/comic_input_ui.py:88 -#: /home/kovid/work/trunk/src/calibre/gui2/convert/debug_ui.py:49 -#: /home/kovid/work/trunk/src/calibre/gui2/convert/epub_output_ui.py:48 -#: /home/kovid/work/trunk/src/calibre/gui2/convert/fb2_input_ui.py:28 -#: /home/kovid/work/trunk/src/calibre/gui2/convert/fb2_output_ui.py:28 -#: /home/kovid/work/trunk/src/calibre/gui2/convert/look_and_feel_ui.py:119 -#: /home/kovid/work/trunk/src/calibre/gui2/convert/lrf_output_ui.py:115 -#: /home/kovid/work/trunk/src/calibre/gui2/convert/metadata_ui.py:166 -#: /home/kovid/work/trunk/src/calibre/gui2/convert/mobi_output_ui.py:66 -#: /home/kovid/work/trunk/src/calibre/gui2/convert/page_setup_ui.py:115 -#: /home/kovid/work/trunk/src/calibre/gui2/convert/pdb_input_ui.py:31 -#: /home/kovid/work/trunk/src/calibre/gui2/convert/pdb_output_ui.py:35 -#: /home/kovid/work/trunk/src/calibre/gui2/convert/pdf_input_ui.py:38 -#: /home/kovid/work/trunk/src/calibre/gui2/convert/pdf_output_ui.py:42 -#: /home/kovid/work/trunk/src/calibre/gui2/convert/rb_output_ui.py:28 -#: /home/kovid/work/trunk/src/calibre/gui2/convert/structure_detection_ui.py:59 -#: /home/kovid/work/trunk/src/calibre/gui2/convert/toc_ui.py:62 -#: /home/kovid/work/trunk/src/calibre/gui2/convert/txt_input_ui.py:42 -#: /home/kovid/work/trunk/src/calibre/gui2/convert/txt_output_ui.py:45 -#: /home/kovid/work/trunk/src/calibre/gui2/convert/xexp_edit_ui.py:49 -#: /home/kovid/work/trunk/src/calibre/gui2/convert/xpath_wizard_ui.py:67 -#: /home/kovid/work/trunk/src/calibre/gui2/device_drivers/configwidget_ui.py:74 -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/save_template_ui.py:41 -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/search_item_ui.py:35 -#: /home/kovid/work/trunk/src/calibre/gui2/filename_pattern_ui.py:106 -#: /home/kovid/work/trunk/src/calibre/gui2/wizard/send_email_ui.py:107 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_csv_xml_ui.py:37 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:68 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_tab_template_ui.py:27 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input_ui.py:88 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/debug_ui.py:49 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/epub_output_ui.py:48 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/fb2_input_ui.py:28 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/fb2_output_ui.py:28 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:119 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/lrf_output_ui.py:115 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:166 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output_ui.py:66 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/page_setup_ui.py:115 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdb_input_ui.py:31 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdb_output_ui.py:35 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdf_input_ui.py:38 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdf_output_ui.py:42 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/rb_output_ui.py:28 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/structure_detection_ui.py:59 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/toc_ui.py:62 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/txt_input_ui.py:45 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/txt_output_ui.py:45 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/xexp_edit_ui.py:49 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/xpath_wizard_ui.py:67 +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/configwidget_ui.py:74 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/save_template_ui.py:41 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_item_ui.py:35 +#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:106 +#: /home/kovid/work/calibre/src/calibre/gui2/wizard/send_email_ui.py:107 msgid "Form" msgstr "استمارة" -#: /home/kovid/work/trunk/src/calibre/gui2/catalog/catalog_csv_xml_ui.py:38 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_csv_xml_ui.py:38 msgid "Fields to include in output:" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/catalog/catalog_epub_mobi.py:17 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:17 msgid "E-book options" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/catalog/catalog_epub_mobi.py:20 -#: /home/kovid/work/trunk/src/calibre/library/catalog.py:282 -#: /home/kovid/work/trunk/src/calibre/library/database2.py:958 -#: /home/kovid/work/trunk/src/calibre/library/database2.py:976 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:20 +#: /home/kovid/work/calibre/src/calibre/library/catalog.py:222 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1247 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1265 msgid "Catalog" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:69 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:69 msgid "'Don't include this book' tag:" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:70 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:70 msgid "'Mark this book as read' tag:" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:71 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:71 msgid "Additional note tag prefix:" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:72 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:72 msgid "Regex pattern describing tags to exclude as genres:" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:73 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:73 msgid "" "Regex tips:\n" "- The default regex - \\[[\\w ]*\\] - excludes genre tags of the form [tag], " @@ -2738,135 +2930,135 @@ msgid "" "Genre Section" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:76 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:76 msgid "Include 'Titles' Section" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:77 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:77 msgid "Include 'Recently Added' Section" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:78 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:78 msgid "Sort numbers as text" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/catalog/catalog_tab_template_ui.py:28 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_tab_template_ui.py:28 msgid "Tab template for catalog.ui" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/bulk.py:36 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/bulk.py:36 msgid "" "For settings that cannot be specified in this dialog, use the values saved " "in a previous conversion (if they exist) instead of using the defaults " "specified in the Preferences" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/bulk.py:67 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/bulk.py:67 msgid "Bulk Convert" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/bulk.py:80 -#: /home/kovid/work/trunk/src/calibre/gui2/convert/single.py:185 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/bulk.py:80 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/single.py:185 msgid "Options specific to the output format." msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/comic_input.py:15 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input.py:15 msgid "Comic Input" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/comic_input.py:16 -#: /home/kovid/work/trunk/src/calibre/gui2/convert/fb2_input.py:13 -#: /home/kovid/work/trunk/src/calibre/gui2/convert/pdb_input.py:13 -#: /home/kovid/work/trunk/src/calibre/gui2/convert/pdf_input.py:13 -#: /home/kovid/work/trunk/src/calibre/gui2/convert/txt_input.py:13 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input.py:16 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/fb2_input.py:13 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdb_input.py:13 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdf_input.py:13 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/txt_input.py:13 msgid "input" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/comic_input_ui.py:89 -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/comicconf_ui.py:94 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input_ui.py:89 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf_ui.py:94 msgid "&Number of Colors:" msgstr "&عدد الألوان:" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/comic_input_ui.py:90 -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/comicconf_ui.py:96 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input_ui.py:90 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf_ui.py:96 msgid "Disable &normalize" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/comic_input_ui.py:91 -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/comicconf_ui.py:97 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input_ui.py:91 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf_ui.py:97 msgid "Keep &aspect ratio" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/comic_input_ui.py:92 -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/comicconf_ui.py:98 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input_ui.py:92 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf_ui.py:98 msgid "Disable &Sharpening" msgstr "تعطيل تشحيذ&" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/comic_input_ui.py:93 -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/comicconf_ui.py:104 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input_ui.py:93 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf_ui.py:104 msgid "Disable &Trimming" msgstr "تعطيل اقتصاص&" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/comic_input_ui.py:94 -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/comicconf_ui.py:103 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input_ui.py:94 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf_ui.py:103 msgid "&Wide" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/comic_input_ui.py:95 -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/comicconf_ui.py:99 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input_ui.py:95 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf_ui.py:99 msgid "&Landscape" msgstr "&عرضي" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/comic_input_ui.py:96 -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/comicconf_ui.py:101 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input_ui.py:96 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf_ui.py:101 msgid "&Right to left" msgstr "&يمين إلى يسار" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/comic_input_ui.py:97 -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/comicconf_ui.py:100 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input_ui.py:97 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf_ui.py:100 msgid "Don't so&rt" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/comic_input_ui.py:98 -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/comicconf_ui.py:102 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input_ui.py:98 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf_ui.py:102 msgid "De&speckle" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/comic_input_ui.py:99 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input_ui.py:99 msgid "&Disable comic processing" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/comic_input_ui.py:100 -#: /home/kovid/work/trunk/src/calibre/gui2/convert/single_ui.py:111 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input_ui.py:100 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/single_ui.py:111 msgid "&Output format:" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/comic_input_ui.py:101 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input_ui.py:101 msgid "Disable conversion of images to &black and white" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/debug.py:19 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/debug.py:19 msgid "Debug" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/debug.py:21 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/debug.py:21 msgid "Debug the conversion process." msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/debug.py:38 -#: /home/kovid/work/trunk/src/calibre/gui2/convert/debug_ui.py:51 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/debug.py:38 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/debug_ui.py:51 msgid "Choose debug folder" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/debug.py:57 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/debug.py:57 msgid "Invalid debug directory" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/debug.py:58 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/debug.py:58 msgid "Failed to create debug directory" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/debug_ui.py:50 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/debug_ui.py:50 msgid "" "Choose a folder to put the debug output into. If you specify a folder, " "calibre will place a lot of debug output into it. This will be useful in " @@ -2874,105 +3066,65 @@ msgid "" "conversion parameters like Table of Contents and Chapter Detection." msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/debug_ui.py:52 -#: /home/kovid/work/trunk/src/calibre/gui2/convert/debug_ui.py:53 -#: /home/kovid/work/trunk/src/calibre/gui2/convert/look_and_feel_ui.py:125 -#: /home/kovid/work/trunk/src/calibre/gui2/convert/metadata_ui.py:171 -#: /home/kovid/work/trunk/src/calibre/gui2/convert/xexp_edit_ui.py:52 -#: /home/kovid/work/trunk/src/calibre/gui2/device_drivers/configwidget_ui.py:76 -#: /home/kovid/work/trunk/src/calibre/gui2/device_drivers/configwidget_ui.py:77 -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/config_ui.py:507 -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/config_ui.py:521 -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/config_ui.py:522 -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/config_ui.py:538 -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/config_ui.py:539 -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/config_ui.py:574 -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/metadata_single_ui.py:359 -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/metadata_single_ui.py:364 -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/metadata_single_ui.py:378 -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/metadata_single_ui.py:389 -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/metadata_single_ui.py:391 -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/metadata_single_ui.py:393 -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/metadata_single_ui.py:398 -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/metadata_single_ui.py:400 -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/tag_editor_ui.py:126 -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/tag_editor_ui.py:128 -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/tag_editor_ui.py:131 -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/tag_editor_ui.py:135 -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/user_profiles_ui.py:267 -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/user_profiles_ui.py:269 -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/user_profiles_ui.py:270 -#: /home/kovid/work/trunk/src/calibre/gui2/main_ui.py:365 -#: /home/kovid/work/trunk/src/calibre/gui2/main_ui.py:367 -#: /home/kovid/work/trunk/src/calibre/gui2/main_ui.py:374 -#: /home/kovid/work/trunk/src/calibre/gui2/main_ui.py:377 -#: /home/kovid/work/trunk/src/calibre/gui2/main_ui.py:379 -#: /home/kovid/work/trunk/src/calibre/gui2/main_ui.py:381 -#: /home/kovid/work/trunk/src/calibre/gui2/shortcuts_ui.py:75 -#: /home/kovid/work/trunk/src/calibre/gui2/shortcuts_ui.py:80 -#: /home/kovid/work/trunk/src/calibre/gui2/viewer/main_ui.py:186 -msgid "..." -msgstr "..." - -#: /home/kovid/work/trunk/src/calibre/gui2/convert/debug_ui.py:54 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/debug_ui.py:54 msgid "" "The debug process outputs the intermediate HTML generated at various stages " "of the conversion process. This HTML can sometimes serve as a good starting " "point for hand editing a conversion." msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/epub_output.py:15 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/epub_output.py:15 msgid "EPUB Output" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/epub_output_ui.py:49 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/epub_output_ui.py:49 msgid "Do not &split on page breaks" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/epub_output_ui.py:50 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/epub_output_ui.py:50 msgid "No default &cover" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/epub_output_ui.py:51 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/epub_output_ui.py:51 msgid "No &SVG cover" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/epub_output_ui.py:52 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/epub_output_ui.py:52 msgid "Preserve cover &aspect ratio" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/epub_output_ui.py:53 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/epub_output_ui.py:53 msgid "Split files &larger than:" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/epub_output_ui.py:54 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/epub_output_ui.py:54 msgid " KB" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/fb2_input.py:12 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/fb2_input.py:12 msgid "FB2 Input" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/fb2_input_ui.py:29 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/fb2_input_ui.py:29 msgid "Do not insert a &Table of Contents at the beginning of the book." msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/fb2_output.py:14 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/fb2_output.py:14 msgid "FB2 Output" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/fb2_output_ui.py:29 -#: /home/kovid/work/trunk/src/calibre/gui2/convert/pdb_output_ui.py:37 -#: /home/kovid/work/trunk/src/calibre/gui2/convert/rb_output_ui.py:29 -#: /home/kovid/work/trunk/src/calibre/gui2/convert/txt_output_ui.py:47 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/fb2_output_ui.py:29 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdb_output_ui.py:37 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/rb_output_ui.py:29 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/txt_output_ui.py:47 msgid "&Inline TOC" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/font_key_ui.py:99 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/font_key_ui.py:99 msgid "Font rescaling wizard" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/font_key_ui.py:100 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/font_key_ui.py:100 msgid "" "

This wizard will help you choose an appropriate font size key for your " "needs. Just enter the base font size of the input document and then enter an " @@ -2988,292 +3140,292 @@ msgid "" "for a discussion of how font size rescaling works.

" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/font_key_ui.py:103 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/font_key_ui.py:103 msgid "&Output document" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/font_key_ui.py:104 -#: /home/kovid/work/trunk/src/calibre/gui2/convert/font_key_ui.py:109 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/font_key_ui.py:104 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/font_key_ui.py:109 msgid "&Base font size:" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/font_key_ui.py:105 -#: /home/kovid/work/trunk/src/calibre/gui2/convert/look_and_feel_ui.py:123 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/font_key_ui.py:105 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:123 msgid "Font size &key:" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/font_key_ui.py:106 -#: /home/kovid/work/trunk/src/calibre/gui2/convert/font_key_ui.py:110 -#: /home/kovid/work/trunk/src/calibre/gui2/convert/font_key_ui.py:112 -#: /home/kovid/work/trunk/src/calibre/gui2/convert/look_and_feel_ui.py:122 -#: /home/kovid/work/trunk/src/calibre/gui2/convert/look_and_feel_ui.py:127 -#: /home/kovid/work/trunk/src/calibre/gui2/convert/lrf_output_ui.py:118 -#: /home/kovid/work/trunk/src/calibre/gui2/convert/lrf_output_ui.py:120 -#: /home/kovid/work/trunk/src/calibre/gui2/convert/lrf_output_ui.py:125 -#: /home/kovid/work/trunk/src/calibre/gui2/convert/page_setup_ui.py:121 -#: /home/kovid/work/trunk/src/calibre/gui2/convert/page_setup_ui.py:123 -#: /home/kovid/work/trunk/src/calibre/gui2/convert/page_setup_ui.py:125 -#: /home/kovid/work/trunk/src/calibre/gui2/convert/page_setup_ui.py:127 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/font_key_ui.py:106 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/font_key_ui.py:110 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/font_key_ui.py:112 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:122 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:127 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/lrf_output_ui.py:118 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/lrf_output_ui.py:120 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/lrf_output_ui.py:125 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/page_setup_ui.py:121 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/page_setup_ui.py:123 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/page_setup_ui.py:125 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/page_setup_ui.py:127 msgid " pt" msgstr " pt" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/font_key_ui.py:107 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/font_key_ui.py:107 msgid "Use &default values" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/font_key_ui.py:108 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/font_key_ui.py:108 msgid "&Input document" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/font_key_ui.py:111 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/font_key_ui.py:111 msgid "&Font size: " msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/font_key_ui.py:113 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/font_key_ui.py:113 msgid " will map to size: " msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/font_key_ui.py:114 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/font_key_ui.py:114 msgid "0.0 pt" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/look_and_feel.py:16 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel.py:16 msgid "Look & Feel" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/look_and_feel.py:18 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel.py:18 msgid "Control the look and feel of the output" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/look_and_feel.py:30 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel.py:30 msgid "Original" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/look_and_feel.py:31 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel.py:31 msgid "Left align" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/look_and_feel.py:32 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel.py:32 msgid "Justify text" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/look_and_feel_ui.py:120 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:120 msgid "&Disable font size rescaling" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/look_and_feel_ui.py:121 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:121 msgid "Base &font size:" msgstr "حجم الخط& الأساسي:" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/look_and_feel_ui.py:124 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:124 msgid "Wizard to help you choose an appropriate font size key" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/look_and_feel_ui.py:126 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:126 msgid "Line &height:" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/look_and_feel_ui.py:128 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:128 msgid "Input character &encoding:" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/look_and_feel_ui.py:129 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:129 msgid "Remove &spacing between paragraphs" msgstr "حذف الفراغات& بين الفقرات" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/look_and_feel_ui.py:130 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:130 msgid "Indent size:" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/look_and_feel_ui.py:131 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:131 msgid "" "

When calibre removes inter paragraph spacing, it automatically sets a " "paragraph indent, to ensure that paragraphs can be easily distinguished. " "This option controls the width of that indent." msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/look_and_feel_ui.py:132 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:132 msgid " em" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/look_and_feel_ui.py:133 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:133 msgid "Text justification:" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/look_and_feel_ui.py:134 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:134 msgid "&Linearize tables" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/look_and_feel_ui.py:135 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:135 msgid "Extra &CSS" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/look_and_feel_ui.py:136 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:136 msgid "&Transliterate unicode characters to ASCII" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/look_and_feel_ui.py:137 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:137 msgid "Insert &blank line" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/look_and_feel_ui.py:138 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:138 msgid "Keep &ligatures" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/lrf_output.py:19 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/lrf_output.py:19 msgid "LRF Output" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/lrf_output_ui.py:116 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/lrf_output_ui.py:116 msgid "Enable &autorotation of wide images" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/lrf_output_ui.py:117 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/lrf_output_ui.py:117 msgid "&Wordspace:" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/lrf_output_ui.py:119 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/lrf_output_ui.py:119 msgid "Minimum para. &indent:" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/lrf_output_ui.py:121 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/lrf_output_ui.py:121 msgid "Render &tables as images" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/lrf_output_ui.py:122 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/lrf_output_ui.py:122 msgid "Text size multiplier for text in rendered tables:" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/lrf_output_ui.py:123 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/lrf_output_ui.py:123 msgid "Add &header" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/lrf_output_ui.py:124 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/lrf_output_ui.py:124 msgid "Header &separation:" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/lrf_output_ui.py:126 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/lrf_output_ui.py:126 msgid "Header &format:" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/lrf_output_ui.py:127 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/lrf_output_ui.py:127 msgid "&Embed fonts" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/lrf_output_ui.py:128 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/lrf_output_ui.py:128 msgid "&Serif font family:" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/lrf_output_ui.py:129 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/lrf_output_ui.py:129 msgid "S&ans-serif font family:" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/lrf_output_ui.py:130 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/lrf_output_ui.py:130 msgid "&Monospaced font family:" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/metadata.py:41 -#: /home/kovid/work/trunk/src/calibre/gui2/viewer/main.py:114 -#: /home/kovid/work/trunk/src/calibre/gui2/viewer/main_ui.py:195 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:41 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:114 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:195 msgid "Metadata" msgstr "ميتاداتا" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/metadata.py:43 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:43 msgid "" "Set the metadata. The output file will contain as much of this metadata as " "possible." msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/metadata.py:161 -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/metadata_single.py:99 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:161 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:101 msgid "Choose cover for " msgstr "إختار الغلاف لـ " -#: /home/kovid/work/trunk/src/calibre/gui2/convert/metadata.py:168 -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/metadata_single.py:106 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:168 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:108 msgid "Cannot read" msgstr "لا يمكن القراءة" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/metadata.py:169 -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/metadata_single.py:107 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:169 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:109 msgid "You do not have permission to read the file: " msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/metadata.py:177 -#: /home/kovid/work/trunk/src/calibre/gui2/convert/metadata.py:184 -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/metadata_single.py:115 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:177 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:184 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:117 msgid "Error reading file" msgstr "خطأ في قراءة الملف" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/metadata.py:178 -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/metadata_single.py:116 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:178 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:118 msgid "

There was an error reading from file:
" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/metadata.py:185 -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/metadata_single.py:124 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:185 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:126 msgid " is not a valid picture" msgstr " ليست صورة صالحة" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/metadata_ui.py:167 -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/metadata_single_ui.py:395 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:167 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:405 msgid "Book Cover" msgstr "غلاف الكتاب" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/metadata_ui.py:168 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:168 msgid "Use cover from &source file" msgstr "استخدم غلاف من المصدر&" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/metadata_ui.py:169 -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/metadata_single_ui.py:396 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:169 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:406 msgid "Change &cover image:" msgstr "تغيير صورة الغلاف&:" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/metadata_ui.py:170 -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/metadata_single_ui.py:397 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:170 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:407 msgid "Browse for an image to use as the cover of this book." msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/metadata_ui.py:172 -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/metadata_single_ui.py:356 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:172 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:366 msgid "&Title: " msgstr ":ال&عنوان " -#: /home/kovid/work/trunk/src/calibre/gui2/convert/metadata_ui.py:173 -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/metadata_single_ui.py:357 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:173 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:367 msgid "Change the title of this book" msgstr "تغيير عنوان هذا الكتاب" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/metadata_ui.py:174 -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/metadata_bulk_ui.py:145 -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/metadata_single_ui.py:360 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:174 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:158 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:370 msgid "&Author(s): " msgstr "ال&مؤلف: " -#: /home/kovid/work/trunk/src/calibre/gui2/convert/metadata_ui.py:175 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:175 msgid "Author So&rt:" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/metadata_ui.py:176 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:176 msgid "" "Change the author(s) of this book. Multiple authors should be separated by a " "comma" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/metadata_ui.py:177 -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/metadata_bulk_ui.py:154 -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/metadata_single_ui.py:369 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:177 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:167 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:379 msgid "&Publisher: " msgstr "&الناشر: " -#: /home/kovid/work/trunk/src/calibre/gui2/convert/metadata_ui.py:178 -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/metadata_single_ui.py:370 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:178 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:380 msgid "Ta&gs: " msgstr "الو&سوم: " -#: /home/kovid/work/trunk/src/calibre/gui2/convert/metadata_ui.py:179 -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/metadata_bulk_ui.py:156 -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/metadata_single_ui.py:371 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:179 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:169 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:381 msgid "" "Tags categorize the book. This is particularly useful while searching. " "

They can be any words or phrases, separated by commas." @@ -3281,441 +3433,445 @@ msgstr "" "الوسوم تصنّف الكتاب. هذا يفيد كثيراً في البحث.

ممكن تكون أي كلمة أو " "مجموعة كلمات، مفرقة بفاصلة." -#: /home/kovid/work/trunk/src/calibre/gui2/convert/metadata_ui.py:180 -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/metadata_bulk_ui.py:161 -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/metadata_single_ui.py:374 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:180 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:174 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:384 msgid "&Series:" msgstr "&سلسلات:" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/metadata_ui.py:181 -#: /home/kovid/work/trunk/src/calibre/gui2/convert/metadata_ui.py:182 -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/metadata_bulk_ui.py:162 -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/metadata_bulk_ui.py:163 -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/metadata_single_ui.py:375 -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/metadata_single_ui.py:376 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:181 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:182 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:175 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:176 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:385 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:386 msgid "List of known series. You can add new series." msgstr "قائمة السلسلات المعروفة. بإمكانك إضافة سلسلات جديدة." -#: /home/kovid/work/trunk/src/calibre/gui2/convert/metadata_ui.py:183 -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/metadata_single_ui.py:381 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:183 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:391 msgid "Book " msgstr "الكتاب " -#: /home/kovid/work/trunk/src/calibre/gui2/convert/mobi_output.py:20 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output.py:20 msgid "MOBI Output" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/mobi_output.py:42 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output.py:42 msgid "Default" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/mobi_output_ui.py:67 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output_ui.py:67 msgid "&Title for Table of Contents:" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/mobi_output_ui.py:68 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output_ui.py:68 msgid "Rescale images for &Palm devices" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/mobi_output_ui.py:69 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output_ui.py:69 msgid "Use author &sort for author" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/mobi_output_ui.py:70 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output_ui.py:70 msgid "Disable compression of the file contents" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/mobi_output_ui.py:71 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output_ui.py:71 msgid "Do not add Table of Contents to book" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/mobi_output_ui.py:72 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output_ui.py:72 msgid "Kindle options" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/mobi_output_ui.py:73 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output_ui.py:73 msgid "Periodical masthead font:" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/mobi_output_ui.py:74 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output_ui.py:74 msgid "Personal Doc tag:" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/page_setup.py:35 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/page_setup.py:35 msgid "Page Setup" msgstr "ضبط الصفحة" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/page_setup_ui.py:116 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/page_setup_ui.py:116 msgid "&Output profile:" msgstr "طور ال&خرج:" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/page_setup_ui.py:117 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/page_setup_ui.py:117 msgid "Profile description" msgstr "وصف الطور" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/page_setup_ui.py:118 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/page_setup_ui.py:118 msgid "&Input profile:" msgstr "طور ال&دخل" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/page_setup_ui.py:119 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/page_setup_ui.py:119 msgid "Margins" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/page_setup_ui.py:120 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/page_setup_ui.py:120 msgid "&Left:" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/page_setup_ui.py:122 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/page_setup_ui.py:122 msgid "&Top:" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/page_setup_ui.py:124 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/page_setup_ui.py:124 msgid "&Right:" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/page_setup_ui.py:126 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/page_setup_ui.py:126 msgid "&Bottom:" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/pdb_input.py:12 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdb_input.py:12 msgid "PDB Input" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/pdb_input_ui.py:32 -#: /home/kovid/work/trunk/src/calibre/gui2/convert/txt_input_ui.py:43 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdb_input_ui.py:32 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/txt_input_ui.py:46 msgid "Treat each &line as a paragraph" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/pdb_input_ui.py:33 -#: /home/kovid/work/trunk/src/calibre/gui2/convert/txt_input_ui.py:44 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdb_input_ui.py:33 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/txt_input_ui.py:47 msgid "Assume print formatting" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/pdb_output.py:16 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdb_output.py:16 msgid "PDB Output" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/pdb_output_ui.py:36 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdb_output_ui.py:36 msgid "&Format:" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/pdf_input.py:12 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdf_input.py:12 msgid "PDF Input" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/pdf_input_ui.py:39 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdf_input_ui.py:39 msgid "Line &Un-Wrapping Factor:" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/pdf_input_ui.py:40 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdf_input_ui.py:40 msgid "No &Images" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/pdf_output.py:17 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdf_output.py:17 msgid "PDF Output" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/pdf_output_ui.py:43 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdf_output_ui.py:43 msgid "&Paper Size:" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/pdf_output_ui.py:44 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdf_output_ui.py:44 msgid "&Orientation:" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/pdf_output_ui.py:45 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdf_output_ui.py:45 msgid "Preserve &aspect ratio of cover" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/rb_output.py:14 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/rb_output.py:14 msgid "RB Output" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/regex_builder.py:75 -#: /home/kovid/work/trunk/src/calibre/gui2/ui.py:2067 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/regex_builder.py:76 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2174 msgid "Choose the format to view" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/regex_builder.py:81 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/regex_builder.py:82 msgid "Cannot build regex using the GUI builder without a book." msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/regex_builder.py:81 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/regex_builder.py:82 msgid "No formats available" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/regex_builder.py:97 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/regex_builder.py:100 msgid "Open book" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/regex_builder_ui.py:52 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/regex_builder_ui.py:52 msgid "Regex Builder" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/regex_builder_ui.py:53 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/regex_builder_ui.py:53 msgid "Preview" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/regex_builder_ui.py:54 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/regex_builder_ui.py:54 msgid "Regex:" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/regex_builder_ui.py:55 -#: /home/kovid/work/trunk/src/calibre/gui2/filename_pattern_ui.py:117 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/regex_builder_ui.py:55 +#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:117 msgid "Test" msgstr "تجربة" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/single.py:171 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/single.py:171 msgid "Convert" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/single.py:196 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/single.py:196 msgid "Options specific to the input format." msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/single_ui.py:108 -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/book_info_ui.py:64 -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/comicconf_ui.py:91 -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/progress_ui.py:48 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/single_ui.py:108 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info_ui.py:64 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf_ui.py:91 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/progress_ui.py:48 msgid "Dialog" msgstr "حوار" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/single_ui.py:109 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/single_ui.py:109 msgid "&Input format:" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/single_ui.py:110 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/single_ui.py:110 msgid "Use &saved conversion settings for individual books" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/structure_detection.py:17 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/structure_detection.py:17 msgid "" "Structure\n" "Detection" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/structure_detection.py:19 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/structure_detection.py:19 msgid "" "Fine tune the detection of chapter headings and other document structure." msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/structure_detection.py:34 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/structure_detection.py:34 msgid "Detect chapters at (XPath expression):" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/structure_detection.py:35 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/structure_detection.py:35 msgid "Insert page breaks before (XPath expression):" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/structure_detection.py:37 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/structure_detection.py:37 msgid "Header regular expression:" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/structure_detection.py:40 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/structure_detection.py:40 msgid "Footer regular expression:" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/structure_detection.py:56 -#: /home/kovid/work/trunk/src/calibre/gui2/widgets.py:71 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/structure_detection.py:56 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:71 msgid "Invalid regular expression" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/structure_detection.py:57 -#: /home/kovid/work/trunk/src/calibre/gui2/widgets.py:72 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/structure_detection.py:57 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:72 msgid "Invalid regular expression: %s" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/structure_detection.py:62 -#: /home/kovid/work/trunk/src/calibre/gui2/convert/toc.py:38 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/structure_detection.py:62 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/toc.py:38 msgid "Invalid XPath" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/structure_detection.py:63 -#: /home/kovid/work/trunk/src/calibre/gui2/convert/toc.py:39 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/structure_detection.py:63 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/toc.py:39 msgid "The XPath expression %s is invalid." msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/structure_detection_ui.py:60 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/structure_detection_ui.py:60 msgid "Chapter &mark:" msgstr "ع&لامة الفصل:" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/structure_detection_ui.py:61 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/structure_detection_ui.py:61 msgid "Remove first &image" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/structure_detection_ui.py:62 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/structure_detection_ui.py:62 msgid "Insert &metadata as page at start of book" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/structure_detection_ui.py:63 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/structure_detection_ui.py:63 msgid "&Preprocess input file to possibly improve structure detection" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/structure_detection_ui.py:64 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/structure_detection_ui.py:64 msgid "Remove F&ooter" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/structure_detection_ui.py:65 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/structure_detection_ui.py:65 msgid "Remove H&eader" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/toc.py:16 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/toc.py:16 msgid "" "Table of\n" "Contents" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/toc.py:18 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/toc.py:18 msgid "Control the creation/conversion of the Table of Contents." msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/toc.py:29 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/toc.py:29 msgid "Level &1 TOC (XPath expression):" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/toc.py:30 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/toc.py:30 msgid "Level &2 TOC (XPath expression):" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/toc.py:31 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/toc.py:31 msgid "Level &3 TOC (XPath expression):" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/toc_ui.py:63 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/toc_ui.py:63 msgid "Do not add &detected chapters to the Table of Contents" msgstr "لا تضف فصول مك&شوفة إلى قائمة المحتويات" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/toc_ui.py:64 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/toc_ui.py:64 msgid "Number of &links to add to Table of Contents" msgstr "عدد الوصلات& لإضافتها لقائمة المحتويات" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/toc_ui.py:65 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/toc_ui.py:65 msgid "Chapter &threshold" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/toc_ui.py:66 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/toc_ui.py:66 msgid "&Force use of auto-generated Table of Contents" msgstr "ألزم& استخدام قائمة المحتويات المنشئة آلياً" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/toc_ui.py:67 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/toc_ui.py:67 msgid "TOC &Filter:" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/txt_input.py:12 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/txt_input.py:12 msgid "TXT Input" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/txt_input_ui.py:45 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/txt_input_ui.py:48 msgid "Process using markdown" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/txt_input_ui.py:46 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/txt_input_ui.py:49 msgid "" "

Markdown is a simple markup language for text files, that allows for " "advanced formatting. To learn more visit markdown." msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/txt_input_ui.py:47 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/txt_input_ui.py:50 msgid "Do not insert Table of Contents into output text when using markdown" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/txt_output.py:16 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/txt_input_ui.py:51 +msgid "Preserve &spaces" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/txt_output.py:16 msgid "TXT Output" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/txt_output_ui.py:46 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/txt_output_ui.py:46 msgid "&Line ending style:" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/txt_output_ui.py:48 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/txt_output_ui.py:48 msgid "&Maximum line length:" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/txt_output_ui.py:49 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/txt_output_ui.py:49 msgid "Force maximum line lenght" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/xexp_edit_ui.py:50 -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/book_info_ui.py:65 -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/book_info_ui.py:66 -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/choose_format_ui.py:41 -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/confirm_delete_ui.py:49 -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/password_ui.py:57 -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/progress_ui.py:49 -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/progress_ui.py:50 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/xexp_edit_ui.py:50 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info_ui.py:65 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info_ui.py:66 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_format_ui.py:41 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/confirm_delete_ui.py:49 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/password_ui.py:57 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/progress_ui.py:49 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/progress_ui.py:50 msgid "TextLabel" msgstr "تسمية النصّ" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/xexp_edit_ui.py:51 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/xexp_edit_ui.py:51 msgid "Use a wizard to help construct the XPath expression" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/xpath_wizard_ui.py:68 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/xpath_wizard_ui.py:68 msgid "Match HTML &tags with tag name:" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/xpath_wizard_ui.py:69 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/xpath_wizard_ui.py:69 msgid "*" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/xpath_wizard_ui.py:70 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/xpath_wizard_ui.py:70 msgid "a" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/xpath_wizard_ui.py:71 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/xpath_wizard_ui.py:71 msgid "br" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/xpath_wizard_ui.py:72 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/xpath_wizard_ui.py:72 msgid "div" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/xpath_wizard_ui.py:73 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/xpath_wizard_ui.py:73 msgid "h1" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/xpath_wizard_ui.py:74 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/xpath_wizard_ui.py:74 msgid "h2" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/xpath_wizard_ui.py:75 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/xpath_wizard_ui.py:75 msgid "h3" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/xpath_wizard_ui.py:76 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/xpath_wizard_ui.py:76 msgid "h4" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/xpath_wizard_ui.py:77 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/xpath_wizard_ui.py:77 msgid "h5" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/xpath_wizard_ui.py:78 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/xpath_wizard_ui.py:78 msgid "h6" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/xpath_wizard_ui.py:79 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/xpath_wizard_ui.py:79 msgid "hr" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/xpath_wizard_ui.py:80 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/xpath_wizard_ui.py:80 msgid "span" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/xpath_wizard_ui.py:81 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/xpath_wizard_ui.py:81 msgid "Having the &attribute:" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/xpath_wizard_ui.py:82 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/xpath_wizard_ui.py:82 msgid "With &value:" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/xpath_wizard_ui.py:83 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/xpath_wizard_ui.py:83 msgid "(A regular expression)" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/convert/xpath_wizard_ui.py:84 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/xpath_wizard_ui.py:84 msgid "" "

For example, to match all h2 tags that have class=\"chapter\", set tag to " "h2, attribute to class and value to " @@ -3725,354 +3881,415 @@ msgid "" "href=\"http://calibre-ebook.com/user_manual/xpath.html\">XPath Tutorial." msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/device.py:38 -#: /home/kovid/work/trunk/src/calibre/utils/ipc/job.py:135 +#: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:52 +#: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:77 +#: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:101 +#: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:132 +#: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:143 +#: /home/kovid/work/calibre/src/calibre/gui2/library/delegates.py:110 +#: /home/kovid/work/calibre/src/calibre/gui2/library/delegates.py:130 +#: /home/kovid/work/calibre/src/calibre/gui2/library/delegates.py:205 +#: /home/kovid/work/calibre/src/calibre/gui2/library/delegates.py:238 +#: /home/kovid/work/calibre/src/calibre/gui2/library/delegates.py:242 +msgid "Undefined" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:52 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_ct_column_ui.py:131 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_ct_column_ui.py:133 +msgid "Yes" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:52 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_ct_column_ui.py:132 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_ct_column_ui.py:134 +msgid "No" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:110 +msgid "star(s)" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:111 +msgid "Unrated" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:352 +msgid "Remove all tags" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:373 +msgid "tags to add" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:378 +msgid "tags to remove" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:39 +#: /home/kovid/work/calibre/src/calibre/utils/ipc/job.py:135 msgid "No details available." msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/device.py:120 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:138 msgid "Device no longer connected." msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/device.py:208 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:243 msgid "Get device information" msgstr "احصل على معلومات الجهاز" -#: /home/kovid/work/trunk/src/calibre/gui2/device.py:219 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:269 msgid "Get list of books on device" msgstr "احصل على قائمة الكتب على الجهاز" -#: /home/kovid/work/trunk/src/calibre/gui2/device.py:229 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:279 msgid "Get annotations from device" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/device.py:238 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:288 msgid "Send metadata to device" msgstr "ارسل الميتاداتا إلى الجهاز" -#: /home/kovid/work/trunk/src/calibre/gui2/device.py:247 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:297 msgid "Upload %d books to device" msgstr "رفع %d كتاب إلى الجهاز" -#: /home/kovid/work/trunk/src/calibre/gui2/device.py:262 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:312 msgid "Delete books from device" msgstr "حذف كتب من الجهاز" -#: /home/kovid/work/trunk/src/calibre/gui2/device.py:279 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:329 msgid "Download books from device" msgstr "تنزيل الكتب من الجهاز" -#: /home/kovid/work/trunk/src/calibre/gui2/device.py:289 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:339 msgid "View book on device" msgstr "عرض كتاب على الجهاز" -#: /home/kovid/work/trunk/src/calibre/gui2/device.py:296 -msgid "and delete from library" -msgstr "" - -#: /home/kovid/work/trunk/src/calibre/gui2/device.py:319 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:373 msgid "Set default send to device action" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/device.py:324 -#: /home/kovid/work/trunk/src/calibre/gui2/device.py:331 -#: /home/kovid/work/trunk/src/calibre/gui2/device.py:333 -#: /home/kovid/work/trunk/src/calibre/gui2/device.py:335 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:379 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:386 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:388 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:390 msgid "Email to" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/device.py:346 -#: /home/kovid/work/trunk/src/calibre/gui2/device.py:353 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:401 msgid "Send to main memory" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/device.py:348 -#: /home/kovid/work/trunk/src/calibre/gui2/device.py:355 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:403 msgid "Send to storage card A" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/device.py:350 -#: /home/kovid/work/trunk/src/calibre/gui2/device.py:357 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:405 msgid "Send to storage card B" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/device.py:360 -msgid "Send specific format to main memory" +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:410 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:419 +msgid "Main Memory" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/device.py:362 -msgid "Send specific format to storage card A" +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:412 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:421 +msgid "Storage Card A" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/device.py:364 -msgid "Send specific format to storage card B" +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:414 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:423 +msgid "Storage Card B" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/device.py:408 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:437 +msgid "Send and delete from library" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:438 +msgid "Send specific format" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:477 +msgid "Connect to folder" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:482 +msgid "Disconnect from folder" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:490 msgid "Fetch annotations (experimental)" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/device.py:518 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:600 msgid "selected to send" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/device.py:523 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:605 msgid "Choose format to send to device" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/device.py:530 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:613 msgid "No device" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/device.py:531 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:614 msgid "Cannot send: No device is connected" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/device.py:534 -#: /home/kovid/work/trunk/src/calibre/gui2/device.py:538 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:617 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:621 msgid "No card" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/device.py:535 -#: /home/kovid/work/trunk/src/calibre/gui2/device.py:539 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:618 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:622 msgid "Cannot send: Device has no storage card" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/device.py:581 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:664 msgid "E-book:" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/device.py:584 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:667 msgid "Attached, you will find the e-book" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/device.py:585 -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/__init__.py:177 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:668 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:180 msgid "by" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/device.py:586 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:669 msgid "in the %s format." msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/device.py:599 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:682 msgid "Sending email to" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/device.py:629 -#: /home/kovid/work/trunk/src/calibre/gui2/device.py:636 -#: /home/kovid/work/trunk/src/calibre/gui2/device.py:728 -#: /home/kovid/work/trunk/src/calibre/gui2/device.py:788 -#: /home/kovid/work/trunk/src/calibre/gui2/device.py:904 -#: /home/kovid/work/trunk/src/calibre/gui2/device.py:911 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:712 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:719 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:811 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:871 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:990 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:997 msgid "No suitable formats" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/device.py:630 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:713 msgid "Auto convert the following books before sending via email?" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/device.py:637 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:720 msgid "" "Could not email the following books as no suitable formats were found:" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/device.py:655 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:738 msgid "Failed to email books" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/device.py:656 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:739 msgid "Failed to email the following books:" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/device.py:660 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:743 msgid "Sent by email:" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/device.py:687 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:770 msgid "News:" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/device.py:688 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:771 msgid "Attached is the" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/device.py:699 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:782 msgid "Sent news to" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/device.py:729 -#: /home/kovid/work/trunk/src/calibre/gui2/device.py:789 -#: /home/kovid/work/trunk/src/calibre/gui2/device.py:905 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:812 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:872 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:991 msgid "Auto convert the following books before uploading to the device?" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/device.py:758 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:841 msgid "Sending catalogs to device." msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/device.py:819 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:902 msgid "Sending news to device." msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/device.py:873 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:957 msgid "Sending books to device." msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/device.py:912 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:998 msgid "" "Could not upload the following books to the device, as no suitable formats " "were found. Convert the book(s) to a format supported by your device first." msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/device.py:960 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1046 msgid "No space on device" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/device.py:961 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1047 msgid "" "

Cannot upload books to device there is no more free space available " msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/device_drivers/configwidget_ui.py:75 +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/configwidget_ui.py:75 msgid "Select available formats and their order for this device" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/device_drivers/configwidget_ui.py:79 +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/configwidget_ui.py:79 msgid "Use sub directories" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/device_drivers/configwidget_ui.py:81 +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/configwidget_ui.py:81 msgid "Save &template:" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/book_info.py:114 -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/book_info.py:115 -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/book_info.py:116 -#: /home/kovid/work/trunk/src/calibre/gui2/library.py:373 -#: /home/kovid/work/trunk/src/calibre/gui2/library.py:1101 -#: /home/kovid/work/trunk/src/calibre/gui2/status.py:93 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:114 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:115 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:116 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:292 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:991 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:102 msgid "Path" msgstr "المسار" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/book_info.py:117 -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/book_info.py:118 -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/book_info.py:119 -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/book_info.py:122 -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/__init__.py:216 -#: /home/kovid/work/trunk/src/calibre/gui2/library.py:372 -#: /home/kovid/work/trunk/src/calibre/gui2/status.py:94 -#: /home/kovid/work/trunk/src/calibre/gui2/tag_view.py:151 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:117 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:118 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:119 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:122 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:219 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:291 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:103 +#: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:91 msgid "Formats" msgstr "التهيئات" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/book_info_ui.py:68 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info_ui.py:68 msgid "Fit &cover to view" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/book_info_ui.py:69 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info_ui.py:69 msgid "&Previous" msgstr "ال&سابق" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/book_info_ui.py:70 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info_ui.py:70 msgid "&Next" msgstr "ال&تالي" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/catalog.py:38 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/catalog.py:38 msgid "My Books" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/catalog_ui.py:69 -#: /home/kovid/work/trunk/src/calibre/gui2/tools.py:287 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/catalog_ui.py:69 +#: /home/kovid/work/calibre/src/calibre/gui2/tools.py:287 msgid "Generate catalog" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/catalog_ui.py:70 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/catalog_ui.py:70 msgid "Generate catalog for {0} books" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/catalog_ui.py:71 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/catalog_ui.py:71 msgid "Catalog &format:" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/catalog_ui.py:72 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/catalog_ui.py:72 msgid "" "Catalog &title (existing catalog with the same title will be replaced):" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/catalog_ui.py:73 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/catalog_ui.py:73 msgid "&Send catalog to device automatically" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/catalog_ui.py:74 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/catalog_ui.py:74 msgid "Catalog options" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/choose_format_ui.py:40 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_format_ui.py:40 msgid "Choose Format" msgstr "إختيار التهيئة" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/comicconf.py:34 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf.py:33 msgid "Set defaults for conversion of comics (CBR/CBZ files)" msgstr "ضبط الإفتراضي في تحويل الرسومات (ملفات CBZ/CBR)" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/comicconf.py:49 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf.py:48 msgid "Set options for converting %s" msgstr "ضبط الخيارات لتحويل %s" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/comicconf_ui.py:92 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf_ui.py:92 msgid "&Title:" msgstr ":ال&عنوان" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/comicconf_ui.py:93 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf_ui.py:93 msgid "&Author(s):" msgstr "ال&مؤلف:" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/comicconf_ui.py:95 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf_ui.py:95 msgid "&Profile:" msgstr "&طور:" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/__init__.py:170 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comments_dialog_ui.py:41 +msgid "Edit Comments" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:173 msgid "%(plugin_type)s %(plugins)s" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/__init__.py:171 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:174 msgid "plugins" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/__init__.py:180 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:183 msgid "" "\n" "Customization: " msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/__init__.py:196 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:199 msgid "Conversion" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/__init__.py:196 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:199 msgid "General" msgstr "عام" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/__init__.py:196 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:199 msgid "Interface" msgstr "الواجهة" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/__init__.py:197 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:200 msgid "Add/Save" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/__init__.py:197 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:200 msgid "" "Email\n" "Delivery" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/__init__.py:198 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:201 msgid "Advanced" msgstr "متقدّم" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/__init__.py:198 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:201 msgid "" "Content\n" "Server" @@ -4080,164 +4297,191 @@ msgstr "" "محتوى\n" "خادم" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/__init__.py:198 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:201 msgid "Plugins" msgstr "الملحقات" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/__init__.py:216 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:219 msgid "Auto send" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/__init__.py:216 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:219 msgid "Email" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/__init__.py:221 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:224 msgid "Formats to email. The first matching format will be sent." msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/__init__.py:222 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:225 msgid "" "If checked, downloaded news will be automatically mailed
to this email " "address (provided it is in one of the listed formats)." msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/__init__.py:296 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:299 msgid "new email address" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/__init__.py:472 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:489 msgid "System port selected" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/__init__.py:473 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:490 msgid "" "The value %d you have chosen for the content server port is a system " "port. Your operating system may not allow the server to run on this " "port. To be safe choose a port number larger than 1024." msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/__init__.py:492 -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/__init__.py:837 -#: /home/kovid/work/trunk/src/calibre/gui2/ui.py:176 -#: /home/kovid/work/trunk/src/calibre/gui2/ui.py:1538 -#: /home/kovid/work/trunk/src/calibre/utils/ipc/job.py:53 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:509 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:930 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:190 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1641 +#: /home/kovid/work/calibre/src/calibre/utils/ipc/job.py:53 msgid "Error" msgstr "خطأ" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/__init__.py:493 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:510 msgid "Failed to install command line tools." msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/__init__.py:496 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:513 msgid "Command line tools installed" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/__init__.py:497 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:514 msgid "Command line tools installed in" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/__init__.py:498 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:515 msgid "" "If you move calibre.app, you have to re-install the command line tools." msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/__init__.py:549 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:566 msgid "No valid plugin path" msgstr "مسار الملحق غير صالح" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/__init__.py:550 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:567 msgid "%s is not a valid plugin path" msgstr "%s ليس مسار لملحق صالح" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/__init__.py:553 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:570 msgid "Choose plugin" msgstr "إختيار الملحق" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/__init__.py:565 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:582 msgid "Plugin cannot be disabled" msgstr "لا يمكن تعطيل الملحق" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/__init__.py:566 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:583 msgid "The plugin: %s cannot be disabled" msgstr "الملحق: %s لا يمكن تعطيله" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/__init__.py:575 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:592 msgid "Plugin not customizable" msgstr "لا يمكن تخصيص الملحق" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/__init__.py:576 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:593 msgid "Plugin: %s does not need customization" msgstr "الملحق: %s لا يحتاج التخصيص" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/__init__.py:584 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:601 msgid "Customize" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/__init__.py:622 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:639 msgid "Cannot remove builtin plugin" msgstr "لم يمكن حذف الملحق المضمن" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/__init__.py:623 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:640 msgid " cannot be removed. It is a builtin plugin. Try disabling it instead." msgstr " لا يمكن حذفه. هذا ملحق مضمن في البرنامج. حاول تعطيله بدلاً من حذفه." -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/__init__.py:656 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:671 +msgid "You must select a column to delete it" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:676 +msgid "The selected column is not a custom column" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:677 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/confirm_delete_ui.py:48 +msgid "Are you sure?" +msgstr "هل أنت متأكّد؟" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:678 +msgid "Do you really want to delete column %s and all its data?" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:745 msgid "Error log:" msgstr "سجل الأخطاء:" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/__init__.py:663 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:752 msgid "Access log:" msgstr "سجل النفاذ:" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/__init__.py:691 -#: /home/kovid/work/trunk/src/calibre/gui2/ui.py:701 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:780 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:767 msgid "Failed to start content server" msgstr "فشل في تشغيل خادم المحتوى" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/__init__.py:715 -#: /home/kovid/work/trunk/src/calibre/gui2/wizard/__init__.py:593 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:804 +#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:587 msgid "Select location for books" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/__init__.py:723 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:811 msgid "Invalid size" msgstr "حجم غير صالح" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/__init__.py:724 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:812 msgid "The size %s is invalid. must be of the form widthxheight" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/__init__.py:778 -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/__init__.py:783 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:865 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:870 msgid "Invalid database location" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/__init__.py:779 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:866 msgid "Invalid database location " msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/__init__.py:780 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:867 msgid "
Must be a directory." msgstr "
يجب أن يكون دليل." -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/__init__.py:784 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:871 msgid "Invalid database location.
Cannot write to " msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/__init__.py:818 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:876 +msgid "Must restart" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:877 +msgid "" +"The changes you made require that Calibre be restarted. Please restart as " +"soon as practical." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:911 msgid "Checking database integrity" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/__init__.py:838 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:931 msgid "Failed to check database integrity" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/__init__.py:843 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:936 msgid "Some inconsistencies found" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/__init__.py:844 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:937 msgid "" "The following books had formats listed in the database that are not actually " "available. The entries for the formats have been removed. You should check " @@ -4245,32 +4489,32 @@ msgid "" "folder directly." msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/add_save_ui.py:103 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/add_save_ui.py:103 msgid "TabWidget" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/add_save_ui.py:104 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/add_save_ui.py:104 msgid "" "Here you can control how calibre will read metadata from the files you add " "to it. calibre can either read metadata from the contents of the file, or " "from the filename." msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/add_save_ui.py:105 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/add_save_ui.py:105 msgid "Read metadata only from &file name" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/add_save_ui.py:106 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/add_save_ui.py:106 msgid "" "Swap the firstname and lastname of the author. This affects only metadata " "read from file names." msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/add_save_ui.py:107 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/add_save_ui.py:107 msgid "&Swap author firstname and lastname" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/add_save_ui.py:108 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/add_save_ui.py:108 msgid "" "If an existing book with a similar title and author is found that does not " "have the format being added, the format is added \n" @@ -4281,327 +4525,343 @@ msgid "" "punctuation, case, etc. Author match is exact." msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/add_save_ui.py:112 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/add_save_ui.py:112 msgid "" "If books with similar titles and authors found, &merge the new files " "automatically" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/add_save_ui.py:113 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/add_save_ui.py:113 msgid "&Configure metadata from file name" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/add_save_ui.py:114 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/add_save_ui.py:114 msgid "&Adding books" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/add_save_ui.py:115 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/add_save_ui.py:115 msgid "" "Here you can control how calibre will save your books when you click the " "Save to Disk button:" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/add_save_ui.py:116 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/add_save_ui.py:116 msgid "Save &cover separately" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/add_save_ui.py:117 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/add_save_ui.py:117 msgid "Update &metadata in saved copies" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/add_save_ui.py:118 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/add_save_ui.py:118 msgid "Save metadata in &OPF file" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/add_save_ui.py:119 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/add_save_ui.py:119 msgid "Convert non-English characters to &English equivalents" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/add_save_ui.py:120 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/add_save_ui.py:120 msgid "Format &dates as:" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/add_save_ui.py:121 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/add_save_ui.py:121 msgid "File &formats to save:" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/add_save_ui.py:122 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/add_save_ui.py:122 msgid "Replace space with &underscores" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/add_save_ui.py:123 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/add_save_ui.py:123 msgid "Change paths to &lowercase" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/add_save_ui.py:124 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/add_save_ui.py:124 msgid "&Saving books" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/add_save_ui.py:125 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/add_save_ui.py:125 msgid "" "Here you can control how calibre will save your books when you click the " "Send to Device button. This setting can be overriden for individual devices " "by customizing the device interface plugins in Preferences->Plugins" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/add_save_ui.py:126 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/add_save_ui.py:126 msgid "Sending to &device" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/config_ui.py:504 -#: /home/kovid/work/trunk/src/calibre/gui2/main_ui.py:409 -#: /home/kovid/work/trunk/src/calibre/gui2/viewer/main_ui.py:201 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:527 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:441 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:201 msgid "Preferences" msgstr "التفضيلات" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/config_ui.py:505 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:528 msgid "" "&Location of ebooks (The ebooks are stored in folders sorted by author and " "metadata is stored in the file metadata.db)" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/config_ui.py:506 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:529 msgid "Browse for the new database location" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/config_ui.py:508 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:531 msgid "Show notification when &new version is available" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/config_ui.py:509 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:532 msgid "Download &social metadata (tags/ratings/etc.) by default" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/config_ui.py:510 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:533 msgid "&Overwrite author and title by default when fetching metadata" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/config_ui.py:511 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:534 msgid "Default network &timeout:" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/config_ui.py:512 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:535 msgid "" "Set the default timeout for network fetches (i.e. anytime we go out to the " "internet to get information)" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/config_ui.py:513 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:536 msgid " seconds" msgstr " ثانية" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/config_ui.py:514 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:537 msgid "Choose &language (requires restart):" msgstr "إختر ال&لغة (يحتاج إعادة تشغيل):" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/config_ui.py:515 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:538 msgid "Normal" msgstr "عادي" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/config_ui.py:516 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:539 msgid "High" msgstr "مرتفع" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/config_ui.py:517 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:540 msgid "Low" msgstr "منخفض" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/config_ui.py:518 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:541 msgid "Job &priority:" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/config_ui.py:519 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:542 msgid "Preferred &output format:" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/config_ui.py:520 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:543 msgid "Preferred &input format order:" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/config_ui.py:523 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:546 msgid "Use &Roman numerals for series number" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/config_ui.py:524 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:547 msgid "Enable system &tray icon (needs restart)" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/config_ui.py:525 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:548 msgid "Show ¬ifications in system tray" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/config_ui.py:526 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:549 +msgid "Show &splash screen at startup" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:550 msgid "Show cover &browser in a separate window (needs restart)" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/config_ui.py:527 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:551 msgid "Search as you type" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/config_ui.py:528 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:552 msgid "Automatically send downloaded &news to ebook reader" msgstr "إرسال الأخبار& التي تم تنزيلها آلياً إلى قارئ الكتب الإلكترونية" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/config_ui.py:529 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:553 msgid "&Delete news from library when it is automatically sent to reader" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/config_ui.py:530 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:554 msgid "&Number of covers to show in browse mode (needs restart):" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/config_ui.py:531 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:555 msgid "Toolbar" msgstr "شريط الأدوات" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/config_ui.py:532 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:556 msgid "Large" msgstr "كبير" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/config_ui.py:533 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:557 msgid "Medium" msgstr "متوسط" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/config_ui.py:534 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:558 msgid "Small" msgstr "صغير" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/config_ui.py:535 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:559 msgid "&Button size in toolbar" msgstr "&حجم الأزرار على شريط الأدوات" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/config_ui.py:536 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:560 msgid "Show &text in toolbar buttons" msgstr "إظهار النص& على أزرار شريط الأدوات" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/config_ui.py:537 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:561 msgid "Select visible &columns in library view" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/config_ui.py:540 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:563 +msgid "Remove a user-defined column" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:565 +msgid "Add a user-defined column" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:567 +msgid "Edit settings of a user-defined column" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:570 msgid "Use internal &viewer for:" msgstr "استخدم المستعرض& الداخلي في:" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/config_ui.py:541 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:571 msgid "Add an email address to which to send books" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/config_ui.py:542 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:572 msgid "&Add email" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/config_ui.py:543 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:573 msgid "Make &default" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/config_ui.py:544 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:574 msgid "&Remove email" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/config_ui.py:545 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:575 msgid "" "calibre can send your books to you (or your reader) by email. Emails will be " "automatically sent for downloaded news to all email addresses that have Auto-" "send checked." msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/config_ui.py:546 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:576 msgid "&Maximum number of waiting worker processes (needs restart):" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/config_ui.py:547 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:577 msgid "&Check database integrity" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/config_ui.py:548 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:578 msgid "&Install command line tools" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/config_ui.py:549 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:579 msgid "Open calibre &configuration directory" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/config_ui.py:550 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:580 msgid "Limit the max. simultaneous jobs to the available CPU &cores" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/config_ui.py:551 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:581 msgid "Debug &device detection" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/config_ui.py:552 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:582 msgid "" "calibre contains a network server that allows you to access your book " "collection using a browser from anywhere in the world. Any changes to the " "settings will only take effect after a server restart." msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/config_ui.py:553 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:583 msgid "Server &port:" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/config_ui.py:554 -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/password_ui.py:58 -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/scheduler_ui.py:212 -#: /home/kovid/work/trunk/src/calibre/gui2/wizard/send_email_ui.py:117 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:584 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/password_ui.py:58 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:212 +#: /home/kovid/work/calibre/src/calibre/gui2/wizard/send_email_ui.py:117 msgid "&Username:" msgstr "&اسم المستخدم:" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/config_ui.py:555 -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/password_ui.py:59 -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/scheduler_ui.py:213 -#: /home/kovid/work/trunk/src/calibre/gui2/wizard/send_email_ui.py:119 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:585 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/password_ui.py:59 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:213 +#: /home/kovid/work/calibre/src/calibre/gui2/wizard/send_email_ui.py:119 msgid "&Password:" msgstr "&كلمة السرّ" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/config_ui.py:556 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:586 msgid "" "If you leave the password blank, anyone will be able to access your book " "collection using the web interface." msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/config_ui.py:557 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:587 msgid "" "The maximum size (widthxheight) for displayed covers. Larger covers are " "resized. " msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/config_ui.py:558 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:588 msgid "Max. &cover size:" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/config_ui.py:559 -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/password_ui.py:60 -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/scheduler_ui.py:214 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:589 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/password_ui.py:60 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:214 msgid "&Show password" msgstr "إظهار& كلمة السرّ" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/config_ui.py:560 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:590 msgid "Max. &OPDS items per query:" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/config_ui.py:561 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:591 msgid "&Start Server" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/config_ui.py:562 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:592 msgid "St&op Server" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/config_ui.py:563 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:593 msgid "&Test Server" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/config_ui.py:564 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:594 msgid "Run server &automatically on startup" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/config_ui.py:565 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:595 msgid "View &server logs" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/config_ui.py:566 -#: /home/kovid/work/trunk/src/calibre/gui2/wizard/stanza_ui.py:46 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:596 +#: /home/kovid/work/calibre/src/calibre/gui2/wizard/stanza_ui.py:46 msgid "" "

Remember to leave calibre running as the server only runs as long as " "calibre is running.\n" @@ -4611,121 +4871,234 @@ msgid "" "the IP address of the computer calibre is running on." msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/config_ui.py:568 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:598 msgid "" "Here you can customize the behavior of Calibre by controlling what plugins " "it uses." msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/config_ui.py:569 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:599 msgid "Enable/&Disable plugin" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/config_ui.py:570 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:600 msgid "&Customize plugin" msgstr "ت&خصيص الملحق" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/config_ui.py:571 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:601 msgid "&Remove plugin" msgstr "&حذف الملحق" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/config_ui.py:572 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:602 msgid "Add new plugin" msgstr "إضافة ملحق جديد" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/config_ui.py:573 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:603 msgid "Plugin &file:" msgstr "&ملف الملحق:" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/config_ui.py:575 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:605 msgid "&Add" msgstr "&إضافة" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/create_ct_column_ui.py:125 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_ct_column_ui.py:125 msgid "Create Tag-based Column" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/create_ct_column_ui.py:126 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_ct_column_ui.py:126 msgid "Lookup name" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/create_ct_column_ui.py:127 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_ct_column_ui.py:127 msgid "Column heading" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/create_ct_column_ui.py:128 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_ct_column_ui.py:128 msgid "Column type" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/create_ct_column_ui.py:129 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_ct_column_ui.py:129 msgid "Use brackets" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/create_ct_column_ui.py:130 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_ct_column_ui.py:130 msgid "Values can be edited" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/create_ct_column_ui.py:131 -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/create_ct_column_ui.py:133 -msgid "Yes" -msgstr "" - -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/create_ct_column_ui.py:132 -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/create_ct_column_ui.py:134 -msgid "No" -msgstr "" - -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/create_ct_column_ui.py:135 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_ct_column_ui.py:135 msgid "Text" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/create_ct_column_ui.py:136 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_ct_column_ui.py:136 msgid "Number" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/create_ct_column_ui.py:137 -#: /home/kovid/work/trunk/src/calibre/gui2/library.py:177 -#: /home/kovid/work/trunk/src/calibre/gui2/library.py:1162 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_ct_column_ui.py:137 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column.py:27 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:50 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:830 +#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:537 msgid "Date" msgstr "تاريخ" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/create_ct_column_ui.py:138 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_ct_column_ui.py:138 msgid "Tag on book" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/create_ct_column_ui.py:139 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_ct_column_ui.py:139 msgid "Explanation text added in create_ct_column.py" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/create_ct_column_ui.py:140 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_ct_column_ui.py:140 msgid "Create and edit tag-based columns" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/device_debug.py:21 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column.py:18 +msgid "Text, column shown in the tag browser" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column.py:21 +msgid "Comma separated text, like tags, shown in the tag browser" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column.py:24 +msgid "Long text, like comments, not shown in the tag browser" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column.py:29 +msgid "Floating point numbers" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column.py:31 +msgid "Integers" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column.py:33 +msgid "Ratings, shown with stars" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column.py:36 +msgid "Yes/No" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column.py:60 +msgid "No column selected" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column.py:61 +msgid "No column has been selected" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column.py:65 +msgid "Selected column is not a user-defined column" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column.py:96 +msgid "No lookup name was provided" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column.py:98 +msgid "" +"The label must contain only letters and digits, and start with a letter" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column.py:107 +msgid "No column heading was provided" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column.py:113 +msgid "The lookup name %s is already used" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column.py:123 +msgid "The heading %s is already used" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column.py:125 +msgid "" +"The lookup name must be lower case and cannot contain \":\"s or spaces" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column_ui.py:101 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column_ui.py:117 +msgid "Create or edit custom columns" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column_ui.py:102 +msgid "&Lookup name" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column_ui.py:103 +msgid "Column &heading" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column_ui.py:104 +msgid "" +"Used for searching the column. Must contain only digits and lower case " +"letters." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column_ui.py:105 +msgid "" +"Column heading in the library view and category name in the tag browser" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column_ui.py:106 +msgid "Column &type" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column_ui.py:107 +msgid "What kind of information will be kept in the column." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column_ui.py:108 +msgid "" +"

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

\n" +"

For example:\n" +"

    \n" +"
  • ddd, d MMM yyyy gives Mon, 5 Jan 2010
  • \n" +"
  • dd MMMM yy gives 05 January 10
  • \n" +"
" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column_ui.py:114 +msgid "Use MMM yyyy for month + year, yyyy for year only" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column_ui.py:115 +msgid "Default: dd MMM yyyy." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column_ui.py:116 +msgid "Format for &dates" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/device_debug.py:21 msgid "Getting debug information" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/device_debug.py:22 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/device_debug.py:22 msgid "Copy to &clipboard" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/device_debug.py:24 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/device_debug.py:24 msgid "Debug device detection" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/save_template.py:44 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/save_template.py:44 msgid "Invalid template" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/save_template.py:45 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/save_template.py:45 msgid "The template %s is invalid:" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/save_template_ui.py:42 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/save_template_ui.py:42 msgid "Save &template" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/save_template_ui.py:43 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/save_template_ui.py:43 msgid "" "By adjusting the template below, you can control what folders the files are " "saved in and what filenames they are given. You can use the / character to " @@ -4734,68 +5107,64 @@ msgid "" "by the empty string." msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/save_template_ui.py:44 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/save_template_ui.py:44 msgid "Available variables:" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/config/social.py:34 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/social.py:34 msgid "Downloading social metadata, please wait..." msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/confirm_delete_ui.py:48 -msgid "Are you sure?" -msgstr "هل أنت متأكّد؟" - -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/confirm_delete_ui.py:50 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/confirm_delete_ui.py:50 msgid "&Show this warning again" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/conversion_error_ui.py:42 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/conversion_error_ui.py:42 msgid "ERROR" msgstr "خطأ" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/fetch_metadata.py:63 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:63 msgid "Author Sort" msgstr "ترتيب المؤلف" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/fetch_metadata.py:65 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:65 msgid "ISBN" msgstr "ISBN" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/fetch_metadata.py:165 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:165 msgid "Finding metadata..." msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/fetch_metadata.py:179 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:179 msgid "Could not find metadata" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/fetch_metadata.py:180 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:180 msgid "The metadata download seems to have stalled. Try again later." msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/fetch_metadata.py:189 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:189 msgid "Warning" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/fetch_metadata.py:190 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:190 msgid "Could not fetch metadata from:" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/fetch_metadata.py:194 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:194 msgid "No metadata found" msgstr "لم يوجد ميتاداتا" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/fetch_metadata.py:195 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:195 msgid "" "No metadata found, try adjusting the title and author or the ISBN key." msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/fetch_metadata_ui.py:85 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata_ui.py:85 msgid "Fetch metadata" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/fetch_metadata_ui.py:86 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata_ui.py:86 msgid "" "

calibre can find metadata for your books from two locations: Google " "Books and isbndb.com.

To use isbndb.com you must sign up for a " @@ -4803,128 +5172,123 @@ msgid "" "below." msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/fetch_metadata_ui.py:87 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata_ui.py:87 msgid "&Access Key:" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/fetch_metadata_ui.py:88 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata_ui.py:88 msgid "Fetch" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/fetch_metadata_ui.py:89 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata_ui.py:89 msgid "Matches" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/fetch_metadata_ui.py:90 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata_ui.py:90 msgid "" "Select the book that most closely matches your copy from the list below" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/fetch_metadata_ui.py:91 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata_ui.py:91 msgid "Download &social metadata (tags/rating/etc.) for the selected book" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/fetch_metadata_ui.py:92 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata_ui.py:92 msgid "Overwrite author and title with author and title of selected book" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/job_view_ui.py:37 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/job_view_ui.py:37 msgid "Details of job" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/jobs_ui.py:44 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/jobs_ui.py:44 msgid "Active Jobs" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/jobs_ui.py:45 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/jobs_ui.py:45 msgid "&Stop selected job" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/jobs_ui.py:46 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/jobs_ui.py:46 msgid "Show job &details" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/jobs_ui.py:47 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/jobs_ui.py:47 msgid "Stop &all jobs" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/metadata_bulk.py:22 -msgid "Editing meta information for %d books" +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:24 +msgid "Editing meta information for %d books" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/metadata_bulk_ui.py:143 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:157 msgid "Edit Meta information" msgstr "تحرير معلومات الميتا" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/metadata_bulk_ui.py:144 -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/metadata_single_ui.py:355 -msgid "Meta information" -msgstr "معلومات الميتا" - -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/metadata_bulk_ui.py:146 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:159 msgid "A&utomatically set author sort" msgstr "ضبط& ترتيب المؤلف آلياً" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/metadata_bulk_ui.py:147 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:160 msgid "Author s&ort: " msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/metadata_bulk_ui.py:148 -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/metadata_single_ui.py:362 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:161 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:372 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/trunk/src/calibre/gui2/dialogs/metadata_bulk_ui.py:149 -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/metadata_single_ui.py:365 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:162 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:375 msgid "&Rating:" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/metadata_bulk_ui.py:150 -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/metadata_bulk_ui.py:151 -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/metadata_single_ui.py:366 -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/metadata_single_ui.py:367 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:163 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:164 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:376 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:377 msgid "Rating of this book. 0-5 stars" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/metadata_bulk_ui.py:152 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:165 msgid "No change" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/metadata_bulk_ui.py:153 -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/metadata_single_ui.py:368 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:166 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:378 msgid " stars" msgstr " نجمة" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/metadata_bulk_ui.py:155 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:168 msgid "Add ta&gs: " msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/metadata_bulk_ui.py:157 -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/metadata_bulk_ui.py:158 -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/metadata_single_ui.py:372 -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/metadata_single_ui.py:373 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:170 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:171 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:382 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:383 msgid "Open Tag Editor" msgstr "فتح محرر الوسوم" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/metadata_bulk_ui.py:159 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:172 msgid "&Remove tags:" msgstr "حذف& الوسوم:" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/metadata_bulk_ui.py:160 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:173 msgid "Comma separated list of tags to remove from the books. " msgstr "قائمة من الوسوم مفرقة بالفاصلة لحذفها من الكتب. " -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/metadata_bulk_ui.py:164 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:177 msgid "Remove &format:" msgstr "حذف الت&هيئة:" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/metadata_bulk_ui.py:165 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:178 msgid "&Swap title and author" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/metadata_bulk_ui.py:166 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:179 msgid "" "Selected books will be automatically numbered,\n" "in the order you selected them.\n" @@ -4932,460 +5296,586 @@ msgid "" "Book A will have series number 1 and Book B series number 2." msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/metadata_bulk_ui.py:170 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:183 msgid "Automatically number books in this series" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/metadata_single.py:123 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:184 +msgid "" +"Remove stored conversion settings for the selected books.\n" +"\n" +"Future conversion of these books will use the default settings." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:187 +msgid "Remove &stored conversion settings for the selected books" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:188 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:412 +msgid "&Basic metadata" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:189 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:413 +msgid "&Custom metadata" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:125 msgid "Not a valid picture" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/metadata_single.py:136 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:138 msgid "Choose formats for " msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/metadata_single.py:137 -#: /home/kovid/work/trunk/src/calibre/gui2/ui.py:1284 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:139 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1382 msgid "Books" msgstr "كتب" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/metadata_single.py:165 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:167 msgid "No permission" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/metadata_single.py:166 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:168 msgid "You do not have permission to read the following files:" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/metadata_single.py:193 -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/metadata_single.py:194 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:195 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:196 msgid "No format selected" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/metadata_single.py:205 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:207 msgid "Could not read metadata" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/metadata_single.py:206 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:208 msgid "Could not read metadata from %s format" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/metadata_single.py:254 -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/metadata_single.py:260 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:256 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:262 msgid "Could not read cover" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/metadata_single.py:255 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:257 msgid "Could not read cover from %s format" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/metadata_single.py:261 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:263 msgid "The cover in the %s format is invalid" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/metadata_single.py:298 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:300 msgid "Abort the editing of all remaining books" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/metadata_single.py:413 -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/metadata_single.py:418 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:442 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:447 msgid "This ISBN number is valid" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/metadata_single.py:421 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:450 msgid "This ISBN number is invalid" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/metadata_single.py:517 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:546 msgid "Downloading cover..." msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/metadata_single.py:529 -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/metadata_single.py:534 -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/metadata_single.py:540 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:558 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:563 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:569 msgid "Cannot fetch cover" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/metadata_single.py:530 -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/metadata_single.py:541 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:559 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:570 msgid "Could not fetch cover.
" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/metadata_single.py:531 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:560 msgid "The download timed out." msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/metadata_single.py:535 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:564 msgid "Could not find cover for this book. Try specifying the ISBN first." msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/metadata_single.py:547 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:576 msgid "Bad cover" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/metadata_single.py:548 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:577 msgid "The cover is not a valid picture" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/metadata_single.py:581 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:610 msgid "There were errors" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/metadata_single.py:582 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:611 msgid "There were errors downloading social metadata" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/metadata_single.py:611 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:640 msgid "Cannot fetch metadata" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/metadata_single.py:612 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:641 msgid "You must specify at least one of ISBN, Title, Authors or Publisher" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/metadata_single.py:681 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:712 msgid "Permission denied" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/metadata_single.py:682 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:713 msgid "Could not open %s. Is it being used by another program?" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/metadata_single_ui.py:354 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:364 msgid "Edit Meta Information" msgstr "تحرير معلومات الميتا" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/metadata_single_ui.py:358 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:365 +msgid "Meta information" +msgstr "معلومات الميتا" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:368 msgid "Swap the author and title" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/metadata_single_ui.py:361 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:371 msgid "Author S&ort: " msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/metadata_single_ui.py:363 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:373 msgid "" "Automatically create the author sort entry based on the current author entry" msgstr "ينشئ مدخل ترتيب المؤلف حسب مدخل المؤلف الحالي" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/metadata_single_ui.py:377 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:387 msgid "Remove unused series (Series that have no books)" msgstr "حذف سلسلات غير مستخدمة (سلسلات التي لا تحتوي على كتب)" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/metadata_single_ui.py:379 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:389 msgid "IS&BN:" msgstr "IS&BN:" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/metadata_single_ui.py:380 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:390 msgid "Publishe&d:" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/metadata_single_ui.py:383 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:393 msgid "dd MMM yyyy" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/metadata_single_ui.py:384 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:394 msgid "&Date:" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/metadata_single_ui.py:385 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:395 msgid "&Comments" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/metadata_single_ui.py:386 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:396 msgid "&Fetch metadata from server" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/metadata_single_ui.py:387 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:397 msgid "Available Formats" msgstr "التهيئات المتوفرة" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/metadata_single_ui.py:388 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:398 msgid "Add a new format for this book to the database" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/metadata_single_ui.py:390 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:400 msgid "Remove the selected formats for this book from the database." msgstr "حذف التهيئات المختارة لهذا الكتاب من قاعدة البيانات." -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/metadata_single_ui.py:392 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:402 msgid "Set the cover for the book from the selected format" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/metadata_single_ui.py:394 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:404 msgid "Update metadata from the metadata in the selected format" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/metadata_single_ui.py:399 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:409 msgid "Reset cover to default" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/metadata_single_ui.py:401 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:411 msgid "Download &cover" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/password_ui.py:56 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/password_ui.py:56 msgid "Password needed" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/progress.py:52 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/progress.py:52 msgid "Aborting..." msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/scheduler.py:120 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/saved_search_editor.py:54 +msgid "" +"The current saved search will be permanently deleted. Are you sure?" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/saved_search_editor_ui.py:83 +msgid "Saved Search Editor" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/saved_search_editor_ui.py:84 +msgid "Saved Search: " +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/saved_search_editor_ui.py:85 +msgid "Select a saved search to edit" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/saved_search_editor_ui.py:86 +msgid "Delete this selected saved search" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/saved_search_editor_ui.py:88 +msgid "Enter a new saved search name." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/saved_search_editor_ui.py:89 +msgid "Add the new saved search" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/saved_search_editor_ui.py:91 +msgid "Change the contents of the saved search" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:119 msgid "Need username and password" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/scheduler.py:121 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:120 msgid "You must provide a username and/or password to use this news source." msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/scheduler.py:172 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:171 msgid "Created by: " msgstr "أنشأه: " -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/scheduler.py:179 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:178 msgid "Last downloaded: never" msgstr "آخر تنزيل: لم ينزّل من قبل" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/scheduler.py:194 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:193 msgid "%d days, %d hours and %d minutes ago" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/scheduler.py:196 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:195 msgid "Last downloaded" msgstr "آخر تنزيل" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/scheduler.py:217 -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/scheduler_ui.py:192 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:216 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:192 msgid "Schedule news download" msgstr "جدولة تنزيل الأخبار" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/scheduler.py:220 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:219 msgid "Add a custom news source" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/scheduler.py:225 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:224 msgid "Download all scheduled new sources" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/scheduler.py:322 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:321 msgid "No internet connection" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/scheduler.py:323 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:322 msgid "Cannot download news as no internet connection is active" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/scheduler_ui.py:193 -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/user_profiles.py:278 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:193 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:278 msgid "Recipes" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/scheduler_ui.py:194 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:194 msgid "Download all scheduled recipes at once" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/scheduler_ui.py:195 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:195 msgid "Download &all scheduled" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/scheduler_ui.py:196 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:196 msgid "blurb" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/scheduler_ui.py:197 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:197 msgid "&Schedule for download:" msgstr "ج&دولة للتنزيل:" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/scheduler_ui.py:198 -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/scheduler_ui.py:208 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:198 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:208 msgid "Every " msgstr "كل " -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/scheduler_ui.py:199 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:199 msgid "day" msgstr "اليوم" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/scheduler_ui.py:200 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:200 msgid "Monday" msgstr "الأثنين" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/scheduler_ui.py:201 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:201 msgid "Tuesday" msgstr "الثلاثاء" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/scheduler_ui.py:202 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:202 msgid "Wednesday" msgstr "الأربعاء" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/scheduler_ui.py:203 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:203 msgid "Thursday" msgstr "الخميس" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/scheduler_ui.py:204 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:204 msgid "Friday" msgstr "الجمعة" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/scheduler_ui.py:205 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:205 msgid "Saturday" msgstr "السبت" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/scheduler_ui.py:206 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:206 msgid "Sunday" msgstr "الأحد" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/scheduler_ui.py:207 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:207 msgid "at" msgstr "في" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/scheduler_ui.py:209 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:209 msgid "" "Interval at which to download this recipe. A value of zero means that the " "recipe will be downloaded every hour." msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/scheduler_ui.py:210 -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/scheduler_ui.py:222 -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/user_profiles_ui.py:263 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:210 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:222 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:263 msgid " days" msgstr " يوم" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/scheduler_ui.py:211 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:211 msgid "&Account" msgstr "&حساب" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/scheduler_ui.py:215 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:215 msgid "For the scheduling to work, you must leave calibre running." msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/scheduler_ui.py:216 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:216 msgid "&Schedule" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/scheduler_ui.py:217 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:217 msgid "Add &title as tag" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/scheduler_ui.py:218 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:218 msgid "&Extra tags:" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/scheduler_ui.py:219 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:219 msgid "&Advanced" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/scheduler_ui.py:220 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:220 msgid "&Download now" msgstr "&تنزيل الآن" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/scheduler_ui.py:221 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:221 msgid "" "Delete downloaded news older than the specified number of days. Set to zero " "to disable." msgstr "" "حذف الأخبار المنزّلة التي أقدم من العدد المخصص من الأيام. اضبطه بـ0 لتعطيله." -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/scheduler_ui.py:223 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:223 msgid "Delete downloaded news older than " msgstr "حذف أخبار أقدم من " -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/search_item_ui.py:36 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_item_ui.py:36 msgid "contains" msgstr "يحتوي على" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/search_item_ui.py:37 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_item_ui.py:37 msgid "The text to search for. It is interpreted as a regular expression." msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/search_item_ui.py:38 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_item_ui.py:38 msgid "" "

Negate this match. That is, only return results that do not match " "this query." msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/search_item_ui.py:39 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_item_ui.py:39 msgid "Negate" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/search_ui.py:113 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_ui.py:113 msgid "Advanced Search" msgstr "بحث متقدم" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/search_ui.py:114 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_ui.py:114 msgid "Find entries that have..." msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/search_ui.py:115 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_ui.py:115 msgid "&All these words:" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/search_ui.py:116 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_ui.py:116 msgid "This exact &phrase:" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/search_ui.py:117 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_ui.py:117 msgid "&One or more of these words:" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/search_ui.py:118 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_ui.py:118 msgid "But dont show entries that have..." msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/search_ui.py:119 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_ui.py:119 msgid "Any of these &unwanted words:" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/search_ui.py:120 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_ui.py:120 msgid "What kind of match to use:" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/search_ui.py:121 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_ui.py:121 msgid "Contains: the word or phrase matches anywhere in the metadata" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/search_ui.py:122 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_ui.py:122 msgid "Equals: the word or phrase must match an entire metadata field" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/search_ui.py:123 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_ui.py:123 msgid "" "Regular expression: the expression must match anywhere in the metadata" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/search_ui.py:124 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_ui.py:124 msgid " " msgstr " " -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/search_ui.py:125 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_ui.py:125 msgid "" "See the User Manual for more help" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/select_formats.py:45 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/select_formats.py:45 msgid "Choose formats" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/tag_editor.py:66 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories.py:46 +#: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:72 +msgid "Authors" +msgstr "المؤلفون" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories.py:46 +#: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:101 +msgid "Publishers" +msgstr "الناشرون" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories.py:110 +msgid " (not on any book)" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories.py:162 +msgid "" +"The current tag category will be permanently deleted. Are you sure?" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories_ui.py:153 +msgid "User Categories Editor" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories_ui.py:154 +msgid "A&vailable items" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories_ui.py:155 +msgid "Apply tags to current tag category" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories_ui.py:157 +msgid "A&pplied items" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories_ui.py:158 +msgid "Unapply (remove) tag from current tag category" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories_ui.py:160 +msgid "Category name: " +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories_ui.py:161 +msgid "Select a category to edit" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories_ui.py:162 +msgid "Delete this selected tag category" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories_ui.py:164 +msgid "Enter a new category name. Select the kind before adding it." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories_ui.py:165 +msgid "Add the new category" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories_ui.py:167 +msgid "Category filter: " +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories_ui.py:168 +msgid "Select the content kind of the new category" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_editor.py:68 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor.py:93 msgid "Are your sure?" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/tag_editor.py:67 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_editor.py:69 msgid "" "The following tags are used by one or more books. Are you certain you want " "to delete them?" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/tag_editor_ui.py:123 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_editor_ui.py:123 msgid "Tag Editor" msgstr "محرر الوسوم" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/tag_editor_ui.py:124 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_editor_ui.py:124 msgid "A&vailable tags" msgstr "الوسوم المت&وفرة" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/tag_editor_ui.py:125 +#: /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." @@ -5393,23 +5883,23 @@ msgstr "" "حذف الوسم من قائمة البيانات. هذا سيحذف الوسم من الكتب وثم سيحذف الوسم تماماً " "من القاعدة." -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/tag_editor_ui.py:127 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_editor_ui.py:127 msgid "Apply tag to current book" msgstr "علّم الكتاب الحالي بالوسم" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/tag_editor_ui.py:129 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_editor_ui.py:129 msgid "A&pplied tags" msgstr "الوسوم الم&علّمة" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/tag_editor_ui.py:130 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_editor_ui.py:130 msgid "Unapply (remove) tag from current book" msgstr "حذف الوسم من الكتاب الحالي" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/tag_editor_ui.py:132 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_editor_ui.py:132 msgid "&Add tag:" msgstr "إض&افة وسم:" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/tag_editor_ui.py:133 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_editor_ui.py:133 msgid "" "If the tag you want is not in the available list, you can add it here. " "Accepts a comma separated list of tags." @@ -5417,135 +5907,195 @@ msgstr "" "إذا الوسم الذي تريده ليس متوفر، بإمكانك إضافته هنا. يقبل قائمة من الوسوم " "مفرّقة بفاصلات." -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/tag_editor_ui.py:134 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_editor_ui.py:134 msgid "Add tag to available tags and apply it to current book" msgstr "إضافة وسم إلى قائمة الوسوم المتوفرة وعلّم الكتاب الحالي به" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/test_email_ui.py:51 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor.py:60 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:429 +msgid "Item is blank" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor.py:61 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:430 +msgid "An item cannot be set to nothing. Delete it instead." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor.py:66 +msgid "Item already used" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor.py:67 +msgid "The item %s is already used." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor.py:79 +msgid "No item selected" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor.py:80 +msgid "You must select one item from the list of Available items." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor.py:89 +msgid "No items selected" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor.py:90 +msgid "You must select at least one items from the list." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor.py:94 +msgid "Are you certain you want to delete the following items?" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor_ui.py:71 +msgid "Category Editor" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor_ui.py:72 +msgid "Items in use" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor_ui.py:73 +msgid "" +"Delete item from database. This will unapply the item from all books and " +"then remove it from the database." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor_ui.py:75 +msgid "Rename the item in every book where it is used." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor_ui.py:77 +msgid "Ctrl+S" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/test_email_ui.py:51 msgid "Test email settings" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/test_email_ui.py:52 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/test_email_ui.py:52 msgid "Send test mail from %s to:" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/test_email_ui.py:53 -#: /home/kovid/work/trunk/src/calibre/gui2/filename_pattern_ui.py:115 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/test_email_ui.py:53 +#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:115 msgid "&Test" msgstr "&تجربة" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/user_profiles.py:127 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:127 msgid "No recipe selected" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/user_profiles.py:132 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:132 msgid "The attached file: %s is a recipe to download %s." msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/user_profiles.py:133 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:133 msgid "Recipe for " msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/user_profiles.py:150 -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/user_profiles.py:161 -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/user_profiles_ui.py:255 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:150 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:161 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:255 msgid "Switch to Advanced mode" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/user_profiles.py:156 -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/user_profiles.py:164 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:156 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:164 msgid "Switch to Basic mode" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/user_profiles.py:174 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:174 msgid "Feed must have a title" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/user_profiles.py:175 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:175 msgid "The feed must have a title" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/user_profiles.py:179 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:179 msgid "Feed must have a URL" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/user_profiles.py:180 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:180 msgid "The feed %s must have a URL" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/user_profiles.py:185 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:185 msgid "Already exists" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/user_profiles.py:186 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:186 msgid "This feed has already been added to the recipe" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/user_profiles.py:227 -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/user_profiles.py:236 -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/user_profiles.py:286 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:227 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:236 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:286 msgid "Invalid input" msgstr "دخل غير صالح" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/user_profiles.py:228 -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/user_profiles.py:237 -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/user_profiles.py:287 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:228 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:237 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:287 msgid "

Could not create recipe. Error:
%s" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/user_profiles.py:241 -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/user_profiles.py:263 -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/user_profiles.py:290 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:241 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:263 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:290 msgid "Replace recipe?" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/user_profiles.py:242 -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/user_profiles.py:264 -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/user_profiles.py:291 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:242 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:264 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:291 msgid "A custom recipe named %s already exists. Do you want to replace it?" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/user_profiles.py:257 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:257 msgid "Pick recipe" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/user_profiles.py:257 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:257 msgid "Pick the recipe to customize" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/user_profiles.py:277 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:277 msgid "Choose a recipe file" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/user_profiles_ui.py:248 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:248 msgid "Add custom news source" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/user_profiles_ui.py:249 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:249 msgid "Available user recipes" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/user_profiles_ui.py:250 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:250 msgid "Add/Update &recipe" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/user_profiles_ui.py:251 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:251 msgid "&Remove recipe" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/user_profiles_ui.py:252 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:252 msgid "&Share recipe" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/user_profiles_ui.py:253 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:253 msgid "Customize &builtin recipe" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/user_profiles_ui.py:254 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:254 msgid "&Load recipe from file" msgstr "" -#: /home/kovid/work/trunk/src/calibre/gui2/dialogs/user_profiles_ui.py:256 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:256 msgid "" "\n" "

Základní recept vytvoříte " -"tak, že do něj přidáte RSS zdroje.
Pro vetšinu zdrojů budete " -"musetpoužít \"rozšířený režim\" na další úpravy procesu " +"right:0px; -qt-block-indent:0; text-indent:0px;\">Základní zdroj vytvoříte " +"tak, že do něj přidáte RSS adresu zdroje.
Pro vetšinu zdrojů budete " +"muset použít \"rozšířený režim\" na další úpravy procesu " "stažení.

" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:260 msgid "Recipe &title:" -msgstr "&Název receptu:" +msgstr "&Název zdroje" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:261 msgid "&Oldest article:" @@ -5723,20 +6296,20 @@ msgstr "&Max. počet článků na zdroj:" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:265 msgid "Maximum number of articles to download per feed." -msgstr "Maximální počet článků, které sa mají stáhnout pro každý zdroj." +msgstr "Maximální počet článků, které se mají stáhnout pro každý zdroj." #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:266 msgid "Feeds in recipe" -msgstr "Zdroje v receptě" +msgstr "RSS zdroje" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:268 msgid "Remove feed from recipe" -msgstr "" +msgstr "Odstranit RSS adresu zdroje" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:271 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:274 msgid "Add feed to recipe" -msgstr "" +msgstr "Přidat RSS adresu zdroji" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:272 msgid "&Feed title:" @@ -5755,10 +6328,12 @@ msgid "" "For help with writing advanced news recipes, please visit User Recipes" msgstr "" +"Pro nápovědu s pokročilým zápisem zdrojů navštivte User Recipes" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:277 msgid "Recipe source code (python)" -msgstr "" +msgstr "Kód zdroje (python)" #: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:107 msgid "" @@ -5845,85 +6420,171 @@ msgstr "ISBN:" msgid "Regular expression (?P)" msgstr "Regulární výraz (?P)" -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:53 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:54 msgid "Job" msgstr "Úloha" -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:54 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:55 msgid "Status" msgstr "Stav" -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:55 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:56 msgid "Progress" msgstr "Průběh" -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:56 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:57 msgid "Running time" msgstr "Uplynulý čas" -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:68 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:69 msgid "There are %d running jobs:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:72 -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:79 -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:94 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:73 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:80 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:95 msgid "Unknown job" msgstr "Neznáma úloha" -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:75 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:76 msgid "There are %d waiting jobs:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:211 -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:214 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:212 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:215 msgid "Cannot kill job" msgstr "Nemůžu ukončit úlohu" -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:212 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:213 msgid "Cannot kill jobs that communicate with the device" msgstr "Není možné ukončit úlohy, které komunikují se zařízením" -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:215 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:216 msgid "Job has already run" msgstr "Úloha je již dokončená" -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:243 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:244 msgid "Unavailable" msgstr "Není k dispozici" -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:254 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:280 msgid " - Jobs" msgstr " - Úlohy" -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:176 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:1161 +#: /home/kovid/work/calibre/src/calibre/gui2/library/delegates.py:284 +msgid "N" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/library/delegates.py:284 +msgid "Y" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:47 +msgid "On Device" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:49 msgid "Size (MB)" msgstr "Velikost (MB)" -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:179 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:52 msgid "Rating" msgstr "Hodnocení" -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:365 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:371 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:376 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:285 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:291 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:296 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1003 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1007 #: /home/kovid/work/calibre/src/calibre/gui2/shortcuts.py:47 #: /home/kovid/work/calibre/src/calibre/gui2/shortcuts_ui.py:73 #: /home/kovid/work/calibre/src/calibre/gui2/shortcuts_ui.py:78 -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:440 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:414 msgid "None" msgstr "Žádné" -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:382 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:302 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1013 msgid "Book %s of %s." msgstr "Kniha %s z %s." -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:899 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:639 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1071 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:337 +msgid "The lookup/search name is \"{0}\"" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:830 +msgid "In Library" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:834 +msgid "Size" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:835 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:997 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:104 +msgid "Collections" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:993 +msgid "Format" +msgstr "Formát" + +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1053 +msgid "Marked for deletion" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1056 +msgid "Double click to edit me

" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:101 +msgid "Hide column %s" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:106 +msgid "Sort on %s" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:107 +msgid "Ascending" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:110 +msgid "Descending" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:122 +msgid "Change text alignment for %s" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:124 +msgid "Left" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:124 +msgid "Right" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:125 +msgid "Center" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:144 +msgid "Show column" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:156 +msgid "Restore default layout" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:475 msgid "Not allowed" msgstr "Nedovolené" -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:900 +#: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:476 msgid "" "Dropping onto a device is not supported. First add the book to the calibre " "library." @@ -5931,14 +6592,6 @@ msgstr "" "Přímý přenos knih do zařízení není možný, nejdříve musíte knihu přidat do " "knihovny calibre" -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:1100 -msgid "Format" -msgstr "Formát" - -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:1151 -msgid "Double click to edit me

" -msgstr "" - #: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/config_ui.py:47 msgid "Configure Viewer" msgstr "Nastavení prohlížeče" @@ -6013,273 +6666,298 @@ msgstr "Otevřít elektronickou knihu" msgid "Configure" msgstr "Nastavení" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:28 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:30 msgid "Use the library located at the specified path." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:30 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:32 msgid "Start minimized to system tray." msgstr "Spustit program minimalizovaný v systémové liště" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:32 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:34 msgid "Log debugging information to console" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:34 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:36 msgid "Do not check for updates" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:65 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:67 msgid "Choose a location for your calibre e-book library" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:74 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:76 msgid "Failed to create library" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:75 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:77 msgid "Failed to create calibre library at: %r. Aborting." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:145 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:132 +msgid "Initializing user interface..." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:157 msgid "Repairing failed" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:146 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:158 msgid "The database repair failed. Starting with a new empty library." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:150 -#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:594 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:162 +#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:595 msgid "Calibre Library" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:163 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:175 msgid "Choose a location for your new calibre e-book library" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:173 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:206 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:185 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:218 msgid "Bad database location" msgstr "Neplatné umístění databáze" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:174 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:186 msgid "Bad database location %r. calibre will now quit." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:187 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:199 msgid "Corrupted database" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:188 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:200 msgid "" "Your calibre database appears to be corrupted. Do you want calibre to try " "and repair it automatically? If you say No, a new empty calibre library will " "be created." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:194 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:206 msgid "" "Repairing database. This can take a very long time for a large collection" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:207 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:219 msgid "" "Bad database location %r. Will start with a new, empty calibre library" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:250 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:230 +msgid "Starting %s: Loading books..." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:275 msgid "If you are sure it is not running" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:252 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:277 msgid "Cannot Start " msgstr "Nemůžu spistit " -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:253 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:278 msgid "%s is already running." msgstr "%s je již spuštěno" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:256 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:281 msgid "may be running in the system tray, in the" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:258 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:283 msgid "upper right region of the screen." msgstr "pravá horní oblast obrazovky" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:260 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:285 msgid "lower right region of the screen." msgstr "pravý dolní okraj obrazovky" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:263 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:288 msgid "try rebooting your computer." msgstr "skuste restartovat počítač." -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:265 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:277 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:290 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:302 msgid "try deleting the file" msgstr "pokuste se vymazat smazat soubor" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:364 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:395 msgid "calibre" msgstr "calibre" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:366 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:397 +msgid "&Restrict to:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:398 +msgid "" +"Books display will be restricted to those matching the selected saved search" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:399 +msgid "set in ui.py" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:400 msgid "Advanced search" msgstr "Rozšířené vyhledávání" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:368 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:402 msgid "Alt+S" msgstr "Alt+S" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:369 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:403 msgid "&Search:" msgstr "&Hledat" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:370 -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:371 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:404 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:405 msgid "" "

Search the list of books by title, author, publisher, tags, comments, " "etc.

Words separated by spaces are ANDed" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:372 -msgid "set in ui.py" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:373 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:406 msgid "Reset Quick Search" msgstr "Zrušit rychlé vyhledávání" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:375 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:408 msgid "Choose saved search or enter name for new saved search" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:376 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:409 msgid "Copy current search text (instead of search name)" msgstr "Zkopírovat právě hledaný text (namísto hledání názvu)" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:378 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:411 msgid "Save current search under the name shown in the box" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:380 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:413 msgid "Delete current saved search" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:382 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:415 msgid "Sort by &popularity" msgstr "Setřídit podle &popularity" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:383 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:416 msgid "Match any" msgstr "Najít kterékoliv" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:384 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:417 msgid "Match all" msgstr "Porovnat vše" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:385 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:418 +msgid "Create, edit, and delete user categories" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:419 +msgid "Manage &user categories" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:420 msgid "Add books" msgstr "Přidat knihy" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:386 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:421 msgid "A" msgstr "A" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:387 -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:388 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:422 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:423 msgid "Remove books" msgstr "Odstranit knihy" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:389 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:424 msgid "Del" msgstr "Del" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:390 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:425 msgid "Edit meta information" msgstr "Upravit Metadata" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:391 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:426 msgid "E" msgstr "E" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:392 -msgid "Merge books" +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:427 +msgid "Merge book records" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:393 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:428 msgid "M" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:394 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:429 msgid "Send to device" msgstr "Odeslat do zařízení" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:395 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:347 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:430 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:355 msgid "Save to disk" msgstr "Uložit na disk" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:396 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:431 msgid "S" msgstr "S" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:397 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:432 msgid "Fetch news" msgstr "Stáhnout zprávy" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:398 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:433 msgid "F" msgstr "F" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:399 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:434 msgid "Convert E-books" msgstr "Převést knihy" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:400 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:435 msgid "C" msgstr "C" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:401 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:357 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:436 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:369 msgid "View" msgstr "Zobrazit" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:402 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:437 msgid "V" msgstr "V" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:403 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:438 msgid "Open containing folder" msgstr "Otevřít nadřazený adresář" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:404 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:439 msgid "Show book details" msgstr "Zobrazit podrobnosti o knize" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:405 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:440 msgid "Books by same author" msgstr "Knihy od stejného autora" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:406 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:441 msgid "Books in this series" msgstr "Knihy v této sérii" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:407 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:442 msgid "Books by this publisher" msgstr "Knihy od tohoto vydavatele" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:408 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:443 msgid "Books with the same tags" msgstr "Knihy se stejnými tagy" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:410 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:445 msgid "Configure calibre" msgstr "Nastavit calibre" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:411 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:446 msgid "Ctrl+P" msgstr "Ctrl+P" @@ -6311,11 +6989,15 @@ msgstr "Kniha nemá ani název ani ISBN" msgid "No matches found for this book" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/search_box.py:78 -#: /home/kovid/work/calibre/src/calibre/gui2/search_box.py:227 +#: /home/kovid/work/calibre/src/calibre/gui2/search_box.py:83 +#: /home/kovid/work/calibre/src/calibre/gui2/search_box.py:243 msgid "Search" msgstr "" +#: /home/kovid/work/calibre/src/calibre/gui2/search_box.py:297 +msgid "The selected search will be permanently deleted. Are you sure?" +msgstr "" + #: /home/kovid/work/calibre/src/calibre/gui2/shortcuts.py:58 msgid "Press a key..." msgstr "" @@ -6376,45 +7058,84 @@ msgstr "" msgid "&Alternate shortcut:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:154 +#: /home/kovid/work/calibre/src/calibre/gui2/sidebar.py:24 msgid "Jobs:" msgstr "Úlohy:" -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:163 +#: /home/kovid/work/calibre/src/calibre/gui2/sidebar.py:32 msgid "Click to see list of active jobs." msgstr "Kliknutím zobrazíte seznam aktivních úloh." -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:201 -msgid "Click to browse books by their covers" -msgstr "Kliknutím otevřete prohlížec obálek" - -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:201 -msgid "Click to turn off Cover Browsing" -msgstr "Kliknutím zavřete prohlížeč obálek" - -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:206 -msgid "" -"

Browsing books by their covers is disabled.
Import of pictureflow " -"module failed:
" +#: /home/kovid/work/calibre/src/calibre/gui2/sidebar.py:83 +msgid "Hide Book Details" msgstr "" -"

Prohlížec obálek je nedostupný.
Selhal import modulu pictureflow:
" -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:214 -msgid "Click to browse books by tags" -msgstr "Kliknutím spustíte přohlížení knih podle tagů" +#: /home/kovid/work/calibre/src/calibre/gui2/sidebar.py:83 +msgid "Show Book Details" +msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:151 -msgid "Authors" -msgstr "Autoři" +#: /home/kovid/work/calibre/src/calibre/gui2/sidebar.py:84 +msgid "Hide Tag Browser" +msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:151 -msgid "Publishers" -msgstr "Vydavatelé" +#: /home/kovid/work/calibre/src/calibre/gui2/sidebar.py:84 +msgid "Show Tag Browser" +msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:151 +#: /home/kovid/work/calibre/src/calibre/gui2/sidebar.py:85 +msgid "Hide Cover Browser" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/sidebar.py:85 +msgid "Show Cover Browser" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/sidebar.py:95 +msgid "Side bar" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/sidebar.py:135 +msgid "Cover browser could not be loaded: " +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:142 +msgid "Rename" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:147 +msgid "Hide category %s" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:150 +msgid "Show category" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:154 +msgid "Show all categories" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:161 +msgid "Manage " +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:165 +msgid "Manage Saved Searches" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:172 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:176 +msgid "Manage User Categories" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:329 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:238 msgid "Searches" msgstr "" +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:420 +msgid "The name %s is already used." +msgstr "" + #: /home/kovid/work/calibre/src/calibre/gui2/tools.py:63 #: /home/kovid/work/calibre/src/calibre/gui2/tools.py:182 msgid "Convert book %d of %d (%s)" @@ -6454,83 +7175,83 @@ msgid "" "reconvert them?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:67 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:70 msgid "Save single format to disk..." msgstr "Uložit jediný formát na disk..." -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:148 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:162 msgid "Search (For Advanced Search click the button to the left)" msgstr "Vyhledávání (pro rozšířené vyhledávání klikněte na tlačítko vlevo)" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:154 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:168 msgid "Saved Searches" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:177 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:191 msgid "Error communicating with device" msgstr "Cyba komunikace se zařízením" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:194 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:208 msgid "&Restore" msgstr "&Obnovit" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:196 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:210 msgid "&Donate to support calibre" msgstr "&Přispějte na vývoj calibre." -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:199 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:213 msgid "&Eject connected device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:204 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:218 msgid "&Restart" msgstr "&Restart" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:244 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:258 msgid "

For help see the: User Manual
" msgstr "

Nápovědu najdete: User Manual
" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:250 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:264 msgid "%s: %s by Kovid Goyal %%(version)s
%%(device)s

" msgstr "%s: %s by Kovid Goyal %%(version)s
%%(device)s

" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:273 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:281 msgid "Edit metadata individually" msgstr "Upravit metadata Individuálně" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:275 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:283 msgid "Edit metadata in bulk" msgstr "Upravit metadata dávkově" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:277 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:285 msgid "Download metadata and covers" msgstr "Stáhnout metadata a obálky" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:278 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:286 msgid "Download only metadata" msgstr "Stáhnout pouze metadata" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:279 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:287 msgid "Download only covers" msgstr "Stáhnout pouze obálky" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:280 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:288 msgid "Download only social metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:284 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:292 msgid "Merge into first selected book - delete others" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:286 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:294 msgid "Merge into first selected book - keep others" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:293 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:301 msgid "Add books from a single directory" msgstr "Přidat Knihy z jednoho adresáře" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:294 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:302 msgid "" "Add books from directories, including sub-directories (One book per " "directory, assumes every ebook file is the same book in a different format)" @@ -6539,7 +7260,7 @@ msgstr "" "adresář představuje jednu knihu a soubory v něm jsou různé formáty té samé " "knihy)" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:297 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:305 msgid "" "Add books from directories, including sub directories (Multiple books per " "directory, assumes every ebook file is a different book)" @@ -6547,94 +7268,106 @@ msgstr "" "Přidat knihy z adresárů, včetně podadresářů (vícero knih v jednom adresáři, " "předpokládá se že každý soubor představuje jednu knihu)" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:300 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:308 msgid "Add Empty book. (Book entry with no formats)" msgstr "Přidat prázdnou knihu. (Položka knihy bez žádných formátů)" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:348 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:356 msgid "Save to disk in a single directory" msgstr "Uložit na disk v jednom adresáři" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:349 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2172 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:357 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2299 msgid "Save only %s format to disk" msgstr "Uložit jen formát %s na disk" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:358 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:360 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2302 +msgid "Save only %s format to disk in a single directory" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:370 msgid "View specific format" msgstr "Zobrazit určitý formát" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:363 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:375 msgid "Remove selected books" msgstr "Smazat vybrané knihy" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:365 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:377 msgid "Remove files of a specific format from selected books.." msgstr "Odstranit soubory se zvoleným formátem z označených knih" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:367 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:379 msgid "Remove all formats from selected books, except..." msgstr "" "Odstranit všechny soubory se zvoleným formátem z označených knih, mimo..." -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:369 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:381 msgid "Remove covers from selected books" msgstr "Smazat obálku z označených knih" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:406 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:420 msgid "Convert individually" msgstr "Převést Individuálně" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:407 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:421 msgid "Bulk convert" msgstr "Převést dávkově" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:410 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:424 msgid "Create catalog of books in your calibre library" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:426 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:440 msgid "Run welcome wizard" msgstr "Spustit uvítacího průvodce" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:462 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:480 msgid "Similar books..." msgstr "Podobné knihy..." -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:553 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:564 msgid "Calibre Quick Start Guide" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:745 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:689 +msgid "Select folder to open as device" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:800 msgid "Browse by covers" msgstr "Prohlížet obálky" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:802 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:806 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:870 +msgid "({0} of {1})" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:875 msgid "(all books)" msgstr "Všechny knihy" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:811 -msgid "(%d found)" +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:877 +msgid "({0} of all)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:901 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1000 msgid "Device: " msgstr "Zařízení: " -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:903 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1002 msgid " detected." msgstr " nalezeno." -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:931 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1034 msgid "Connected " msgstr "Připojeno " -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:943 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1046 msgid "Device database corrupted" msgstr "Databáze zařízení je poškozená" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:944 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1047 msgid "" "\n" "

The database of books on the reader is corrupted. Try the " @@ -6662,148 +7395,148 @@ msgstr "" " \n" " " -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1003 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1180 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1110 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1287 msgid "Use library only" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1004 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1181 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1111 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1288 msgid "User annotations generated from main library only" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1011 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1492 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1549 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1587 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1608 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1734 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1799 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1917 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1118 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1604 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1661 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1699 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1720 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1850 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1915 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2033 msgid "No books selected" msgstr "Nejsou označeny žádné knihy" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1012 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1119 msgid "No books selected to fetch annotations from" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1037 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1144 msgid "Merging user annotations into database" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1065 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1172 msgid "%s
Last Page Read: %d (%d%%)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1071 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1178 msgid "%s
Last Page Read: Location %d (%d%%)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1090 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1197 msgid "Location %d • %s
%s
" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1099 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1206 msgid "Page %d • %s
" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1104 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1211 msgid "Location %d • %s
" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1224 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1331 msgid "How many empty books?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1225 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1332 msgid "How many empty books should be added?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1273 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1324 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1380 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1431 msgid "Uploading books to device." msgstr "Odesílám knihy do zařízení" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1285 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1392 msgid "EPUB Books" msgstr "EPUB knihy" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1286 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1393 msgid "LRF Books" msgstr "LRF knihy" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1287 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1394 msgid "HTML Books" msgstr "HTML knihy" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1288 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1395 msgid "LIT Books" msgstr "LIT knihy" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1289 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1396 msgid "MOBI Books" msgstr "MOBI knihy" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1290 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1397 msgid "Topaz books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1291 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1398 msgid "Text books" msgstr "TXT knihy" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1292 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1399 msgid "PDF Books" msgstr "PDF knihy" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1293 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1400 msgid "Comics" msgstr "Komiksy" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1294 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1401 msgid "Archives" msgstr "Archívy" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1298 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1405 msgid "Supported books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1333 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1440 msgid "Merged some books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1334 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1441 msgid "" "Some duplicates were found and merged into the following existing books:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1343 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1450 msgid "Failed to read metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1344 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1451 msgid "Failed to read metadata from the following" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1364 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1471 msgid "Cannot delete" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1367 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2061 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2077 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1474 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2177 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2202 msgid "No book selected" msgstr "Není označena žádná kniha" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1377 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1484 msgid "Choose formats to be deleted" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1395 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1502 msgid "Choose formats not to be deleted" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1433 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1540 msgid "" "The selected books will be permanently deleted and the files removed " "from your computer. Are you sure?" @@ -6811,57 +7544,63 @@ msgstr "" "Označené knihy budou trvale smazány a soubory budou odstraněny z " "vašeho počítače. Opravdu je chcete odstranit?" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1460 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1557 +msgid "" +"The selected books will be permanently deleted from your device. Are " +"you sure?" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1572 msgid "Deleting books from device." msgstr "Mažu knihy ze zařízení." -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1491 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1603 msgid "Cannot download metadata" msgstr "Nemůžu stáhnout metadata." -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1507 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1619 msgid "social metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1509 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1621 msgid "covers" msgstr "obálky" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1509 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1621 msgid "metadata" msgstr "metadata" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1511 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1623 msgid "Downloading %s for %d book(s)" msgstr "Stahuji %s pro %d knihu(y)" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1533 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1645 msgid "Failed to download some metadata" msgstr "Selhalo stahování některých metadat" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1534 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1646 msgid "Failed to download metadata for the following:" msgstr "Selhalo stahovaní metadat pro následující:" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1537 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1649 msgid "Failed to download metadata:" msgstr "Selhalo stahování metadat:" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1548 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1586 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1660 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1698 msgid "Cannot edit metadata" msgstr "Nemůžu upravit metadata" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1607 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1610 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1719 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1722 msgid "Cannot merge books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1611 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1723 msgid "At least two books must be selected for merging" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1615 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1727 msgid "" "All book formats and metadata from the selected books will be added to the " "first selected book.

The second and subsequently selected " @@ -6869,7 +7608,7 @@ msgid "" "proceed." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1626 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1738 msgid "" "All book formats and metadata from the selected books will be merged into " "the first selected book.

After merger the second and " @@ -6879,93 +7618,89 @@ msgid "" "from your computer.

Are you sure you want to proceed?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1638 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1750 msgid "" "You are about to merge more than 5 books. Are you sure you want to " "proceed?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1733 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1849 msgid "Cannot save to disk" msgstr "Chyba zápisu na disk" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1736 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1852 msgid "Choose destination directory" msgstr "Zvolte cílový adresář" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1769 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1885 msgid "Error while saving" msgstr "Chyba při ukládání" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1770 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1886 msgid "There was an error while saving." msgstr "Při ukládání nastala chyba." -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1777 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1778 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1893 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1894 msgid "Could not save some books" msgstr "Nemohu uložit některé knihy" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1779 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1895 msgid "Click the show details button to see which ones." msgstr "Klikněte na tlačítko zobrazit detaily pro zjištění které z nich." -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1800 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1916 msgid "No books selected to generate catalog for" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1817 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1933 msgid "Generating %s catalog..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1823 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1939 msgid "" "No books to catalog\n" "Check exclude tags" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1833 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1949 msgid "Catalog generated." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1836 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1952 msgid "Export Catalog Directory" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1837 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1953 msgid "Select destination for %s.%s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1851 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1967 msgid "Fetching news from " msgstr "Získávám zprávy z " -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1865 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1981 msgid " fetched." msgstr " získány." -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1916 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2032 msgid "Cannot convert" msgstr "Nemůžu převást" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1945 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2061 msgid "Starting conversion of %d book(s)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2061 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2114 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2177 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2235 msgid "Cannot view" msgstr "Nemůžu zobrazit" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2076 -msgid "Cannot open folder" -msgstr "Nemohu otevřít adresář" - -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2098 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2191 msgid "Multiple Books Selected" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2099 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2192 msgid "" "You are attempting to open %d books. Opening too many books at once can be " "slow and have a negative effect on the responsiveness of your computer. Once " @@ -6973,31 +7708,44 @@ msgid "" "continue?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2115 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2201 +msgid "Cannot open folder" +msgstr "Nemohu otevřít adresář" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2236 msgid "%s has no available formats." msgstr "%s není dostupná v žádném dostupném formátu." -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2156 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2277 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2282 msgid "Cannot configure" msgstr "Nemůžu nastavit" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2157 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2278 msgid "Cannot configure while there are running jobs." msgstr "Nastavení není možné změnit dokud neproběhne zpracování všech úloh" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2200 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2283 +msgid "Cannot configure before calibre is restarted." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2334 msgid "No detailed info available" msgstr "Bližší informace nejsou dostupné" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2201 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2335 msgid "No detailed information is available for books on the device." msgstr "Bližší informace o knihách v tomto zařízení nejsou dostupné" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2257 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2385 +msgid "Failed" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2391 msgid "Error talking to device" msgstr "Chyba komunikace se zařízením" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2258 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2392 msgid "" "There was a temporary error talking to the device. Please unplug and " "reconnect the device and or reboot." @@ -7005,53 +7753,53 @@ msgstr "" "Dočasná chyba komunikace se zařízením. Prosím odpojte a znovu připojte " "zařízení anebo restarujte počítač." -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2281 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2309 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2415 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2443 msgid "Conversion Error" msgstr "Chyba převodu" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2282 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2416 msgid "" "

Could not convert: %s

It is a DRMed book. You must " "first remove the DRM using third party tools." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2295 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2429 msgid "Recipe Disabled" -msgstr "" +msgstr "Zdroj zakázán" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2310 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2444 msgid "Failed" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2358 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2491 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/ui.py:2383 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2516 msgid "There are active jobs. Are you sure you want to quit?" msgstr "Prpbíha zpracování úloh. Opravdu chcete program ukončit?" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2386 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2519 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/ui.py:2390 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2523 msgid "WARNING: Active jobs" msgstr "UPOZORNĚNÍ: Probíhá zpracování úloh." -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2442 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2575 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/ui.py:2461 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2594 msgid "" "Latest version: %s" @@ -7059,11 +7807,11 @@ msgstr "" "Poslední verze: %s" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2469 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2602 msgid "Update available" msgstr "Aktualizace dostupná" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2470 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2603 msgid "" "%s has been updated to version %s. See the new features. Visit the download page?" @@ -7568,86 +8316,90 @@ msgid "" "available" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:234 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:233 msgid "Click to see the books available on your computer" msgstr "Klikněte pro zobrazení knih dostupných ve vašem počítači" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:235 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:236 msgid "Click to see the books in the main memory of your reader" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:236 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:237 msgid "Click to see the books on storage card A in your reader" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:237 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:238 msgid "Click to see the books on storage card B in your reader" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:530 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:246 +msgid "Books located at" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:504 msgid "Change Case" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:531 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:505 msgid "Upper Case" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:532 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:506 msgid "Lower Case" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:533 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:507 msgid "Swap Case" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:534 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:508 msgid "Title Case" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:366 +#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:367 msgid "" "If you use the WordPlayer e-book app on your Android phone, you can access " "your calibre book collection directly on the device. To do this you have to " "turn on the content server." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:370 +#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:371 msgid "" "Remember to leave calibre running as the server only runs as long as calibre " "is running." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:372 +#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:373 msgid "" "You have to add the URL http://myhostname:8080 as your calibre library in " "WordPlayer. Here myhostname should be the fully qualified hostname or the IP " "address of the computer calibre is running on." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:449 +#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:450 msgid "Moving library..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:465 #: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:466 +#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:467 msgid "Failed to move library" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:520 +#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:521 msgid "Invalid database" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:521 +#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:522 msgid "" "

An invalid library already exists at %s, delete it before trying to move " "the existing library.
Error: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:532 +#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:533 msgid "Could not move library" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:661 +#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:662 msgid "welcome wizard" msgstr "uvítací průvodce" @@ -7684,13 +8436,6 @@ msgstr "Výrobce" msgid "&Devices" msgstr "&Zařízení" -#: /home/kovid/work/calibre/src/calibre/gui2/wizard/finish_ui.py:45 -#: /home/kovid/work/calibre/src/calibre/gui2/wizard/kindle_ui.py:41 -#: /home/kovid/work/calibre/src/calibre/gui2/wizard/library_ui.py:49 -#: /home/kovid/work/calibre/src/calibre/gui2/wizard/stanza_ui.py:41 -msgid "WizardPage" -msgstr "" - #: /home/kovid/work/calibre/src/calibre/gui2/wizard/finish_ui.py:48 msgid "" "

Congratulations!

You have successfully setup calibre. Press the %s " @@ -7873,38 +8618,49 @@ msgstr "" msgid "Turn on the &content server" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/__init__.py:8 -msgid "Settings to control the calibre content server" +#: /home/kovid/work/calibre/src/calibre/library/caches.py:270 +msgid "today" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/__init__.py:12 -msgid "The port on which to listen. Default is %default" +#: /home/kovid/work/calibre/src/calibre/library/caches.py:273 +msgid "yesterday" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/__init__.py:14 -msgid "The server timeout in seconds. Default is %default" +#: /home/kovid/work/calibre/src/calibre/library/caches.py:276 +msgid "thismonth" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/__init__.py:16 -msgid "The max number of worker threads to use. Default is %default" +#: /home/kovid/work/calibre/src/calibre/library/caches.py:279 +#: /home/kovid/work/calibre/src/calibre/library/caches.py:280 +msgid "daysago" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/__init__.py:18 -msgid "Set a password to restrict access. By default access is unrestricted." +#: /home/kovid/work/calibre/src/calibre/library/caches.py:430 +#: /home/kovid/work/calibre/src/calibre/library/caches.py:440 +msgid "no" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/__init__.py:20 -msgid "Username for access. By default, it is: %default" +#: /home/kovid/work/calibre/src/calibre/library/caches.py:430 +#: /home/kovid/work/calibre/src/calibre/library/caches.py:440 +msgid "unchecked" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/__init__.py:24 -msgid "The maximum size for displayed covers. Default is %default." +#: /home/kovid/work/calibre/src/calibre/library/caches.py:433 +#: /home/kovid/work/calibre/src/calibre/library/caches.py:443 +msgid "checked" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/__init__.py:26 -msgid "" -"The maximum number of matches to return per OPDS query. This affects Stanza, " -"WordPlayer, etc. integration." +#: /home/kovid/work/calibre/src/calibre/library/caches.py:433 +#: /home/kovid/work/calibre/src/calibre/library/caches.py:443 +msgid "yes" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/caches.py:437 +msgid "blank" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/caches.py:437 +msgid "empty" msgstr "" #: /home/kovid/work/calibre/src/calibre/library/catalog.py:41 @@ -7924,14 +8680,14 @@ msgid "" "Applies to: CSV, XML output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalog.py:262 +#: /home/kovid/work/calibre/src/calibre/library/catalog.py:202 msgid "" "Title of generated catalog used as title in metadata.\n" "Default: '%default'\n" "Applies to: ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalog.py:269 +#: /home/kovid/work/calibre/src/calibre/library/catalog.py:209 msgid "" "Save the output from different stages of the conversion pipeline to the " "specified directory. Useful if you are unsure at which stage of the " @@ -7940,14 +8696,14 @@ msgid "" "Applies to: ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalog.py:279 +#: /home/kovid/work/calibre/src/calibre/library/catalog.py:219 msgid "" "Regex describing tags to exclude as genres.\n" "Default: '%default' excludes bracketed tags, e.g. '[]'\n" "Applies to: ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalog.py:285 +#: /home/kovid/work/calibre/src/calibre/library/catalog.py:225 msgid "" "Comma-separated list of tag words indicating book should be excluded from " "output. Case-insensitive.\n" @@ -7956,28 +8712,28 @@ msgid "" "Applies to: ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalog.py:293 +#: /home/kovid/work/calibre/src/calibre/library/catalog.py:233 msgid "" "Include 'Titles' section in catalog.\n" "Default: '%default'\n" "Applies to: ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalog.py:300 +#: /home/kovid/work/calibre/src/calibre/library/catalog.py:240 msgid "" "Include 'Recently Added' section in catalog.\n" "Default: '%default'\n" "Applies to: ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalog.py:307 +#: /home/kovid/work/calibre/src/calibre/library/catalog.py:247 msgid "" "Tag prefix for user notes, e.g. '*Jeff might enjoy reading this'.\n" "Default: '%default'\n" "Applies to: ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalog.py:314 +#: /home/kovid/work/calibre/src/calibre/library/catalog.py:254 msgid "" "Sort titles with leading numbers as text, e.g.,\n" "'2001: A Space Odyssey' sorts as \n" @@ -7986,7 +8742,7 @@ msgid "" "Applies to: ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalog.py:321 +#: /home/kovid/work/calibre/src/calibre/library/catalog.py:261 msgid "" "Specifies the output profile. In some cases, an output profile is required " "to optimize the catalog for the device. For example, 'kindle' or " @@ -7996,27 +8752,27 @@ msgid "" "Applies to: ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalog.py:328 +#: /home/kovid/work/calibre/src/calibre/library/catalog.py:268 msgid "" "Tag indicating book has been read.\n" "Default: '%default'\n" "Applies to: ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:122 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:41 msgid "" "Path to the calibre library. Default is to use the path stored in the " "settings." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:215 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:120 msgid "" "%prog list [options]\n" "\n" "List the books available in the calibre database.\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:223 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:128 msgid "" "The fields to display when listing books in the database. Should be a comma " "separated list of fields.\n" @@ -8025,61 +8781,55 @@ msgid "" "fields. Only has effect in the text output format." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:230 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:135 msgid "" "The field by which to sort the results.\n" "Available fields: %s\n" "Default: %%default" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:232 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:137 msgid "Sort results in ascending order" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:234 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:139 msgid "" "Filter the results by the search query. For the format of the search query, " "please see the search related documentation in the User Manual. Default is " "to do no filtering." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:236 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:141 msgid "" "The maximum width of a single line in the output. Defaults to detecting " "screen size." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:237 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:142 msgid "The string used to separate fields. Default is a space." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:238 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:143 msgid "" "The prefix for all file paths. Default is the absolute path to the library " "folder." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:241 -msgid "" -"The format in which to output the data. Available choices: %s. Defaults is " -"text." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/library/cli.py:263 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:165 msgid "Invalid fields. Available fields:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:270 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:172 msgid "Invalid sort field. Available fields:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:342 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:244 msgid "" "The following books were not added as they already exist in the database " "(see --duplicates option):" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:365 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:267 msgid "" "%prog add [options] file1 file2 file3 ...\n" "\n" @@ -8088,43 +8838,43 @@ msgid "" "the directory related options below.\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:374 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:276 msgid "" "Assume that each directory has only a single logical book and that all files " "in it are different e-book formats of that book" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:376 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:278 msgid "Process directories recursively" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:378 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:280 msgid "" "Add books to database even if they already exist. Comparison is done based " "on book titles." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:380 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:282 msgid "Add an empty book (a book with no formats)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:382 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:284 msgid "Set the title of the added empty book" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:384 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:286 msgid "Set the authors of the added empty book" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:386 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:288 msgid "Set the ISBN of the added empty book" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:411 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:313 msgid "You must specify at least one file to add" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:427 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:329 msgid "" "%prog remove ids\n" "\n" @@ -8133,11 +8883,11 @@ msgid "" "command). For example, 23,34,57-85\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:442 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:344 msgid "You must specify at least one book to remove" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:461 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:363 msgid "" "%prog add_format [options] id ebook_file\n" "\n" @@ -8146,15 +8896,15 @@ msgid "" "already exists, it is replaced.\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:476 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:378 msgid "You must specify an id and an ebook file" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:481 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:383 msgid "ebook file must have an extension" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:489 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:391 msgid "" "\n" "%prog remove_format [options] id fmt\n" @@ -8164,11 +8914,11 @@ msgid "" "EPUB. If the logical book does not have fmt available, do nothing.\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:506 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:408 msgid "You must specify an id and a format" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:524 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:426 msgid "" "\n" "%prog show_metadata [options] id\n" @@ -8178,15 +8928,15 @@ msgid "" "id is an id number from the list command.\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:532 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:434 msgid "Print metadata in OPF form (XML)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:541 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:443 msgid "You must specify an id" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:554 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:456 msgid "" "\n" "%prog set_metadata [options] id /path/to/metadata.opf\n" @@ -8199,11 +8949,11 @@ msgid "" "show_metadata command.\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:570 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:472 msgid "You must specify an id and a metadata file" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:590 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:492 msgid "" "%prog export [options] ids\n" "\n" @@ -8214,27 +8964,27 @@ msgid "" "an opf file). You can get id numbers from the list command.\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:598 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:500 msgid "Export all books in database, ignoring the list of ids." msgstr "Exportovat všechny knihy do databáze bez ohledu na ID." -#: /home/kovid/work/calibre/src/calibre/library/cli.py:600 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:502 msgid "Export books to the specified directory. Default is" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:602 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:504 msgid "Export all books into a single directory" msgstr "Exportovat všechny knihy do jednoho adresáře" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:609 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:511 msgid "Specifying this switch will turn this behavior off." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:632 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:534 msgid "You must specify some ids or the %s option" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:645 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:547 msgid "" "%prog add_custom_column [options] label name datatype\n" "\n" @@ -8245,23 +8995,23 @@ msgid "" "datatype is one of: {0}\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:654 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:556 msgid "" "This column stores tag like data (i.e. multiple comma separated values). " "Only applies if datatype is text." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:658 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:560 msgid "" "A dictionary of options to customize how the data in this column will be " "interpreted." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:671 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:573 msgid "You must specify label, name and datatype" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:729 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:631 msgid "" "\n" " %prog catalog /path/to/destination.(csv|epub|mobi|xml ...) [options]\n" @@ -8272,31 +9022,31 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:743 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:645 msgid "" "Comma-separated list of database IDs to catalog.\n" "If declared, --search is ignored.\n" "Default: all" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:747 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:649 msgid "" "Filter the results by the search query. For the format of the search query, " "please see the search-related documentation in the User Manual.\n" "Default: no filtering" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:753 -#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:494 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:655 +#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:503 msgid "Show detailed output information. Useful for debugging" msgstr "" "Zobrazit podrobné výstupní informace. Užitečné pro hledání chyb v programu" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:766 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:668 msgid "Error: You must specify a catalog output file" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:786 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:688 msgid "" "\n" " %prog set_custom [options] column id value\n" @@ -8308,17 +9058,17 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:797 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:699 msgid "" "If the column stores multiple values, append the specified values to the " "existing ones, instead of replacing them." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:808 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:710 msgid "Error: You must specify a field name, id and value" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:827 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:729 msgid "" "\n" " %prog custom_columns [options]\n" @@ -8327,19 +9077,19 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:834 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:736 msgid "Show details for each column." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:846 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:748 msgid "You will lose all data in the column: %r. Are you sure (y/n)? " msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:848 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:750 msgid "y" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:854 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:756 msgid "" "\n" " %prog remove_custom_column [options] label\n" @@ -8349,15 +9099,15 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:862 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:764 msgid "Do not ask for confirmation" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:872 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:774 msgid "Error: You must specify a column label" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:885 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:787 msgid "" "%%prog command [options] [arguments]\n" "\n" @@ -8369,30 +9119,46 @@ msgid "" "For help on an individual command: %%prog command --help\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1261 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:487 +msgid "Main" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/database2.py:489 +msgid "Card A" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/database2.py:491 +msgid "Card B" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1542 msgid "

Migrating old database to ebook library in %s

" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1290 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1571 msgid "Copying %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1307 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1588 msgid "Compacting database" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1400 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1681 msgid "Checking SQL integrity..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1438 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1720 msgid "Checking for missing files." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1460 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1742 msgid "Checked id" msgstr "" +#: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:111 +msgid "Ratings" +msgstr "" + #: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:24 msgid "The title" msgstr "" @@ -8515,25 +9281,106 @@ msgstr "" msgid "Requested formats not available" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server.py:379 +#: /home/kovid/work/calibre/src/calibre/library/server/__init__.py:21 +msgid "Settings to control the calibre content server" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/server/__init__.py:25 +msgid "The port on which to listen. Default is %default" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/server/__init__.py:27 +msgid "The server timeout in seconds. Default is %default" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/server/__init__.py:29 +msgid "The max number of worker threads to use. Default is %default" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/server/__init__.py:31 +msgid "Set a password to restrict access. By default access is unrestricted." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/server/__init__.py:33 +msgid "Username for access. By default, it is: %default" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/server/__init__.py:37 +msgid "The maximum size for displayed covers. Default is %default." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/server/__init__.py:39 +msgid "" +"The maximum number of matches to return per OPDS query. This affects Stanza, " +"WordPlayer, etc. integration." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/server/__init__.py:43 +msgid "" +"Group items in categories such as author/tags by first letter when there are " +"more than this number of items. Default: %default. Set to a large number to " +"disable grouping." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/server/base.py:93 msgid "Password to access your calibre library. Username is " msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server.py:886 +#: /home/kovid/work/calibre/src/calibre/library/server/main.py:28 msgid "" "[options]\n" "\n" "Start the calibre content server." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server.py:888 +#: /home/kovid/work/calibre/src/calibre/library/server/main.py:30 msgid "Path to the library folder to serve with the content server" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server.py:890 +#: /home/kovid/work/calibre/src/calibre/library/server/main.py:32 msgid "Write process PID to the specified file" msgstr "" +#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:112 +msgid "%d books" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:124 +msgid "%d items" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:141 +msgid "RATING: %s
" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:144 +msgid "TAGS: %s
" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:148 +msgid "SERIES: %s [%s]
" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:189 +msgid "Library" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:228 +msgid "Books in your library" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:234 +msgid "By " +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:235 +msgid "Books sorted by " +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:535 +msgid "Newest" +msgstr "" + #: /home/kovid/work/calibre/src/calibre/utils/config.py:48 msgid "%sUsage%s: %s\n" msgstr "" @@ -8548,58 +9395,62 @@ msgid "" "arguments in quotation marks." msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/config.py:650 +#: /home/kovid/work/calibre/src/calibre/utils/config.py:670 msgid "Path to the database in which books are stored" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/config.py:652 +#: /home/kovid/work/calibre/src/calibre/utils/config.py:672 msgid "Pattern to guess metadata from filenames" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/config.py:654 +#: /home/kovid/work/calibre/src/calibre/utils/config.py:674 msgid "Access key for isbndb.com" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/config.py:656 +#: /home/kovid/work/calibre/src/calibre/utils/config.py:676 msgid "Default timeout for network operations (seconds)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/config.py:658 +#: /home/kovid/work/calibre/src/calibre/utils/config.py:678 msgid "Path to directory in which your library of books is stored" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/config.py:660 +#: /home/kovid/work/calibre/src/calibre/utils/config.py:680 msgid "The language in which to display the user interface" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/config.py:662 +#: /home/kovid/work/calibre/src/calibre/utils/config.py:682 msgid "The default output format for ebook conversions." msgstr "Výchozí výstupní formát pro převod elektronické knihy." -#: /home/kovid/work/calibre/src/calibre/utils/config.py:666 +#: /home/kovid/work/calibre/src/calibre/utils/config.py:686 msgid "Ordered list of formats to prefer for input." msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/config.py:668 +#: /home/kovid/work/calibre/src/calibre/utils/config.py:688 msgid "Read metadata from files" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/config.py:670 +#: /home/kovid/work/calibre/src/calibre/utils/config.py:690 msgid "The priority of worker processes" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/config.py:672 +#: /home/kovid/work/calibre/src/calibre/utils/config.py:692 msgid "Swap author first and last names when reading metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/config.py:674 +#: /home/kovid/work/calibre/src/calibre/utils/config.py:694 msgid "Add new formats to existing book records" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/config.py:678 +#: /home/kovid/work/calibre/src/calibre/utils/config.py:699 msgid "List of named saved searches" msgstr "" +#: /home/kovid/work/calibre/src/calibre/utils/config.py:700 +msgid "User-created tag browser categories" +msgstr "" + #: /home/kovid/work/calibre/src/calibre/utils/ipc/job.py:43 msgid "Waiting..." msgstr "" @@ -8720,13 +9571,13 @@ msgstr "" msgid "Control email delivery" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:113 -#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:135 +#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:118 +#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:140 msgid "Unknown feed" msgstr "Neznámý zdroj" -#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:153 -#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:178 +#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:158 +#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:183 msgid "Untitled article" msgstr "" @@ -8757,93 +9608,93 @@ msgstr "" msgid "Unknown News Source" msgstr "Neznámý zdroj zpráv" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:565 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:595 msgid "The \"%s\" recipe needs a username and password." -msgstr "" +msgstr "\"%s\" zdroj musí obsahovat jméno a heslo." -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:654 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:692 msgid "Download finished" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:656 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:694 msgid "Failed to download the following articles:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:662 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:700 msgid "Failed to download parts of the following articles:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:664 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:702 msgid " from " msgstr " od " -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:666 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:704 msgid "\tFailed links:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:747 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:821 msgid "Could not fetch article. Run with -vv to see the reason" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:768 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:842 msgid "Fetching feeds..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:773 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:847 msgid "Got feeds from index page" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:779 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:853 msgid "Trying to download cover..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:781 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:855 msgid "Generating masthead..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:861 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:936 msgid "Starting download [%d thread(s)]..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:877 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:952 msgid "Feeds downloaded to %s" msgstr "Stáhnout zdroje z %s" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:887 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:962 msgid "Could not download cover: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:899 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:974 msgid "Downloading cover from %s" msgstr "Stahování obálky z %s" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:934 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:1009 msgid "Masthead image downloaded" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:1158 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:1205 msgid "Untitled Article" msgstr "Nepojmenovaný článek" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:1230 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:1276 msgid "Article downloaded: %s" msgstr "Článek stažen: %s" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:1241 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:1287 msgid "Article download failed: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:1258 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:1304 msgid "Fetching feed" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:1405 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:1451 msgid "" "Failed to log in, check your username and password for the calibre " "Periodicals service." msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:1421 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:1467 msgid "" "You do not have permission to download this issue. Either your subscription " "has expired or you have exceeded the maximum allowed downloads for today." @@ -8864,7 +9715,7 @@ msgstr "Naplánováno" msgid "Custom" msgstr "uživatelský" -#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:471 +#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:480 msgid "" "%prog URL\n" "\n" @@ -8874,18 +9725,18 @@ msgstr "" "\n" "Kde URL je například http://google.com" -#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:474 +#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:483 msgid "Base directory into which URL is saved. Default is %default" msgstr "" "Základní adresář, do kterého bude URL uloženo. Standardně je to %default" -#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:477 +#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:486 msgid "" "Timeout in seconds to wait for a response from the server. Default: %default " "s" msgstr "Časový limit čekání na odezvu ze serveru. Standardně: %default s" -#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:480 +#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:489 msgid "" "Maximum number of levels to recurse i.e. depth of links to follow. Default " "%default" @@ -8893,7 +9744,7 @@ msgstr "" "Maximání hloubka rekurze, t.j. počet úrovní odkazů, které se mají procházet. " "Standardně %default" -#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:483 +#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:492 msgid "" "The maximum number of files to download. This only applies to files from tags. Default is %default" @@ -8901,13 +9752,13 @@ msgstr "" "Maximální počet stahovaných souborů. Tato hodnota se vztahuje na soubory v " " tagách. Standardně %default" -#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:485 +#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:494 msgid "" "Minimum interval in seconds between consecutive fetches. Default is %default " "s" msgstr "Minimální interval stahování v sekundách. Standatně %default s" -#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:487 +#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:496 msgid "" "The character encoding for the websites you are trying to download. The " "default is to try and guess the encoding." @@ -8915,7 +9766,7 @@ msgstr "" "Kódování znaků použité na webových stránkách, které chcete stáhnout. " "Vevýchozím nastavení se program pokusí rozeznat kódování automaticky." -#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:489 +#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:498 msgid "" "Only links that match this regular expression will be followed. This option " "can be specified multiple times, in which case as long as a link matches any " @@ -8926,7 +9777,7 @@ msgstr "" "se shodují minimálně s jedním výrazem. Standardně budou následovány všechny " "odkazy." -#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:491 +#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:500 msgid "" "Any link that matches this regular expression will be ignored. This option " "can be specified multiple times, in which case as long as any regexp matches " @@ -8940,7 +9791,7 @@ msgstr "" "odkazy. V případě, že jsou použity obě mořnosti, --filter-regexp i --match-" "regexp bude --filter-regexp aplikován jako první." -#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:493 +#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:502 msgid "Do not download CSS stylesheets." msgstr "Nestahovat kaskádové styly." @@ -10021,6 +10872,9 @@ msgstr "Nestahovat kaskádové styly." #~ msgid "James Ralston" #~ msgstr "James Ralston" +#~ msgid "and delete from library" +#~ msgstr "a smazat z knihovny" + #~ msgid "" #~ "

For help visit %s.kovidgoyal.net
" @@ -10028,6 +10882,18 @@ msgstr "Nestahovat kaskádové styly." #~ "

Pro další nápovědu nevštivte %s.kovidgoyal.net
" +#~ msgid "Click to browse books by their covers" +#~ msgstr "Kliknutím otevřete prohlížec obálek" + +#~ msgid "Click to browse books by tags" +#~ msgstr "Kliknutím spustíte přohlížení knih podle tagů" + +#~ msgid "" +#~ "

Browsing books by their covers is disabled.
Import of pictureflow " +#~ "module failed:
" +#~ msgstr "" +#~ "

Prohlížec obálek je nedostupný.
Selhal import modulu pictureflow:
" + #~ msgid "You must set a username and password for %s" #~ msgstr "Pro %s musíte zadat přístupové jméno a heslo" @@ -10061,5 +10927,23 @@ msgstr "Nestahovat kaskádové styly." #~ msgid "Communicate with the Sony PRS-300/505 eBook reader." #~ msgstr "Komunikace s zařízením Sony PRS-300/505." +#~ msgid "Send specific format to storage card B" +#~ msgstr "Odeslat určitý formát na paměťovou kartu B" + +#~ msgid "Send specific format to storage card A" +#~ msgstr "Odeslat určitý formát na paměťovou kartu A" + +#~ msgid "Send specific format to main memory" +#~ msgstr "Odeslat určitý formát do hlavní paměti" + #~ msgid "&Transliterate unicode characters to ASCII." #~ msgstr "Překódova&t znaky unicode do ASCII." + +#~ msgid "Communicate with the Sony PRS-600/700/900 eBook reader." +#~ msgstr "Komunikace se zařízením Sony PRS-600/700/900." + +#~ msgid "Communicate with the Sony PRS-300/505/500 eBook reader." +#~ msgstr "Komunikace se zařízením Sony PRS-300/505/500." + +#~ msgid "Click to turn off Cover Browsing" +#~ msgstr "Kliknutím zavřete prohlížeč obálek" diff --git a/src/calibre/translations/es.po b/src/calibre/translations/es.po index f4b717ee34..4ab8207300 100644 --- a/src/calibre/translations/es.po +++ b/src/calibre/translations/es.po @@ -17,7 +17,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2010-06-07 03:40+0000\n" +"X-Launchpad-Export-Date: 2010-06-08 03:39+0000\n" "X-Generator: Launchpad (build Unknown)\n" #: /home/kovid/work/calibre/src/calibre/customize/profiles.py:318 diff --git a/src/calibre/translations/fr.po b/src/calibre/translations/fr.po index 6ab56d500b..a15a096ef3 100644 --- a/src/calibre/translations/fr.po +++ b/src/calibre/translations/fr.po @@ -7,13 +7,13 @@ msgstr "" "Project-Id-Version: calibre 0.4.22\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2010-06-06 21:03+0000\n" -"PO-Revision-Date: 2010-06-06 18:42+0000\n" +"PO-Revision-Date: 2010-06-07 22:04+0000\n" "Last-Translator: sengian \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: 2010-06-07 03:39+0000\n" +"X-Launchpad-Export-Date: 2010-06-08 03:38+0000\n" "X-Generator: Launchpad (build Unknown)\n" "X-Poedit-Bookmarks: 1177,-1,-1,-1,-1,-1,-1,-1,-1,-1\n" "Generated-By: pygettext.py 1.5\n" @@ -3170,7 +3170,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/add_wizard/welcome_ui.py:63 msgid "&Root folder:" -msgstr "&Dossier racine" +msgstr "Dossier &Racine" #: /home/kovid/work/calibre/src/calibre/gui2/add_wizard/welcome_ui.py:64 msgid "" @@ -3248,7 +3248,7 @@ msgstr "" msgid "" "&Multiple books per folder, assumes every ebook file is a different book" msgstr "" -"&Livres multiples dans un dossier, suppose que chaque livre électronique est " +"Livres &Multiples dans un dossier, suppose que chaque livre électronique est " "un livre différent" #: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_csv_xml.py:16 @@ -3430,12 +3430,12 @@ msgstr "Conserver les &proportions" #: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input_ui.py:92 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf_ui.py:98 msgid "Disable &Sharpening" -msgstr "Désactive &Sharpening" +msgstr "Désactive &Accentuation" #: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input_ui.py:93 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf_ui.py:104 msgid "Disable &Trimming" -msgstr "Désactive &Trimming" +msgstr "Désactive le &Decoupage" #: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input_ui.py:94 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf_ui.py:103 @@ -3469,11 +3469,11 @@ msgstr "&Désactiver le traitement des bandes dessinées" #: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input_ui.py:100 #: /home/kovid/work/calibre/src/calibre/gui2/convert/single_ui.py:111 msgid "&Output format:" -msgstr "Format de &sortie:" +msgstr "Format de s&ortie:" #: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input_ui.py:101 msgid "Disable conversion of images to &black and white" -msgstr "Désactiver la conversion en noir et blanc des images" +msgstr "Désactiver la conversion en noir et &blanc des images" #: /home/kovid/work/calibre/src/calibre/gui2/convert/debug.py:19 msgid "Debug" @@ -3529,7 +3529,7 @@ msgstr "Ne pas diviser sur les pages de &séparations" #: /home/kovid/work/calibre/src/calibre/gui2/convert/epub_output_ui.py:50 msgid "No default &cover" -msgstr "Pas de couverture par défaut" +msgstr "Pas de &couverture par défaut" #: /home/kovid/work/calibre/src/calibre/gui2/convert/epub_output_ui.py:51 msgid "No &SVG cover" @@ -3564,7 +3564,7 @@ msgstr "Sortie FB2" #: /home/kovid/work/calibre/src/calibre/gui2/convert/rb_output_ui.py:29 #: /home/kovid/work/calibre/src/calibre/gui2/convert/txt_output_ui.py:47 msgid "&Inline TOC" -msgstr "TDM intégrée" +msgstr "TDM &intégrée" #: /home/kovid/work/calibre/src/calibre/gui2/convert/font_key_ui.py:99 msgid "Font rescaling wizard" @@ -3601,7 +3601,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/convert/font_key_ui.py:103 msgid "&Output document" -msgstr "Document en sortie" +msgstr "D&ocument en sortie" #: /home/kovid/work/calibre/src/calibre/gui2/convert/font_key_ui.py:104 #: /home/kovid/work/calibre/src/calibre/gui2/convert/font_key_ui.py:109 @@ -3630,15 +3630,15 @@ msgstr " pt" #: /home/kovid/work/calibre/src/calibre/gui2/convert/font_key_ui.py:107 msgid "Use &default values" -msgstr "Utiliser les valeurs par défaut" +msgstr "Utiliser les valeurs par &défaut" #: /home/kovid/work/calibre/src/calibre/gui2/convert/font_key_ui.py:108 msgid "&Input document" -msgstr "Document en entrée" +msgstr "Document en &entrée" #: /home/kovid/work/calibre/src/calibre/gui2/convert/font_key_ui.py:111 msgid "&Font size: " -msgstr "Taille de la police: " +msgstr "Taille de la &police: " #: /home/kovid/work/calibre/src/calibre/gui2/convert/font_key_ui.py:113 msgid " will map to size: " @@ -3650,7 +3650,7 @@ msgstr "0,0 pt" #: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel.py:16 msgid "Look & Feel" -msgstr "Présentation" +msgstr "&Présentation" #: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel.py:18 msgid "Control the look and feel of the output" @@ -3728,11 +3728,11 @@ msgstr "&Translittérer les caractères unicode en représentation ASCII" #: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:137 msgid "Insert &blank line" -msgstr "Insérer une ligne blanche" +msgstr "Insérer une ligne &blanche" #: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:138 msgid "Keep &ligatures" -msgstr "Conserver les ligatures" +msgstr "Conserver les &ligatures" #: /home/kovid/work/calibre/src/calibre/gui2/convert/lrf_output.py:19 msgid "LRF Output" @@ -3760,7 +3760,7 @@ msgstr "Multiplicateur de la taille du texte dans le rendu des tables:" #: /home/kovid/work/calibre/src/calibre/gui2/convert/lrf_output_ui.py:123 msgid "Add &header" -msgstr "Ajouter un en-tête" +msgstr "Ajouter un &en-tête" #: /home/kovid/work/calibre/src/calibre/gui2/convert/lrf_output_ui.py:124 msgid "Header &separation:" @@ -3784,7 +3784,7 @@ msgstr "Famille de police S&ans-serif:" #: /home/kovid/work/calibre/src/calibre/gui2/convert/lrf_output_ui.py:130 msgid "&Monospaced font family:" -msgstr "Famille de police monospace:" +msgstr "Famille de police &Monospace:" #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:41 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:114 @@ -3864,11 +3864,11 @@ msgstr "Modifie le titre du livre" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:158 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:370 msgid "&Author(s): " -msgstr "&Auteurs : " +msgstr "&Auteur(s): " #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:175 msgid "Author So&rt:" -msgstr "T&ri de l'auteur :" +msgstr "T&ri de l'auteur:" #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:176 msgid "" @@ -3882,12 +3882,12 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:167 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:379 msgid "&Publisher: " -msgstr "&Editeur : " +msgstr "&Editeur: " #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:178 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:380 msgid "Ta&gs: " -msgstr "Ta&gs : " +msgstr "Eti&quettes: " #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:179 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:169 @@ -3904,7 +3904,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:174 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:384 msgid "&Series:" -msgstr "&Séries :" +msgstr "&Séries:" #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:181 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:182 @@ -3934,7 +3934,7 @@ msgstr "&Titre de la Table des Matières:" #: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output_ui.py:68 msgid "Rescale images for &Palm devices" -msgstr "Redimensionner les images pour des appareils Palm" +msgstr "Redimensionner les images pour des appareils &Palm" #: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output_ui.py:69 msgid "Use author &sort for author" @@ -3966,7 +3966,7 @@ msgstr "Mise en page" #: /home/kovid/work/calibre/src/calibre/gui2/convert/page_setup_ui.py:116 msgid "&Output profile:" -msgstr "Profil de &sortie :" +msgstr "Profil de &sortie:" #: /home/kovid/work/calibre/src/calibre/gui2/convert/page_setup_ui.py:117 msgid "Profile description" @@ -3982,19 +3982,19 @@ msgstr "Marges" #: /home/kovid/work/calibre/src/calibre/gui2/convert/page_setup_ui.py:120 msgid "&Left:" -msgstr "&Gauche" +msgstr "&Gauche:" #: /home/kovid/work/calibre/src/calibre/gui2/convert/page_setup_ui.py:122 msgid "&Top:" -msgstr "&Haut" +msgstr "&Haut:" #: /home/kovid/work/calibre/src/calibre/gui2/convert/page_setup_ui.py:124 msgid "&Right:" -msgstr "&Droite" +msgstr "&Droite:" #: /home/kovid/work/calibre/src/calibre/gui2/convert/page_setup_ui.py:126 msgid "&Bottom:" -msgstr "&Bas" +msgstr "&Bas:" #: /home/kovid/work/calibre/src/calibre/gui2/convert/pdb_input.py:12 msgid "PDB Input" @@ -4108,7 +4108,7 @@ msgstr "Format d'&entrée:" #: /home/kovid/work/calibre/src/calibre/gui2/convert/single_ui.py:110 msgid "Use &saved conversion settings for individual books" msgstr "" -"Utiliser et conserver ces paramètres pour la conversion individuelle des e-" +"Utiliser et &conserver ces paramètres pour la conversion individuelle des e-" "books" #: /home/kovid/work/calibre/src/calibre/gui2/convert/structure_detection.py:17 @@ -4164,7 +4164,7 @@ msgstr "L'expression XPath %s est incorrecte." #: /home/kovid/work/calibre/src/calibre/gui2/convert/structure_detection_ui.py:60 msgid "Chapter &mark:" -msgstr "&Marque de chapitre" +msgstr "&Marque de chapitre:" #: /home/kovid/work/calibre/src/calibre/gui2/convert/structure_detection_ui.py:61 msgid "Remove first &image" @@ -4172,7 +4172,7 @@ msgstr "Supprimer la première &image" #: /home/kovid/work/calibre/src/calibre/gui2/convert/structure_detection_ui.py:62 msgid "Insert &metadata as page at start of book" -msgstr "Insérer les métadonnées comme page au début du livre" +msgstr "Insérer les &métadonnées comme page au début du livre" #: /home/kovid/work/calibre/src/calibre/gui2/convert/structure_detection_ui.py:63 msgid "&Preprocess input file to possibly improve structure detection" @@ -4182,11 +4182,11 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/convert/structure_detection_ui.py:64 msgid "Remove F&ooter" -msgstr "Supprimer le Pied de page" +msgstr "Supprimer le &Pied de page" #: /home/kovid/work/calibre/src/calibre/gui2/convert/structure_detection_ui.py:65 msgid "Remove H&eader" -msgstr "Supprimer l'en-tête" +msgstr "Supprimer l'&en-tête" #: /home/kovid/work/calibre/src/calibre/gui2/convert/toc.py:16 msgid "" @@ -4258,7 +4258,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/convert/txt_input_ui.py:51 msgid "Preserve &spaces" -msgstr "Conservers les &espaces" +msgstr "Conservers les e&spaces" #: /home/kovid/work/calibre/src/calibre/gui2/convert/txt_output.py:16 msgid "TXT Output" @@ -4293,7 +4293,7 @@ msgstr "Utiliser un assistant pour aider à construire l'expression XPath" #: /home/kovid/work/calibre/src/calibre/gui2/convert/xpath_wizard_ui.py:68 msgid "Match HTML &tags with tag name:" -msgstr "Faire correspondre les étiquettes HTML avec les noms d'étiquettes:" +msgstr "Faire correspondre les étiquettes HTML avec les noms d'é&tiquettes:" #: /home/kovid/work/calibre/src/calibre/gui2/convert/xpath_wizard_ui.py:69 msgid "*" @@ -4661,7 +4661,7 @@ msgstr "Utiliser les sous-répertoires" #: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/configwidget_ui.py:81 msgid "Save &template:" -msgstr "Sauvegarder le modèle:" +msgstr "Sauvegarder le &modèle:" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:114 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:115 @@ -4685,7 +4685,7 @@ msgstr "Formats" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info_ui.py:68 msgid "Fit &cover to view" -msgstr "Couverture à afficher" +msgstr "&Couverture à afficher" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info_ui.py:69 msgid "&Previous" @@ -5074,7 +5074,7 @@ msgid "" "automatically" msgstr "" "Si des livres avec des titres et des auteurs similaires sont trouvés, " -"fusionner les nouveaux fichiers automatiquement" +"&fusionner les nouveaux fichiers automatiquement" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/add_save_ui.py:113 msgid "&Configure metadata from file name" @@ -5098,7 +5098,7 @@ msgstr "Sauvegarder les &couvertures séparément" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/add_save_ui.py:117 msgid "Update &metadata in saved copies" -msgstr "Mettre à jour les métadonnées dans les copies sauvegardées" +msgstr "Mettre à jour les &métadonnées dans les copies sauvegardées" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/add_save_ui.py:118 msgid "Save metadata in &OPF file" @@ -5106,7 +5106,7 @@ msgstr "Sauvegarder les métadonnées dans le fichier &OPF" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/add_save_ui.py:119 msgid "Convert non-English characters to &English equivalents" -msgstr "Convertir les caractères non-Anglais vers des équivalents Anglais" +msgstr "Convertir les caractères non-Anglais vers des équivalents &Anglais" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/add_save_ui.py:120 msgid "Format &dates as:" @@ -5141,7 +5141,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/add_save_ui.py:126 msgid "Sending to &device" -msgstr "Envoi vers l'appareil" +msgstr "Envoi vers l'&appareil" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:536 #: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:444 @@ -5163,7 +5163,7 @@ msgstr "Choisir un nouvel emplacement pour la base de données" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:540 msgid "Show notification when &new version is available" -msgstr "Envoyer une notification quand une nouvelle version est disponible." +msgstr "Envoyer une notification quand une &nouvelle version est disponible." #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:541 msgid "Download &social metadata (tags/ratings/etc.) by default" @@ -5174,7 +5174,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:542 msgid "&Overwrite author and title by default when fetching metadata" msgstr "" -"Écraser l'auteur et le titre par défaut lors de la récupération des " +"Écraser l'auteur et le titre par défaut l&ors de la récupération des " "métadonnées" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:543 @@ -5219,7 +5219,7 @@ msgstr "Format de &sortie préféré:" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:552 msgid "Preferred &input format order:" -msgstr "Ordre préféré pour le format d'entrée" +msgstr "Ordre préféré pour le format d'&entrée" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:555 msgid "Use &Roman numerals for series number" @@ -5241,7 +5241,7 @@ msgstr "Afficher l'&écran d'accueil au démarrage" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:559 msgid "Show cover &browser in a separate window (needs restart)" msgstr "" -"Afficher la navigation par couverture dans une fenêtre séparée (redémarrage " +"Afficher la &navigation par couverture dans une fenêtre séparée (redémarrage " "nécessaire)" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:560 @@ -5255,7 +5255,7 @@ msgstr "Envoyer automatiquement les i&nformations vers le lecteur d'ebook" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:562 msgid "&Delete news from library when it is automatically sent to reader" msgstr "" -"Supprimer les News de la bibliothèque lorsque l'envoi est automatique vers " +"&Supprimer les News de la bibliothèque lorsque l'envoi est automatique vers " "l'appareil" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:563 @@ -5282,7 +5282,7 @@ msgstr "Petit" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:568 msgid "&Button size in toolbar" -msgstr "Taille des boutons dans la barre d'outils" +msgstr "Taille des &boutons dans la barre d'outils" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:569 msgid "Show &text in toolbar buttons" @@ -5306,7 +5306,7 @@ msgstr "Editer les paramètres d'une colonne définie par l'utilisateur" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:579 msgid "Use internal &viewer for:" -msgstr "Utiliser l'afficheur interne pour:" +msgstr "Utiliser l'&afficheur interne pour:" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:580 msgid "Add an email address to which to send books" @@ -5342,7 +5342,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:586 msgid "&Check database integrity" -msgstr "Vérifier l'intégrité de la base de données" +msgstr "Vérifier l'&intégrité de la base de données" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:587 msgid "&Install command line tools" @@ -5355,7 +5355,7 @@ msgstr "Ouvrir le répertoire de &configuration de Calibre" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:589 msgid "Limit the max. simultaneous jobs to the available CPU &cores" msgstr "" -"Limiter le nombre max de travaux simultanés au nombre de cœurs de " +"Limiter le nombre max de travaux simultanés au nombre de &cœurs de " "processeurs disponibles" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:590 @@ -5409,7 +5409,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:597 msgid "Max. &cover size:" -msgstr "Taille max. de la couverture:" +msgstr "Taille max. de la &couverture:" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:598 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/password_ui.py:60 @@ -5419,11 +5419,11 @@ msgstr "&Montrer le mot de passe" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:599 msgid "Max. &OPDS items per query:" -msgstr "Nombre d'articles OPDS max. par requête:" +msgstr "Nombre d'articles &OPDS max. par requête:" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:600 msgid "Max. OPDS &ungrouped items:" -msgstr "" +msgstr "Nombre max. d'articles OPDS &non groupés:" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:601 msgid "&Start Server" @@ -5431,7 +5431,7 @@ msgstr "Démarrer le &Serveur" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:602 msgid "St&op Server" -msgstr "Arrêter le Serveur" +msgstr "Arrêter le S&erveur" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:603 msgid "&Test Server" @@ -5472,15 +5472,15 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:609 msgid "Enable/&Disable plugin" -msgstr "Activer/Désactiver le plugin" +msgstr "Activer/&Désactiver le plugin" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:610 msgid "&Customize plugin" -msgstr "Personnaliser le plugin" +msgstr "&Personnaliser le plugin" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:611 msgid "&Remove plugin" -msgstr "Supprimer le plugin" +msgstr "Supp&rimer le plugin" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:612 msgid "Add new plugin" @@ -5632,7 +5632,7 @@ msgstr "&Nom recherché" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column_ui.py:103 msgid "Column &heading" -msgstr "En-tête de colonne" +msgstr "&En-tête de colonne" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column_ui.py:104 msgid "" @@ -5709,7 +5709,7 @@ msgstr "Le modèle %s est incorrect:" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/save_template_ui.py:42 msgid "Save &template" -msgstr "Sauvegarder le modèle" +msgstr "Sauvegarder le &modèle" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/save_template_ui.py:43 msgid "" @@ -5735,7 +5735,7 @@ msgstr "Téléchargement des métadonnées sociales, veuillez patienter..." #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/confirm_delete_ui.py:50 msgid "&Show this warning again" -msgstr "Afficher cet avertissement de nouveau" +msgstr "&Afficher cet avertissement de nouveau" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/conversion_error_ui.py:42 msgid "ERROR" @@ -5839,7 +5839,7 @@ msgstr "Exécutions en cours" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/jobs_ui.py:45 msgid "&Stop selected job" -msgstr "Arrêter les travaux sélectionnés" +msgstr "Arrêter les travaux &sélectionnés" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/jobs_ui.py:46 msgid "Show job &details" @@ -5847,7 +5847,7 @@ msgstr "Afficher les &détails du travail" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/jobs_ui.py:47 msgid "Stop &all jobs" -msgstr "Arrêter tous les travaux" +msgstr "&Arrêter tous les travaux" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:24 msgid "Editing meta information for %d books" @@ -5863,7 +5863,7 @@ msgstr "Effectuer un tri a&utomatique par auteur" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:160 msgid "Author s&ort: " -msgstr "Tri par auteur: " +msgstr "&Tri par auteur: " #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:161 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:372 @@ -5897,7 +5897,7 @@ msgstr " étoiles" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:168 msgid "Add ta&gs: " -msgstr "Ajouter des étiquettes: " +msgstr "Ajouter des &étiquettes: " #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:170 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:171 @@ -5921,7 +5921,7 @@ msgstr "Supprimer le &format:" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:178 msgid "&Swap title and author" -msgstr "Intervertir le titre et l'auteur" +msgstr "&Intervertir le titre et l'auteur" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:179 msgid "" @@ -5958,12 +5958,12 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:188 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:412 msgid "&Basic metadata" -msgstr "&Metadonnées de base" +msgstr "Metadonnées de &base" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:189 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:413 msgid "&Custom metadata" -msgstr "&Metadonnées personnalisées" +msgstr "Metadonnées &personnalisées" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:125 msgid "Not a valid picture" @@ -6120,7 +6120,7 @@ msgstr "I&SBN :" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:390 msgid "Publishe&d:" -msgstr "Publié:" +msgstr "Pu&blié:" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:393 msgid "dd MMM yyyy" @@ -6269,7 +6269,7 @@ msgstr "Télécharger toutes les recettes en une seule fois" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:195 msgid "Download &all scheduled" -msgstr "Télécharger toutes les planifications" +msgstr "Télécharger &toutes les planifications" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:196 msgid "blurb" @@ -6277,7 +6277,7 @@ msgstr "texte de présentation" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:197 msgid "&Schedule for download:" -msgstr "Planifier le téléchargement" +msgstr "&Planifier le téléchargement" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:198 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:208 @@ -6414,7 +6414,7 @@ msgstr "Cette &phrase exacte:" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_ui.py:117 msgid "&One or more of these words:" -msgstr "Un ou plus de ces mots:" +msgstr "&Un ou plus de ces mots:" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_ui.py:118 msgid "But dont show entries that have..." @@ -6422,7 +6422,7 @@ msgstr "Mais ne montre pas les entrées qui ont..." #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_ui.py:119 msgid "Any of these &unwanted words:" -msgstr "Aucun de ces mots non souhaités:" +msgstr "A&ucun de ces mots non souhaités:" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_ui.py:120 msgid "What kind of match to use:" @@ -6490,7 +6490,7 @@ msgstr "Editeur de catégories utilisateur" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories_ui.py:154 msgid "A&vailable items" -msgstr "Articles disponibles" +msgstr "Articles &disponibles" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories_ui.py:155 msgid "Apply tags to current tag category" @@ -6553,7 +6553,7 @@ msgstr "Editeur de Mots-Clefs" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_editor_ui.py:124 msgid "A&vailable tags" -msgstr "Etiquettes disponibles" +msgstr "Etiquettes &disponibles" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_editor_ui.py:125 msgid "" @@ -6569,7 +6569,7 @@ msgstr "Applique le mot-clef au livre en cours." #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_editor_ui.py:129 msgid "A&pplied tags" -msgstr "Etiquettes appliquées" +msgstr "Etiquettes a&ppliquées" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_editor_ui.py:130 msgid "Unapply (remove) tag from current book" @@ -6776,7 +6776,7 @@ msgstr "&Partager une recette" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:253 msgid "Customize &builtin recipe" -msgstr "Personnaliser les recettes intégrées" +msgstr "Personnaliser les recettes &intégrées" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:254 msgid "&Load recipe from file" @@ -6812,7 +6812,7 @@ msgstr "&Titre de la recette:" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:261 msgid "&Oldest article:" -msgstr "Article le plus ancien:" +msgstr "Article le plus &ancien:" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:262 msgid "The oldest article to download" @@ -6841,11 +6841,11 @@ msgstr "Ajouter un flux dans la recette" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:272 msgid "&Feed title:" -msgstr "Titre du flux:" +msgstr "Titre du &flux:" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:273 msgid "Feed &URL:" -msgstr "URL du flux:" +msgstr "&URL du flux:" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:275 msgid "&Add feed" @@ -7430,7 +7430,7 @@ msgstr "Créer, éditer, et effacer les catégories définies par l'utilisateur" #: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:419 msgid "Manage &user categories" -msgstr "Gérer &les catégories de l'utilisateur" +msgstr "Gérer les catégories de l'&utilisateur" #: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:420 msgid "Add books" @@ -7595,7 +7595,7 @@ msgstr " ou " #: /home/kovid/work/calibre/src/calibre/gui2/shortcuts.py:133 #: /home/kovid/work/calibre/src/calibre/gui2/shortcuts_ui.py:69 msgid "&Default" -msgstr "Par d&éfaut" +msgstr "Par &défaut" #: /home/kovid/work/calibre/src/calibre/gui2/shortcuts.py:135 msgid "Customize shortcuts for" @@ -7615,11 +7615,11 @@ msgstr "Cadre" #: /home/kovid/work/calibre/src/calibre/gui2/shortcuts_ui.py:70 msgid "&Custom" -msgstr "Personnaliser" +msgstr "&Personnaliser" #: /home/kovid/work/calibre/src/calibre/gui2/shortcuts_ui.py:71 msgid "&Shortcut:" -msgstr "Raccourci clavier:" +msgstr "&Raccourci clavier:" #: /home/kovid/work/calibre/src/calibre/gui2/shortcuts_ui.py:72 #: /home/kovid/work/calibre/src/calibre/gui2/shortcuts_ui.py:77 @@ -7633,7 +7633,7 @@ msgstr "Effacer" #: /home/kovid/work/calibre/src/calibre/gui2/shortcuts_ui.py:76 msgid "&Alternate shortcut:" -msgstr "Changer les raccourcis" +msgstr "Raccourci &alternatif:" #: /home/kovid/work/calibre/src/calibre/gui2/sidebar.py:24 msgid "Jobs:" @@ -8505,7 +8505,7 @@ msgstr "Configurer l'afficheur d'Ebook" #: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:155 msgid "&Font options" -msgstr "Options de polices" +msgstr "Options de &polices" #: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:156 msgid "Se&rif family:" @@ -8531,7 +8531,7 @@ msgstr " px" #: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:161 msgid "Monospace &font size:" -msgstr "Taille de la police monospace:" +msgstr "Taille de la &police Monospace:" #: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:163 msgid "S&tandard font:" @@ -8551,7 +8551,7 @@ msgstr "Monospace" #: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:167 msgid "Remember last used &window size" -msgstr "Se souvenir de la dernière taille de fenêtre utilisée" +msgstr "Se souvenir de la dernière taille de &fenêtre utilisée" #: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:169 msgid "Maximum &view width:" @@ -8559,7 +8559,7 @@ msgstr "Largeur maximum pour la &vue:" #: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:170 msgid "H&yphenate (break line in the middle of large words)" -msgstr "Mettre un trait d'union (coupe la ligne au milieu de large mots)" +msgstr "Mettre un &trait d'union (coupe la ligne au milieu de large mots)" #: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:171 msgid "" @@ -8665,7 +8665,7 @@ msgstr "Le type de police standard" #: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:452 msgid "&Lookup in dictionary" -msgstr "Rechercher dans le dictionnaire" +msgstr "&Rechercher dans le dictionnaire" #: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:455 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:138 @@ -9213,7 +9213,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/wizard/send_email_ui.py:108 msgid "Send email &from:" -msgstr "Envoyer l'email de:" +msgstr "Envoyer l'email &de:" #: /home/kovid/work/calibre/src/calibre/gui2/wizard/send_email_ui.py:109 msgid "" @@ -9272,7 +9272,7 @@ msgstr "&Visualiser" #: /home/kovid/work/calibre/src/calibre/gui2/wizard/send_email_ui.py:122 msgid "&Encryption:" -msgstr "Cryptage:" +msgstr "&Cryptage:" #: /home/kovid/work/calibre/src/calibre/gui2/wizard/send_email_ui.py:123 msgid "" @@ -10242,6 +10242,9 @@ msgid "" "more than this number of items. Default: %default. Set to a large number to " "disable grouping." msgstr "" +"Groupe les articles en catégories telles que auteur/étiquettes à l'aide de " +"la première lettre quand il y a plus que ce nombre d'articles. Par défaut: " +"%default. Définir à une valeur élevée pour désactiver le groupement." #: /home/kovid/work/calibre/src/calibre/library/server/base.py:93 msgid "Password to access your calibre library. Username is " diff --git a/src/calibre/translations/pt_BR.po b/src/calibre/translations/pt_BR.po index d57fb62683..e62caca1d0 100644 --- a/src/calibre/translations/pt_BR.po +++ b/src/calibre/translations/pt_BR.po @@ -8,13 +8,13 @@ msgstr "" "Project-Id-Version: calibre\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2010-06-06 21:03+0000\n" -"PO-Revision-Date: 2010-06-07 03:24+0000\n" +"PO-Revision-Date: 2010-06-08 03:37+0000\n" "Last-Translator: Thomaz Rodrigues Botelho \n" "Language-Team: Brazilian Portuguese \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2010-06-07 03:41+0000\n" +"X-Launchpad-Export-Date: 2010-06-08 03:39+0000\n" "X-Generator: Launchpad (build Unknown)\n" #: /home/kovid/work/calibre/src/calibre/customize/__init__.py:43 @@ -1565,7 +1565,8 @@ msgstr "Não foi possível encontrar um ebook dentro do arquivo." #: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:647 msgid "Values of series index and rating must be numbers. Ignoring" -msgstr "Valores para índices de séries e nota devem ser números. Ignorando" +msgstr "" +"Valores para índices de séries e avaliação devem ser números. Ignorando" #: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:654 msgid "Failed to parse date/time" @@ -2006,7 +2007,7 @@ msgstr "Tags" #: /home/kovid/work/calibre/src/calibre/gui2/status.py:105 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:82 msgid "Series" -msgstr "Séries" +msgstr "Série" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:387 msgid "Language" @@ -2161,7 +2162,7 @@ msgstr "Baixar metadados" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/fetch.py:110 msgid "ratings" -msgstr "" +msgstr "Avaliações" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/fetch.py:110 msgid "tags" @@ -2757,7 +2758,7 @@ msgstr "Notificar quando uma nova versão estiver disponível" #: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:45 msgid "Use Roman numerals for series number" -msgstr "Usar numerais romanos para numeros de séries" +msgstr "Usar numerais romanos para números da série" #: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:47 msgid "Sort tags list by popularity" @@ -3672,12 +3673,15 @@ msgid "" "Tags categorize the book. This is particularly useful while searching. " "

They can be any words or phrases, separated by commas." msgstr "" +"Tags categorizam o livro. Isto é particularmente útil quando estiver " +"pesquisando.

Elas podem ser qualquer palavra ou frase, separadas por " +"virgula." #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:180 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:174 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:384 msgid "&Series:" -msgstr "&Séries:" +msgstr "&Série:" #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:181 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:182 @@ -4907,7 +4911,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:555 msgid "Use &Roman numerals for series number" -msgstr "" +msgstr "Use numerais &Romanos para números da série" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:556 msgid "Enable system &tray icon (needs restart)" @@ -5225,7 +5229,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column.py:33 msgid "Ratings, shown with stars" -msgstr "" +msgstr "Avaliações, mostradas com estrelas" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column.py:36 msgid "Yes/No" @@ -5473,7 +5477,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:24 msgid "Editing meta information for %d books" -msgstr "" +msgstr "Editando informação meta para %d livros" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:157 msgid "Edit Meta information" @@ -5497,7 +5501,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:162 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:375 msgid "&Rating:" -msgstr "" +msgstr "&Avaliação" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:163 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:164 @@ -5508,7 +5512,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:165 msgid "No change" -msgstr "" +msgstr "Nenhuma mudança" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:166 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:378 @@ -5540,7 +5544,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:178 msgid "&Swap title and author" -msgstr "" +msgstr "&Inverter título e autor" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:179 msgid "" @@ -5549,10 +5553,14 @@ msgid "" "So if you selected Book A and then Book B,\n" "Book A will have series number 1 and Book B series number 2." msgstr "" +"Livros selecionados serão automaticamente numerados,\n" +"na ordem que você os selecionou.\n" +"Então se você seleciona um Livro A e depois um Livro B,\n" +"o Livro A irá ter o número de série 1 e o Livro B o número de série 2." #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:183 msgid "Automatically number books in this series" -msgstr "" +msgstr "Numerar automaticamente os livros nestas série" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:184 msgid "" @@ -5560,6 +5568,8 @@ msgid "" "\n" "Future conversion of these books will use the default settings." msgstr "" +"Remove configurações de conversão armazenadas para os livros selecionados.\n" +"Futuras conversões desses livros irão usar as configurações padrões." #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:187 msgid "Remove &stored conversion settings for the selected books" @@ -6479,7 +6489,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:124 msgid "Series:" -msgstr "Séries:" +msgstr "Série:" #: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:125 msgid "Regular expression (?P)" @@ -6487,7 +6497,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:127 msgid "Series index:" -msgstr "" +msgstr "Índice da série:" #: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:128 msgid "Regular expression (?P)" @@ -9257,7 +9267,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:29 msgid "The series" -msgstr "" +msgstr "A série" #: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:30 msgid "" @@ -9437,7 +9447,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/library/server/opds.py:148 msgid "SERIES: %s [%s]
" -msgstr "" +msgstr "SÉRIE: %s [%s]
" #: /home/kovid/work/calibre/src/calibre/library/server/opds.py:189 msgid "Library" diff --git a/src/calibre/translations/sr.po b/src/calibre/translations/sr.po index 9597d204cb..a8d9ab4dbe 100644 --- a/src/calibre/translations/sr.po +++ b/src/calibre/translations/sr.po @@ -8,13 +8,13 @@ msgstr "" "Project-Id-Version: calibre\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2010-06-06 21:03+0000\n" -"PO-Revision-Date: 2010-06-06 16:34+0000\n" -"Last-Translator: Kovid Goyal \n" +"PO-Revision-Date: 2010-06-07 04:53+0000\n" +"Last-Translator: Vladimir Oka \n" "Language-Team: Serbian \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2010-06-07 03:40+0000\n" +"X-Launchpad-Export-Date: 2010-06-08 03:39+0000\n" "X-Generator: Launchpad (build Unknown)\n" #: /home/kovid/work/calibre/src/calibre/customize/__init__.py:43 @@ -5318,7 +5318,7 @@ msgstr "Maks. broj &OPDS stavki po upitu:" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:600 msgid "Max. OPDS &ungrouped items:" -msgstr "" +msgstr "Maks. OPDS negr&upisane stavke:" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:601 msgid "&Start Server" @@ -10043,6 +10043,9 @@ msgid "" "more than this number of items. Default: %default. Set to a large number to " "disable grouping." msgstr "" +"Stavke iz kategorija kao što su autor/etikete grupiši po prvom slovu kada ih " +"ima više od ovog broja. Podrazumeva se: %default. Postavite ovo na dovoljno " +"veliki broj da onemogućite grupisanje." #: /home/kovid/work/calibre/src/calibre/library/server/base.py:93 msgid "Password to access your calibre library. Username is " From 6364ea1d39d50b2cafd2505b31661f09e8562c8a Mon Sep 17 00:00:00 2001 From: Charles Haley <> Date: Tue, 8 Jun 2010 08:16:46 +0100 Subject: [PATCH 039/112] Fix bugs #5751 and #5752. Also distinguish between the delete warning dialogs for the library and the device --- .../dialogs/config/create_custom_column.py | 5 +- src/calibre/gui2/tag_view.py | 58 ++++++++++++------- src/calibre/gui2/ui.py | 4 +- 3 files changed, 43 insertions(+), 24 deletions(-) diff --git a/src/calibre/gui2/dialogs/config/create_custom_column.py b/src/calibre/gui2/dialogs/config/create_custom_column.py index 3d5cb8ba53..a66b7b6642 100644 --- a/src/calibre/gui2/dialogs/config/create_custom_column.py +++ b/src/calibre/gui2/dialogs/config/create_custom_column.py @@ -3,6 +3,7 @@ __copyright__ = '2010, Kovid Goyal ' '''Dialog to create a new custom column''' +import re from functools import partial from PyQt4.QtCore import SIGNAL @@ -94,8 +95,8 @@ class CreateCustomColumn(QDialog, Ui_QCreateCustomColumn): col = unicode(self.column_name_box.text()).lower() if not col: return self.simple_error('', _('No lookup name was provided')) - if not col.isalnum() or not col[0].isalpha(): - return self.simple_error('', _('The label must contain only letters and digits, and start with a letter')) + if re.match('^\w*$', col) is None or not col[0].isalpha(): + return self.simple_error('', _('The label must contain only letters, digits and underscores, and start with a letter')) col_heading = unicode(self.column_heading_box.text()) col_type = self.column_types[self.column_type_box.currentIndex()]['datatype'] if col_type == '*text': diff --git a/src/calibre/gui2/tag_view.py b/src/calibre/gui2/tag_view.py index 24e83376aa..95b83b407c 100644 --- a/src/calibre/gui2/tag_view.py +++ b/src/calibre/gui2/tag_view.py @@ -63,8 +63,7 @@ class TagsView(QTreeView): # {{{ def sort_changed(self, state): config.set('sort_by_popularity', state == Qt.Checked) - self.model().refresh() - # self.search_restriction_set() + self.recount() def set_search_restriction(self, s): if s: @@ -197,7 +196,9 @@ class TagsView(QTreeView): # {{{ ci = self.indexAt(QPoint(10, 10)) path = self.model().path_for_index(ci) if self.is_visible(ci) else None try: - self.model().refresh() + if not self.model().refresh(): # categories changed! + self.set_new_model() + path = None except: #Database connection could be closed if an integrity check is happening pass if path: @@ -210,10 +211,16 @@ class TagsView(QTreeView): # {{{ # gone, or if columns have been hidden or restored, we must rebuild the # model. Reason: it is much easier than reconstructing the browser tree. def set_new_model(self): - self._model = TagsModel(self.db, parent=self, - hidden_categories=self.hidden_categories, - search_restriction=self.search_restriction) - self.setModel(self._model) + try: + self._model = TagsModel(self.db, parent=self, + hidden_categories=self.hidden_categories, + search_restriction=self.search_restriction) + self.setModel(self._model) + except: + # The DB must be gone. Set the model to None and hope that someone + # will call set_database later. I don't know if this in fact works + self._model = None + self.setModel(None) # }}} class TagTreeItem(object): # {{{ @@ -323,18 +330,9 @@ class TagsModel(QAbstractItemModel): # {{{ self.tags_view = parent self.hidden_categories = hidden_categories self.search_restriction = search_restriction + self.row_map = [] - # Reconstruct the user categories, putting them into metadata - tb_cats = self.db.field_metadata - for k in tb_cats.keys(): - if tb_cats[k]['kind'] in ['user', 'search']: - del tb_cats[k] - for user_cat in sorted(prefs['user_categories'].keys()): - cat_name = user_cat+':' # add the ':' to avoid name collision - tb_cats.add_user_category(label=cat_name, name=user_cat) - if len(saved_searches.names()): - tb_cats.add_search_category(label='search', name=_('Searches')) - + # get_node_tree cannot return None here, because row_map is empty data = self.get_node_tree(config['sort_by_popularity']) self.root_item = TagTreeItem() for i, r in enumerate(self.row_map): @@ -355,9 +353,22 @@ class TagsModel(QAbstractItemModel): # {{{ self.search_restriction = s def get_node_tree(self, sort): + old_row_map = self.row_map[:] self.row_map = [] self.categories = [] + # Reconstruct the user categories, putting them into metadata + tb_cats = self.db.field_metadata + for k in tb_cats.keys(): + if tb_cats[k]['kind'] in ['user', 'search']: + del tb_cats[k] + for user_cat in sorted(prefs['user_categories'].keys()): + cat_name = user_cat+':' # add the ':' to avoid name collision + tb_cats.add_user_category(label=cat_name, name=user_cat) + if len(saved_searches.names()): + tb_cats.add_search_category(label='search', name=_('Searches')) + + # Now get the categories if self.search_restriction: data = self.db.get_categories(sort_on_count=sort, icon_map=self.category_icon_map, @@ -367,13 +378,19 @@ class TagsModel(QAbstractItemModel): # {{{ tb_categories = self.db.field_metadata for category in tb_categories: - if category in data: # They should always be there, but ... + if category in data: # The search category can come and go self.row_map.append(category) self.categories.append(tb_categories[category]['name']) + if len(old_row_map) != 0 and len(old_row_map) != len(self.row_map): + # A category has been added or removed. We must force a rebuild of + # the model + return None return data def refresh(self): data = self.get_node_tree(config['sort_by_popularity']) # get category data + if data is None: + return False row_index = -1 for i, r in enumerate(self.row_map): if self.hidden_categories and self.categories[i] in self.hidden_categories: @@ -395,6 +412,7 @@ class TagsModel(QAbstractItemModel): # {{{ tag.state = state_map.get(tag.name, 0) t = TagTreeItem(parent=category, data=tag, icon_map=self.icon_state_map) self.endInsertRows() + return True def columnCount(self, parent): return 1 @@ -439,7 +457,7 @@ class TagsModel(QAbstractItemModel): # {{{ label=self.db.field_metadata[key]['label']) self.tags_view.tag_item_renamed.emit() item.tag.name = val - self.refresh() + self.refresh() # Should work, because no categories can have disappeared return True def headerData(self, *args): diff --git a/src/calibre/gui2/ui.py b/src/calibre/gui2/ui.py index 01f0cf6271..7d258608d0 100644 --- a/src/calibre/gui2/ui.py +++ b/src/calibre/gui2/ui.py @@ -854,7 +854,7 @@ class Main(MainWindow, Ui_MainWindow, DeviceGUI): r = unicode(r) if r is not None and r != '': self.restriction_in_effect = True - restriction = "search:%s"%(r) + restriction = 'search:"%s"'%(r) else: self.restriction_in_effect = False restriction = '' @@ -1557,7 +1557,7 @@ class Main(MainWindow, Ui_MainWindow, DeviceGUI): if not confirm('

'+_('The selected books will be ' 'permanently deleted ' 'from your device. Are you sure?') - +'

', 'library_delete_books', self): + +'

', 'device_delete_books', self): return if self.stack.currentIndex() == 1: view = self.memory_view From db7474d6f64d47fa712ca825fb2050a220e4cae1 Mon Sep 17 00:00:00 2001 From: Charles Haley <> Date: Tue, 8 Jun 2010 09:12:50 +0100 Subject: [PATCH 040/112] Fix bug #5754 - extra customization problems --- src/calibre/devices/prs505/driver.py | 3 ++- src/calibre/gui2/device_drivers/configwidget.py | 5 +++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/calibre/devices/prs505/driver.py b/src/calibre/devices/prs505/driver.py index 071d651186..38fac8b266 100644 --- a/src/calibre/devices/prs505/driver.py +++ b/src/calibre/devices/prs505/driver.py @@ -143,10 +143,11 @@ class PRS505(USBMS): if booklists[i] is not None: blists[i] = booklists[i] opts = self.settings() - collections = ['series', 'tags'] if opts.extra_customization: collections = [x.strip() for x in opts.extra_customization.split(',')] + else: + collections = [] debug_print('PRS505: collection fields:', collections) c.update(blists, collections) c.write() diff --git a/src/calibre/gui2/device_drivers/configwidget.py b/src/calibre/gui2/device_drivers/configwidget.py index d1cebcb81d..585eed30df 100644 --- a/src/calibre/gui2/device_drivers/configwidget.py +++ b/src/calibre/gui2/device_drivers/configwidget.py @@ -38,9 +38,10 @@ class ConfigWidget(QWidget, Ui_ConfigWidget): self.opt_read_metadata.setChecked(self.settings.read_metadata) else: self.opt_read_metadata.hide() - if extra_customization_message and settings.extra_customization: + if extra_customization_message: self.extra_customization_label.setText(extra_customization_message) - self.opt_extra_customization.setText(settings.extra_customization) + if settings.extra_customization: + self.opt_extra_customization.setText(settings.extra_customization) else: self.extra_customization_label.setVisible(False) self.opt_extra_customization.setVisible(False) From 58bc3fbab3a747cd3a5c94502172e3596c79218c Mon Sep 17 00:00:00 2001 From: Charles Haley <> Date: Tue, 8 Jun 2010 10:24:01 +0100 Subject: [PATCH 041/112] Fix problems renaming an item to itself --- src/calibre/gui2/tag_view.py | 7 +++++ src/calibre/library/custom_columns.py | 2 +- src/calibre/library/database2.py | 38 +++++++++++++++++++-------- 3 files changed, 35 insertions(+), 12 deletions(-) diff --git a/src/calibre/gui2/tag_view.py b/src/calibre/gui2/tag_view.py index 056838750f..e8f3068d35 100644 --- a/src/calibre/gui2/tag_view.py +++ b/src/calibre/gui2/tag_view.py @@ -426,6 +426,8 @@ class TagsModel(QAbstractItemModel): # {{{ def setData(self, index, value, role=Qt.EditRole): if not index.isValid(): return NONE + # set up to position at the category label + path = self.path_for_index(self.parent(index)) val = unicode(value.toString()) if not val: error_dialog(self.tags_view, _('Item is blank'), @@ -458,6 +460,11 @@ class TagsModel(QAbstractItemModel): # {{{ self.tags_view.tag_item_renamed.emit() item.tag.name = val self.refresh() # Should work, because no categories can have disappeared + if path: + idx = self.index_for_path(path) + if idx.isValid(): + self.tags_view.setCurrentIndex(idx) + self.tags_view.scrollTo(idx, QTreeView.PositionAtCenter) return True def headerData(self, *args): diff --git a/src/calibre/library/custom_columns.py b/src/calibre/library/custom_columns.py index d9e16a5e32..23b78f38ae 100644 --- a/src/calibre/library/custom_columns.py +++ b/src/calibre/library/custom_columns.py @@ -192,7 +192,7 @@ class CustomColumns(object): # check if item exists new_id = self.conn.get( 'SELECT id FROM %s WHERE value=?'%table, (new_name,), all=False) - if new_id is None: + if new_id is None or old_id == new_id: self.conn.execute('UPDATE %s SET value=? WHERE id=?'%table, (new_name, old_id)) else: # New id exists. If the column is_multiple, then process like diff --git a/src/calibre/library/database2.py b/src/calibre/library/database2.py index e639643e68..5868a782ad 100644 --- a/src/calibre/library/database2.py +++ b/src/calibre/library/database2.py @@ -1003,8 +1003,9 @@ class LibraryDatabase2(LibraryDatabase, SchemaUpgrade, CustomColumns): new_id = self.conn.get( '''SELECT id from tags WHERE name=?''', (new_name,), all=False) - if new_id is None: - # easy case. Simply rename the tag + if new_id is None or old_id == new_id: + # easy cases. Simply rename the tag. Do it even if equal, in case + # there is a change of case self.conn.execute('''UPDATE tags SET name=? WHERE id=?''', (new_name, old_id)) else: @@ -1041,7 +1042,7 @@ class LibraryDatabase2(LibraryDatabase, SchemaUpgrade, CustomColumns): new_id = self.conn.get( '''SELECT id from series WHERE name=?''', (new_name,), all=False) - if new_id is None: + if new_id is None or old_id == new_id: self.conn.execute('UPDATE series SET name=? WHERE id=?', (new_name, old_id)) else: @@ -1086,7 +1087,7 @@ class LibraryDatabase2(LibraryDatabase, SchemaUpgrade, CustomColumns): new_id = self.conn.get( '''SELECT id from publishers WHERE name=?''', (new_name,), all=False) - if new_id is None: + if new_id is None or old_id == new_id: # New name doesn't exist. Simply change the old name self.conn.execute('UPDATE publishers SET name=? WHERE id=?', \ (new_name, old_id)) @@ -1113,22 +1114,34 @@ class LibraryDatabase2(LibraryDatabase, SchemaUpgrade, CustomColumns): new_name = new_name.replace(',', '|') # Get the list of books we must fix up, one way or the other - books = self.conn.get('SELECT book from books_authors_link WHERE author=?', (old_id,)) + # Save the list so we can use it twice + bks = self.conn.get('SELECT book from books_authors_link WHERE author=?', (old_id,)) + books = [] + for (book_id,) in bks: + books.append(book_id) # check if the new author already exists new_id = self.conn.get('SELECT id from authors WHERE name=?', (new_name,), all=False) - if new_id is None: + if new_id is None or old_id == new_id: # No name clash. Go ahead and update the author's name self.conn.execute('UPDATE authors SET name=? WHERE id=?', (new_name, old_id)) else: + # First check for the degenerate case -- changing a value to itself. + # Update it in case there is a change of case, but do nothing else + if old_id == new_id: + self.conn.execute('UPDATE authors SET name=? WHERE id=?', + (new_name, old_id)) + self.conn.commit() + return # Author exists. To fix this, we must replace all the authors # instead of replacing the one. Reason: db integrity checks can stop # the rename process, which would leave everything half-done. We # can't do it the same way as tags (delete and add) because author # order is important. - for (book_id,) in books: + + for book_id in books: # Get the existing list of authors authors = self.conn.get(''' SELECT author from books_authors_link @@ -1139,7 +1152,6 @@ class LibraryDatabase2(LibraryDatabase, SchemaUpgrade, CustomColumns): # with the new one while we are at it for i,aut in enumerate(authors): authors[i] = aut[0] if aut[0] != old_id else new_id - # Delete the existing authors list self.conn.execute('''DELETE FROM books_authors_link WHERE book=?''',(book_id,)) @@ -1154,11 +1166,12 @@ class LibraryDatabase2(LibraryDatabase, SchemaUpgrade, CustomColumns): # metadata. Ignore it. pass # Now delete the old author from the DB + bks = self.conn.get('SELECT book FROM books_authors_link WHERE author=?', (old_id,)) self.conn.execute('DELETE FROM authors WHERE id=?', (old_id,)) - self.conn.commit() + self.conn.commit() # the authors are now changed, either by changing the author's name # or replacing the author in the list. Now must fix up the books. - for (book_id,) in books: + for book_id in books: # First, must refresh the cache to see the new authors self.data.refresh_ids(self, [book_id]) # now fix the filesystem paths @@ -1168,14 +1181,17 @@ class LibraryDatabase2(LibraryDatabase, SchemaUpgrade, CustomColumns): SELECT authors.name FROM authors, books_authors_link as bl WHERE bl.book = ? and bl.author = authors.id + ORDER BY bl.id ''' , (book_id,)) # unpack the double-list structure for i,aut in enumerate(authors): authors[i] = aut[0] ss = authors_to_sort_string(authors) + # Change the '|'s to ',' + ss = ss.replace('|', ',') self.conn.execute('''UPDATE books SET author_sort=? - WHERE id=?''', (ss, old_id)) + WHERE id=?''', (ss, book_id)) self.conn.commit() # the caller will do a general refresh, so we don't need to # do one here From d268786eeb2055ba8bc15088fadbd1b329d076ec Mon Sep 17 00:00:00 2001 From: GRiker Date: Tue, 8 Jun 2010 03:32:47 -0600 Subject: [PATCH 042/112] GwR revisions --- src/calibre/devices/apple/driver.py | 277 ++++++++++++++++------------ 1 file changed, 161 insertions(+), 116 deletions(-) diff --git a/src/calibre/devices/apple/driver.py b/src/calibre/devices/apple/driver.py index 6a240c7040..56d2565ce9 100644 --- a/src/calibre/devices/apple/driver.py +++ b/src/calibre/devices/apple/driver.py @@ -48,7 +48,7 @@ class ITUNES(DevicePlugin): supported_platforms = ['osx','windows'] author = 'GRiker' #: The version of this plugin as a 3-tuple (major, minor, revision) - version = (0, 4, 0) + version = (0, 4, 11) OPEN_FEEDBACK_MESSAGE = _( 'Apple device detected, launching iTunes, please wait ...') @@ -221,7 +221,10 @@ class ITUNES(DevicePlugin): for (i,book) in enumerate(device_books): this_book = Book(book.name(), book.artist()) this_book.path = self.path_template % (book.name(), book.artist()) - this_book.datetime = parse_date(str(book.date_added())).timetuple() + try: + this_book.datetime = parse_date(str(book.date_added())).timetuple() + except: + pass this_book.db_id = None this_book.device_collections = [] this_book.library_id = library_books[this_book.path] if this_book.path in library_books else None @@ -251,7 +254,10 @@ class ITUNES(DevicePlugin): for (i,book) in enumerate(device_books): this_book = Book(book.Name, book.Artist) this_book.path = self.path_template % (book.Name, book.Artist) - this_book.datetime = parse_date(str(book.DateAdded)).timetuple() + try: + this_book.datetime = parse_date(str(book.DateAdded)).timetuple() + except: + pass this_book.db_id = None this_book.device_collections = [] this_book.library_id = library_books[this_book.path] if this_book.path in library_books else None @@ -630,7 +636,7 @@ class ITUNES(DevicePlugin): :detected_device: Device information from the device scanner """ if DEBUG: - self.log.info("ITUNE.reset()") + self.log.info("ITUNES.reset()") def set_progress_reporter(self, report_progress): ''' @@ -810,7 +816,10 @@ class ITUNES(DevicePlugin): # Create a new Book this_book = Book(metadata[i].title, metadata[i].author[0]) - this_book.datetime = parse_date(str(added.date_added())).timetuple() + try: + this_book.datetime = parse_date(str(added.date_added())).timetuple() + except: + pass this_book.db_id = None this_book.device_collections = [] this_book.library_id = added @@ -868,9 +877,10 @@ class ITUNES(DevicePlugin): if lib is not None: lib_books = None for pl in lib.Playlists: - if self.PlaylistKind[pl.Kind] == 'User' and self.PlaylistSpecialKind[pl.SpecialKind] == 'Books': + if pl.Kind == self.PlaylistKind.index('User') and \ + pl.SpecialKind == self.PlaylistSpecialKind.index('Books'): if DEBUG: - self.log.info(" Books playlist: '%s' special_kind: '%s'" % (pl.Name, self.PlaylistSpecialKind[pl.SpecialKind])) + self.log.info(" Books playlist: '%s'" % (pl.Name)) lib_books = pl break else: @@ -924,14 +934,17 @@ class ITUNES(DevicePlugin): # Add to iTunes Library|Books if isinstance(file,PersistentTemporaryFile): op_status = lib_books.AddFile(file._name) - self.log.info("ITUNES.upload_books():\n iTunes adding '%s'" % file._name) + if DEBUG: + self.log.info("ITUNES.upload_books():\n iTunes adding '%s'" % file._name) else: op_status = lib_books.AddFile(file) - self.log.info(" iTunes adding '%s'" % file) + if DEBUG: + self.log.info(" iTunes adding '%s'" % file) if DEBUG: sys.stdout.write(" iTunes copying '%s' ..." % metadata[i].title) sys.stdout.flush() + while op_status.InProgress: time.sleep(0.5) if DEBUG: @@ -947,7 +960,7 @@ class ITUNES(DevicePlugin): if DEBUG: sys.stdout.write(" waiting for handle to '%s' ..." % metadata[i].title) sys.stdout.flush() - while not op_status.Tracks: + while op_status.Tracks is None: time.sleep(0.5) if DEBUG: sys.stdout.write('.') @@ -960,80 +973,83 @@ class ITUNES(DevicePlugin): added = self._find_library_book( {'title': metadata[i].title,'author': metadata[i].author[0]}) - if not added: - self.log.error("ITUNES.upload_books():\n could not find added book in iTunes") + if added: + thumb = None + # Use cover data as artwork + if metadata[i].cover: + if added.Artwork.Count: + added.Artwork.Item(1).SetArtworkFromFile(metadata[i].cover) + else: + added.AddArtworkFromFile(metadata[i].cover) - thumb = None - # Use cover data as artwork - if metadata[i].cover: - if added.Artwork.Count: - added.Artwork.Item(1).SetArtworkFromFile(metadata[i].cover) - else: - added.AddArtworkFromFile(metadata[i].cover) + try: + # Resize for thumb + width = metadata[i].thumbnail[0] + height = metadata[i].thumbnail[1] + im = PILImage.open(metadata[i].cover) + im = im.resize((width, height), PILImage.ANTIALIAS) + of = cStringIO.StringIO() + im.convert('RGB').save(of, 'JPEG') + thumb = of.getvalue() + # Refresh the thumbnail cache + if DEBUG: + self.log.info( " refreshing cached thumb for '%s'" % metadata[i].title) + archive_path = os.path.join(self.cache_dir, "thumbs.zip") + zfw = zipfile.ZipFile(archive_path, mode='a') + thumb_path = path.rpartition('.')[0] + '.jpg' + zfw.writestr(thumb_path, thumb) + zfw.close() + except: + self.problem_titles.append("'%s' by %s" % (metadata[i].title, metadata[i].author[0])) + self.log.error("ITUNES.upload_books():\n error converting '%s' to thumb for '%s'" % (metadata[i].cover,metadata[i].title)) + + # Create a new Book + this_book = Book(metadata[i].title, metadata[i].author[0]) try: - # Resize for thumb - width = metadata[i].thumbnail[0] - height = metadata[i].thumbnail[1] - im = PILImage.open(metadata[i].cover) - im = im.resize((width, height), PILImage.ANTIALIAS) - of = cStringIO.StringIO() - im.convert('RGB').save(of, 'JPEG') - thumb = of.getvalue() - - # Refresh the thumbnail cache - if DEBUG: - self.log.info( " refreshing cached thumb for '%s'" % metadata[i].title) - archive_path = os.path.join(self.cache_dir, "thumbs.zip") - zfw = zipfile.ZipFile(archive_path, mode='a') - thumb_path = path.rpartition('.')[0] + '.jpg' - zfw.writestr(thumb_path, thumb) - zfw.close() + this_book.datetime = parse_date(str(added.DateAdded)).timetuple() except: - self.problem_titles.append("'%s' by %s" % (metadata[i].title, metadata[i].author[0])) - self.log.error("ITUNES.upload_books():\n error converting '%s' to thumb for '%s'" % (metadata[i].cover,metadata[i].title)) + pass + this_book.db_id = None + this_book.device_collections = [] + this_book.library_id = added + this_book.path = path + this_book.size = added.Size # Updated later from actual storage size + this_book.thumbnail = thumb + this_book.iTunes_id = added - # Create a new Book - this_book = Book(metadata[i].title, metadata[i].author[0]) - this_book.datetime = parse_date(str(added.DateAdded)).timetuple() - this_book.db_id = None - this_book.device_collections = [] - this_book.library_id = added - this_book.path = path - this_book.size = added.Size # Updated later from actual storage size - this_book.thumbnail = thumb - this_book.iTunes_id = added + new_booklist.append(this_book) - new_booklist.append(this_book) + # Flesh out the iTunes metadata + if metadata[i].comments: + added.Comment = (strip_tags.sub('',metadata[i].comments)) + added.Description = ("added by calibre %s" % strftime('%Y-%m-%d %H:%M:%S')) + added.Enabled = True + if metadata[i].rating: + added.AlbumRating = (metadata[i].rating*10) + added.SortArtist = (metadata[i].author_sort.title()) + added.SortName = (this_book.title_sorter) - # Flesh out the iTunes metadata - if metadata[i].comments: - added.Comment = (strip_tags.sub('',metadata[i].comments)) - added.Description = ("added by calibre %s" % strftime('%Y-%m-%d %H:%M:%S')) - added.Enabled = True - if metadata[i].rating: - added.AlbumRating = (metadata[i].rating*10) - added.SortArtist = (metadata[i].author_sort.title()) - added.SortName = (this_book.title_sorter) + # Set genre from metadata + # iTunes grabs the first dc:subject from the opf metadata, + # But we can manually override with first tag starting with alpha + for tag in metadata[i].tags: + if self._is_alpha(tag[0]): + added.Category = (tag) + break - # Set genre from metadata - # iTunes grabs the first dc:subject from the opf metadata, - # But we can manually override with first tag starting with alpha - for tag in metadata[i].tags: - if self._is_alpha(tag[0]): - added.Category = (tag) - break + # Add new_book to self.cached_paths + self.cached_books[this_book.path] = { + 'title': metadata[i].title, + 'author': metadata[i].author[0], + 'lib_book': added + } - # Add new_book to self.cached_paths - self.cached_books[this_book.path] = { - 'title': metadata[i].title, - 'author': metadata[i].author[0], - 'lib_book': added - } - - # Report progress - if self.report_progress is not None: - self.report_progress(i+1/file_count, _('%d of %d') % (i+1, file_count)) + # Report progress + if self.report_progress is not None: + self.report_progress(i+1/file_count, _('%d of %d') % (i+1, file_count)) + else: + self.log.error("ITUNES.upload_books():\n could not find added book in iTunes") finally: pythoncom.CoUninitialize() @@ -1148,9 +1164,10 @@ class ITUNES(DevicePlugin): if lib is not None: lib_books = None for pl in lib.Playlists: - if self.PlaylistKind[pl.Kind] == 'User' and self.PlaylistSpecialKind[pl.SpecialKind] == 'Books': + if pl.Kind == self.PlaylistKind.index('User') and \ + pl.SpecialKind == self.PlaylistSpecialKind.index('Books'): if DEBUG: - self.log.info(" Books playlist: '%s' special_kind: '%s'" % (pl.Name, self.PlaylistSpecialKind[pl.SpecialKind])) + self.log.info(" Books playlist: '%s'" % (pl.Name)) lib_books = pl break else: @@ -1163,7 +1180,7 @@ class ITUNES(DevicePlugin): hits = lib_books.Search(cached_book['author'],SearchField.index('Artists')) if hits: for hit in hits: - #self.log.info(" evaluating '%s' by %s" % (hit.Name, hit.Artist)) + self.log.info(" evaluating '%s' by %s" % (hit.Name, hit.Artist)) if hit.Name == cached_book['title']: self.log.info(" matched '%s' by %s" % (hit.Name, hit.Artist)) return hit @@ -1173,7 +1190,7 @@ class ITUNES(DevicePlugin): self.log.warning(" attempt #%d" % (10 - attempts)) if DEBUG: - self.log.error(" search yielded no hits") + self.log.error(" search for '%s' yielded no hits" % cached_book['title']) return None def _generate_thumbnail(self, book_path, book): @@ -1277,18 +1294,21 @@ class ITUNES(DevicePlugin): for pl in device.playlists(): if pl.special_kind() == appscript.k.Books: if DEBUG: - self.log.info(" Book playlist: '%s' special_kind: '%s'" % (pl.name(), pl.special_kind())) + self.log.info(" Book playlist: '%s'" % (pl.name())) books = pl.file_tracks() break else: self.log.error(" book_playlist not found") for book in books: - if book.kind() in ['Book','Protected book']: - device_books.append(book) + # This may need additional entries for international iTunes users + if book.kind() in ['MPEG audio file']: + if DEBUG: + self.log.info(" ignoring '%s' of type '%s'" % (book.name(), book.kind())) else: if DEBUG: - self.log.info(" ignoring '%s' of type '%s'" % (book.name(), book.kind())) + self.log.info(" adding %-30.30s [%s]" % (book.name(), book.kind())) + device_books.append(book) elif iswindows: if 'iPod' in self.sources: @@ -1299,9 +1319,10 @@ class ITUNES(DevicePlugin): dev_books = None for pl in device.Playlists: - if self.PlaylistKind[pl.Kind] == 'User' and self.PlaylistSpecialKind[pl.SpecialKind] == 'Books': + if pl.Kind == self.PlaylistKind.index('User') and \ + pl.SpecialKind == self.PlaylistSpecialKind.index('Books'): if DEBUG: - self.log.info(" Books playlist: '%s' special_kind: '%s'" % (pl.Name, self.PlaylistSpecialKind[pl.SpecialKind])) + self.log.info(" Books playlist: '%s'" % (pl.Name)) dev_books = pl.Tracks break else: @@ -1309,10 +1330,14 @@ class ITUNES(DevicePlugin): self.log.info(" no Books playlist found") for book in dev_books: - if book.KindAsString in ['Book','Protected book']: - device_books.append(book) + # This may need additional entries for international iTunes users + if book.KindAsString in ['MPEG audio file']: + if DEBUG: + self.log.info(" ignoring '%s' of type '%s'" % (book.Name, book.KindAsString)) else: - self.log.info(" ignoring '%s' of type %s" % (book.Name, book.KindAsString)) + if DEBUG: + self.log.info(" adding %-30.30s [%s]" % (book.Name, book.KindAsString)) + device_books.append(book) finally: pythoncom.CoUninitialize() @@ -1334,7 +1359,7 @@ class ITUNES(DevicePlugin): if source.kind() == appscript.k.library: lib = source if DEBUG: - self.log.info(" Library source: '%s' kind: %s" % (lib.name(), lib.kind())) + self.log.info(" Library source: '%s'" % (lib.name())) break else: if DEBUG: @@ -1342,22 +1367,33 @@ class ITUNES(DevicePlugin): if lib is not None: lib_books = None - for pl in lib.playlists(): - if pl.special_kind() == appscript.k.Books: - if DEBUG: - self.log.info(" Books playlist: '%s' special_kind: '%s'" % (pl.name(), pl.special_kind())) - break - lib_books = pl.file_tracks() - for book in lib_books: - if book.kind() in ['Book','Protected book']: - path = self.path_template % (book.name(), book.artist()) - library_books[path] = book + if lib.playlists(): + for pl in lib.playlists(): + if pl.special_kind() == appscript.k.Books: + if DEBUG: + self.log.info(" Books playlist: '%s'" % (pl.name())) + break else: if DEBUG: - self.log.info(" ignoring library book of type '%s'" % book.kind()) + self.log.info(" no Library|Books playlist found") + + lib_books = pl.file_tracks() + for book in lib_books: + # This may need additional entries for international iTunes users + if book.kind() in ['MPEG audio file']: + if DEBUG: + self.log.info(" ignoring '%s' of type '%s'" % (book.name(), book.kind())) + else: + if DEBUG: + self.log.info(" adding %-30.30s [%s]" % (book.name(), book.kind())) + path = self.path_template % (book.name(), book.artist()) + library_books[path] = book + else: + if DEBUG: + self.log.info('No Library playlists') else: if DEBUG: - self.log.info('ITUNES._get_library_books():\n No Books playlist') + self.log.info(' no Library found') elif iswindows: lib = None @@ -1374,23 +1410,32 @@ class ITUNES(DevicePlugin): if lib is not None: lib_books = None - for pl in lib.Playlists: - if self.PlaylistKind[pl.Kind] == 'User' and self.PlaylistSpecialKind[pl.SpecialKind] == 'Books': - if DEBUG: - self.log.info(" Books playlist: '%s' special_kind: '%s'" % (pl.Name, self.PlaylistSpecialKind[pl.SpecialKind])) - lib_books = pl.Tracks - break - else: - if DEBUG: - self.log.error(" no Books playlist found") - - for book in lib_books: - if book.KindAsString in ['Book','Protected book']: - path = self.path_template % (book.Name, book.Artist) - library_books[path] = book + if lib.Playlists is not None: + for pl in lib.Playlists: + if pl.Kind == self.PlaylistKind.index('User') and \ + pl.SpecialKind == self.PlaylistSpecialKind.index('Books'): + if DEBUG: + self.log.info(" Books playlist: '%s'" % (pl.Name)) + lib_books = pl.Tracks + break else: if DEBUG: - self.log.info(" ignoring '%s' of type %s" % (book.Name, book.KindAsString)) + self.log.error(" no Library|Books playlist found") + else: + if DEBUG: + self.log.error(" no Library playlists found") + + for book in lib_books: + # This may need additional entries for international iTunes users + if book.KindAsString in ['MPEG audio file']: + if DEBUG: + self.log.info(" ignoring %-30.30s of type '%s'" % (book.Name, book.KindAsString)) + else: + if DEBUG: + self.log.info(" adding %-30.30s [%s]" % (book.Name, book.KindAsString)) + path = self.path_template % (book.Name, book.Artist) + library_books[path] = book + finally: pythoncom.CoUninitialize() From 4af32fc6f084c1c3f2754a46158ac1c881ad3992 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Tue, 8 Jun 2010 11:23:55 -0600 Subject: [PATCH 043/112] Fix #5750 (Default book cover position inconsistent) --- src/calibre/gui2/dialogs/metadata_single.py | 8 +++++--- src/calibre/gui2/status.py | 5 +---- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/src/calibre/gui2/dialogs/metadata_single.py b/src/calibre/gui2/dialogs/metadata_single.py index 1ea6743ae2..0241e1b542 100644 --- a/src/calibre/gui2/dialogs/metadata_single.py +++ b/src/calibre/gui2/dialogs/metadata_single.py @@ -403,12 +403,14 @@ class MetadataSingleDialog(ResizableDialog, Ui_MetadataSingleDialog): ag = QCoreApplication.instance().desktop().availableGeometry(self) self.cover.MAX_HEIGHT = ag.height()-(25 if (islinux or isfreebsd) else 0)-height_of_rest self.cover.MAX_WIDTH = ag.width()-(25 if (islinux or isfreebsd) else 0)-width_of_rest + pm = QPixmap() if cover: - pm = QPixmap() pm.loadFromData(cover) - if not pm.isNull(): - self.cover.setPixmap(pm) + if pm.isNull(): + pm = QPixmap(I('book.svg')) + else: self.cover_data = cover + self.cover.setPixmap(pm) self.original_series_name = unicode(self.series.text()).strip() if len(db.custom_column_label_map) == 0: self.central_widget.tabBar().setVisible(False) diff --git a/src/calibre/gui2/status.py b/src/calibre/gui2/status.py index 2759c4074b..14c6131fb8 100644 --- a/src/calibre/gui2/status.py +++ b/src/calibre/gui2/status.py @@ -52,10 +52,7 @@ class BookInfoDisplay(QWidget): QLabel.__init__(self) self.setMaximumWidth(81) self.setMaximumHeight(108) - self.default_pixmap = QPixmap(coverpath).scaled(self.maximumWidth(), - self.maximumHeight(), - Qt.IgnoreAspectRatio, - Qt.SmoothTransformation) + self.default_pixmap = QPixmap(coverpath) self.setScaledContents(True) self.statusbar_height = 120 self.setPixmap(self.default_pixmap) From fb9d327cbf083e184d008fd7574bebb1247a9a6e Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Tue, 8 Jun 2010 15:04:11 -0600 Subject: [PATCH 044/112] fix #5696 (incorrect encoding for Epub output for Sueddeutsche Zeitung generated in text) --- resources/recipes/sueddeutsche.recipe | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/resources/recipes/sueddeutsche.recipe b/resources/recipes/sueddeutsche.recipe index 8f4d7e5892..9a5b00fc6c 100644 --- a/resources/recipes/sueddeutsche.recipe +++ b/resources/recipes/sueddeutsche.recipe @@ -19,10 +19,10 @@ class Sueddeutsche(BasicNewsRecipe): no_stylesheets = True language = 'de' - encoding = 'iso-8859-15' + encoding = 'utf-8' remove_javascript = True - + remove_tags = [ dict(name='link'), dict(name='iframe'), dict(name='div', attrs={'id':["bookmarking","themenbox","artikelfoot","CAD_AD", "SKY_AD","NT1_AD","navbar1","sdesiteheader"]}), From 3d551ff1ab4ff8081296372014936e8a1c853cae Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Tue, 8 Jun 2010 15:35:10 -0600 Subject: [PATCH 045/112] Fix cover browser positioning and only open viewer when doubleclicking on row numbers --- src/calibre/gui2/main.ui | 70 ++++++++++++++++++++++------------------ src/calibre/gui2/ui.py | 4 +-- 2 files changed, 40 insertions(+), 34 deletions(-) diff --git a/src/calibre/gui2/main.ui b/src/calibre/gui2/main.ui index 1abaf53d3c..b4bafc3b79 100644 --- a/src/calibre/gui2/main.ui +++ b/src/calibre/gui2/main.ui @@ -329,7 +329,7 @@ 0 - + @@ -389,37 +389,43 @@ - - - - 100 - 10 - - - - true - - - true - - - false - - - QAbstractItemView::DragDrop - - - true - - - QAbstractItemView::SelectRows - - - false - - - false - + + + + + + + 100 + 10 + + + + true + + + true + + + false + + + QAbstractItemView::DragDrop + + + true + + + QAbstractItemView::SelectRows + + + false + + + false + + + + diff --git a/src/calibre/gui2/ui.py b/src/calibre/gui2/ui.py index 7d258608d0..6a1a508891 100644 --- a/src/calibre/gui2/ui.py +++ b/src/calibre/gui2/ui.py @@ -597,7 +597,7 @@ class Main(MainWindow, Ui_MainWindow, DeviceGUI): self.cover_flow = CoverFlow(height=cfh, text_height=text_height) self.cover_flow.setVisible(False) if not config['separate_cover_flow']: - self.library.layout().addWidget(self.cover_flow) + self.cb_layout.addWidget(self.cover_flow) self.cover_flow.currentChanged.connect(self.sync_listview_to_cf) self.library_view.selectionModel().currentRowChanged.connect( self.sync_cf_to_listview) @@ -638,7 +638,6 @@ class Main(MainWindow, Ui_MainWindow, DeviceGUI): self.connect(self.scheduler, SIGNAL('start_recipe_fetch(PyQt_PyObject)'), self.download_scheduled_recipe, Qt.QueuedConnection) - self.library_view.verticalHeader().sectionClicked.connect(self.view_specific_book) for view in ('library', 'memory', 'card_a', 'card_b'): view = getattr(self, view+'_view') @@ -923,6 +922,7 @@ class Main(MainWindow, Ui_MainWindow, DeviceGUI): index = m.index(row, 0) if self.library_view.currentIndex().row() != row and index.isValid(): self.cover_flow_sync_flag = False + self.library_view.scrollTo(index) sm = self.library_view.selectionModel() sm.select(index, sm.ClearAndSelect|sm.Rows) self.library_view.setCurrentIndex(index) From e2c2067095f2920dff8e545c8923ef0a34e10863 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Tue, 8 Jun 2010 16:43:24 -0600 Subject: [PATCH 046/112] Fix regression that broke sync between the cover browser and the book list --- src/calibre/gui2/library/views.py | 8 ++++++++ src/calibre/gui2/ui.py | 6 +++--- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/src/calibre/gui2/library/views.py b/src/calibre/gui2/library/views.py index 6c3f04828e..109b001925 100644 --- a/src/calibre/gui2/library/views.py +++ b/src/calibre/gui2/library/views.py @@ -426,6 +426,14 @@ class BooksView(QTableView): # {{{ if dy != 0: self.column_header.update() + def scroll_to_row(self, row): + if row > -1: + h = self.horizontalHeader() + for i in range(h.count()): + if not h.isSectionHidden(i): + self.scrollTo(self.model().index(row, i)) + break + def close(self): self._model.close() diff --git a/src/calibre/gui2/ui.py b/src/calibre/gui2/ui.py index 6a1a508891..af33b2e997 100644 --- a/src/calibre/gui2/ui.py +++ b/src/calibre/gui2/ui.py @@ -800,7 +800,7 @@ class Main(MainWindow, Ui_MainWindow, DeviceGUI): d.layout().addWidget(self.cover_flow) self.cover_flow.setVisible(True) self.cover_flow.setFocus(Qt.OtherFocusReason) - self.library_view.scrollTo(self.library_view.currentIndex()) + self.library_view.scroll_to_row(self.library_view.currentIndex().row()) d.show() d.finished.connect(self.sidebar.external_cover_flow_finished) self.cf_dialog = d @@ -824,7 +824,7 @@ class Main(MainWindow, Ui_MainWindow, DeviceGUI): self.library_view.currentIndex()) self.cover_flow.setVisible(True) self.cover_flow.setFocus(Qt.OtherFocusReason) - self.library_view.scrollTo(self.library_view.currentIndex()) + self.library_view.scroll_to_row(self.library_view.currentIndex().row()) self.cover_flow_sync_timer.start(500) else: self.cover_flow_sync_timer.stop() @@ -922,7 +922,7 @@ class Main(MainWindow, Ui_MainWindow, DeviceGUI): index = m.index(row, 0) if self.library_view.currentIndex().row() != row and index.isValid(): self.cover_flow_sync_flag = False - self.library_view.scrollTo(index) + self.library_view.scroll_to_row(index.row()) sm = self.library_view.selectionModel() sm.select(index, sm.ClearAndSelect|sm.Rows) self.library_view.setCurrentIndex(index) From 34a236ca8fab3376b4b3b5b464b864163fb57fa9 Mon Sep 17 00:00:00 2001 From: Translators <> Date: Wed, 9 Jun 2010 04:34:25 +0100 Subject: [PATCH 047/112] Launchpad automatic translations update. --- src/calibre/translations/cs.po | 2 +- src/calibre/translations/fr.po | 2 +- src/calibre/translations/pt_BR.po | 36 ++++++++++++++++--------------- 3 files changed, 21 insertions(+), 19 deletions(-) diff --git a/src/calibre/translations/cs.po b/src/calibre/translations/cs.po index e5c7604a3f..46a575ebe3 100644 --- a/src/calibre/translations/cs.po +++ b/src/calibre/translations/cs.po @@ -14,7 +14,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2010-06-08 03:38+0000\n" +"X-Launchpad-Export-Date: 2010-06-09 03:34+0000\n" "X-Generator: Launchpad (build Unknown)\n" #: /home/kovid/work/calibre/src/calibre/customize/__init__.py:43 diff --git a/src/calibre/translations/fr.po b/src/calibre/translations/fr.po index a15a096ef3..50d862fc64 100644 --- a/src/calibre/translations/fr.po +++ b/src/calibre/translations/fr.po @@ -13,7 +13,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2010-06-08 03:38+0000\n" +"X-Launchpad-Export-Date: 2010-06-09 03:34+0000\n" "X-Generator: Launchpad (build Unknown)\n" "X-Poedit-Bookmarks: 1177,-1,-1,-1,-1,-1,-1,-1,-1,-1\n" "Generated-By: pygettext.py 1.5\n" diff --git a/src/calibre/translations/pt_BR.po b/src/calibre/translations/pt_BR.po index e62caca1d0..76ce0aebd1 100644 --- a/src/calibre/translations/pt_BR.po +++ b/src/calibre/translations/pt_BR.po @@ -8,13 +8,13 @@ msgstr "" "Project-Id-Version: calibre\n" "Report-Msgid-Bugs-To: FULL NAME \n" "POT-Creation-Date: 2010-06-06 21:03+0000\n" -"PO-Revision-Date: 2010-06-08 03:37+0000\n" +"PO-Revision-Date: 2010-06-09 03:33+0000\n" "Last-Translator: Thomaz Rodrigues Botelho \n" "Language-Team: Brazilian Portuguese \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2010-06-08 03:39+0000\n" +"X-Launchpad-Export-Date: 2010-06-09 03:34+0000\n" "X-Generator: Launchpad (build Unknown)\n" #: /home/kovid/work/calibre/src/calibre/customize/__init__.py:43 @@ -1557,7 +1557,7 @@ msgstr "Configura a data da publicação." #: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:489 msgid "Set the book timestamp (used by the date column in calibre)." -msgstr "" +msgstr "Configura a data do livro (usada pela coluna data no calibre)." #: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:589 msgid "Could not find an ebook inside the archive" @@ -1851,7 +1851,7 @@ msgstr "Caminho para o arquivo de saída" #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/lrs/convert_from.py:290 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/isbndb.py:113 msgid "Verbose processing" -msgstr "" +msgstr "Processamento detalhado" #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/lrs/convert_from.py:292 msgid "Convert LRS to LRS, useful for debugging." @@ -1987,7 +1987,7 @@ msgstr "Produtor" #: /home/kovid/work/calibre/src/calibre/gui2/status.py:107 #: /home/kovid/work/calibre/src/calibre/gui2/status.py:149 msgid "Comments" -msgstr "" +msgstr "Comentários" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:384 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories.py:46 @@ -2016,7 +2016,7 @@ msgstr "Idioma" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:389 #: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:996 msgid "Timestamp" -msgstr "" +msgstr "Assinatura de tempo (timestamp)" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:391 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:66 @@ -2026,11 +2026,11 @@ msgstr "Publicado" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:393 msgid "Rights" -msgstr "" +msgstr "Direitos" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/amazon.py:85 msgid "EDITORIAL REVIEW" -msgstr "" +msgstr "Análise Editorial" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/archive.py:22 msgid "" @@ -2170,7 +2170,7 @@ msgstr "tags" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/fetch.py:111 msgid "description/reviews" -msgstr "" +msgstr "descrição/análises" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/fetch.py:112 msgid "Download %s from %s" @@ -2216,11 +2216,11 @@ msgstr "A ID de ISBN do livro que você deseja obter metadados." #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/isbndb.py:107 msgid "The author whose book to search for." -msgstr "" +msgstr "O autor do livro à procurar." #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/isbndb.py:109 msgid "The title of the book to search for." -msgstr "" +msgstr "O título do livro à procurar." #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/isbndb.py:111 msgid "The publisher of the book to search for." @@ -5508,7 +5508,7 @@ msgstr "&Avaliação" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:376 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:377 msgid "Rating of this book. 0-5 stars" -msgstr "" +msgstr "Avalie este livro. 0-5 estrelas" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:165 msgid "No change" @@ -6580,7 +6580,7 @@ msgstr "Tamanho (MB)" #: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:52 msgid "Rating" -msgstr "" +msgstr "Avaliação" #: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:285 #: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:291 @@ -7729,7 +7729,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1933 msgid "Generating %s catalog..." -msgstr "" +msgstr "Gerando %s catálogo..." #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1939 msgid "" @@ -9222,6 +9222,8 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/library/database2.py:1542 msgid "

Migrating old database to ebook library in %s

" msgstr "" +"

Migrando o banco de dados antigo para a biblioteca de ebook em " +"%s

" #: /home/kovid/work/calibre/src/calibre/library/database2.py:1571 msgid "Copying %s" @@ -9245,7 +9247,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:111 msgid "Ratings" -msgstr "" +msgstr "Avaliações" #: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:24 msgid "The title" @@ -9277,7 +9279,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:33 msgid "The rating" -msgstr "" +msgstr "A avaliação" #: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:34 msgid "The ISBN" @@ -9439,7 +9441,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/library/server/opds.py:141 msgid "RATING: %s
" -msgstr "" +msgstr "AVALIAÇÃO: %s
" #: /home/kovid/work/calibre/src/calibre/library/server/opds.py:144 msgid "TAGS: %s
" From 8a88c2a6200272f6828335b849b73b5df1ad66d1 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Tue, 8 Jun 2010 23:20:58 -0600 Subject: [PATCH 048/112] Rationalize various pieces of GUI initialization, making the jobs button a self contained widget.Note cover browser is currently broken. --- src/calibre/gui2/cover_flow.py | 122 ++++- src/calibre/gui2/init.py | 275 +++++++++++ src/calibre/gui2/jobs.py | 113 ++++- src/calibre/gui2/pictureflow/pictureflow.sip | 4 + src/calibre/gui2/sidebar.py | 99 +--- src/calibre/gui2/tag_view.py | 51 +- src/calibre/gui2/ui.py | 488 ++----------------- 7 files changed, 567 insertions(+), 585 deletions(-) create mode 100644 src/calibre/gui2/init.py diff --git a/src/calibre/gui2/cover_flow.py b/src/calibre/gui2/cover_flow.py index 81d67ff7dd..e762caf11a 100644 --- a/src/calibre/gui2/cover_flow.py +++ b/src/calibre/gui2/cover_flow.py @@ -7,16 +7,17 @@ __docformat__ = 'restructuredtext en' Module to implement the Cover Flow feature ''' -import sys, os +import sys, os, time -from PyQt4.QtGui import QImage, QSizePolicy -from PyQt4.QtCore import Qt, QSize, SIGNAL, QObject +from PyQt4.Qt import QImage, QSizePolicy, QTimer, QDialog, Qt, QSize, \ + QStackedLayout from calibre import plugins -from calibre.gui2 import config +from calibre.gui2 import config, available_height, available_width pictureflow, pictureflowerror = plugins['pictureflow'] if pictureflow is not None: + class EmptyImageList(pictureflow.FlowImages): def __init__(self): pictureflow.FlowImages.__init__(self) @@ -51,7 +52,7 @@ if pictureflow is not None: def __init__(self, model, buffer=20): pictureflow.FlowImages.__init__(self) self.model = model - QObject.connect(self.model, SIGNAL('modelReset()'), self.reset) + self.model.modelReset.connect(self.reset) def count(self): return self.model.count() @@ -66,7 +67,7 @@ if pictureflow is not None: return ans def reset(self): - self.emit(SIGNAL('dataChanged()')) + self.dataChanged.emit() def image(self, index): return self.model.cover(index) @@ -74,13 +75,14 @@ if pictureflow is not None: class CoverFlow(pictureflow.PictureFlow): - def __init__(self, height=300, parent=None, text_height=25): + def __init__(self, parent=None): pictureflow.PictureFlow.__init__(self, parent, config['cover_flow_queue_length']+1) - self.setSlideSize(QSize(int(2/3. * height), height)) - self.setMinimumSize(QSize(int(2.35*0.67*height), (5/3.)*height+text_height)) + self.setSlideSize(QSize(int(2/3. * 10), 10)) + self.setMinimumSize(QSize(10, 10)) self.setFocusPolicy(Qt.WheelFocus) - self.setSizePolicy(QSizePolicy(QSizePolicy.Minimum, QSizePolicy.Minimum)) + self.setSizePolicy(QSizePolicy(QSizePolicy.Expanding, + QSizePolicy.Expanding)) def wheelEvent(self, ev): ev.accept() @@ -95,6 +97,104 @@ else: DatabaseImages = None FileSystemImages = None +class CoverFlowMixin(object): + + def __init__(self): + self.cover_flow = None + if CoverFlow is not None: + self.cf_last_updated_at = None + self.cover_flow_sync_timer = QTimer(self) + self.cover_flow_sync_timer.timeout.connect(self.cover_flow_do_sync) + self.cover_flow_sync_flag = True + self.cover_flow = CoverFlow(parent=self) + self.cover_flow.setVisible(False) + if not config['separate_cover_flow']: + self.cb_layout.addWidget(self.cover_flow) + self.cover_flow.currentChanged.connect(self.sync_listview_to_cf) + self.library_view.selectionModel().currentRowChanged.connect( + self.sync_cf_to_listview) + self.db_images = DatabaseImages(self.library_view.model()) + self.cover_flow.setImages(self.db_images) + ah, aw = available_height(), available_width() + self._cb_layout_is_horizontal = float(aw)/ah >= 1.4 + self.cb_layout.setDirection(self.cb_layout.LeftToRight if + self._cb_layout_is_horizontal else + self.cb_layout.TopToBottom) + + def toggle_cover_flow_visibility(self, show): + if config['separate_cover_flow']: + if show: + d = QDialog(self) + ah, aw = available_height(), available_width() + d.resize(int(aw/2.), ah-60) + d._layout = QStackedLayout() + d.setLayout(d._layout) + d.setWindowTitle(_('Browse by covers')) + d.layout().addWidget(self.cover_flow) + self.cover_flow.setVisible(True) + self.cover_flow.setFocus(Qt.OtherFocusReason) + d.show() + d.finished.connect(self.sidebar.external_cover_flow_finished) + self.cf_dialog = d + else: + cfd = getattr(self, 'cf_dialog', None) + if cfd is not None: + self.cover_flow.setVisible(False) + cfd.hide() + self.cf_dialog = None + else: + if show: + self.cover_flow.setVisible(True) + self.cover_flow.setFocus(Qt.OtherFocusReason) + else: + self.cover_flow.setVisible(False) + + def toggle_cover_flow(self, show): + if show: + self.cover_flow.setCurrentSlide(self.library_view.currentIndex().row()) + self.library_view.setCurrentIndex( + self.library_view.currentIndex()) + self.cover_flow_sync_timer.start(500) + self.library_view.scroll_to_row(self.library_view.currentIndex().row()) + else: + self.cover_flow_sync_timer.stop() + idx = self.library_view.model().index(self.cover_flow.currentSlide(), 0) + if idx.isValid(): + sm = self.library_view.selectionModel() + sm.select(idx, sm.ClearAndSelect|sm.Rows) + self.library_view.setCurrentIndex(idx) + self.library_view.scroll_to_row(idx.row()) + self.toggle_cover_flow_visibility(show) + + def sync_cf_to_listview(self, current, previous): + if self.cover_flow_sync_flag and self.cover_flow.isVisible() and \ + self.cover_flow.currentSlide() != current.row(): + self.cover_flow.setCurrentSlide(current.row()) + self.cover_flow_sync_flag = True + + def cover_flow_do_sync(self): + self.cover_flow_sync_flag = True + try: + if self.cover_flow.isVisible() and self.cf_last_updated_at is not None and \ + time.time() - self.cf_last_updated_at > 0.5: + self.cf_last_updated_at = None + row = self.cover_flow.currentSlide() + m = self.library_view.model() + index = m.index(row, 0) + if self.library_view.currentIndex().row() != row and index.isValid(): + self.cover_flow_sync_flag = False + self.library_view.scroll_to_row(index.row()) + sm = self.library_view.selectionModel() + sm.select(index, sm.ClearAndSelect|sm.Rows) + self.library_view.setCurrentIndex(index) + except: + pass + + + def sync_listview_to_cf(self, row): + self.cf_last_updated_at = time.time() + + def main(args=sys.argv): return 0 @@ -108,7 +208,7 @@ if __name__ == '__main__': path = sys.argv[1] model = FileSystemImages(sys.argv[1]) cf.setImages(model) - cf.connect(cf, SIGNAL('currentChanged(int)'), model.currentChanged) + cf.currentChanged[int].connect(model.currentChanged) w.setCentralWidget(cf) w.show() diff --git a/src/calibre/gui2/init.py b/src/calibre/gui2/init.py new file mode 100644 index 0000000000..e6fbc460ef --- /dev/null +++ b/src/calibre/gui2/init.py @@ -0,0 +1,275 @@ +#!/usr/bin/env python +# vim:fileencoding=UTF-8:ts=4:sw=4:sta:et:sts=4:ai + +__license__ = 'GPL v3' +__copyright__ = '2010, Kovid Goyal ' +__docformat__ = 'restructuredtext en' + +import functools + +from PyQt4.Qt import QMenu, Qt, pyqtSignal, QToolButton, QIcon + +from calibre.utils.config import prefs +from calibre.ebooks import BOOK_EXTENSIONS +from calibre.constants import isosx +from calibre.gui2 import config + +_keep_refs = [] + +def partial(*args, **kwargs): + ans = functools.partial(*args, **kwargs) + _keep_refs.append(ans) + return ans + +class SaveMenu(QMenu): # {{{ + + save_fmt = pyqtSignal(object) + + def __init__(self, parent): + QMenu.__init__(self, _('Save single format to disk...'), parent) + for ext in sorted(BOOK_EXTENSIONS): + action = self.addAction(ext.upper()) + setattr(self, 'do_'+ext, partial(self.do, ext)) + action.triggered.connect( + getattr(self, 'do_'+ext)) + + def do(self, ext, *args): + self.save_fmt.emit(ext) + +# }}} + +class ToolbarMixin(object): # {{{ + + def __init__(self): + md = QMenu() + md.addAction(_('Edit metadata individually'), + partial(self.edit_metadata, False)) + md.addSeparator() + md.addAction(_('Edit metadata in bulk'), + partial(self.edit_metadata, False, bulk=True)) + md.addSeparator() + md.addAction(_('Download metadata and covers'), + partial(self.download_metadata, False, covers=True)) + md.addAction(_('Download only metadata'), + partial(self.download_metadata, False, covers=False)) + md.addAction(_('Download only covers'), + partial(self.download_metadata, False, covers=True, + set_metadata=False, set_social_metadata=False)) + md.addAction(_('Download only social metadata'), + partial(self.download_metadata, False, covers=False, + set_metadata=False, set_social_metadata=True)) + self.metadata_menu = md + + mb = QMenu() + mb.addAction(_('Merge into first selected book - delete others'), + self.merge_books) + mb.addSeparator() + mb.addAction(_('Merge into first selected book - keep others'), + partial(self.merge_books, safe_merge=True)) + self.merge_menu = mb + self.action_merge.setMenu(mb) + md.addSeparator() + md.addAction(self.action_merge) + + self.add_menu = QMenu() + self.add_menu.addAction(_('Add books from a single directory'), + self.add_books) + self.add_menu.addAction(_('Add books from directories, including ' + 'sub-directories (One book per directory, assumes every ebook ' + 'file is the same book in a different format)'), + self.add_recursive_single) + self.add_menu.addAction(_('Add books from directories, including ' + 'sub directories (Multiple books per directory, assumes every ' + 'ebook file is a different book)'), self.add_recursive_multiple) + self.add_menu.addAction(_('Add Empty book. (Book entry with no ' + 'formats)'), self.add_empty) + self.action_add.setMenu(self.add_menu) + self.action_add.triggered.connect(self.add_books) + self.action_del.triggered.connect(self.delete_books) + self.action_edit.triggered.connect(self.edit_metadata) + self.action_merge.triggered.connect(self.merge_books) + + self.action_save.triggered.connect(self.save_to_disk) + self.save_menu = QMenu() + self.save_menu.addAction(_('Save to disk'), partial(self.save_to_disk, + False)) + self.save_menu.addAction(_('Save to disk in a single directory'), + partial(self.save_to_single_dir, False)) + self.save_menu.addAction(_('Save only %s format to disk')% + prefs['output_format'].upper(), + partial(self.save_single_format_to_disk, False)) + self.save_menu.addAction( + _('Save only %s format to disk in a single directory')% + prefs['output_format'].upper(), + partial(self.save_single_fmt_to_single_dir, False)) + self.save_sub_menu = SaveMenu(self) + self.save_menu.addMenu(self.save_sub_menu) + self.save_sub_menu.save_fmt.connect(self.save_specific_format_disk) + + self.action_view.triggered.connect(self.view_book) + self.view_menu = QMenu() + self.view_menu.addAction(_('View'), partial(self.view_book, False)) + ac = self.view_menu.addAction(_('View specific format')) + ac.setShortcut((Qt.ControlModifier if isosx else Qt.AltModifier)+Qt.Key_V) + self.action_view.setMenu(self.view_menu) + ac.triggered.connect(self.view_specific_format, type=Qt.QueuedConnection) + + self.delete_menu = QMenu() + self.delete_menu.addAction(_('Remove selected books'), self.delete_books) + self.delete_menu.addAction( + _('Remove files of a specific format from selected books..'), + self.delete_selected_formats) + self.delete_menu.addAction( + _('Remove all formats from selected books, except...'), + self.delete_all_but_selected_formats) + self.delete_menu.addAction( + _('Remove covers from selected books'), self.delete_covers) + self.action_del.setMenu(self.delete_menu) + + self.action_open_containing_folder.setShortcut(Qt.Key_O) + self.addAction(self.action_open_containing_folder) + self.action_sync.setShortcut(Qt.Key_D) + self.action_sync.setEnabled(True) + self.create_device_menu() + self.action_sync.triggered.connect( + self._sync_action_triggered) + + self.action_edit.setMenu(md) + self.action_save.setMenu(self.save_menu) + + cm = QMenu() + cm.addAction(_('Convert individually'), partial(self.convert_ebook, + False, bulk=False)) + cm.addAction(_('Bulk convert'), + partial(self.convert_ebook, False, bulk=True)) + cm.addSeparator() + ac = cm.addAction( + _('Create catalog of books in your calibre library')) + ac.triggered.connect(self.generate_catalog) + self.action_convert.setMenu(cm) + self.action_convert.triggered.connect(self.convert_ebook) + self.convert_menu = cm + + pm = QMenu() + ap = self.action_preferences + pm.addAction(ap) + pm.addAction(QIcon(I('wizard.svg')), _('Run welcome wizard'), + self.run_wizard) + self.action_preferences.setMenu(pm) + self.preferences_menu = pm + for x in (self.preferences_action, self.action_preferences): + x.triggered.connect(self.do_config) + + for x in ('news', 'edit', 'sync', 'convert', 'save', 'add', 'view', + 'del', 'preferences'): + w = self.tool_bar.widgetForAction(getattr(self, 'action_'+x)) + w.setPopupMode(w.MenuButtonPopup) + + self.tool_bar.setContextMenuPolicy(Qt.PreventContextMenu) + + for ch in self.tool_bar.children(): + if isinstance(ch, QToolButton): + ch.setCursor(Qt.PointingHandCursor) + + self.tool_bar.contextMenuEvent = self.no_op + + def read_toolbar_settings(self): + self.tool_bar.setIconSize(config['toolbar_icon_size']) + self.tool_bar.setToolButtonStyle( + Qt.ToolButtonTextUnderIcon if \ + config['show_text_in_toolbar'] else \ + Qt.ToolButtonIconOnly) + +# }}} + +class LibraryViewMixin(object): # {{{ + + def __init__(self, db): + 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.action_books_by_same_author.triggered.connect( + partial(self.show_similar_books, 'authors')) + self.action_books_in_this_series.triggered.connect( + partial(self.show_similar_books, 'series')) + self.action_books_with_the_same_tags.triggered.connect( + partial(self.show_similar_books, 'tag')) + self.action_books_by_this_publisher.triggered.connect( + partial(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_del, + similar_menu=similar_menu) + + self.memory_view.set_context_menu(None, None, None, + self.action_view, self.action_save, None, None, self.action_del) + self.card_a_view.set_context_menu(None, None, None, + self.action_view, self.action_save, None, None, self.action_del) + self.card_b_view.set_context_menu(None, None, None, + self.action_view, self.action_save, None, None, self.action_del) + + self.library_view.files_dropped.connect(self.files_dropped, type=Qt.QueuedConnection) + for func, args in [ + ('connect_to_search_box', (self.search, + self.search_done)), + ('connect_to_book_display', + (self.status_bar.book_info.show_data,)), + ]: + for view in (self.library_view, self.memory_view, self.card_a_view, self.card_b_view): + getattr(view, func)(*args) + + self.memory_view.connect_dirtied_signal(self.upload_booklists) + self.card_a_view.connect_dirtied_signal(self.upload_booklists) + self.card_b_view.connect_dirtied_signal(self.upload_booklists) + + self.book_on_device(None, reset=True) + db.set_book_on_device_func(self.book_on_device) + self.library_view.set_database(db) + self.library_view.model().set_book_on_device_func(self.book_on_device) + prefs['library_path'] = self.library_path + + def show_similar_books(self, type, *args): + 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 in ('author', 'authors'): + 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)) + + + + # }}} + diff --git a/src/calibre/gui2/jobs.py b/src/calibre/gui2/jobs.py index 0b54ce2406..adf938c435 100644 --- a/src/calibre/gui2/jobs.py +++ b/src/calibre/gui2/jobs.py @@ -7,11 +7,14 @@ __docformat__ = 'restructuredtext en' Job management. ''' +import re + from Queue import Empty, Queue from PyQt4.Qt import QAbstractTableModel, QVariant, QModelIndex, Qt, \ - QTimer, SIGNAL, QIcon, QDialog, QAbstractItemDelegate, QApplication, \ - QSize, QStyleOptionProgressBarV2, QString, QStyle, QToolTip + QTimer, pyqtSignal, QIcon, QDialog, QAbstractItemDelegate, QApplication, \ + QSize, QStyleOptionProgressBarV2, QString, QStyle, QToolTip, QFrame, \ + QHBoxLayout, QVBoxLayout, QSizePolicy, QLabel, QCoreApplication from calibre.utils.ipc.server import Server from calibre.utils.ipc.job import ParallelJob @@ -20,9 +23,13 @@ from calibre.gui2.device import DeviceJob from calibre.gui2.dialogs.jobs_ui import Ui_JobsDialog from calibre import __appname__ from calibre.gui2.dialogs.job_view_ui import Ui_Dialog +from calibre.gui2.progress_indicator import ProgressIndicator class JobManager(QAbstractTableModel): + job_added = pyqtSignal(int) + job_done = pyqtSignal(int) + def __init__(self): QAbstractTableModel.__init__(self) self.wait_icon = QVariant(QIcon(I('jobs.svg'))) @@ -37,8 +44,7 @@ class JobManager(QAbstractTableModel): self.changed_queue = Queue() self.timer = QTimer(self) - self.connect(self.timer, SIGNAL('timeout()'), self.update, - Qt.QueuedConnection) + self.timer.timeout.connect(self.update, type=Qt.QueuedConnection) self.timer.start(1000) def columnCount(self, parent=QModelIndex()): @@ -130,8 +136,7 @@ class JobManager(QAbstractTableModel): for i, j in enumerate(self.jobs): if j.run_state == j.RUNNING: idx = self.index(i, 3) - self.emit(SIGNAL('dataChanged(QModelIndex,QModelIndex)'), - idx, idx) + self.dataChanged.emit(idx, idx) # Update parallel jobs jobs = set([]) @@ -157,20 +162,19 @@ class JobManager(QAbstractTableModel): self.jobs.sort() self.reset() if job.is_finished: - self.emit(SIGNAL('job_done(int)'), len(self.unfinished_jobs())) + self.job_done.emit(len(self.unfinished_jobs())) else: for job in jobs: idx = self.jobs.index(job) - self.emit(SIGNAL('dataChanged(QModelIndex,QModelIndex)'), + self.dataChanged.emit( self.index(idx, 0), self.index(idx, 3)) def _add_job(self, job): - self.emit(SIGNAL('layoutAboutToBeChanged()')) + self.layoutAboutToBeChanged.emit() self.jobs.append(job) self.jobs.sort() - self.emit(SIGNAL('job_added(int)'), len(self.unfinished_jobs())) - self.emit(SIGNAL('layoutChanged()')) + self.job_added.emit(len(self.unfinished_jobs())) def done_jobs(self): return [j for j in self.jobs if j.is_finished] @@ -266,6 +270,76 @@ class DetailView(QDialog, Ui_Dialog): if more: self.log.appendPlainText(more.decode('utf-8', 'replace')) +class JobsButton(QFrame): + + def __init__(self, horizontal=False, size=48, parent=None): + QFrame.__init__(self, parent) + self.pi = ProgressIndicator(self, size) + self._jobs = QLabel(''+_('Jobs:')+' 0') + + if horizontal: + self.setLayout(QHBoxLayout()) + else: + self.setLayout(QVBoxLayout()) + self._jobs.setAlignment(Qt.AlignHCenter|Qt.AlignBottom) + + self.layout().addWidget(self.pi) + self.layout().addWidget(self._jobs) + if not horizontal: + self.layout().setAlignment(self._jobs, Qt.AlignHCenter) + self._jobs.setMargin(0) + self.layout().setMargin(0) + self._jobs.setSizePolicy(QSizePolicy.Minimum, QSizePolicy.Minimum) + self.setCursor(Qt.PointingHandCursor) + self.setToolTip(_('Click to see list of active jobs.')) + + def initialize(self, jobs_dialog, job_manager): + self.jobs_dialog = jobs_dialog + job_manager.job_added.connect(self.job_added) + job_manager.job_done.connect(self.job_done) + + + def mouseReleaseEvent(self, event): + if self.jobs_dialog.isVisible(): + self.jobs_dialog.hide() + else: + self.jobs_dialog.show() + + @property + def is_running(self): + return self.pi.isAnimated() + + def start(self): + self.pi.startAnimation() + + def stop(self): + self.pi.stopAnimation() + + def jobs(self): + src = unicode(self._jobs.text()) + return int(re.search(r'\d+', src).group()) + + def job_added(self, nnum): + jobs = self._jobs + src = unicode(jobs.text()) + num = self.jobs() + text = src.replace(str(num), str(nnum)) + jobs.setText(text) + self.start() + + def job_done(self, nnum): + jobs = self._jobs + src = unicode(jobs.text()) + num = self.jobs() + text = src.replace(str(num), str(nnum)) + jobs.setText(text) + if nnum == 0: + self.no_more_jobs() + + def no_more_jobs(self): + if self.is_running: + self.stop() + QCoreApplication.instance().alert(self, 5000) class JobsDialog(QDialog, Ui_JobsDialog): @@ -278,14 +352,9 @@ class JobsDialog(QDialog, Ui_JobsDialog): self.model = model self.setWindowModality(Qt.NonModal) self.setWindowTitle(__appname__ + _(' - Jobs')) - self.connect(self.kill_button, SIGNAL('clicked()'), - self.kill_job) - self.connect(self.details_button, SIGNAL('clicked()'), - self.show_details) - self.connect(self.stop_all_jobs_button, SIGNAL('clicked()'), - self.kill_all_jobs) - self.connect(self, SIGNAL('kill_job(int, PyQt_PyObject)'), - self.jobs_view.model().kill_job) + self.kill_button.clicked.connect(self.kill_job) + self.details_button.clicked.connect(self.show_details) + self.stop_all_jobs_button.clicked.connect(self.kill_all_jobs) self.pb_delegate = ProgressBarDelegate(self) self.jobs_view.setItemDelegateForColumn(2, self.pb_delegate) self.jobs_view.doubleClicked.connect(self.show_job_details) @@ -304,18 +373,18 @@ class JobsDialog(QDialog, Ui_JobsDialog): d.exec_() d.timer.stop() - def kill_job(self): + def kill_job(self, *args): for index in self.jobs_view.selectedIndexes(): row = index.row() self.model.kill_job(row, self) return - def show_details(self): + def show_details(self, *args): for index in self.jobs_view.selectedIndexes(): self.show_job_details(index) return - def kill_all_jobs(self): + def kill_all_jobs(self, *args): self.model.kill_all_jobs() def closeEvent(self, e): diff --git a/src/calibre/gui2/pictureflow/pictureflow.sip b/src/calibre/gui2/pictureflow/pictureflow.sip index c636529e05..9202dd8ad5 100644 --- a/src/calibre/gui2/pictureflow/pictureflow.sip +++ b/src/calibre/gui2/pictureflow/pictureflow.sip @@ -16,6 +16,10 @@ public: virtual int count(); virtual QImage image(int index); virtual QString caption(int index); + +signals: + void dataChanged(); + }; diff --git a/src/calibre/gui2/sidebar.py b/src/calibre/gui2/sidebar.py index bd305912a0..6710b5d471 100644 --- a/src/calibre/gui2/sidebar.py +++ b/src/calibre/gui2/sidebar.py @@ -5,78 +5,13 @@ __license__ = 'GPL v3' __copyright__ = '2010, Kovid Goyal ' __docformat__ = 'restructuredtext en' -import re from functools import partial from PyQt4.Qt import QToolBar, Qt, QIcon, QSizePolicy, QWidget, \ - QFrame, QVBoxLayout, QLabel, QSize, QCoreApplication, QToolButton + QSize, QToolButton -from calibre.gui2.progress_indicator import ProgressIndicator from calibre.gui2 import dynamic -class JobsButton(QFrame): - - def __init__(self, parent): - QFrame.__init__(self, parent) - self.setLayout(QVBoxLayout()) - self.pi = ProgressIndicator(self) - self.layout().addWidget(self.pi) - self.jobs = QLabel(''+_('Jobs:')+' 0') - self.jobs.setAlignment(Qt.AlignHCenter|Qt.AlignBottom) - self.layout().addWidget(self.jobs) - self.layout().setAlignment(self.jobs, Qt.AlignHCenter) - self.jobs.setMargin(0) - self.layout().setMargin(0) - self.jobs.setSizePolicy(QSizePolicy.Minimum, QSizePolicy.Minimum) - self.setCursor(Qt.PointingHandCursor) - self.setToolTip(_('Click to see list of active jobs.')) - - def initialize(self, jobs_dialog): - self.jobs_dialog = jobs_dialog - - def mouseReleaseEvent(self, event): - if self.jobs_dialog.isVisible(): - self.jobs_dialog.hide() - else: - self.jobs_dialog.show() - - @property - def is_running(self): - return self.pi.isAnimated() - - def start(self): - self.pi.startAnimation() - - def stop(self): - self.pi.stopAnimation() - - -class Jobs(ProgressIndicator): - - def initialize(self, jobs_dialog): - self.jobs_dialog = jobs_dialog - - def mouseClickEvent(self, event): - if self.jobs_dialog.isVisible(): - self.jobs_dialog.jobs_view.write_settings() - self.jobs_dialog.hide() - else: - self.jobs_dialog.jobs_view.read_settings() - self.jobs_dialog.show() - self.jobs_dialog.jobs_view.restore_column_widths() - - @property - def is_running(self): - return self.isAnimated() - - def start(self): - self.startAnimation() - - def stop(self): - self.stopAnimation() - - - class SideBar(QToolBar): toggle_texts = { @@ -114,8 +49,6 @@ class SideBar(QToolBar): self.spacer = QWidget(self) self.spacer.setSizePolicy(QSizePolicy.Minimum, QSizePolicy.Expanding) self.addWidget(self.spacer) - self.jobs_button = JobsButton(self) - self.addWidget(self.jobs_button) self.show_cover_browser = partial(self._toggle_cover_browser, show=True) self.hide_cover_browser = partial(self._toggle_cover_browser, @@ -124,9 +57,8 @@ class SideBar(QToolBar): if isinstance(ch, QToolButton): ch.setCursor(Qt.PointingHandCursor) - def initialize(self, jobs_dialog, cover_browser, toggle_cover_browser, + def initialize(self, jobs_button, cover_browser, toggle_cover_browser, cover_browser_error, vertical_splitter, horizontal_splitter): - self.jobs_button.initialize(jobs_dialog) self.cover_browser, self.do_toggle_cover_browser = cover_browser, \ toggle_cover_browser if self.cover_browser is None: @@ -166,6 +98,7 @@ class SideBar(QToolBar): 'book_info'), type=Qt.QueuedConnection) self.horizontal_splitter.state_changed.connect(partial(self.view_status_changed, 'tag_browser'), type=Qt.QueuedConnection) + self.addWidget(jobs_button) @@ -211,30 +144,4 @@ class SideBar(QToolBar): def _toggle_book_info(self, show=None): self.vertical_splitter.toggle_side_index() - def jobs(self): - src = unicode(self.jobs_button.jobs.text()) - return int(re.search(r'\d+', src).group()) - - def job_added(self, nnum): - jobs = self.jobs_button.jobs - src = unicode(jobs.text()) - num = self.jobs() - text = src.replace(str(num), str(nnum)) - jobs.setText(text) - self.jobs_button.start() - - def job_done(self, nnum): - jobs = self.jobs_button.jobs - src = unicode(jobs.text()) - num = self.jobs() - text = src.replace(str(num), str(nnum)) - jobs.setText(text) - if nnum == 0: - self.no_more_jobs() - - def no_more_jobs(self): - if self.jobs_button.is_running: - self.jobs_button.stop() - QCoreApplication.instance().alert(self, 5000) - diff --git a/src/calibre/gui2/tag_view.py b/src/calibre/gui2/tag_view.py index e8f3068d35..b5ced8d626 100644 --- a/src/calibre/gui2/tag_view.py +++ b/src/calibre/gui2/tag_view.py @@ -18,6 +18,8 @@ from calibre.utils.config import prefs from calibre.library.field_metadata import TagsIcons from calibre.utils.search_query_parser import saved_searches from calibre.gui2 import error_dialog +from calibre.gui2.dialogs.tag_categories import TagCategories +from calibre.gui2.dialogs.tag_list_editor import TagListEditor class TagsView(QTreeView): # {{{ @@ -29,12 +31,16 @@ class TagsView(QTreeView): # {{{ tag_item_renamed = pyqtSignal() search_item_renamed = pyqtSignal() - def __init__(self, *args): - QTreeView.__init__(self, *args) + def __init__(self, parent=None): + QTreeView.__init__(self, parent=None) + self.tag_match = None self.setUniformRowHeights(True) self.setCursor(Qt.PointingHandCursor) self.setIconSize(QSize(30, 30)) - self.tag_match = None + self.setTabKeyNavigation(True) + self.setAlternatingRowColors(True) + self.setAnimated(True) + self.setHeaderHidden(True) def set_database(self, db, tag_match, popularity): self.hidden_categories = config['tag_browser_hidden_categories'] @@ -588,3 +594,42 @@ class TagsModel(QAbstractItemModel): # {{{ # }}} +class TagBrowserMixin(object): # {{{ + + def __init__(self, db): + self.tags_view.set_database(self.library_view.model().db, + self.tag_match, self.popularity) + self.tags_view.tags_marked.connect(self.search.search_from_tags) + self.tags_view.tags_marked.connect(self.saved_search.clear_to_help) + self.tags_view.tag_list_edit.connect(self.do_tags_list_edit) + self.tags_view.user_category_edit.connect(self.do_user_categories_edit) + self.tags_view.saved_search_edit.connect(self.do_saved_search_edit) + self.tags_view.tag_item_renamed.connect(self.do_tag_item_renamed) + self.tags_view.search_item_renamed.connect(self.saved_search.clear_to_help) + + def do_user_categories_edit(self, on_category=None): + d = TagCategories(self, self.library_view.model().db, on_category) + d.exec_() + if d.result() == d.Accepted: + self.tags_view.set_new_model() + self.tags_view.recount() + + def do_tags_list_edit(self, tag, category): + d = TagListEditor(self, self.library_view.model().db, tag, category) + d.exec_() + if d.result() == d.Accepted: + # Clean up everything, as information could have changed for many books. + self.library_view.model().refresh() + self.tags_view.set_new_model() + self.tags_view.recount() + self.saved_search.clear_to_help() + self.search.clear_to_help() + + def do_tag_item_renamed(self): + # Clean up library view and search + self.library_view.model().refresh() + self.saved_search.clear_to_help() + self.search.clear_to_help() + +# }}} + diff --git a/src/calibre/gui2/ui.py b/src/calibre/gui2/ui.py index af33b2e997..6db3fe217d 100644 --- a/src/calibre/gui2/ui.py +++ b/src/calibre/gui2/ui.py @@ -16,9 +16,9 @@ from threading import Thread from functools import partial from PyQt4.Qt import Qt, SIGNAL, QObject, QUrl, QTimer, \ QModelIndex, QPixmap, QColor, QPainter, QMenu, QIcon, \ - QToolButton, QDialog, QDesktopServices, \ + QDialog, QDesktopServices, \ QSystemTrayIcon, QApplication, QKeySequence, QAction, \ - QMessageBox, QStackedLayout, QHelpEvent, QInputDialog,\ + QMessageBox, QHelpEvent, QInputDialog,\ QThread, pyqtSignal from PyQt4.QtSvg import QSvgRenderer @@ -35,10 +35,9 @@ from calibre.gui2 import warning_dialog, choose_files, error_dialog, \ question_dialog,\ pixmap_to_data, choose_dir, \ Dispatcher, gprefs, \ - available_height, \ max_available_height, config, info_dialog, \ - available_width, GetMetadata -from calibre.gui2.cover_flow import CoverFlow, DatabaseImages, pictureflowerror + GetMetadata +from calibre.gui2.cover_flow import pictureflowerror, CoverFlowMixin from calibre.gui2.widgets import ProgressIndicator, IMAGE_EXTENSIONS from calibre.gui2.wizard import move_library from calibre.gui2.dialogs.scheduler import Scheduler @@ -46,7 +45,7 @@ from calibre.gui2.update import CheckForUpdates from calibre.gui2.main_window import MainWindow from calibre.gui2.main_ui import Ui_MainWindow from calibre.gui2.device import DeviceManager, DeviceMenu, DeviceGUI, Emailer -from calibre.gui2.jobs import JobManager, JobsDialog +from calibre.gui2.jobs import JobManager, JobsDialog, JobsButton from calibre.gui2.dialogs.metadata_single import MetadataSingleDialog from calibre.gui2.dialogs.metadata_bulk import MetadataBulkDialog from calibre.gui2.tools import convert_single_ebook, convert_bulk_ebook, \ @@ -60,24 +59,11 @@ from calibre.ebooks.BeautifulSoup import BeautifulSoup, Tag, NavigableString from calibre.library.database2 import LibraryDatabase2 from calibre.library.caches import CoverCache from calibre.gui2.dialogs.confirm_delete import confirm -from calibre.gui2.dialogs.tag_categories import TagCategories -from calibre.gui2.dialogs.tag_list_editor import TagListEditor from calibre.gui2.dialogs.saved_search_editor import SavedSearchEditor +from calibre.gui2.tag_view import TagBrowserMixin +from calibre.gui2.init import ToolbarMixin, LibraryViewMixin -class SaveMenu(QMenu): - - def __init__(self, parent): - QMenu.__init__(self, _('Save single format to disk...'), parent) - for ext in sorted(BOOK_EXTENSIONS): - action = self.addAction(ext.upper()) - setattr(self, 'do_'+ext, partial(self.do, ext)) - self.connect(action, SIGNAL('triggered(bool)'), - getattr(self, 'do_'+ext)) - - def do(self, ext, *args): - self.emit(SIGNAL('save_fmt(PyQt_PyObject)'), ext) - -class Listener(Thread): +class Listener(Thread): # {{{ def __init__(self, listener): Thread.__init__(self) @@ -102,7 +88,9 @@ class Listener(Thread): except: pass -class SystemTrayIcon(QSystemTrayIcon): +# }}} + +class SystemTrayIcon(QSystemTrayIcon): # {{{ def __init__(self, icon, parent): QSystemTrayIcon.__init__(self, icon, parent) @@ -115,7 +103,10 @@ class SystemTrayIcon(QSystemTrayIcon): return True return QSystemTrayIcon.event(self, ev) -class Main(MainWindow, Ui_MainWindow, DeviceGUI): +# }}} + +class Main(MainWindow, Ui_MainWindow, DeviceGUI, ToolbarMixin, + TagBrowserMixin, CoverFlowMixin, LibraryViewMixin): 'The main GUI' def set_default_thumbnail(self, height): @@ -234,7 +225,8 @@ class Main(MainWindow, Ui_MainWindow, DeviceGUI): self.connect(self.system_tray_icon, SIGNAL('activated(QSystemTrayIcon::ActivationReason)'), self.system_tray_icon_activated) - self.tool_bar.contextMenuEvent = self.no_op + QObject.connect(self.advanced_search_button, SIGNAL('clicked(bool)'), + self.do_advanced_search) ####################### Start spare job server ######################## QTimer.singleShot(1000, self.add_spare_server) @@ -277,281 +269,22 @@ class Main(MainWindow, Ui_MainWindow, DeviceGUI): self.status_bar.files_dropped.connect(self.files_dropped_on_book) ####################### Setup Toolbar ##################### - md = QMenu() - md.addAction(_('Edit metadata individually')) - md.addSeparator() - md.addAction(_('Edit metadata in bulk')) - md.addSeparator() - md.addAction(_('Download metadata and covers')) - md.addAction(_('Download only metadata')) - md.addAction(_('Download only covers')) - md.addAction(_('Download only social metadata')) - self.metadata_menu = md - - mb = QMenu() - mb.addAction(_('Merge into first selected book - delete others')) - mb.addSeparator() - mb.addAction(_('Merge into first selected book - keep others')) - self.merge_menu = mb - self.action_merge.setMenu(mb) - md.addSeparator() - md.addAction(self.action_merge) - - self.add_menu = QMenu() - self.add_menu.addAction(_('Add books from a single directory')) - self.add_menu.addAction(_('Add books from directories, including ' - 'sub-directories (One book per directory, assumes every ebook ' - 'file is the same book in a different format)')) - self.add_menu.addAction(_('Add books from directories, including ' - 'sub directories (Multiple books per directory, assumes every ' - 'ebook file is a different book)')) - self.add_menu.addAction(_('Add Empty book. (Book entry with no ' - 'formats)')) - self.action_add.setMenu(self.add_menu) - QObject.connect(self.action_add, SIGNAL("triggered(bool)"), - self.add_books) - QObject.connect(self.add_menu.actions()[0], SIGNAL("triggered(bool)"), - self.add_books) - QObject.connect(self.add_menu.actions()[1], SIGNAL("triggered(bool)"), - self.add_recursive_single) - QObject.connect(self.add_menu.actions()[2], SIGNAL("triggered(bool)"), - self.add_recursive_multiple) - QObject.connect(self.add_menu.actions()[3], SIGNAL('triggered(bool)'), - self.add_empty) - QObject.connect(self.action_del, SIGNAL("triggered(bool)"), - self.delete_books) - QObject.connect(self.action_edit, SIGNAL("triggered(bool)"), - self.edit_metadata) - self.__em1__ = partial(self.edit_metadata, bulk=False) - QObject.connect(md.actions()[0], SIGNAL('triggered(bool)'), - self.__em1__) - self.__em2__ = partial(self.edit_metadata, bulk=True) - QObject.connect(md.actions()[2], SIGNAL('triggered(bool)'), - self.__em2__) - self.__em3__ = partial(self.download_metadata, covers=True) - QObject.connect(md.actions()[4], SIGNAL('triggered(bool)'), - self.__em3__) - self.__em4__ = partial(self.download_metadata, covers=False) - QObject.connect(md.actions()[5], SIGNAL('triggered(bool)'), - self.__em4__) - self.__em5__ = partial(self.download_metadata, covers=True, - set_metadata=False, set_social_metadata=False) - QObject.connect(md.actions()[6], SIGNAL('triggered(bool)'), - self.__em5__) - self.__em6__ = partial(self.download_metadata, covers=False, - set_metadata=False, set_social_metadata=True) - QObject.connect(md.actions()[7], SIGNAL('triggered(bool)'), - self.__em6__) - - QObject.connect(self.action_merge, SIGNAL("triggered(bool)"), - self.merge_books) - QObject.connect(mb.actions()[0], SIGNAL('triggered(bool)'), - self.merge_books) - self.__mb1__ = partial(self.merge_books, safe_merge=True) - QObject.connect(mb.actions()[2], SIGNAL('triggered(bool)'), - self.__mb1__) - - self.save_menu = QMenu() - self.save_menu.addAction(_('Save to disk')) - self.save_menu.addAction(_('Save to disk in a single directory')) - self.save_menu.addAction(_('Save only %s format to disk')% - prefs['output_format'].upper()) - self.save_menu.addAction( - _('Save only %s format to disk in a single directory')% - prefs['output_format'].upper()) - - self.save_sub_menu = SaveMenu(self) - self.save_menu.addMenu(self.save_sub_menu) - self.connect(self.save_sub_menu, SIGNAL('save_fmt(PyQt_PyObject)'), - self.save_specific_format_disk) - - self.view_menu = QMenu() - self.view_menu.addAction(_('View')) - ac = self.view_menu.addAction(_('View specific format')) - ac.setShortcut((Qt.ControlModifier if isosx else Qt.AltModifier)+Qt.Key_V) - self.action_view.setMenu(self.view_menu) - - self.delete_menu = QMenu() - self.delete_menu.addAction(_('Remove selected books')) - self.delete_menu.addAction( - _('Remove files of a specific format from selected books..')) - self.delete_menu.addAction( - _('Remove all formats from selected books, except...')) - self.delete_menu.addAction( - _('Remove covers from selected books')) - self.action_del.setMenu(self.delete_menu) - QObject.connect(self.action_save, SIGNAL("triggered(bool)"), - self.save_to_disk) - QObject.connect(self.save_menu.actions()[0], SIGNAL("triggered(bool)"), - self.save_to_disk) - QObject.connect(self.save_menu.actions()[1], SIGNAL("triggered(bool)"), - self.save_to_single_dir) - QObject.connect(self.save_menu.actions()[2], SIGNAL("triggered(bool)"), - self.save_single_format_to_disk) - QObject.connect(self.save_menu.actions()[3], SIGNAL("triggered(bool)"), - self.save_single_fmt_to_single_dir) - QObject.connect(self.action_view, SIGNAL("triggered(bool)"), - self.view_book) - QObject.connect(self.view_menu.actions()[0], - SIGNAL("triggered(bool)"), self.view_book) - QObject.connect(self.view_menu.actions()[1], - SIGNAL("triggered(bool)"), self.view_specific_format, - Qt.QueuedConnection) - self.connect(self.action_open_containing_folder, - SIGNAL('triggered(bool)'), self.view_folder) - - self.delete_menu.actions()[0].triggered.connect(self.delete_books) - self.delete_menu.actions()[1].triggered.connect(self.delete_selected_formats) - self.delete_menu.actions()[2].triggered.connect(self.delete_all_but_selected_formats) - self.delete_menu.actions()[3].triggered.connect(self.delete_covers) - - self.action_open_containing_folder.setShortcut(Qt.Key_O) - self.addAction(self.action_open_containing_folder) - self.action_sync.setShortcut(Qt.Key_D) - self.action_sync.setEnabled(True) - self.create_device_menu() - self.connect(self.action_sync, SIGNAL('triggered(bool)'), - self._sync_action_triggered) - - self.action_edit.setMenu(md) - self.action_save.setMenu(self.save_menu) - - cm = QMenu() - cm.addAction(_('Convert individually')) - cm.addAction(_('Bulk convert')) - cm.addSeparator() - ac = cm.addAction( - _('Create catalog of books in your calibre library')) - ac.triggered.connect(self.generate_catalog) - self.action_convert.setMenu(cm) - self._convert_single_hook = partial(self.convert_ebook, bulk=False) - QObject.connect(cm.actions()[0], - SIGNAL('triggered(bool)'), self._convert_single_hook) - self._convert_bulk_hook = partial(self.convert_ebook, bulk=True) - QObject.connect(cm.actions()[1], - SIGNAL('triggered(bool)'), self._convert_bulk_hook) - QObject.connect(self.action_convert, - SIGNAL('triggered(bool)'), self.convert_ebook) - self.convert_menu = cm - - pm = QMenu() - ap = self.action_preferences - pm.addAction(ap.icon(), ap.text()) - pm.addAction(QIcon(I('wizard.svg')), _('Run welcome wizard')) - self.connect(pm.actions()[0], SIGNAL('triggered(bool)'), - self.do_config) - self.connect(pm.actions()[1], SIGNAL('triggered(bool)'), - self.run_wizard) - self.action_preferences.setMenu(pm) - self.preferences_menu = pm - - self.tool_bar.widgetForAction(self.action_news).\ - setPopupMode(QToolButton.MenuButtonPopup) - self.tool_bar.widgetForAction(self.action_edit).\ - setPopupMode(QToolButton.MenuButtonPopup) - self.tool_bar.widgetForAction(self.action_sync).\ - setPopupMode(QToolButton.MenuButtonPopup) - self.tool_bar.widgetForAction(self.action_convert).\ - setPopupMode(QToolButton.MenuButtonPopup) - self.tool_bar.widgetForAction(self.action_save).\ - setPopupMode(QToolButton.MenuButtonPopup) - self.tool_bar.widgetForAction(self.action_add).\ - setPopupMode(QToolButton.MenuButtonPopup) - self.tool_bar.widgetForAction(self.action_view).\ - setPopupMode(QToolButton.MenuButtonPopup) - self.tool_bar.widgetForAction(self.action_del).\ - setPopupMode(QToolButton.MenuButtonPopup) - self.tool_bar.widgetForAction(self.action_preferences).\ - setPopupMode(QToolButton.MenuButtonPopup) - self.tool_bar.setContextMenuPolicy(Qt.PreventContextMenu) - - self.connect(self.preferences_action, SIGNAL('triggered(bool)'), - self.do_config) - self.connect(self.action_preferences, SIGNAL('triggered(bool)'), - self.do_config) - QObject.connect(self.advanced_search_button, SIGNAL('clicked(bool)'), - self.do_advanced_search) - - for ch in self.tool_bar.children(): - if isinstance(ch, QToolButton): - ch.setCursor(Qt.PointingHandCursor) + ToolbarMixin.__init__(self) ####################### 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_del, - similar_menu=similar_menu) - - self.memory_view.set_context_menu(None, None, None, - self.action_view, self.action_save, None, None, self.action_del) - self.card_a_view.set_context_menu(None, None, None, - self.action_view, self.action_save, None, None, self.action_del) - self.card_b_view.set_context_menu(None, None, None, - self.action_view, self.action_save, None, None, self.action_del) - - self.library_view.files_dropped.connect(self.files_dropped, type=Qt.QueuedConnection) - for func, args in [ - ('connect_to_search_box', (self.search, - self.search_done)), - ('connect_to_book_display', - (self.status_bar.book_info.show_data,)), - ]: - for view in (self.library_view, self.memory_view, self.card_a_view, self.card_b_view): - getattr(view, func)(*args) - - self.memory_view.connect_dirtied_signal(self.upload_booklists) - self.card_a_view.connect_dirtied_signal(self.upload_booklists) - self.card_b_view.connect_dirtied_signal(self.upload_booklists) + LibraryViewMixin.__init__(self, db) self.show() + if self.system_tray_icon.isVisible() and opts.start_in_tray: self.hide_windows() self.stack.setCurrentIndex(0) - self.book_on_device(None, reset=True) - db.set_book_on_device_func(self.book_on_device) - self.library_view.set_database(db) - self.library_view.model().set_book_on_device_func(self.book_on_device) - prefs['library_path'] = self.library_path self.search.setFocus(Qt.OtherFocusReason) self.cover_cache = CoverCache(self.library_path) self.cover_cache.start() self.library_view.model().cover_cache = self.cover_cache self.connect(self.edit_categories, SIGNAL('clicked()'), self.do_user_categories_edit) self.search_restriction.activated[str].connect(self.apply_search_restriction) - self.tags_view.set_database(db, self.tag_match, self.popularity) - self.tags_view.tags_marked.connect(self.search.search_from_tags) - self.tags_view.tags_marked.connect(self.saved_search.clear_to_help) - self.tags_view.tag_list_edit.connect(self.do_tags_list_edit) - self.tags_view.user_category_edit.connect(self.do_user_categories_edit) - self.tags_view.saved_search_edit.connect(self.do_saved_search_edit) - self.tags_view.tag_item_renamed.connect(self.do_tag_item_renamed) - self.tags_view.search_item_renamed.connect(self.saved_search.clear_to_help) for x in (self.location_view.count_changed, self.tags_view.recount, self.restriction_count_changed): self.library_view.model().count_changed_signal.connect(x) @@ -578,46 +311,29 @@ class Main(MainWindow, Ui_MainWindow, DeviceGUI): type=Qt.QueuedConnection) ########################### Tags Browser ############################## + TagBrowserMixin.__init__(self, db) self.search_restriction.setSizeAdjustPolicy(self.search_restriction.AdjustToMinimumContentsLengthWithIcon) self.search_restriction.setMinimumContentsLength(10) ########################### Cover Flow ################################ - self.cover_flow = None - if CoverFlow is not None: - self.cf_last_updated_at = None - self.cover_flow_sync_timer = QTimer(self) - self.cover_flow_sync_timer.timeout.connect(self.cover_flow_do_sync) - self.cover_flow_sync_flag = True - text_height = 40 if config['separate_cover_flow'] else 25 - ah = available_height() - cfh = ah-100 - cfh = 3./5 * cfh - text_height - if not config['separate_cover_flow']: - cfh = 220 if ah > 950 else 170 if ah > 850 else 140 - self.cover_flow = CoverFlow(height=cfh, text_height=text_height) - self.cover_flow.setVisible(False) - if not config['separate_cover_flow']: - self.cb_layout.addWidget(self.cover_flow) - self.cover_flow.currentChanged.connect(self.sync_listview_to_cf) - self.library_view.selectionModel().currentRowChanged.connect( - self.sync_cf_to_listview) - self.db_images = DatabaseImages(self.library_view.model()) - self.cover_flow.setImages(self.db_images) + + CoverFlowMixin.__init__(self) self._calculated_available_height = min(max_available_height()-15, self.height()) self.resize(self.width(), self._calculated_available_height) self.search.setMaximumWidth(self.width()-150) + # Jobs Button {{{ + self.jobs_button = JobsButton() + self.jobs_button.initialize(self.jobs_dialog, self.job_manager) + # }}} + ####################### Side Bar ############################### - self.sidebar.initialize(self.jobs_dialog, self.cover_flow, + self.sidebar.initialize(self.jobs_button, self.cover_flow, self.toggle_cover_flow, pictureflowerror, self.vertical_splitter, self.horizontal_splitter) - QObject.connect(self.job_manager, SIGNAL('job_added(int)'), - self.sidebar.job_added, Qt.QueuedConnection) - QObject.connect(self.job_manager, SIGNAL('job_done(int)'), - self.sidebar.job_done, Qt.QueuedConnection) if config['autolaunch_server']: @@ -648,29 +364,6 @@ class Main(MainWindow, Ui_MainWindow, DeviceGUI): self._add_filesystem_book = Dispatcher(self.__add_filesystem_book) self.keyboard_interrupt.connect(self.quit, type=Qt.QueuedConnection) - def do_user_categories_edit(self, on_category=None): - d = TagCategories(self, self.library_view.model().db, on_category) - d.exec_() - if d.result() == d.Accepted: - self.tags_view.set_new_model() - self.tags_view.recount() - - def do_tags_list_edit(self, tag, category): - d = TagListEditor(self, self.library_view.model().db, tag, category) - d.exec_() - if d.result() == d.Accepted: - # Clean up everything, as information could have changed for many books. - self.library_view.model().refresh() - self.tags_view.set_new_model() - self.tags_view.recount() - self.saved_search.clear_to_help() - self.search.clear_to_help() - - def do_tag_item_renamed(self): - # Clean up library view and search - self.library_view.model().refresh() - self.saved_search.clear_to_help() - self.search.clear_to_help() def do_saved_search_edit(self, search): d = SavedSearchEditor(self, search) @@ -760,81 +453,6 @@ class Main(MainWindow, Ui_MainWindow, DeviceGUI): 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 config['separate_cover_flow']: - if show: - self.cover_flow.setCurrentSlide(self.library_view.currentIndex().row()) - d = QDialog(self) - ah, aw = available_height(), available_width() - d.resize(int(aw/2.), ah-60) - d._layout = QStackedLayout() - d.setLayout(d._layout) - d.setWindowTitle(_('Browse by covers')) - d.layout().addWidget(self.cover_flow) - self.cover_flow.setVisible(True) - self.cover_flow.setFocus(Qt.OtherFocusReason) - self.library_view.scroll_to_row(self.library_view.currentIndex().row()) - d.show() - d.finished.connect(self.sidebar.external_cover_flow_finished) - self.cf_dialog = d - self.cover_flow_sync_timer.start(500) - else: - self.cover_flow_sync_timer.stop() - idx = self.library_view.model().index(self.cover_flow.currentSlide(), 0) - if idx.isValid(): - sm = self.library_view.selectionModel() - sm.select(idx, sm.ClearAndSelect|sm.Rows) - self.library_view.setCurrentIndex(idx) - cfd = getattr(self, 'cf_dialog', None) - if cfd is not None: - self.cover_flow.setVisible(False) - cfd.hide() - self.cf_dialog = None - else: - if show: - self.cover_flow.setCurrentSlide(self.library_view.currentIndex().row()) - self.library_view.setCurrentIndex( - self.library_view.currentIndex()) - self.cover_flow.setVisible(True) - self.cover_flow.setFocus(Qt.OtherFocusReason) - self.library_view.scroll_to_row(self.library_view.currentIndex().row()) - self.cover_flow_sync_timer.start(500) - else: - self.cover_flow_sync_timer.stop() - self.cover_flow.setVisible(False) - idx = self.library_view.model().index(self.cover_flow.currentSlide(), 0) - if idx.isValid(): - sm = self.library_view.selectionModel() - sm.select(idx, sm.ClearAndSelect|sm.Rows) - self.library_view.setCurrentIndex(idx) - ''' Restrictions. Adding and deleting books creates a complexity. When added, they are @@ -905,33 +523,6 @@ class Main(MainWindow, Ui_MainWindow, DeviceGUI): self.search_restriction.setCurrentIndex(0) self.apply_search_restriction('') - def sync_cf_to_listview(self, current, previous): - if self.cover_flow_sync_flag and self.cover_flow.isVisible() and \ - self.cover_flow.currentSlide() != current.row(): - self.cover_flow.setCurrentSlide(current.row()) - self.cover_flow_sync_flag = True - - def cover_flow_do_sync(self): - self.cover_flow_sync_flag = True - try: - if self.cover_flow.isVisible() and self.cf_last_updated_at is not None and \ - time.time() - self.cf_last_updated_at > 0.5: - self.cf_last_updated_at = None - row = self.cover_flow.currentSlide() - m = self.library_view.model() - index = m.index(row, 0) - if self.library_view.currentIndex().row() != row and index.isValid(): - self.cover_flow_sync_flag = False - self.library_view.scroll_to_row(index.row()) - sm = self.library_view.selectionModel() - sm.select(index, sm.ClearAndSelect|sm.Rows) - self.library_view.setCurrentIndex(index) - except: - pass - - - def sync_listview_to_cf(self, row): - self.cf_last_updated_at = time.time() def another_instance_wants_to_talk(self): try: @@ -1309,21 +900,21 @@ class Main(MainWindow, Ui_MainWindow, DeviceGUI): Dispatcher(self._files_added), spare_server=self.spare_server) self._adder.add_recursive(root, single) - def add_recursive_single(self, checked): + def add_recursive_single(self, *args): ''' Add books from the local filesystem to either the library or the device recursively assuming one book per folder. ''' self.add_recursive(True) - def add_recursive_multiple(self, checked): + def add_recursive_multiple(self, *args): ''' Add books from the local filesystem to either the library or the device recursively assuming multiple books per folder. ''' self.add_recursive(False) - def add_empty(self, checked): + def add_empty(self, *args): ''' Add an empty book item to the library. This does not import any formats from a book file. @@ -1383,7 +974,7 @@ class Main(MainWindow, Ui_MainWindow, DeviceGUI): def add_filesystem_book(self, paths, allow_device=True): self._add_filesystem_book(paths, allow_device=allow_device) - def add_books(self, checked): + def add_books(self, *args): ''' Add books from the local filesystem to either the library or the device. ''' @@ -2289,12 +1880,8 @@ class Main(MainWindow, Ui_MainWindow, DeviceGUI): d.exec_() self.content_server = d.server if d.result() == d.Accepted: - self.tool_bar.setIconSize(config['toolbar_icon_size']) + self.read_toolbar_settings() self.search.search_as_you_type(config['search_as_you_type']) - self.tool_bar.setToolButtonStyle( - Qt.ToolButtonTextUnderIcon if \ - config['show_text_in_toolbar'] else \ - Qt.ToolButtonIconOnly) self.save_menu.actions()[2].setText( _('Save only %s format to disk')% prefs['output_format'].upper()) @@ -2451,12 +2038,7 @@ class Main(MainWindow, Ui_MainWindow, DeviceGUI): geometry = config['main_window_geometry'] if geometry is not None: self.restoreGeometry(geometry) - self.tool_bar.setIconSize(config['toolbar_icon_size']) - self.tool_bar.setToolButtonStyle( - Qt.ToolButtonTextUnderIcon if \ - config['show_text_in_toolbar'] else \ - Qt.ToolButtonIconOnly) - + self.read_toolbar_settings() def write_settings(self): config.set('main_window_geometry', self.saveGeometry()) From 5979d46fd2a53dccbbcc8bf41c4205a275c18317 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Wed, 9 Jun 2010 00:02:37 -0600 Subject: [PATCH 049/112] ... --- src/calibre/gui2/cover_flow.py | 12 +++++++++--- src/calibre/gui2/init.py | 6 ++++++ src/calibre/gui2/ui.py | 4 ---- 3 files changed, 15 insertions(+), 7 deletions(-) diff --git a/src/calibre/gui2/cover_flow.py b/src/calibre/gui2/cover_flow.py index e762caf11a..5254ad501c 100644 --- a/src/calibre/gui2/cover_flow.py +++ b/src/calibre/gui2/cover_flow.py @@ -91,6 +91,12 @@ if pictureflow is not None: elif ev.delta() > 0: self.showPrevious() + def resizeEvent(self, *args): + ans = pictureflow.PictureFlow.resizeEvent(self, *args) + height = self.height()/2. + self.setSlideSize(QSize(int(2/3. * height), height)) + return ans + else: CoverFlow = None @@ -126,7 +132,7 @@ class CoverFlowMixin(object): if show: d = QDialog(self) ah, aw = available_height(), available_width() - d.resize(int(aw/2.), ah-60) + d.resize(int(aw/1.5), ah-60) d._layout = QStackedLayout() d.setLayout(d._layout) d.setWindowTitle(_('Browse by covers')) @@ -203,8 +209,8 @@ if __name__ == '__main__': app = QApplication([]) w = QMainWindow() cf = CoverFlow() - cf.resize(cf.minimumSize()) - w.resize(cf.minimumSize()+QSize(30, 20)) + cf.resize(int(available_width()/1.5), available_height()-60) + w.resize(cf.size()+QSize(30, 20)) path = sys.argv[1] model = FileSystemImages(sys.argv[1]) cf.setImages(model) diff --git a/src/calibre/gui2/init.py b/src/calibre/gui2/init.py index e6fbc460ef..a991c4d1f8 100644 --- a/src/calibre/gui2/init.py +++ b/src/calibre/gui2/init.py @@ -242,6 +242,12 @@ class LibraryViewMixin(object): # {{{ self.library_view.model().set_book_on_device_func(self.book_on_device) prefs['library_path'] = self.library_path + for view in ('library', 'memory', 'card_a', 'card_b'): + view = getattr(self, view+'_view') + view.verticalHeader().sectionDoubleClicked.connect(self.view_specific_book) + + + def show_similar_books(self, type, *args): search, join = [], ' ' idx = self.library_view.currentIndex() diff --git a/src/calibre/gui2/ui.py b/src/calibre/gui2/ui.py index 6db3fe217d..29a09d6a1d 100644 --- a/src/calibre/gui2/ui.py +++ b/src/calibre/gui2/ui.py @@ -355,10 +355,6 @@ class Main(MainWindow, Ui_MainWindow, DeviceGUI, ToolbarMixin, SIGNAL('start_recipe_fetch(PyQt_PyObject)'), self.download_scheduled_recipe, Qt.QueuedConnection) - for view in ('library', 'memory', 'card_a', 'card_b'): - view = getattr(self, view+'_view') - view.verticalHeader().sectionDoubleClicked.connect(self.view_specific_book) - self.location_view.setCurrentIndex(self.location_view.model().index(0)) self._add_filesystem_book = Dispatcher(self.__add_filesystem_book) From 589ea3b113dd580d7edd17ef7650667c482b33c5 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Wed, 9 Jun 2010 01:16:14 -0600 Subject: [PATCH 050/112] Handle resizinf of caover browser correctly --- src/calibre/gui2/cover_flow.py | 9 +-------- src/calibre/gui2/pictureflow/pictureflow.cpp | 2 ++ 2 files changed, 3 insertions(+), 8 deletions(-) diff --git a/src/calibre/gui2/cover_flow.py b/src/calibre/gui2/cover_flow.py index 5254ad501c..7ca475e8f3 100644 --- a/src/calibre/gui2/cover_flow.py +++ b/src/calibre/gui2/cover_flow.py @@ -78,7 +78,6 @@ if pictureflow is not None: def __init__(self, parent=None): pictureflow.PictureFlow.__init__(self, parent, config['cover_flow_queue_length']+1) - self.setSlideSize(QSize(int(2/3. * 10), 10)) self.setMinimumSize(QSize(10, 10)) self.setFocusPolicy(Qt.WheelFocus) self.setSizePolicy(QSizePolicy(QSizePolicy.Expanding, @@ -91,12 +90,6 @@ if pictureflow is not None: elif ev.delta() > 0: self.showPrevious() - def resizeEvent(self, *args): - ans = pictureflow.PictureFlow.resizeEvent(self, *args) - height = self.height()/2. - self.setSlideSize(QSize(int(2/3. * height), height)) - return ans - else: CoverFlow = None @@ -213,8 +206,8 @@ if __name__ == '__main__': w.resize(cf.size()+QSize(30, 20)) path = sys.argv[1] model = FileSystemImages(sys.argv[1]) - cf.setImages(model) cf.currentChanged[int].connect(model.currentChanged) + cf.setImages(model) w.setCentralWidget(cf) w.show() diff --git a/src/calibre/gui2/pictureflow/pictureflow.cpp b/src/calibre/gui2/pictureflow/pictureflow.cpp index 1b8d3300f4..140d918ff9 100644 --- a/src/calibre/gui2/pictureflow/pictureflow.cpp +++ b/src/calibre/gui2/pictureflow/pictureflow.cpp @@ -540,6 +540,8 @@ void PictureFlowPrivate::showSlide(int index) void PictureFlowPrivate::resize(int w, int h) { + slideHeight = int(float(h)/2.); + slideWidth = int(float(slideHeight) * 2/3.); recalc(w, h); resetSlides(); triggerRender(); From a185a0771e30133c1d053cb82af8db9e38782fd4 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Wed, 9 Jun 2010 01:35:23 -0600 Subject: [PATCH 051/112] Fix #2345 (Covers in browser differ in size to enhance browsing) --- src/calibre/gui2/cover_flow.py | 1 + src/calibre/gui2/pictureflow/pictureflow.cpp | 12 +++++++----- src/calibre/gui2/pictureflow/pictureflow.h | 3 ++- 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/src/calibre/gui2/cover_flow.py b/src/calibre/gui2/cover_flow.py index 7ca475e8f3..3bd554e891 100644 --- a/src/calibre/gui2/cover_flow.py +++ b/src/calibre/gui2/cover_flow.py @@ -82,6 +82,7 @@ if pictureflow is not None: self.setFocusPolicy(Qt.WheelFocus) self.setSizePolicy(QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)) + self.setZoomFactor(150) def wheelEvent(self, ev): ev.accept() diff --git a/src/calibre/gui2/pictureflow/pictureflow.cpp b/src/calibre/gui2/pictureflow/pictureflow.cpp index 140d918ff9..9bb9a0954c 100644 --- a/src/calibre/gui2/pictureflow/pictureflow.cpp +++ b/src/calibre/gui2/pictureflow/pictureflow.cpp @@ -85,6 +85,8 @@ typedef long PFreal; typedef unsigned short QRgb565; +#define FONT_SIZE 18 + #define RGB565_RED_MASK 0xF800 #define RGB565_GREEN_MASK 0x07E0 #define RGB565_BLUE_MASK 0x001F @@ -711,14 +713,14 @@ void PictureFlowPrivate::render() QPainter painter; painter.begin(&buffer); - QFont font("Arial", 14); + QFont font("Arial", FONT_SIZE); font.setBold(true); painter.setFont(font); painter.setPen(Qt::white); //painter.setPen(QColor(255,255,255,127)); if (centerIndex < slideCount() && centerIndex > -1) - painter.drawText( QRect(0,0, buffer.width(), (buffer.height() - slideSize().height())/2), + painter.drawText( QRect(0,0, buffer.width(), buffer.height()*2-FONT_SIZE*3), Qt::AlignCenter, slideImages->caption(centerIndex)); painter.end(); @@ -761,7 +763,7 @@ void PictureFlowPrivate::render() QPainter painter; painter.begin(&buffer); - QFont font("Arial", 14); + QFont font("Arial", FONT_SIZE); font.setBold(true); painter.setFont(font); @@ -770,12 +772,12 @@ void PictureFlowPrivate::render() painter.setPen(QColor(255,255,255, (255-fade) )); if (leftTextIndex < sc && leftTextIndex > -1) - painter.drawText( QRect(0,0, buffer.width(), (buffer.height() - slideSize().height())/2), + painter.drawText( QRect(0,0, buffer.width(), buffer.height()*2 - FONT_SIZE*3), Qt::AlignCenter, slideImages->caption(leftTextIndex)); painter.setPen(QColor(255,255,255, fade)); if (leftTextIndex+1 < sc && leftTextIndex > -2) - painter.drawText( QRect(0,0, buffer.width(), (buffer.height() - slideSize().height())/2), + painter.drawText( QRect(0,0, buffer.width(), buffer.height()*2 - FONT_SIZE*3), Qt::AlignCenter, slideImages->caption(leftTextIndex+1)); diff --git a/src/calibre/gui2/pictureflow/pictureflow.h b/src/calibre/gui2/pictureflow/pictureflow.h index 3e0b606d8a..8cce025180 100644 --- a/src/calibre/gui2/pictureflow/pictureflow.h +++ b/src/calibre/gui2/pictureflow/pictureflow.h @@ -115,7 +115,8 @@ public: QSize slideSize() const; /*! - Sets the dimension of each slide (in pixels). + Sets the dimension of each slide (in pixels). Do not use this method directly + instead use resize which automatically sets an appropriate slide size. */ void setSlideSize(QSize size); From 351ff91d6a5441c3e069a569ae1691af3f0d349d Mon Sep 17 00:00:00 2001 From: Charles Haley <> Date: Wed, 9 Jun 2010 12:40:03 +0100 Subject: [PATCH 052/112] Reset ondevice when books are deleted from the library or the device --- src/calibre/gui2/library/models.py | 11 ++++++++++- src/calibre/gui2/ui.py | 11 ++++++++++- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/src/calibre/gui2/library/models.py b/src/calibre/gui2/library/models.py index abd80aaa8f..99516ce677 100644 --- a/src/calibre/gui2/library/models.py +++ b/src/calibre/gui2/library/models.py @@ -199,7 +199,7 @@ class BooksModel(QAbstractTableModel): # {{{ self.count_changed() self.clear_caches() self.reset() - + return ids def delete_books_by_id(self, ids): for id in ids: @@ -881,6 +881,15 @@ class DeviceBooksModel(BooksModel): # {{{ ans.extend(v) return ans + def clear_ondevice(self, db_ids): + for data in self.db: + if data is None: + continue + app_id = getattr(data, 'application_id', None) + if app_id is not None and app_id in db_ids: + data.in_library = False + self.reset() + def flags(self, index): if self.map[index.row()] in self.indices_to_be_deleted(): return Qt.ItemIsUserCheckable # Can't figure out how to get the disabled flag in python diff --git a/src/calibre/gui2/ui.py b/src/calibre/gui2/ui.py index 7d258608d0..cfbcb794f3 100644 --- a/src/calibre/gui2/ui.py +++ b/src/calibre/gui2/ui.py @@ -1546,7 +1546,11 @@ class Main(MainWindow, Ui_MainWindow, DeviceGUI): row = None if ci.isValid(): row = ci.row() - view.model().delete_books(rows) + ids_deleted = view.model().delete_books(rows) + for v in (self.memory_view, self.card_a_view, self.card_b_view): + if v is None: + continue + v.model().clear_ondevice(ids_deleted) if row is not None: ci = view.model().index(row, 0) if ci.isValid(): @@ -1591,6 +1595,11 @@ class Main(MainWindow, Ui_MainWindow, DeviceGUI): self.booklists()) model.paths_deleted(paths) self.upload_booklists() + # Clear the ondevice info so it will be recomputed + self.book_on_device(None, None, reset=True) + # We want to reset all the ondevice flags in the library. Use a big + # hammer, so we don't need to worry about whether some succeeded or not + self.library_view.model().refresh() ############################################################################ From 1b828d5f33700d4755b26a80e5d9dcfd0cdd1830 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Wed, 9 Jun 2010 09:45:02 -0600 Subject: [PATCH 053/112] Fix #5146 (/etc/bash_completion.d/calibre has errors) --- src/calibre/linux.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/calibre/linux.py b/src/calibre/linux.py index 26bbe0837b..51711b5b0f 100644 --- a/src/calibre/linux.py +++ b/src/calibre/linux.py @@ -411,7 +411,8 @@ def options(option_parser): def opts_and_words(name, op, words): opts = '|'.join(options(op)) words = '|'.join([w.replace("'", "\\'") for w in words]) - return ('_'+name+'()'+\ + fname = name.replace('-', '_') + return ('_'+fname+'()'+\ ''' { local cur opts @@ -435,7 +436,7 @@ def opts_and_words(name, op, words): esac } -complete -F _'''%(opts, words) + name + ' ' + name +"\n\n").encode('utf-8') +complete -F _'''%(opts, words) + fname + ' ' + name +"\n\n").encode('utf-8') def opts_and_exts(name, op, exts): From 80fae845bab7b15ab91544aec4e2a469ede79165 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Wed, 9 Jun 2010 09:52:20 -0600 Subject: [PATCH 054/112] ... --- src/calibre/gui2/device.py | 5 ++++- src/calibre/gui2/ui.py | 6 ++++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/calibre/gui2/device.py b/src/calibre/gui2/device.py index 378c585efb..0e18929d81 100644 --- a/src/calibre/gui2/device.py +++ b/src/calibre/gui2/device.py @@ -599,7 +599,10 @@ class Emailer(Thread): # {{{ # }}} -class DeviceGUI(object): +class DeviceMixin(object): + + def __init__(self): + self.db_book_uuid_cache = set() def dispatch_sync_event(self, dest, delete, specific): rows = self.library_view.selectionModel().selectedRows() diff --git a/src/calibre/gui2/ui.py b/src/calibre/gui2/ui.py index 29a09d6a1d..9ff30aa768 100644 --- a/src/calibre/gui2/ui.py +++ b/src/calibre/gui2/ui.py @@ -44,7 +44,7 @@ from calibre.gui2.dialogs.scheduler import Scheduler from calibre.gui2.update import CheckForUpdates from calibre.gui2.main_window import MainWindow from calibre.gui2.main_ui import Ui_MainWindow -from calibre.gui2.device import DeviceManager, DeviceMenu, DeviceGUI, Emailer +from calibre.gui2.device import DeviceManager, DeviceMenu, DeviceMixin, Emailer from calibre.gui2.jobs import JobManager, JobsDialog, JobsButton from calibre.gui2.dialogs.metadata_single import MetadataSingleDialog from calibre.gui2.dialogs.metadata_bulk import MetadataBulkDialog @@ -105,7 +105,7 @@ class SystemTrayIcon(QSystemTrayIcon): # {{{ # }}} -class Main(MainWindow, Ui_MainWindow, DeviceGUI, ToolbarMixin, +class Main(MainWindow, Ui_MainWindow, DeviceMixin, ToolbarMixin, TagBrowserMixin, CoverFlowMixin, LibraryViewMixin): 'The main GUI' @@ -228,6 +228,8 @@ class Main(MainWindow, Ui_MainWindow, DeviceGUI, ToolbarMixin, QObject.connect(self.advanced_search_button, SIGNAL('clicked(bool)'), self.do_advanced_search) + DeviceMixin.__init__(self) + ####################### Start spare job server ######################## QTimer.singleShot(1000, self.add_spare_server) From ff6ac7f3529dbccd13d1d98598f842cd4b6639e9 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Wed, 9 Jun 2010 10:11:13 -0600 Subject: [PATCH 055/112] Add a deleted_after_upload attribute to file paths sent to the device driver from the GUI --- src/calibre/devices/interface.py | 5 ++++- src/calibre/gui2/device.py | 6 ++++-- src/calibre/gui2/library/models.py | 1 + 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/calibre/devices/interface.py b/src/calibre/devices/interface.py index 2d82bf4563..da8a2cb978 100644 --- a/src/calibre/devices/interface.py +++ b/src/calibre/devices/interface.py @@ -289,7 +289,10 @@ class DevicePlugin(Plugin): word "card" if C{on_card} is not None otherwise it must contain the word "memory". :files: A list of paths and/or file-like objects. If they are paths and the paths point to temporary files, they may have an additional - attribute, original_file_path pointing to the originals. + attribute, original_file_path pointing to the originals. They may have + another optional attribute, deleted_after_upload which if True means + that the file pointed to by original_file_path will be deleted after + being uploaded to the device. :names: A list of file names that the books should have once uploaded to the device. len(names) == len(files) :return: A list of 3-element tuples. The list is meant to be passed diff --git a/src/calibre/gui2/device.py b/src/calibre/gui2/device.py index 0e18929d81..1445b0f36e 100644 --- a/src/calibre/gui2/device.py +++ b/src/calibre/gui2/device.py @@ -854,6 +854,7 @@ class DeviceMixin(object): def sync_news(self, send_ids=None, do_auto_convert=True): if self.device_connected: + del_on_upload = config['delete_news_from_library_on_upload'] settings = self.device_manager.device.settings() ids = list(dynamic.get('news_to_be_synced', set([]))) if send_ids is None else send_ids ids = [id for id in ids if self.library_view.model().db.has_id(id)] @@ -883,6 +884,8 @@ class DeviceMixin(object): 'the device?'), det_msg=autos): self.auto_convert_news(auto, format) files = [f for f in files if f is not None] + for f in files: + f.deleted_after_upload = del_on_upload if not files: dynamic.set('news_to_be_synced', set([])) return @@ -900,8 +903,7 @@ class DeviceMixin(object): 'rb').read()) dynamic.set('news_to_be_synced', set([])) if config['upload_news_to_device'] and files: - remove = ids if \ - config['delete_news_from_library_on_upload'] else [] + remove = ids if del_on_upload else [] space = { self.location_view.model().free[0] : None, self.location_view.model().free[1] : 'carda', self.location_view.model().free[2] : 'cardb' } diff --git a/src/calibre/gui2/library/models.py b/src/calibre/gui2/library/models.py index abd80aaa8f..71f41eab45 100644 --- a/src/calibre/gui2/library/models.py +++ b/src/calibre/gui2/library/models.py @@ -39,6 +39,7 @@ class FormatPath(unicode): def __new__(cls, path, orig_file_path): ans = unicode.__new__(cls, path) ans.orig_file_path = orig_file_path + ans.deleted_after_upload = False return ans class BooksModel(QAbstractTableModel): # {{{ From bce229083b0cdcb42b20d9b8c7f4f7be323bb58c Mon Sep 17 00:00:00 2001 From: Charles Haley <> Date: Wed, 9 Jun 2010 17:42:56 +0100 Subject: [PATCH 056/112] 1) Force usbms to read metadata when building the cache_file 2) Generate a regexp from the save template --- src/calibre/devices/usbms/driver.py | 32 ++++++++++++++++++----------- src/calibre/ebooks/metadata/meta.py | 27 ++++++++++++++---------- 2 files changed, 36 insertions(+), 23 deletions(-) diff --git a/src/calibre/devices/usbms/driver.py b/src/calibre/devices/usbms/driver.py index 92e57e7447..1666398fc9 100644 --- a/src/calibre/devices/usbms/driver.py +++ b/src/calibre/devices/usbms/driver.py @@ -294,6 +294,19 @@ class USBMS(CLI, Device): self.report_progress(1.0, _('Sending metadata to device...')) debug_print('USBMS: finished sync_booklists') + @classmethod + def build_template_regexp(cls): + def replfunc(match): + if match.group(1) in ['title', 'series', 'series_index', 'isbn']: + return '(?P<' + match.group(1) + '>.+?)' + elif match.group(1) == 'authors': + return '(?P.+?)' + else: + return '(.+?)' + template = cls.save_template().rpartition('/')[2] + print 'bftr', template + return re.compile(re.sub('{([^}]*)}', replfunc, template) + '([_\d]*$)') + @classmethod def path_to_unicode(cls, path): if isbytestring(path): @@ -355,22 +368,17 @@ class USBMS(CLI, Device): from calibre.ebooks.metadata.meta import metadata_from_formats from calibre.customize.ui import quick_metadata with quick_metadata: - return metadata_from_formats(fmts) + return metadata_from_formats(fmts, force_read_metadata=True, + pattern=cls.build_template_regexp()) @classmethod - def book_from_path(cls, prefix, path): + def book_from_path(cls, prefix, lpath): from calibre.ebooks.metadata import MetaInformation - - if cls.settings().read_metadata or cls.MUST_READ_METADATA: - mi = cls.metadata_from_path(cls.normalize_path(os.path.join(prefix, path))) - else: - from calibre.ebooks.metadata.meta import metadata_from_filename - mi = metadata_from_filename(cls.normalize_path(os.path.basename(path)), - re.compile(r'^(?P[ \S]+?)[ _]-[ _](?P<author>[ \S]+?)_+\d+')) + mi = cls.metadata_from_path(cls.normalize_path(os.path.join(prefix, lpath))) if mi is None: - mi = MetaInformation(os.path.splitext(os.path.basename(path))[0], + mi = MetaInformation(os.path.splitext(os.path.basename(lpath))[0], [_('Unknown')]) - size = os.stat(cls.normalize_path(os.path.join(prefix, path))).st_size - book = cls.book_class(prefix, path, other=mi, size=size) + size = os.stat(cls.normalize_path(os.path.join(prefix, lpath))).st_size + book = cls.book_class(prefix, lpath, other=mi, size=size) return book diff --git a/src/calibre/ebooks/metadata/meta.py b/src/calibre/ebooks/metadata/meta.py index f5a327a0d6..eae8171362 100644 --- a/src/calibre/ebooks/metadata/meta.py +++ b/src/calibre/ebooks/metadata/meta.py @@ -27,16 +27,16 @@ for i, ext in enumerate(_METADATA_PRIORITIES): def path_to_ext(path): return os.path.splitext(path)[1][1:].lower() -def metadata_from_formats(formats): +def metadata_from_formats(formats, force_read_metadata=False, pattern=None): try: - return _metadata_from_formats(formats) + return _metadata_from_formats(formats, force_read_metadata, pattern) except: - mi = metadata_from_filename(list(iter(formats))[0]) + mi = metadata_from_filename(list(iter(formats), pattern)[0]) if not mi.authors: mi.authors = [_('Unknown')] return mi -def _metadata_from_formats(formats): +def _metadata_from_formats(formats, force_read_metadata=False, pattern=None): mi = MetaInformation(None, None) formats.sort(cmp=lambda x,y: cmp(METADATA_PRIORITIES[path_to_ext(x)], METADATA_PRIORITIES[path_to_ext(y)])) @@ -51,7 +51,9 @@ def _metadata_from_formats(formats): with open(path, 'rb') as stream: try: newmi = get_metadata(stream, stream_type=ext, - use_libprs_metadata=True) + use_libprs_metadata=True, + force_read_metadata=force_read_metadata, + pattern=pattern) mi.smart_update(newmi) except: continue @@ -69,18 +71,21 @@ def is_recipe(filename): return filename.startswith('calibre') and \ filename.rpartition('.')[0].endswith('_recipe_out') -def get_metadata(stream, stream_type='lrf', use_libprs_metadata=False): +def get_metadata(stream, stream_type='lrf', use_libprs_metadata=False, + force_read_metadata=False, pattern=None): pos = 0 if hasattr(stream, 'tell'): pos = stream.tell() try: - return _get_metadata(stream, stream_type, use_libprs_metadata) + return _get_metadata(stream, stream_type, use_libprs_metadata, + force_read_metadata, pattern) finally: if hasattr(stream, 'seek'): stream.seek(pos) -def _get_metadata(stream, stream_type, use_libprs_metadata): +def _get_metadata(stream, stream_type, use_libprs_metadata, + force_read_metadata=False, pattern=None): if stream_type: stream_type = stream_type.lower() if stream_type in ('html', 'html', 'xhtml', 'xhtm', 'xml'): stream_type = 'html' @@ -100,8 +105,8 @@ def _get_metadata(stream, stream_type, use_libprs_metadata): mi = MetaInformation(None, None) name = os.path.basename(getattr(stream, 'name', '')) - base = metadata_from_filename(name) - if is_recipe(name) or prefs['read_file_metadata']: + base = metadata_from_filename(name, pat=pattern) + if force_read_metadata or is_recipe(name) or prefs['read_file_metadata']: mi = get_file_type_metadata(stream, stream_type) if base.title == os.path.splitext(name)[0] and base.authors is None: # Assume that there was no metadata in the file and the user set pattern @@ -139,7 +144,7 @@ def metadata_from_filename(name, pat=None): pat = re.compile(prefs.get('filename_pattern')) name = name.replace('_', ' ') match = pat.search(name) - if match: + if match is not None: try: mi.title = match.group('title') except IndexError: From 5c316d4d612823dffec58b407f6af3f9e391948f Mon Sep 17 00:00:00 2001 From: GRiker <griker@hotmail.com> Date: Wed, 9 Jun 2010 12:44:17 -0600 Subject: [PATCH 057/112] GwR wip 0.5.0 --- src/calibre/devices/apple/driver.py | 436 ++++++++++++++++++---------- 1 file changed, 289 insertions(+), 147 deletions(-) diff --git a/src/calibre/devices/apple/driver.py b/src/calibre/devices/apple/driver.py index 335b4abf8a..1b4bb8e408 100644 --- a/src/calibre/devices/apple/driver.py +++ b/src/calibre/devices/apple/driver.py @@ -5,7 +5,7 @@ __copyright__ = '2010, Gregory Riker' __docformat__ = 'restructuredtext en' -import cStringIO, os, re, shutil, subprocess, sys, tempfile, time, zipfile +import cStringIO, ctypes, os, re, shutil, subprocess, sys, tempfile, time, zipfile from calibre.constants import DEBUG from calibre import fit_image @@ -14,6 +14,7 @@ from calibre.devices.interface import DevicePlugin from calibre.ebooks.BeautifulSoup import BeautifulSoup from calibre.ebooks.metadata import MetaInformation from calibre.library.server.utils import strftime +from calibre.ptempfile import PersistentTemporaryFile from calibre.utils.config import Config, config_dir from calibre.utils.date import parse_date from calibre.utils.logging import Log @@ -47,7 +48,7 @@ class ITUNES(DevicePlugin): supported_platforms = ['osx','windows'] author = 'GRiker' #: The version of this plugin as a 3-tuple (major, minor, revision) - version = (0, 4, 11) + version = (0, 5, 0) OPEN_FEEDBACK_MESSAGE = _( 'Apple device detected, launching iTunes, please wait ...') @@ -101,6 +102,15 @@ class ITUNES(DevicePlugin): 'Books', ] + SearchField = [ + 'All', + 'Visible', + 'Artists', + 'Albums', + 'Composers', + 'SongNames', + ] + # Properties cached_books = {} cache_dir = os.path.join(config_dir, 'caches', 'itunes') @@ -108,6 +118,7 @@ class ITUNES(DevicePlugin): iTunes= None iTunes_media = None log = Log() + manual_sync_mode = False path_template = 'iTunes/%s - %s.epub' problem_titles = [] problem_msg = None @@ -182,9 +193,6 @@ class ITUNES(DevicePlugin): (new_book.title, new_book.author)) booklists[0].append(new_book) -# if DEBUG: -# self._dump_booklist(booklists[0],'after add_books_to_metadata()') - def books(self, oncard=None, end_session=True): """ Return a list of ebooks on the device. @@ -210,7 +218,6 @@ class ITUNES(DevicePlugin): library_books = self._get_library_books() if 'iPod' in self.sources: - #device = self.sources['iPod'] booklist = BookList(self.log) cached_books = {} @@ -238,7 +245,8 @@ class ITUNES(DevicePlugin): cached_books[this_book.path] = { 'title':book.name(), 'author':[book.artist()], - 'lib_book':library_books[this_book.path] if this_book.path in library_books else None + 'lib_book':library_books[this_book.path] if this_book.path in library_books else None, + 'dev_book':book } if self.report_progress is not None: @@ -342,7 +350,7 @@ class ITUNES(DevicePlugin): self.log.warning(" waiting for identified iPad, attempt #%d" % (10 - attempts)) else: if DEBUG: - self.log.info(' found connected iPad in iTunes') + self.log.info(' found connected iPad') break else: # iTunes running, but not connected iPad @@ -350,9 +358,8 @@ class ITUNES(DevicePlugin): self.log.info(' self.ejected = True') self.ejected = True return False - else: - self.log.info(' found connected iPad in sources') + self._discover_manual_sync_mode() return True def can_handle_windows(self, device_id, debug=False): @@ -384,6 +391,7 @@ class ITUNES(DevicePlugin): if DEBUG: self.log.info('ITUNES.can_handle_windows:\n confirming connected iPad') self.ejected = False + self._discover_manual_sync_mode() return True else: if DEBUG: @@ -399,9 +407,6 @@ class ITUNES(DevicePlugin): pythoncom.CoUninitialize() else: - # This is called at entry - # We need to know if iTunes sees the iPad - # It may have been ejected if DEBUG: self.log.info("ITUNES:can_handle_windows():\n Launching iTunes") @@ -429,8 +434,10 @@ class ITUNES(DevicePlugin): self.log.info(' self.ejected = True') self.ejected = True return False - else: - self.log.info(' found connected iPad in sources') + + self.log.info(' found connected iPad in sources') + self._discover_manual_sync_mode(wait=1.0) + finally: pythoncom.CoUninitialize() @@ -460,23 +467,31 @@ class ITUNES(DevicePlugin): self.problem_msg = _("Some books not found in iTunes database.\n" "Delete using the iBooks app.\n" "Click 'Show Details' for a list.") + self.log.info("ITUNES:delete_books()") for path in paths: if self.cached_books[path]['lib_book']: if DEBUG: - self.log.info("ITUNES:delete_books(): Deleting '%s' from iTunes library" % (path)) + self.log.info(" Deleting '%s' from iTunes library" % (path)) if isosx: self._remove_from_iTunes(self.cached_books[path]) + if self.manual_sync_mode: + self._remove_device_book(self.cached_books[path]) elif iswindows: try: pythoncom.CoInitialize() self.iTunes = win32com.client.Dispatch("iTunes.Application") self._remove_from_iTunes(self.cached_books[path]) + if self.manual_sync_mode: + self._remove_device_book(self.cached_books[path]) finally: pythoncom.CoUninitialize() - self.update_needed = True - self.update_msg = "Deleted books from device" + if not self.manual_sync_mode: + self.update_needed = True + self.update_msg = "Deleted books from device" + else: + self.log.info(" skipping sync phase, manual_sync_mode: True") else: self.problem_titles.append("'%s' by %s" % (self.cached_books[path]['title'],self.cached_books[path]['author'])) @@ -618,7 +633,7 @@ class ITUNES(DevicePlugin): # Remove from cached_books self.cached_books.pop(path) if DEBUG: - self.log.info(" Removing '%s' from self.cached_books" % path) + self.log.info(" removing '%s' from self.cached_books" % path) # self._dump_cached_books('remove_books_from_metadata()') else: self.log.warning(" skipping purchased book, can't remove via automation interface") @@ -740,34 +755,6 @@ class ITUNES(DevicePlugin): # Delete existing from Library|Books # Add to self.update_list for deletion from booklist[0] during add_books_to_metadata - ''' - # --------------------------- - # PROVISIONAL - # Use the cover to find the database storage point of the epub - # Pass database copy to iTunes instead of the temporary file - - if False: - if DEBUG: - self.log.info(" processing '%s'" % metadata[i].title) - self.log.info(" file: %s" % (file._name if isinstance(file,PersistentTemporaryFile) else file)) - self.log.info(" cover: %s" % metadata[i].cover) - - calibre_database_item = False - if metadata[i].cover: - passed_file = file - storage_path = os.path.split(metadata[i].cover)[0] - try: - database_epub = filter(lambda x: x.endswith('.epub'), os.listdir(storage_path))[0] - file = os.path.join(storage_path,database_epub) - calibre_database_item = True - self.log.info(" using database file: %s" % file) - except: - self.log.info(" could not find epub in %s" % storage_path) - else: - self.log.info(" no cover available, using temp file") - # --------------------------- - ''' - path = self.path_template % (metadata[i].title, metadata[i].author[0]) if path in self.cached_books: if DEBUG: @@ -778,6 +765,21 @@ class ITUNES(DevicePlugin): if DEBUG: self.log.info( " deleting existing '%s'" % (path)) self._remove_from_iTunes(self.cached_books[path]) + if self.manual_sync_mode: + dev_book_added = self._remove_device_book(self.cached_books[path]) + + ''' + Old code testing for PTO + Use this with manuals_sync_mode to decide whether to add to Library|Books + if DEBUG: + self.log.info(" file: %s" % (file._name if isinstance(file,PersistentTemporaryFile) else file)) + # Add to iTunes Library|Books + if isinstance(file,PersistentTemporaryFile): + added = self.iTunes.add(appscript.mactypes.File(file._name)) + else: + added = self.iTunes.add(appscript.mactypes.File(file)) + + ''' # Add to iTunes Library|Books fpath = file @@ -785,7 +787,18 @@ class ITUNES(DevicePlugin): fpath = file.orig_file_path elif getattr(file, 'name', None) is not None: fpath = file.name - added = self.iTunes.add(appscript.mactypes.File(fpath)) + + if isinstance(file,PersistentTemporaryFile) and self.manual_sync_mode: + if DEBUG: + self.log.info(" PTF not added to Library|Books") + else: + added = self.iTunes.add(appscript.mactypes.File(fpath)) + if DEBUG: + self.log.info(" file added to Library|Books") + + dev_book_added = None + if self.manual_sync_mode: + dev_book_added = self._add_device_book(fpath) thumb = None if metadata[i].cover: @@ -853,7 +866,8 @@ class ITUNES(DevicePlugin): self.cached_books[this_book.path] = { 'title': this_book.title, 'author': this_book.author, - 'lib_book': added + 'lib_book': added, + 'dev_book': dev_book_added } # Report progress @@ -864,62 +878,12 @@ class ITUNES(DevicePlugin): try: pythoncom.CoInitialize() self.iTunes = win32com.client.Dispatch("iTunes.Application") - - for source in self.iTunes.sources: - if source.Kind == self.Sources.index('Library'): - lib = source - if DEBUG: - self.log.info(" Library source: '%s' kind: %s" % (lib.Name, self.Sources[lib.Kind])) - break - else: - if DEBUG: - self.log.info(" Library source not found") - - if lib is not None: - lib_books = None - for pl in lib.Playlists: - if pl.Kind == self.PlaylistKind.index('User') and \ - pl.SpecialKind == self.PlaylistSpecialKind.index('Books'): - if DEBUG: - self.log.info(" Books playlist: '%s'" % (pl.Name)) - lib_books = pl - break - else: - if DEBUG: - self.log.error(" no Books playlist found") + lib = self.iTunes.LibraryPlaylist for (i,file) in enumerate(files): # Delete existing from Library|Books, add to self.update_list # for deletion from booklist[0] during add_books_to_metadata - ''' - # --------------------------- - # PROVISIONAL - # Use the cover to find the database storage point of the epub - # Pass database copy to iTunes instead of the temporary file - - if False: - if DEBUG: - self.log.info(" processing '%s'" % metadata[i].title) - self.log.info(" file: %s" % (file._name if isinstance(file,PersistentTemporaryFile) else file)) - self.log.info(" cover: %s" % metadata[i].cover) - - calibre_database_item = False - if metadata[i].cover: - passed_file = file - storage_path = os.path.split(metadata[i].cover)[0] - try: - database_epub = filter(lambda x: x.endswith('.epub'), os.listdir(storage_path))[0] - file = os.path.join(storage_path,database_epub) - calibre_database_item = True - self.log.info(" using database file: %s" % file) - except: - self.log.info(" could not find epub in %s" % storage_path) - else: - self.log.info(" no cover available, using temp file") - # --------------------------- - ''' - path = self.path_template % (metadata[i].title, metadata[i].author[0]) if path in self.cached_books: self.update_list.append(self.cached_books[path]) @@ -928,6 +892,9 @@ class ITUNES(DevicePlugin): self.log.info("ITUNES.upload_books():") self.log.info( " deleting existing '%s'" % (path)) self._remove_from_iTunes(self.cached_books[path]) + if self.manual_sync_mode: + dev_book_added = self._remove_device_book(self.cached_books[path]) + else: if DEBUG: self.log.info(" '%s' not in cached_books" % metadata[i].title) @@ -939,41 +906,58 @@ class ITUNES(DevicePlugin): elif getattr(file, 'name', None) is not None: fpath = file.name - op_status = lib_books.AddFile(fpath) - self.log.info("ITUNES.upload_books():\n iTunes adding '%s'" - % fpath) - - if DEBUG: - sys.stdout.write(" iTunes copying '%s' ..." % metadata[i].title) - sys.stdout.flush() - - while op_status.InProgress: - time.sleep(0.5) + # If this file is to be deleted after xfer to device, don't add it to the + # iTunes database, as the file path will be invalid when calibre exits. + # Only possible in manual_sync_mode + if getattr(file, 'deleted_after_upload', False) and self.manual_sync_mode: if DEBUG: - sys.stdout.write('.') - sys.stdout.flush() - if DEBUG: - sys.stdout.write("\n") - sys.stdout.flush() - - if False: - # According to the Apple API, .Tracks should be populated once the xfer - # is complete, but I can't seem to make that work. + self.log.info(" PTF not added to Library|Books") + else: + # Add fpath to Library|Books + file_s = ctypes.c_char_p(fpath) + FileArray = ctypes.c_char_p * 1 + fa = FileArray(file_s) + op_status = lib.AddFiles(fa) if DEBUG: - sys.stdout.write(" waiting for handle to '%s' ..." % metadata[i].title) + self.log.info(" file added to Library|Books") + + self.log.info("ITUNES.upload_books():\n iTunes adding '%s'" + % fpath) + + if DEBUG: + sys.stdout.write(" iTunes copying '%s' ..." % metadata[i].title) sys.stdout.flush() - while op_status.Tracks is None: + + while op_status.InProgress: time.sleep(0.5) if DEBUG: sys.stdout.write('.') sys.stdout.flush() if DEBUG: - print - added = op_status.Tracks.Item[1] - else: - # This approach simply scans Library|Books for the book we just added - added = self._find_library_book( - {'title': metadata[i].title,'author': metadata[i].author[0]}) + sys.stdout.write("\n") + sys.stdout.flush() + + if True: + if DEBUG: + sys.stdout.write(" waiting for handle to added '%s' ..." % metadata[i].title) + sys.stdout.flush() + while op_status.Tracks is None: + time.sleep(0.5) + if DEBUG: + sys.stdout.write('.') + sys.stdout.flush() + if DEBUG: + print + added = op_status.Tracks[0] + else: + # This approach simply scans Library|Books for the book we just added + added = self._find_library_book( + {'title': metadata[i].title, + 'author': metadata[i].author[0]}) + + dev_book_added = None + if self.manual_sync_mode: + dev_book_added = self._add_device_book(fpath) if added: thumb = None @@ -1044,7 +1028,8 @@ class ITUNES(DevicePlugin): self.cached_books[this_book.path] = { 'title': metadata[i].title, 'author': metadata[i].author[0], - 'lib_book': added + 'lib_book': added, + 'dev_book': dev_book_added } # Report progress @@ -1059,12 +1044,115 @@ class ITUNES(DevicePlugin): self.report_progress(1.0, _('finished')) # Tell sync_booklists we need a re-sync - self.update_needed = True - self.update_msg = "Added books to device" + if not self.manual_sync_mode: + self.update_needed = True + self.update_msg = "Added books to device" return (new_booklist, [], []) # Private methods + def _add_device_book(self,fpath): + ''' + ''' + self.log.info("ITUNES._add_device_book()") + if isosx: + if 'iPod' in self.sources: + connected_device = self.sources['iPod'] + device = self.iTunes.sources[connected_device] + for pl in device.playlists(): + if pl.special_kind() == appscript.k.Books: + break + else: + if DEBUG: + self.log.error(" Device|Books playlist not found") + + # Add the passed book to the Device|Books playlist + added = pl.add(appscript.mactypes.File(fpath),to=pl) + if DEBUG: + self.log.info(" adding '%s' to device" % fpath) + return added + + elif iswindows: + if 'iPod' in self.sources: + try: + pythoncom.CoInitialize() + connected_device = self.sources['iPod'] + device = self.iTunes.sources.ItemByName(connected_device) + + dev_books = None + added = None + for pl in device.Playlists: + if pl.Kind == self.PlaylistKind.index('User') and \ + pl.SpecialKind == self.PlaylistSpecialKind.index('Books'): + break + else: + if DEBUG: + self.log.info(" no Books playlist found") + + # Add the passed book to the Device|Books playlist + if pl: + added = pl.AddFile(fpath) + if DEBUG: + self.log.info(" adding '%s' to device" % fpath) + finally: + pythoncom.CoUninitialize() + + return added + + def _discover_manual_sync_mode(self, wait=0): + ''' + Assumes pythoncom for windows + wait is passed when launching iTunes, as it seems to need a moment to come to its senses + + ''' + if DEBUG: + self.log.info("ITUNES._discover_manual_sync_mode()") + if isosx: + connected_device = self.sources['iPod'] + dev_books = None + device = self.iTunes.sources[connected_device] + for pl in device.playlists(): + if pl.special_kind() == appscript.k.Books: + dev_books = pl.file_tracks() + break + else: + self.log.error(" book_playlist not found") + + if len(dev_books): + first_book = dev_books[0] + #if DEBUG: + #self.log.info(" determing manual mode by modifying '%s' by %s" % (first_book.name(), first_book.artist())) + try: + first_book.bpm.set(0) + self.manual_sync_mode = True + except: + self.manual_sync_mode = False + self.log.info(" iTunes.manual_sync_mode: %s" % self.manual_sync_mode) + + elif iswindows: + if wait: + time.sleep(wait) + connected_device = self.sources['iPod'] + device = self.iTunes.sources.ItemByName(connected_device) + + dev_books = None + for pl in device.Playlists: + if pl.Kind == self.PlaylistKind.index('User') and \ + pl.SpecialKind == self.PlaylistSpecialKind.index('Books'): + dev_books = pl.Tracks + break + + if dev_books.Count: + first_book = dev_books.Item(1) + #if DEBUG: + #self.log.info(" determing manual mode by modifying '%s' by %s" % (first_book.Name, first_book.Artist)) + try: + first_book.BPM = 0 + self.manual_sync_mode = True + except: + self.manual_sync_mode = False + self.log.info(" iTunes.manual_sync_mode: %s" % self.manual_sync_mode) + def _dump_booklist(self, booklist, header=None): ''' ''' @@ -1090,10 +1178,11 @@ class ITUNES(DevicePlugin): self.log.info( "%s" % ('-' * len(msg))) if isosx: for cb in self.cached_books.keys(): - self.log.info("%-40.40s %-30.30s %-10.10s" % + self.log.info("%-40.40s %-30.30s %-10.10s %-10.10s" % (self.cached_books[cb]['title'], self.cached_books[cb]['author'], - str(self.cached_books[cb]['lib_book'])[-9:])) + str(self.cached_books[cb]['lib_book'])[-9:], + str(self.cached_books[cb]['dev_book'])[-9:])) elif iswindows: for cb in self.cached_books.keys(): self.log.info("%-40.40s %-30.30s" % @@ -1121,7 +1210,10 @@ class ITUNES(DevicePlugin): self.log.info(msg) self.log.info( "%s" % ('-' * len(msg))) for file in files: - self.log.info(file) + if getattr(file, 'orig_file_path', None) is not None: + self.log.info(" %s" % file.orig_file_path) + elif getattr(file, 'name', None) is not None: + self.log.info(" %s" % file.name) self.log.info() def _dump_update_list(self,header=None): @@ -1147,7 +1239,6 @@ class ITUNES(DevicePlugin): ''' Windows-only method to get a handle to a library book in the current pythoncom session ''' - SearchField = ['All','Visible','Artists','Titles','Composers','SongNames'] if iswindows: if DEBUG: self.log.info("ITUNES._find_library_book()") @@ -1178,8 +1269,8 @@ class ITUNES(DevicePlugin): attempts = 9 while attempts: - # Find all books by this author, then match title - hits = lib_books.Search(cached_book['author'],SearchField.index('Artists')) + # Find book whose Artist field = cached_book['author'] + hits = lib_books.Search(cached_book['author'],self.SearchField.index('Artists')) if hits: for hit in hits: self.log.info(" evaluating '%s' by %s" % (hit.Name, hit.Artist)) @@ -1346,6 +1437,30 @@ class ITUNES(DevicePlugin): return device_books + def _get_device_playlist(self): + ''' + + ''' + if iswindows: + if 'iPod' in self.sources: + pl = None + try: + pythoncom.CoInitialize() + connected_device = self.sources['iPod'] + device = self.iTunes.sources.ItemByName(connected_device) + + dev_books = None + for pl in device.Playlists: + if pl.Kind == self.PlaylistKind.index('User') and \ + pl.SpecialKind == self.PlaylistSpecialKind.index('Books'): + break + else: + if DEBUG: + self.log.error(" no iPad|Books playlist found") + finally: + pythoncom.CoUninitialize() + return pl + def _get_library_books(self): ''' Populate a dict of paths from iTunes Library|Books @@ -1427,17 +1542,20 @@ class ITUNES(DevicePlugin): if DEBUG: self.log.error(" no Library playlists found") - for book in lib_books: - # This may need additional entries for international iTunes users - if book.KindAsString in ['MPEG audio file']: - if DEBUG: - self.log.info(" ignoring %-30.30s of type '%s'" % (book.Name, book.KindAsString)) - else: - if DEBUG: - self.log.info(" adding %-30.30s [%s]" % (book.Name, book.KindAsString)) - path = self.path_template % (book.Name, book.Artist) - library_books[path] = book - + try: + for book in lib_books: + # This may need additional entries for international iTunes users + if book.KindAsString in ['MPEG audio file']: + if DEBUG: + self.log.info(" ignoring %-30.30s of type '%s'" % (book.Name, book.KindAsString)) + else: + if DEBUG: + self.log.info(" adding %-30.30s [%s]" % (book.Name, book.KindAsString)) + path = self.path_template % (book.Name, book.Artist) + library_books[path] = book + except: + if DEBUG: + self.log.info(" no books in library") finally: pythoncom.CoUninitialize() @@ -1553,6 +1671,30 @@ class ITUNES(DevicePlugin): self.version[0],self.version[1],self.version[2])) self.log.info(" iTunes_media: %s" % self.iTunes_media) + def _remove_device_book(self, cached_book): + ''' + Windows assumes pythoncom wrapper + ''' + self.log.info("ITUNES._remove_device_book()") + if isosx: + if DEBUG: + self.log.info(" deleting %s" % cached_book['dev_book']) + result = cached_book['dev_book'].delete() + print "result: %s" % result + + elif iswindows: + dev_pl = self._get_device_playlist() + hits = dev_pl.Search(cached_book['author'],self.SearchField.index('Artists')) + if hits: + for hit in hits: + if DEBUG: + self.log.info(" evaluating '%s' by %s" % (hit.Name, hit.Artist)) + if hit.Name == cached_book['title']: + if DEBUG: + self.log.info(" deleting '%s' by %s" % (hit.Name, hit.Artist)) + results = hit.Delete() + break + def _remove_from_iTunes(self, cached_book): ''' iTunes does not delete books from storage when removing from database From 6a3f7e533b717b0fb6292a521a8b0390618be395 Mon Sep 17 00:00:00 2001 From: GRiker <griker@hotmail.com> Date: Wed, 9 Jun 2010 12:55:30 -0600 Subject: [PATCH 058/112] GwR wip --- src/calibre/devices/apple/driver.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/calibre/devices/apple/driver.py b/src/calibre/devices/apple/driver.py index 1b4bb8e408..67656908e2 100644 --- a/src/calibre/devices/apple/driver.py +++ b/src/calibre/devices/apple/driver.py @@ -957,7 +957,7 @@ class ITUNES(DevicePlugin): dev_book_added = None if self.manual_sync_mode: - dev_book_added = self._add_device_book(fpath) + added = dev_book_added = self._add_device_book(fpath) if added: thumb = None From 8b5833db167858820ddcb35c5de0d2926623f83a Mon Sep 17 00:00:00 2001 From: GRiker <griker@hotmail.com> Date: Wed, 9 Jun 2010 17:06:53 -0600 Subject: [PATCH 059/112] GwR wip --- src/calibre/devices/apple/driver.py | 481 ++++++++++++++++++---------- src/calibre/gui2/cover_flow.py | 3 +- 2 files changed, 313 insertions(+), 171 deletions(-) diff --git a/src/calibre/devices/apple/driver.py b/src/calibre/devices/apple/driver.py index 67656908e2..8ad006e361 100644 --- a/src/calibre/devices/apple/driver.py +++ b/src/calibre/devices/apple/driver.py @@ -476,14 +476,14 @@ class ITUNES(DevicePlugin): if isosx: self._remove_from_iTunes(self.cached_books[path]) if self.manual_sync_mode: - self._remove_device_book(self.cached_books[path]) + self._remove_from_device(self.cached_books[path]) elif iswindows: try: pythoncom.CoInitialize() self.iTunes = win32com.client.Dispatch("iTunes.Application") self._remove_from_iTunes(self.cached_books[path]) if self.manual_sync_mode: - self._remove_device_book(self.cached_books[path]) + self._remove_from_device(self.cached_books[path]) finally: pythoncom.CoUninitialize() @@ -766,7 +766,7 @@ class ITUNES(DevicePlugin): self.log.info( " deleting existing '%s'" % (path)) self._remove_from_iTunes(self.cached_books[path]) if self.manual_sync_mode: - dev_book_added = self._remove_device_book(self.cached_books[path]) + dev_book_added = self._remove_from_device(self.cached_books[path]) ''' Old code testing for PTO @@ -881,162 +881,144 @@ class ITUNES(DevicePlugin): lib = self.iTunes.LibraryPlaylist for (i,file) in enumerate(files): - # Delete existing from Library|Books, add to self.update_list - # for deletion from booklist[0] during add_books_to_metadata - path = self.path_template % (metadata[i].title, metadata[i].author[0]) - if path in self.cached_books: - self.update_list.append(self.cached_books[path]) - if DEBUG: - self.log.info("ITUNES.upload_books():") - self.log.info( " deleting existing '%s'" % (path)) - self._remove_from_iTunes(self.cached_books[path]) - if self.manual_sync_mode: - dev_book_added = self._remove_device_book(self.cached_books[path]) - - else: - if DEBUG: - self.log.info(" '%s' not in cached_books" % metadata[i].title) - - # Add to iTunes Library|Books - fpath = file - if getattr(file, 'orig_file_path', None) is not None: - fpath = file.orig_file_path - elif getattr(file, 'name', None) is not None: - fpath = file.name - - # If this file is to be deleted after xfer to device, don't add it to the - # iTunes database, as the file path will be invalid when calibre exits. - # Only possible in manual_sync_mode - if getattr(file, 'deleted_after_upload', False) and self.manual_sync_mode: - if DEBUG: - self.log.info(" PTF not added to Library|Books") - else: - # Add fpath to Library|Books - file_s = ctypes.c_char_p(fpath) - FileArray = ctypes.c_char_p * 1 - fa = FileArray(file_s) - op_status = lib.AddFiles(fa) - if DEBUG: - self.log.info(" file added to Library|Books") - - self.log.info("ITUNES.upload_books():\n iTunes adding '%s'" - % fpath) - - if DEBUG: - sys.stdout.write(" iTunes copying '%s' ..." % metadata[i].title) - sys.stdout.flush() - - while op_status.InProgress: - time.sleep(0.5) - if DEBUG: - sys.stdout.write('.') - sys.stdout.flush() - if DEBUG: - sys.stdout.write("\n") - sys.stdout.flush() - - if True: - if DEBUG: - sys.stdout.write(" waiting for handle to added '%s' ..." % metadata[i].title) - sys.stdout.flush() - while op_status.Tracks is None: - time.sleep(0.5) - if DEBUG: - sys.stdout.write('.') - sys.stdout.flush() - if DEBUG: - print - added = op_status.Tracks[0] - else: - # This approach simply scans Library|Books for the book we just added - added = self._find_library_book( - {'title': metadata[i].title, - 'author': metadata[i].author[0]}) - - dev_book_added = None if self.manual_sync_mode: - added = dev_book_added = self._add_device_book(fpath) - - if added: - thumb = None - # Use cover data as artwork - if metadata[i].cover: - if added.Artwork.Count: - added.Artwork.Item(1).SetArtworkFromFile(metadata[i].cover) - else: - added.AddArtworkFromFile(metadata[i].cover) - - try: - # Resize for thumb - width = metadata[i].thumbnail[0] - height = metadata[i].thumbnail[1] - im = PILImage.open(metadata[i].cover) - im = im.resize((width, height), PILImage.ANTIALIAS) - of = cStringIO.StringIO() - im.convert('RGB').save(of, 'JPEG') - thumb = of.getvalue() - - # Refresh the thumbnail cache + # Delete existing from Device|Books, add to self.update_list + # for deletion from booklist[0] during add_books_to_metadata + if path in self.cached_books: + self.update_list.append(self.cached_books[path]) + self._remove_from_device(self.cached_books[path]) + if DEBUG: + self.log.info( " deleting device book '%s'" % (path)) + if not getattr(fpath, 'deleted_after_upload', False): + self._remove_from_iTunes(self.cached_books[path]) if DEBUG: - self.log.info( " refreshing cached thumb for '%s'" % metadata[i].title) - archive_path = os.path.join(self.cache_dir, "thumbs.zip") - zfw = zipfile.ZipFile(archive_path, mode='a') - thumb_path = path.rpartition('.')[0] + '.jpg' - zfw.writestr(thumb_path, thumb) - zfw.close() - except: - self.problem_titles.append("'%s' by %s" % (metadata[i].title, metadata[i].author[0])) - self.log.error("ITUNES.upload_books():\n error converting '%s' to thumb for '%s'" % (metadata[i].cover,metadata[i].title)) + self.log.info(" deleting library book '%s'" % path) + else: + if DEBUG: + self.log.info(" '%s' not in cached_books" % metadata[i].title) + else: + # Delete existing from Library|Books, add to self.update_list + # for deletion from booklist[0] during add_books_to_metadata + if path in self.cached_books: + self.update_list.append(self.cached_books[path]) + self._remove_from_iTunes(self.cached_books[path]) + if DEBUG: + self.log.info("ITUNES.upload_books():") + self.log.info( " deleting library book '%s'" % path) + else: + if DEBUG: + self.log.info(" '%s' not in cached_books" % metadata[i].title) - # Create a new Book - this_book = Book(metadata[i].title, metadata[i].author[0]) + # If the database copy will be deleted after upload, we have to + # use file (the PersistentTemporaryFile), which will be around until + # calibre exits. + fpath = file + lb_added = None + db_added = None + if not getattr(fpath, 'deleted_after_upload', False): + if getattr(file, 'orig_file_path', None) is not None: + fpath = file.orig_file_path + elif getattr(file, 'name', None) is not None: + fpath = file.name + else: + if DEBUG: + self.log.info(" file will be deleted after upload") + + if self.manual_sync_mode: + db_added = self._add_device_book(fpath, metadata[i]) + if DEBUG: + self.log.info(" file uploaded to Device|Books") + if not getattr(fpath, 'deleted_after_upload', False): + lb_added = self._add_library_book(fpath, metadata[i]) + if DEBUG: + self.log.info(" file added to Library|Books for iTunes:iBooks tracking") + else: + lb_added = self._add_library_book(fpath, metadata[i]) + if DEBUG: + self.log.info(" file added to Library|Books for pending sync") + + # Use calibre cover data as artwork if available + thumb = self._cover_to_thumb(path, metadata[i], lb_added, db_added) + + # Create a new Book + this_book = Book(metadata[i].title, metadata[i].author[0]) + if lb_added: try: - this_book.datetime = parse_date(str(added.DateAdded)).timetuple() + this_book.datetime = parse_date(str(lb_added.DateAdded)).timetuple() except: pass - this_book.db_id = None - this_book.device_collections = [] - this_book.library_id = added - this_book.path = path - this_book.size = added.Size # Updated later from actual storage size - this_book.thumbnail = thumb - this_book.iTunes_id = added - - new_booklist.append(this_book) - - # Flesh out the iTunes metadata - if metadata[i].comments: - added.Comment = (strip_tags.sub('',metadata[i].comments)) - added.Description = ("added by calibre %s" % strftime('%Y-%m-%d %H:%M:%S')) - added.Enabled = True - if metadata[i].rating: - added.AlbumRating = (metadata[i].rating*10) - added.SortArtist = (metadata[i].author_sort.title()) - added.SortName = (this_book.title_sorter) - - # Set genre from metadata - # iTunes grabs the first dc:subject from the opf metadata, - # But we can manually override with first tag starting with alpha - for tag in metadata[i].tags: - if self._is_alpha(tag[0]): - added.Category = (tag) - break - - # Add new_book to self.cached_paths - self.cached_books[this_book.path] = { - 'title': metadata[i].title, - 'author': metadata[i].author[0], - 'lib_book': added, - 'dev_book': dev_book_added - } - - # Report progress - if self.report_progress is not None: - self.report_progress(i+1/file_count, _('%d of %d') % (i+1, file_count)) + elif db_added: + try: + this_book.datetime = parse_date(str(db_added.DateAdded)).timetuple() + except: + pass + this_book.db_id = None + this_book.device_collections = [] + this_book.library_id = lb_added + this_book.path = path + if lb_added: + this_book.size = self._get_device_book_size(fpath, lb_added.Size) else: - self.log.error("ITUNES.upload_books():\n could not find added book in iTunes") + this_book.size = self._get_device_book_size(fpath, db_added.Size) + this_book.thumbnail = thumb + if lb_added: + this_book.iTunes_id = lb_added + new_booklist.append(this_book) + + # Flesh out the iTunes metadata + if metadata[i].comments: + if lb_added: + lb_added.Comment = (strip_tags.sub('',metadata[i].comments)) + if db_added: + db_added.Comment = (strip_tags.sub('',metadata[i].comments)) + + if metadata[i].rating: + if lb_added: + lb_added.AlbumRating = (metadata[i].rating*10) + # iBooks currently doesn't allow setting rating ... ? + try: + if db_added: + db_added.AlbumRating = (metadata[i].rating*10) + except: + pass + + if lb_added: + lb_added.Description = ("added by calibre %s" % strftime('%Y-%m-%d %H:%M:%S')) + lb_added.Enabled = True + lb_added.SortArtist = (metadata[i].author_sort.title()) + lb_added.SortName = (this_book.title_sorter) + + if db_added: + db_added.Description = ("added by calibre %s" % strftime('%Y-%m-%d %H:%M:%S')) + db_added.Enabled = True + db_added.SortArtist = (metadata[i].author_sort.title()) + db_added.SortName = (this_book.title_sorter) + + # Set genre from metadata + # iTunes grabs the first dc:subject from the opf metadata, + # But we can manually override with first tag starting with alpha + for tag in metadata[i].tags: + if self._is_alpha(tag[0]): + if lb_added: + lb_added.Category = (tag) + if db_added: + db_added.Category = (tag) + break + + # Add new_book to self.cached_paths + self.cached_books[this_book.path] = { + 'title': metadata[i].title, + 'author': metadata[i].author[0], + 'lib_book': lb_added, + 'dev_book': db_added + } + + # Report progress + if self.report_progress is not None: + self.report_progress(i+1/file_count, _('%d of %d') % (i+1, file_count)) + finally: pythoncom.CoUninitialize() @@ -1051,7 +1033,7 @@ class ITUNES(DevicePlugin): return (new_booklist, [], []) # Private methods - def _add_device_book(self,fpath): + def _add_device_book(self,fpath, metadata): ''' ''' self.log.info("ITUNES._add_device_book()") @@ -1091,14 +1073,148 @@ class ITUNES(DevicePlugin): # Add the passed book to the Device|Books playlist if pl: + ''' added = pl.AddFile(fpath) if DEBUG: self.log.info(" adding '%s' to device" % fpath) + ''' + file_s = ctypes.c_char_p(fpath) + FileArray = ctypes.c_char_p * 1 + fa = FileArray(file_s) + op_status = pl.AddFiles(fa) + + if DEBUG: + sys.stdout.write(" uploading '%s' to device ..." % metadata.title) + sys.stdout.flush() + + while op_status.InProgress: + time.sleep(0.5) + if DEBUG: + sys.stdout.write('.') + sys.stdout.flush() + if DEBUG: + sys.stdout.write("\n") + sys.stdout.flush() + + # This doesn't seem to work with device, just Library + if False: + if DEBUG: + sys.stdout.write(" waiting for handle to added '%s' ..." % metadata.title) + sys.stdout.flush() + while op_status.Tracks is None: + time.sleep(0.5) + if DEBUG: + sys.stdout.write('.') + sys.stdout.flush() + if DEBUG: + print + added = op_status.Tracks[0] + else: + # This approach simply scans Library|Books for the book we just added + added = self._find_device_book( + {'title': metadata.title, + 'author': metadata.author[0]}) + return added + finally: pythoncom.CoUninitialize() return added + def _add_library_book(self,file, metadata): + ''' + assumes pythoncom wrapper + ''' + self.log.info("ITUNES._add_library_book()") + if isosx: + print "to be implemented" + + elif iswindows: + lib = self.iTunes.LibraryPlaylist + file_s = ctypes.c_char_p(file) + FileArray = ctypes.c_char_p * 1 + fa = FileArray(file_s) + op_status = lib.AddFiles(fa) + if DEBUG: + self.log.info(" file added to Library|Books") + + self.log.info(" iTunes adding '%s'" % file) + + if DEBUG: + sys.stdout.write(" iTunes copying '%s' ..." % metadata.title) + sys.stdout.flush() + + while op_status.InProgress: + time.sleep(0.5) + if DEBUG: + sys.stdout.write('.') + sys.stdout.flush() + if DEBUG: + sys.stdout.write("\n") + sys.stdout.flush() + + if True: + if DEBUG: + sys.stdout.write(" waiting for handle to added '%s' ..." % metadata.title) + sys.stdout.flush() + while op_status.Tracks is None: + time.sleep(0.5) + if DEBUG: + sys.stdout.write('.') + sys.stdout.flush() + if DEBUG: + print + added = op_status.Tracks[0] + else: + # This approach simply scans Library|Books for the book we just added + added = self._find_library_book( + {'title': metadata.title, + 'author': metadata.author[0]}) + return added + + def _cover_to_thumb(self, path, metadata, lb_added, db_added): + ''' + assumes pythoncom wrapper for db_added + ''' + self.log.info("ITUNES._cover_to_thumb()") + thumb = None + if metadata.cover: + if lb_added: + if lb_added.Artwork.Count: + lb_added.Artwork.Item(1).SetArtworkFromFile(metadata.cover) + else: + lb_added.AddArtworkFromFile(metadata.cover) + + if db_added: + if db_added.Artwork.Count: + db_added.Artwork.Item(1).SetArtworkFromFile(metadata.cover) + else: + db_added.AddArtworkFromFile(metadata.cover) + + try: + # Resize for thumb + width = metadata.thumbnail[0] + height = metadata.thumbnail[1] + im = PILImage.open(metadata.cover) + im = im.resize((width, height), PILImage.ANTIALIAS) + of = cStringIO.StringIO() + im.convert('RGB').save(of, 'JPEG') + thumb = of.getvalue() + + # Refresh the thumbnail cache + if DEBUG: + self.log.info( " refreshing cached thumb for '%s'" % metadata.title) + archive_path = os.path.join(self.cache_dir, "thumbs.zip") + zfw = zipfile.ZipFile(archive_path, mode='a') + thumb_path = path.rpartition('.')[0] + '.jpg' + zfw.writestr(thumb_path, thumb) + zfw.close() + except: + self.problem_titles.append("'%s' by %s" % (metadata.title, metadata.author[0])) + self.log.error(" error converting '%s' to thumb for '%s'" % (metadata.cover,metadata.title)) + + return thumb + def _discover_manual_sync_mode(self, wait=0): ''' Assumes pythoncom for windows @@ -1235,6 +1351,35 @@ class ITUNES(DevicePlugin): ub['author'])) self.log.info() + def _find_device_book(self, cached_book): + ''' + Windows-only method to get a handle to device book in the current pythoncom session + ''' + if iswindows: + if DEBUG: + self.log.info("ITUNES._find_device_book()") + self.log.info(" looking for '%s' by %s" % (cached_book['title'], cached_book['author'])) + + dev_books = self._get_device_books_playlist() + attempts = 9 + while attempts: + # Find book whose Artist field = cached_book['author'] + hits = dev_books.Search(cached_book['author'],self.SearchField.index('Artists')) + if hits: + for hit in hits: + self.log.info(" evaluating '%s' by %s" % (hit.Name, hit.Artist)) + if hit.Name == cached_book['title']: + self.log.info(" matched '%s' by %s" % (hit.Name, hit.Artist)) + return hit + attempts -= 1 + time.sleep(0.5) + if DEBUG: + self.log.warning(" attempt #%d" % (10 - attempts)) + + if DEBUG: + self.log.error(" search for '%s' yielded no hits" % cached_book['title']) + return None + def _find_library_book(self, cached_book): ''' Windows-only method to get a handle to a library book in the current pythoncom session @@ -1437,28 +1582,24 @@ class ITUNES(DevicePlugin): return device_books - def _get_device_playlist(self): + def _get_device_books_playlist(self): ''' - + assumes pythoncom wrapper ''' if iswindows: if 'iPod' in self.sources: pl = None - try: - pythoncom.CoInitialize() - connected_device = self.sources['iPod'] - device = self.iTunes.sources.ItemByName(connected_device) + connected_device = self.sources['iPod'] + device = self.iTunes.sources.ItemByName(connected_device) - dev_books = None - for pl in device.Playlists: - if pl.Kind == self.PlaylistKind.index('User') and \ - pl.SpecialKind == self.PlaylistSpecialKind.index('Books'): - break - else: - if DEBUG: - self.log.error(" no iPad|Books playlist found") - finally: - pythoncom.CoUninitialize() + dev_books = None + for pl in device.Playlists: + if pl.Kind == self.PlaylistKind.index('User') and \ + pl.SpecialKind == self.PlaylistSpecialKind.index('Books'): + break + else: + if DEBUG: + self.log.error(" no iPad|Books playlist found") return pl def _get_library_books(self): @@ -1671,11 +1812,11 @@ class ITUNES(DevicePlugin): self.version[0],self.version[1],self.version[2])) self.log.info(" iTunes_media: %s" % self.iTunes_media) - def _remove_device_book(self, cached_book): + def _remove_from_device(self, cached_book): ''' Windows assumes pythoncom wrapper ''' - self.log.info("ITUNES._remove_device_book()") + self.log.info("ITUNES._remove_from_device()") if isosx: if DEBUG: self.log.info(" deleting %s" % cached_book['dev_book']) @@ -1683,7 +1824,7 @@ class ITUNES(DevicePlugin): print "result: %s" % result elif iswindows: - dev_pl = self._get_device_playlist() + dev_pl = self._get_device_books_playlist() hits = dev_pl.Search(cached_book['author'],self.SearchField.index('Artists')) if hits: for hit in hits: diff --git a/src/calibre/gui2/cover_flow.py b/src/calibre/gui2/cover_flow.py index 3bd554e891..98a36532da 100644 --- a/src/calibre/gui2/cover_flow.py +++ b/src/calibre/gui2/cover_flow.py @@ -67,7 +67,8 @@ if pictureflow is not None: return ans def reset(self): - self.dataChanged.emit() + #self.dataChanged.emit() + pass def image(self, index): return self.model.cover(index) From d1e49d92678c687976af099fa1d948abe899c49c Mon Sep 17 00:00:00 2001 From: Kovid Goyal <kovid@kovidgoyal.net> Date: Wed, 9 Jun 2010 20:04:56 -0600 Subject: [PATCH 060/112] Conversion pipeline: Handle missing/obsolete input/output profiles gracefully --- src/calibre/ebooks/conversion/plumber.py | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/src/calibre/ebooks/conversion/plumber.py b/src/calibre/ebooks/conversion/plumber.py index e227ad2c8e..24b35f804f 100644 --- a/src/calibre/ebooks/conversion/plumber.py +++ b/src/calibre/ebooks/conversion/plumber.py @@ -706,15 +706,22 @@ OptionRecommendation(name='timestamp', for rec in group: setattr(self.opts, rec.option.name, rec.recommended_value) - for x in input_profiles(): - if x.short_name == self.opts.input_profile: - self.opts.input_profile = x - break + def set_profile(profiles, which): + attr = which + '_profile' + sval = getattr(self.opts, attr) + for x in profiles(): + if x.short_name == sval: + setattr(self.opts, attr, x) + return + self.log.warn( + 'Profile (%s) %r is no longer available, using default'%(which, sval)) + for x in profiles(): + if x.short_name == 'default': + setattr(self.opts, attr, x) + break - for x in output_profiles(): - if x.short_name == self.opts.output_profile: - self.opts.output_profile = x - break + set_profile(input_profiles, 'input') + set_profile(output_profiles, 'output') self.read_user_metadata() self.opts.no_inline_navbars = self.opts.output_profile.supports_mobi_indexing \ From a42985c57c0f673fd9216c5ee37c75882bfcf45e Mon Sep 17 00:00:00 2001 From: Kovid Goyal <kovid@kovidgoyal.net> Date: Wed, 9 Jun 2010 21:00:36 -0600 Subject: [PATCH 061/112] Fix #5777 (New recipe for blog Reptantes in Spanish) --- resources/recipes/reptantes.recipe | 43 ++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 resources/recipes/reptantes.recipe diff --git a/resources/recipes/reptantes.recipe b/resources/recipes/reptantes.recipe new file mode 100644 index 0000000000..51b65c6639 --- /dev/null +++ b/resources/recipes/reptantes.recipe @@ -0,0 +1,43 @@ + +__license__ = 'GPL v3' +__copyright__ = '2010, Darko Miletic <darko.miletic at gmail.com>' +''' +www.reptantes.com.ar +''' + +from calibre.web.feeds.news import BasicNewsRecipe + +class Reptantes(BasicNewsRecipe): + title = 'Reptantes' + __author__ = 'Darko Miletic' + description = u"cada vez que te haces acupuntura, tu muñeco vudú sufre en algún lado" + oldest_article = 130 + max_articles_per_feed = 100 + language = 'es' + encoding = 'utf-8' + no_stylesheets = True + use_embedded_content = False + publication_type = 'blog' + extra_css = ' body{font-family: "Palatino Linotype",serif} h2{text-align: center; color:#BE7F8D} img{margin-bottom: 2em} ' + + conversion_options = { + 'comment' : description + , 'tags' : 'literatura' + , 'publisher': 'Hernan Racnati' + , 'language' : language + } + + feeds = [(u'Posts', u'http://www.reptantes.com.ar/?feed=rss2')] + + keep_only_tags = [dict(attrs={'id':'content'})] + remove_tags = [dict(attrs={'class':'iLikeThis'})] + remove_tags_before = dict(name='h2') + remove_tags_after = dict(attrs={'class':'iLikeThis'}) + + + def preprocess_html(self, soup): + for item in soup.findAll(style=True): + del item['style'] + return self.adeify_images(soup) + + From 070f05509ecd159f2e3b2ee0752799979a496a04 Mon Sep 17 00:00:00 2001 From: Translators <> Date: Thu, 10 Jun 2010 04:35:08 +0100 Subject: [PATCH 062/112] Launchpad automatic translations update. --- src/calibre/translations/de.po | 34 +- src/calibre/translations/es.po | 216 +- src/calibre/translations/it.po | 14 +- src/calibre/translations/pt_BR.po | 113 +- src/calibre/translations/sl.po | 6779 ++++++++++++++++++++--------- 5 files changed, 4861 insertions(+), 2295 deletions(-) diff --git a/src/calibre/translations/de.po b/src/calibre/translations/de.po index 5a4e016d26..ad8a898348 100644 --- a/src/calibre/translations/de.po +++ b/src/calibre/translations/de.po @@ -8,13 +8,13 @@ msgstr "" "Project-Id-Version: de\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2010-06-06 21:03+0000\n" -"PO-Revision-Date: 2010-06-06 17:54+0000\n" -"Last-Translator: Gerold Kogler <gnosis@gmx.at>\n" +"PO-Revision-Date: 2010-06-09 22:10+0000\n" +"Last-Translator: S. Dorscht <Unknown>\n" "Language-Team: American English <kde-i18n-doc@lists.kde.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2010-06-07 03:39+0000\n" +"X-Launchpad-Export-Date: 2010-06-10 03:34+0000\n" "X-Generator: Launchpad (build Unknown)\n" "Generated-By: pygettext.py 1.5\n" @@ -2841,6 +2841,8 @@ msgid "" "Normally extra spaces are condensed into a single space. With this option " "all spaces will be displayed." msgstr "" +"Normalerweise werden extra Leerzeichen zu einem einzigen Leerzeichen " +"zusammengeführt. Mit dieser Option werden alle Leerzeichen angezeigt." #: /home/kovid/work/calibre/src/calibre/ebooks/txt/input.py:36 msgid "" @@ -3009,7 +3011,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:101 msgid "tag browser categories not to display" -msgstr "" +msgstr "Etiketten-Browser Kategorien nicht anzeigen" #: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:138 #: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:476 @@ -3109,7 +3111,7 @@ msgstr "Suche nach Büchern" #: /home/kovid/work/calibre/src/calibre/gui2/add_wizard/__init__.py:74 msgid "Looking for duplicates based on file hash" -msgstr "" +msgstr "Suche nach Duplikaten anhand des Datei Hashes" #: /home/kovid/work/calibre/src/calibre/gui2/add_wizard/__init__.py:109 #: /home/kovid/work/calibre/src/calibre/gui2/add_wizard/welcome_ui.py:65 @@ -5820,7 +5822,7 @@ msgstr "&Alle Aufträge abbrechen" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:24 msgid "Editing meta information for <b>%d books</b>" -msgstr "" +msgstr "Meta-Informationen für <b>%d books</b> editieren" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:157 msgid "Edit Meta information" @@ -6150,11 +6152,11 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/saved_search_editor_ui.py:85 msgid "Select a saved search to edit" -msgstr "" +msgstr "Wählen Sie eine gespeicherte Suche zum Editieren aus" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/saved_search_editor_ui.py:86 msgid "Delete this selected saved search" -msgstr "" +msgstr "Löscht diese selektierte gespeicherte Suche" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/saved_search_editor_ui.py:88 msgid "Enter a new saved search name." @@ -6550,7 +6552,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor.py:60 #: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:410 msgid "Item is blank" -msgstr "" +msgstr "Eintrag ist leer" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor.py:61 #: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:411 @@ -6567,7 +6569,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor.py:79 msgid "No item selected" -msgstr "" +msgstr "Kein Eintrag ausgewählt" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor.py:80 msgid "You must select one item from the list of Available items." @@ -6575,7 +6577,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor.py:89 msgid "No items selected" -msgstr "" +msgstr "Keine Einträge ausgewählt" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor.py:90 msgid "You must select at least one items from the list." @@ -6587,7 +6589,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor_ui.py:71 msgid "Category Editor" -msgstr "" +msgstr "Kategorie-Editor" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor_ui.py:72 msgid "Items in use" @@ -6605,7 +6607,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor_ui.py:77 msgid "Ctrl+S" -msgstr "" +msgstr "Strg+S" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/test_email_ui.py:51 msgid "Test email settings" @@ -7028,7 +7030,7 @@ msgstr "Größe" #: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:997 #: /home/kovid/work/calibre/src/calibre/gui2/status.py:104 msgid "Collections" -msgstr "" +msgstr "Sammlungen" #: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:993 msgid "Format" @@ -7616,7 +7618,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:142 msgid "Rename" -msgstr "" +msgstr "Umbenennen" #: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:147 msgid "Hide category %s" @@ -10204,7 +10206,7 @@ msgstr "%d Bücher" #: /home/kovid/work/calibre/src/calibre/library/server/opds.py:124 msgid "%d items" -msgstr "" +msgstr "%d Einträge" #: /home/kovid/work/calibre/src/calibre/library/server/opds.py:141 msgid "RATING: %s<br />" diff --git a/src/calibre/translations/es.po b/src/calibre/translations/es.po index 4ab8207300..75cb278f4d 100644 --- a/src/calibre/translations/es.po +++ b/src/calibre/translations/es.po @@ -11,13 +11,13 @@ msgstr "" "Project-Id-Version: es\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2010-06-06 21:03+0000\n" -"PO-Revision-Date: 2010-06-07 03:12+0000\n" -"Last-Translator: victor tejada yau <Unknown>\n" +"PO-Revision-Date: 2010-06-09 18:23+0000\n" +"Last-Translator: Jellby <Unknown>\n" "Language-Team: Spanish\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2010-06-08 03:39+0000\n" +"X-Launchpad-Export-Date: 2010-06-10 03:35+0000\n" "X-Generator: Launchpad (build Unknown)\n" #: /home/kovid/work/calibre/src/calibre/customize/profiles.py:318 @@ -3701,7 +3701,7 @@ msgstr "C&SS adicional" #: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:136 msgid "&Transliterate unicode characters to ASCII" -msgstr "&Transliterar los caracteres unicode mediante ASCII" +msgstr "T&ransliterar los caracteres unicode mediante ASCII" #: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:137 msgid "Insert &blank line" @@ -3709,7 +3709,7 @@ msgstr "Insertar línea en &blanco" #: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:138 msgid "Keep &ligatures" -msgstr "Mantener &ligaduras" +msgstr "&Mantener ligaduras" #: /home/kovid/work/calibre/src/calibre/gui2/convert/lrf_output.py:19 msgid "LRF Output" @@ -4674,7 +4674,7 @@ msgstr "Mis libros" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/catalog_ui.py:69 #: /home/kovid/work/calibre/src/calibre/gui2/tools.py:287 msgid "Generate catalog" -msgstr "Genera el catálogo" +msgstr "Generar el catálogo" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/catalog_ui.py:70 msgid "Generate catalog for {0} books" @@ -5322,12 +5322,12 @@ msgstr "&Abrir el directorio de configuración de calibre" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:589 msgid "Limit the max. simultaneous jobs to the available CPU &cores" msgstr "" -"Limitar el número máximo de tareas simultáneas al número de núcleos de &CPU " +"&Limitar el número máximo de tareas simultáneas al número de núcleos de CPU " "disponibles." #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:590 msgid "Debug &device detection" -msgstr "Depurar detección de &dispositivos" +msgstr "&Depurar detección de dispositivos" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:591 msgid "" @@ -5390,7 +5390,7 @@ msgstr "Número máximo de elementos &OPDS por consulta:" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:600 msgid "Max. OPDS &ungrouped items:" -msgstr "" +msgstr "&Máximo número de elementos OPDS sin agrupar:" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:601 msgid "&Start Server" @@ -6445,23 +6445,23 @@ msgstr "Editor de categorías de usuario" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories_ui.py:154 msgid "A&vailable items" -msgstr "" +msgstr "Elementos &disponibles" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories_ui.py:155 msgid "Apply tags to current tag category" -msgstr "" +msgstr "Añadir etiquetas a la categoría de etiquetas actual" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories_ui.py:157 msgid "A&pplied items" -msgstr "" +msgstr "Elementos &añadidos" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories_ui.py:158 msgid "Unapply (remove) tag from current tag category" -msgstr "" +msgstr "Eliminar etiqueta de la categoría de etiquetas actual" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories_ui.py:160 msgid "Category name: " -msgstr "" +msgstr "Nombre de la categoría: " #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories_ui.py:161 msgid "Select a category to edit" @@ -6469,15 +6469,17 @@ msgstr "Seleccione una categoria para editar" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories_ui.py:162 msgid "Delete this selected tag category" -msgstr "" +msgstr "Borrar esta categoría de etiquetas" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories_ui.py:164 msgid "Enter a new category name. Select the kind before adding it." msgstr "" +"Introduzca un nuevo nombre de categoría. Seleccione el tipo antes de " +"añadirlo." #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories_ui.py:165 msgid "Add the new category" -msgstr "" +msgstr "Añadir la nueva categoría" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories_ui.py:167 msgid "Category filter: " @@ -6485,7 +6487,7 @@ msgstr "Filtro de categoria " #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories_ui.py:168 msgid "Select the content kind of the new category" -msgstr "" +msgstr "Seleccione el tipo de contenido de la nueva categoría" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_editor.py:68 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor.py:93 @@ -6550,62 +6552,64 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor.py:60 #: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:410 msgid "Item is blank" -msgstr "" +msgstr "El elemento está en blanco" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor.py:61 #: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:411 msgid "An item cannot be set to nothing. Delete it instead." -msgstr "" +msgstr "No puede establecerse un elemento en blanco. Bórrelo en su lugar." #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor.py:66 msgid "Item already used" -msgstr "" +msgstr "El elemento ya está en uso" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor.py:67 msgid "The item %s is already used." -msgstr "" +msgstr "El elemento %s ya está usado." #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor.py:79 msgid "No item selected" -msgstr "" +msgstr "No hay ningún elemento seleccionado" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor.py:80 msgid "You must select one item from the list of Available items." -msgstr "" +msgstr "Debe seleccionar un elemento de la lista de elementos disponibles." #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor.py:89 msgid "No items selected" -msgstr "" +msgstr "No hay elementos seleccionados" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor.py:90 msgid "You must select at least one items from the list." -msgstr "" +msgstr "Debe seleccionar al menos un elemento de la lista." #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor.py:94 msgid "Are you certain you want to delete the following items?" -msgstr "" +msgstr "¿Está seguro de que quiere borrar los siguientes elementos?" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor_ui.py:71 msgid "Category Editor" -msgstr "" +msgstr "Editor de categorías" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor_ui.py:72 msgid "Items in use" -msgstr "" +msgstr "Elementos en uso" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor_ui.py:73 msgid "" "Delete item from database. This will unapply the item from all books and " "then remove it from the database." msgstr "" +"Borrar elemento de la base de datos. Esto quitará el elemento de todos los " +"libros y después lo eliminará de la base de datos." #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor_ui.py:75 msgid "Rename the item in every book where it is used." -msgstr "" +msgstr "Renombrar el elemento en todos los libros que lo usen." #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor_ui.py:77 msgid "Ctrl+S" -msgstr "" +msgstr "Ctrl+S" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/test_email_ui.py:51 msgid "Test email settings" @@ -6973,15 +6977,15 @@ msgstr " - tareas" #: /home/kovid/work/calibre/src/calibre/gui2/library/delegates.py:284 msgid "N" -msgstr "" +msgstr "N" #: /home/kovid/work/calibre/src/calibre/gui2/library/delegates.py:284 msgid "Y" -msgstr "" +msgstr "S" #: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:47 msgid "On Device" -msgstr "" +msgstr "En el dispositivo" #: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:49 msgid "Size (MB)" @@ -7012,21 +7016,21 @@ msgstr "Libro <font face=\"serif\">%s</font> de %s." #: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1071 #: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:337 msgid "The lookup/search name is \"{0}\"" -msgstr "" +msgstr "El nombre de búsqueda es \"{0}\"" #: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:830 msgid "In Library" -msgstr "" +msgstr "En la biblioteca" #: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:834 msgid "Size" -msgstr "" +msgstr "Tamaño" #: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:835 #: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:997 #: /home/kovid/work/calibre/src/calibre/gui2/status.py:104 msgid "Collections" -msgstr "" +msgstr "Colecciones" #: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:993 msgid "Format" @@ -7034,7 +7038,7 @@ msgstr "Formato" #: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1053 msgid "Marked for deletion" -msgstr "" +msgstr "Marcado para borrarlo" #: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1056 msgid "Double click to <b>edit</b> me<br><br>" @@ -7042,43 +7046,43 @@ msgstr "Doble clic para <b>editarme</b><br><br>" #: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:101 msgid "Hide column %s" -msgstr "" +msgstr "Ocultar columna %s" #: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:106 msgid "Sort on %s" -msgstr "" +msgstr "Ordenar según %s" #: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:107 msgid "Ascending" -msgstr "" +msgstr "Ascendente" #: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:110 msgid "Descending" -msgstr "" +msgstr "Descendente" #: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:122 msgid "Change text alignment for %s" -msgstr "" +msgstr "Cambiar la alineación del texto para %s" #: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:124 msgid "Left" -msgstr "" +msgstr "Izquierda" #: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:124 msgid "Right" -msgstr "" +msgstr "Derecha" #: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:125 msgid "Center" -msgstr "" +msgstr "Centro" #: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:144 msgid "Show column" -msgstr "" +msgstr "Mostrar columna" #: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:156 msgid "Restore default layout" -msgstr "" +msgstr "Restaurar formato por defecto" #: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:475 msgid "Not allowed" @@ -7197,7 +7201,7 @@ msgstr "Error en la creación de la biblioteca de calibre en: %r. Cancelando." #: /home/kovid/work/calibre/src/calibre/gui2/main.py:132 msgid "Initializing user interface..." -msgstr "" +msgstr "Iniciando la interfaz de usuario..." #: /home/kovid/work/calibre/src/calibre/gui2/main.py:157 msgid "Repairing failed" @@ -7258,7 +7262,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/main.py:230 msgid "Starting %s: Loading books..." -msgstr "" +msgstr "Iniciando %s: Cargando libros..." #: /home/kovid/work/calibre/src/calibre/gui2/main.py:275 msgid "If you are sure it is not running" @@ -7299,12 +7303,12 @@ msgstr "calibre" #: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:397 msgid "&Restrict to:" -msgstr "" +msgstr "Restringir a:" #: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:398 msgid "" "Books display will be restricted to those matching the selected saved search" -msgstr "" +msgstr "Sólo se mostrarán los libros que coincidan con la búsqueda guardada" #: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:399 msgid "set in ui.py" @@ -7367,11 +7371,11 @@ msgstr "Buscar todas" #: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:418 msgid "Create, edit, and delete user categories" -msgstr "" +msgstr "Crear, editar y borrar categorías de usuario" #: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:419 msgid "Manage &user categories" -msgstr "" +msgstr "Administrar categorías de &usuario" #: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:420 msgid "Add books" @@ -7400,7 +7404,7 @@ msgstr "E" #: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:427 msgid "Merge book records" -msgstr "" +msgstr "Unir registros de libros" #: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:428 msgid "M" @@ -7513,6 +7517,7 @@ msgstr "Buscar" #: /home/kovid/work/calibre/src/calibre/gui2/search_box.py:297 msgid "The selected search will be <b>permanently deleted</b>. Are you sure?" msgstr "" +"La búsqueda seleccionada será <b>borrada permanentemente</b>. ¿Está seguro?" #: /home/kovid/work/calibre/src/calibre/gui2/shortcuts.py:58 msgid "Press a key..." @@ -7584,64 +7589,64 @@ msgstr "Pulse para ver las tareas activas." #: /home/kovid/work/calibre/src/calibre/gui2/sidebar.py:83 msgid "Hide Book Details" -msgstr "" +msgstr "Ocultar detalles del libro" #: /home/kovid/work/calibre/src/calibre/gui2/sidebar.py:83 msgid "Show Book Details" -msgstr "" +msgstr "Mostrar detalles del libro" #: /home/kovid/work/calibre/src/calibre/gui2/sidebar.py:84 msgid "Hide Tag Browser" -msgstr "" +msgstr "Ocultar explorador de etiquetas" #: /home/kovid/work/calibre/src/calibre/gui2/sidebar.py:84 msgid "Show Tag Browser" -msgstr "" +msgstr "Mostrar explorador de etiquetas" #: /home/kovid/work/calibre/src/calibre/gui2/sidebar.py:85 msgid "Hide Cover Browser" -msgstr "" +msgstr "Ocultar explorador de portadas" #: /home/kovid/work/calibre/src/calibre/gui2/sidebar.py:85 msgid "Show Cover Browser" -msgstr "" +msgstr "Mostrar explorador de portadas" #: /home/kovid/work/calibre/src/calibre/gui2/sidebar.py:95 msgid "Side bar" -msgstr "" +msgstr "Barra lateral" #: /home/kovid/work/calibre/src/calibre/gui2/sidebar.py:135 msgid "Cover browser could not be loaded: " -msgstr "" +msgstr "No se pudo cargar el explorador de portadas: " #: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:142 msgid "Rename" -msgstr "" +msgstr "Renombrar" #: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:147 msgid "Hide category %s" -msgstr "" +msgstr "Ocultar categoría %s" #: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:150 msgid "Show category" -msgstr "" +msgstr "Mostrar categoría" #: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:154 msgid "Show all categories" -msgstr "" +msgstr "Ver todas las categorias" #: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:161 msgid "Manage " -msgstr "" +msgstr "Administrar " #: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:165 msgid "Manage Saved Searches" -msgstr "" +msgstr "Administrar búsquedas guardadas" #: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:172 #: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:176 msgid "Manage User Categories" -msgstr "" +msgstr "Administrar categorías de usuarios" #: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:329 #: /home/kovid/work/calibre/src/calibre/library/database2.py:238 @@ -7650,7 +7655,7 @@ msgstr "Búsquedas" #: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:420 msgid "The name %s is already used." -msgstr "" +msgstr "El nombre %s ya está en uso." #: /home/kovid/work/calibre/src/calibre/gui2/tools.py:63 #: /home/kovid/work/calibre/src/calibre/gui2/tools.py:182 @@ -7805,7 +7810,7 @@ msgstr "Guardar solamente el formato %s en disco" #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:360 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2302 msgid "Save only %s format to disk in a single directory" -msgstr "" +msgstr "Guardar sólo el formato %s en un único directorio" #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:370 msgid "View specific format" @@ -7853,7 +7858,7 @@ msgstr "Guía de inicio rápido de calibre" #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:689 msgid "Select folder to open as device" -msgstr "" +msgstr "Seleccionar carpeta para abrir como un dispositivo" #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:800 msgid "Browse by covers" @@ -7861,7 +7866,7 @@ msgstr "Explorar por portadas" #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:870 msgid "({0} of {1})" -msgstr "" +msgstr "({0} de {1})" #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:875 msgid "(all books)" @@ -7869,7 +7874,7 @@ msgstr "(todos los libros)" #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:877 msgid "({0} of all)" -msgstr "" +msgstr "({0} de todos)" #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1000 msgid "Device: " @@ -8073,6 +8078,8 @@ msgid "" "The selected books will be <b>permanently deleted</b> from your device. Are " "you sure?" msgstr "" +"Los libros seleccionados se <b>borrarán permanentemente</b> del dispositivo. " +"¿Está seguro?" #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1572 msgid "Deleting books from device." @@ -8267,7 +8274,7 @@ msgstr "No se puede configurar mientras haya tareas en ejecución." #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2283 msgid "Cannot configure before calibre is restarted." -msgstr "" +msgstr "No se puede configurar antes de reiniciar calibre." #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2334 msgid "No detailed info available" @@ -8280,7 +8287,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2385 msgid "Failed" -msgstr "" +msgstr "Falló" #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2391 msgid "Error talking to device" @@ -8914,7 +8921,7 @@ msgstr "Pulsar para ver los libros en la tarjeta de memoria B del lector" #: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:246 msgid "Books located at" -msgstr "" +msgstr "Libros ubicados en" #: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:504 msgid "Change Case" @@ -9247,48 +9254,48 @@ msgstr "Activar el servidor de &contenidos" #: /home/kovid/work/calibre/src/calibre/library/caches.py:270 msgid "today" -msgstr "" +msgstr "today" #: /home/kovid/work/calibre/src/calibre/library/caches.py:273 msgid "yesterday" -msgstr "" +msgstr "yesterday" #: /home/kovid/work/calibre/src/calibre/library/caches.py:276 msgid "thismonth" -msgstr "" +msgstr "thismonth" #: /home/kovid/work/calibre/src/calibre/library/caches.py:279 #: /home/kovid/work/calibre/src/calibre/library/caches.py:280 msgid "daysago" -msgstr "" +msgstr "daysago" #: /home/kovid/work/calibre/src/calibre/library/caches.py:430 #: /home/kovid/work/calibre/src/calibre/library/caches.py:440 msgid "no" -msgstr "" +msgstr "no" #: /home/kovid/work/calibre/src/calibre/library/caches.py:430 #: /home/kovid/work/calibre/src/calibre/library/caches.py:440 msgid "unchecked" -msgstr "" +msgstr "unchecked" #: /home/kovid/work/calibre/src/calibre/library/caches.py:433 #: /home/kovid/work/calibre/src/calibre/library/caches.py:443 msgid "checked" -msgstr "" +msgstr "checked" #: /home/kovid/work/calibre/src/calibre/library/caches.py:433 #: /home/kovid/work/calibre/src/calibre/library/caches.py:443 msgid "yes" -msgstr "" +msgstr "yes" #: /home/kovid/work/calibre/src/calibre/library/caches.py:437 msgid "blank" -msgstr "" +msgstr "blank" #: /home/kovid/work/calibre/src/calibre/library/caches.py:437 msgid "empty" -msgstr "" +msgstr "empty" #: /home/kovid/work/calibre/src/calibre/library/catalog.py:41 msgid "" @@ -9930,15 +9937,15 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/library/database2.py:487 msgid "Main" -msgstr "" +msgstr "Principal" #: /home/kovid/work/calibre/src/calibre/library/database2.py:489 msgid "Card A" -msgstr "" +msgstr "Tarjeta A" #: /home/kovid/work/calibre/src/calibre/library/database2.py:491 msgid "Card B" -msgstr "" +msgstr "Tarjeta B" #: /home/kovid/work/calibre/src/calibre/library/database2.py:1542 msgid "<p>Migrating old database to ebook library in %s<br><center>" @@ -9968,7 +9975,7 @@ msgstr "ID comprobado" #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:111 msgid "Ratings" -msgstr "" +msgstr "Calificaciones" #: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:24 msgid "The title" @@ -10166,6 +10173,9 @@ msgid "" "more than this number of items. Default: %default. Set to a large number to " "disable grouping." msgstr "" +"Agrupar elementos por categorías tales como autores o etiquetas por la " +"primera letra cuando hay más de este número de elementos. Predeterminado: " +"%default. Establezca un número alto para desactivar el agrupamiento." #: /home/kovid/work/calibre/src/calibre/library/server/base.py:93 msgid "Password to access your calibre library. Username is " @@ -10193,43 +10203,43 @@ msgstr "Escribir PID del proceso al archivo especificado" #: /home/kovid/work/calibre/src/calibre/library/server/opds.py:112 msgid "%d books" -msgstr "" +msgstr "%d libros" #: /home/kovid/work/calibre/src/calibre/library/server/opds.py:124 msgid "%d items" -msgstr "" +msgstr "%d elementos" #: /home/kovid/work/calibre/src/calibre/library/server/opds.py:141 msgid "RATING: %s<br />" -msgstr "" +msgstr "CALIFICACIÓN: %s<br />" #: /home/kovid/work/calibre/src/calibre/library/server/opds.py:144 msgid "TAGS: %s<br />" -msgstr "" +msgstr "ETIQUETAS: %s<br />" #: /home/kovid/work/calibre/src/calibre/library/server/opds.py:148 msgid "SERIES: %s [%s]<br />" -msgstr "" +msgstr "SERIE: %s [%s]<br />" #: /home/kovid/work/calibre/src/calibre/library/server/opds.py:189 msgid "Library" -msgstr "" +msgstr "Biblioteca" #: /home/kovid/work/calibre/src/calibre/library/server/opds.py:228 msgid "Books in your library" -msgstr "" +msgstr "Libros en la biblioteca" #: /home/kovid/work/calibre/src/calibre/library/server/opds.py:234 msgid "By " -msgstr "" +msgstr "Por " #: /home/kovid/work/calibre/src/calibre/library/server/opds.py:235 msgid "Books sorted by " -msgstr "" +msgstr "Libros ordenados por " #: /home/kovid/work/calibre/src/calibre/library/server/opds.py:535 msgid "Newest" -msgstr "" +msgstr "Más reciente" #: /home/kovid/work/calibre/src/calibre/utils/config.py:48 msgid "%sUsage%s: %s\n" @@ -10302,7 +10312,7 @@ msgstr "Lista de búsquedas guardadas con nombre" #: /home/kovid/work/calibre/src/calibre/utils/config.py:700 msgid "User-created tag browser categories" -msgstr "" +msgstr "Categorías del explorador de etiquetas creadas por el usuario" #: /home/kovid/work/calibre/src/calibre/utils/ipc/job.py:43 msgid "Waiting..." diff --git a/src/calibre/translations/it.po b/src/calibre/translations/it.po index 174f1e65ff..168fae0101 100644 --- a/src/calibre/translations/it.po +++ b/src/calibre/translations/it.po @@ -9,13 +9,13 @@ msgstr "" "Project-Id-Version: calibre_calibre-it\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2010-06-06 21:03+0000\n" -"PO-Revision-Date: 2010-06-06 16:48+0000\n" -"Last-Translator: Kovid Goyal <Unknown>\n" +"PO-Revision-Date: 2010-06-09 16:39+0000\n" +"Last-Translator: Sheldon Pax <Unknown>\n" "Language-Team: italiano\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2010-06-07 03:40+0000\n" +"X-Launchpad-Export-Date: 2010-06-10 03:34+0000\n" "X-Generator: Launchpad (build Unknown)\n" "X-Poedit-Bookmarks: -1,-1,-1,-1,-1,1105,-1,1312,-1,-1\n" "Generated-By: pygettext.py 1.5\n" @@ -238,7 +238,7 @@ msgstr "Leggi i metadati dei libri negli archivi ZIP" #: /home/kovid/work/calibre/src/calibre/customize/builtins.py:381 #: /home/kovid/work/calibre/src/calibre/customize/builtins.py:391 msgid "Set metadata in %s files" -msgstr "Organizza i metadati in %s file" +msgstr "Imposta i metadati nei file %s" #: /home/kovid/work/calibre/src/calibre/customize/builtins.py:359 msgid "Set metadata from %s files" @@ -413,7 +413,7 @@ msgstr "Personalizzazione dei plug-in locali" #: /home/kovid/work/calibre/src/calibre/customize/ui.py:34 msgid "Disabled plugins" -msgstr "" +msgstr "Plugin disabilitati" #: /home/kovid/work/calibre/src/calibre/customize/ui.py:77 msgid "No valid plugin found in " @@ -3007,7 +3007,7 @@ msgstr "Cercando in" #: /home/kovid/work/calibre/src/calibre/gui2/add.py:229 msgid "Adding..." -msgstr "Aggiungendo..." +msgstr "Sto aggiungendo...." #: /home/kovid/work/calibre/src/calibre/gui2/add.py:242 msgid "Searching in all sub-directories..." @@ -8292,7 +8292,7 @@ msgid "" "ebook.com/whats-new\">new features</a>. Visit the download page?" msgstr "" "%s é stato aggiornato alla versione %s. Vedere la pagina <a " -"href=\"http://calibre-ebook.com/whats-new\">nuovitá</a>. Seguire il " +"href=\"http://calibre-ebook.com/whats-new\">novitá</a>. Seguire il " "collegamento alla pagina di scaricamento?" #: /home/kovid/work/calibre/src/calibre/gui2/viewer/bookmarkmanager.py:43 diff --git a/src/calibre/translations/pt_BR.po b/src/calibre/translations/pt_BR.po index 76ce0aebd1..c913a6227e 100644 --- a/src/calibre/translations/pt_BR.po +++ b/src/calibre/translations/pt_BR.po @@ -8,13 +8,13 @@ msgstr "" "Project-Id-Version: calibre\n" "Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" "POT-Creation-Date: 2010-06-06 21:03+0000\n" -"PO-Revision-Date: 2010-06-09 03:33+0000\n" +"PO-Revision-Date: 2010-06-10 02:23+0000\n" "Last-Translator: Thomaz Rodrigues Botelho <Unknown>\n" "Language-Team: Brazilian Portuguese <pt_BR@li.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2010-06-09 03:34+0000\n" +"X-Launchpad-Export-Date: 2010-06-10 03:35+0000\n" "X-Generator: Launchpad (build Unknown)\n" #: /home/kovid/work/calibre/src/calibre/customize/__init__.py:43 @@ -2224,7 +2224,7 @@ msgstr "O título do livro à procurar." #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/isbndb.py:111 msgid "The publisher of the book to search for." -msgstr "" +msgstr "A editora do livro à procurar." #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/library_thing.py:53 msgid "LibraryThing.com timed out. Try again later." @@ -2262,6 +2262,7 @@ msgstr "Capas" #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/output.py:22 msgid "Modify images to meet Palm device size limitations." msgstr "" +"Modificar imagens para adequar as limitações de tamanho do dispositivo Palm." #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/output.py:26 msgid "When present, use author sort field as author." @@ -2272,6 +2273,8 @@ msgid "" "Don't add Table of Contents to end of book. Useful if the book has its own " "table of contents." msgstr "" +"Não adicione Tabela de Conteúdos no fim do livro. Útil se o livro tem sua " +"própria tabela de conteúdos." #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/output.py:33 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/htmltoc.py:56 @@ -2280,7 +2283,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/output.py:37 msgid "Disable compression of the file contents." -msgstr "" +msgstr "Desliga compressão dos conteúdos dos arquivos." #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/output.py:40 msgid "Tag marking book to be filed with Personal Docs" @@ -2288,15 +2291,15 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/output.py:108 msgid "All articles" -msgstr "" +msgstr "Todos os artigos" #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:258 msgid "This is an Amazon Topaz book. It cannot be processed." -msgstr "" +msgstr "Este é um livro Amazon Topaz. Ele não pode ser processado." #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1372 msgid "Title Page" -msgstr "" +msgstr "Página do Título" #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1373 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/htmltoc.py:15 @@ -2307,7 +2310,7 @@ msgstr "Sumário" #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1374 msgid "Index" -msgstr "" +msgstr "Índice" #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1375 msgid "Glossary" @@ -2367,7 +2370,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/htmltoc.py:54 msgid "HTML TOC generation options." -msgstr "" +msgstr "Opções de geração de Tabela de Conteúdo HTML." #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/jacket.py:113 msgid "Book Jacket" @@ -2380,7 +2383,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/writer.py:32 msgid "OPF/NCX/etc. generation options." -msgstr "" +msgstr "Opções de geração de OPF/NCX/etc." #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/writer.py:35 msgid "OPF version to generate. Default is %default." @@ -2406,6 +2409,8 @@ msgid "" "Normally calibre treats blank lines as paragraph markers. With this option " "it will assume that every line represents a paragraph instead." msgstr "" +"Normalmente calibre trata linhas em branco como marcadores de parágrafo. Com " +"esta opção ele irá assumir que cada linha representa um parágrafo." #: /home/kovid/work/calibre/src/calibre/ebooks/pdb/input.py:26 #: /home/kovid/work/calibre/src/calibre/ebooks/tcr/input.py:27 @@ -2429,7 +2434,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/pdf/input.py:24 msgid "Do not extract images from the document" -msgstr "" +msgstr "Não extrair imagens do documento" #: /home/kovid/work/calibre/src/calibre/ebooks/pdf/input.py:26 msgid "" @@ -2440,7 +2445,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/pdf/input.py:30 msgid "Use the new PDF conversion engine." -msgstr "" +msgstr "Usar o novo sistema de conversão PDF" #: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/cli.py:31 msgid "" @@ -2522,7 +2527,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/decrypt.py:60 msgid "Decrypt Options:" -msgstr "" +msgstr "Opções de Desencriptação:" #: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/encrypt.py:25 msgid "" @@ -2536,7 +2541,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/encrypt.py:54 msgid "Encrypt Options:" -msgstr "" +msgstr "Opções de Encriptação:" #: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/info.py:21 msgid "" @@ -2610,7 +2615,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/rotate.py:53 msgid "Rotate Options:" -msgstr "" +msgstr "Opções de Rotação:" #: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/split.py:25 msgid "" @@ -2629,19 +2634,23 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/split.py:61 msgid "Split Options:" -msgstr "" +msgstr "Opções de Divisão:" #: /home/kovid/work/calibre/src/calibre/ebooks/pdf/output.py:31 msgid "" "The unit of measure. Default is inch. Choices are %s Note: This does not " "override the unit for margins!" msgstr "" +"A unidade de medida. O padrão é polegadas. Escolhas são %s Nota: Isto não " +"substitui a unidade para as margens!" #: /home/kovid/work/calibre/src/calibre/ebooks/pdf/output.py:36 msgid "" "The size of the paper. This size will be overridden when an output profile " "is used. Default is letter. Choices are %s" msgstr "" +"O tamanho do papel. Este tamanho será substituido quando um perfil de saída " +"é usado. O padrão é carta. Escolhas são %s" #: /home/kovid/work/calibre/src/calibre/ebooks/pdf/output.py:40 msgid "" @@ -2651,13 +2660,15 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/pdf/output.py:45 msgid "The orientation of the page. Default is portrait. Choices are %s" -msgstr "" +msgstr "A orientação da página. O padrão é retrato. Escolhas são %s" #: /home/kovid/work/calibre/src/calibre/ebooks/pdf/output.py:49 msgid "" "Preserve the aspect ratio of the cover, instead of stretching it to fill the " "ull first page of the generated pdf." msgstr "" +"Preservar o aspecto dimensinal da capa, ao invés de deformar ela para " +"preencher toda a primeira página no pdf gerado." #: /home/kovid/work/calibre/src/calibre/ebooks/pdf/pdftohtml.py:55 msgid "Could not find pdftohtml, check it is in your PATH" @@ -3146,7 +3157,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/library/database2.py:1239 #: /home/kovid/work/calibre/src/calibre/library/database2.py:1257 msgid "Catalog" -msgstr "" +msgstr "Catálogo" #: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:69 msgid "'Don't include this book' tag:" @@ -4443,28 +4454,30 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/catalog_ui.py:69 #: /home/kovid/work/calibre/src/calibre/gui2/tools.py:287 msgid "Generate catalog" -msgstr "" +msgstr "Gerar catálogo" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/catalog_ui.py:70 msgid "Generate catalog for {0} books" -msgstr "" +msgstr "Gerar catálogo para {0} livros" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/catalog_ui.py:71 msgid "Catalog &format:" -msgstr "" +msgstr "&formato do catálogo:" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/catalog_ui.py:72 msgid "" "Catalog &title (existing catalog with the same title will be replaced):" msgstr "" +"&título do catálogo (um catálogo existente com mesmo título será " +"substituído):" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/catalog_ui.py:73 msgid "&Send catalog to device automatically" -msgstr "" +msgstr "&Enviar catálogo para o dispositivo automaticamente" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/catalog_ui.py:74 msgid "Catalog options" -msgstr "" +msgstr "Opções do catálogo" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_format_ui.py:40 msgid "Choose Format" @@ -4777,6 +4790,8 @@ msgid "" "If books with similar titles and authors found, &merge the new files " "automatically" msgstr "" +"Se livros com títulos e autores similares forem encontrados, &fundir em " +"novos arquivos automaticamente" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/add_save_ui.py:113 msgid "&Configure metadata from file name" @@ -6205,7 +6220,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor.py:90 msgid "You must select at least one items from the list." -msgstr "" +msgstr "Você deve selecionar pelo menos um dos itens da lista." #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor.py:94 msgid "Are you certain you want to delete the following items?" @@ -6974,7 +6989,7 @@ msgstr "E" #: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:427 msgid "Merge book records" -msgstr "" +msgstr "Fusão de livros" #: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:428 msgid "M" @@ -7330,11 +7345,11 @@ msgstr "Obter somente os metadados sociais" #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:292 msgid "Merge into first selected book - delete others" -msgstr "" +msgstr "Fundir no primeiro livro selecionado - apagar os outros" #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:294 msgid "Merge into first selected book - keep others" -msgstr "" +msgstr "Fundir no primeiro livro selecionado - manter os outros" #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:301 msgid "Add books from a single directory" @@ -7585,6 +7600,8 @@ msgstr "" msgid "" "Some duplicates were found and merged into the following existing books:" msgstr "" +"Alguns livros duplicados foram encontrados e fundidos nos seguintes livros " +"existentes:" #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1450 msgid "Failed to read metadata" @@ -7668,11 +7685,11 @@ msgstr "Não foi possível editar metadados" #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1719 #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1722 msgid "Cannot merge books" -msgstr "" +msgstr "Não pode fundir livros" #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1723 msgid "At least two books must be selected for merging" -msgstr "" +msgstr "Pelo menos dois livros devem ser selecionados para fusão" #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1727 msgid "" @@ -7697,6 +7714,8 @@ msgid "" "You are about to merge more than 5 books. Are you <b>sure</b> you want to " "proceed?" msgstr "" +"Você está para fundir mais que 5 livros. Você tem <b>certeza</b> que você " +"quer prosseguir?" #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1849 msgid "Cannot save to disk" @@ -7725,7 +7744,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1916 msgid "No books selected to generate catalog for" -msgstr "" +msgstr "Nenhum livro selecionado para gerar o catálogo" #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1933 msgid "Generating %s catalog..." @@ -7736,10 +7755,12 @@ msgid "" "No books to catalog\n" "Check exclude tags" msgstr "" +"Nenhum livro para catalogar\n" +"Verifique as tags de exclusão" #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1949 msgid "Catalog generated." -msgstr "" +msgstr "Catálogo gerado." #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1952 msgid "Export Catalog Directory" @@ -8753,6 +8774,11 @@ msgid "" "Default: '%%default'\n" "Applies to: CSV, XML output formats" msgstr "" +"Os campos para a saída quando catalogando livros do banco de dados. Deve ser " +"uma lista de campos separados por vírgula.\n" +"Campos disponíveis: %s.\n" +"Padrão: '%%default'\n" +"Aplica-se para: arquivos de saída CSV, XML" #: /home/kovid/work/calibre/src/calibre/library/catalog.py:51 msgid "" @@ -8768,6 +8794,9 @@ msgid "" "Default: '%default'\n" "Applies to: ePub, MOBI output formats" msgstr "" +"Título do catálogo gerado usado como título no metadado.\n" +"Padrão: '%default'\n" +"Aplica-se para: arquivos de saída ePub, MOBI" #: /home/kovid/work/calibre/src/calibre/library/catalog.py:209 msgid "" @@ -8800,6 +8829,9 @@ msgid "" "Default: '%default'\n" "Applies to: ePub, MOBI output formats" msgstr "" +"Incluir seção 'Títulos' no catálogo.\n" +"Padrão: '%default'\n" +"Aplica-se para: arquivos de saída ePub, MOBI" #: /home/kovid/work/calibre/src/calibre/library/catalog.py:240 msgid "" @@ -8807,6 +8839,9 @@ msgid "" "Default: '%default'\n" "Applies to: ePub, MOBI output formats" msgstr "" +"Inclui a seção 'Adicionado Recentemente' no catálogo.\n" +"Padrão: '%default'\n" +"Aplica-se para: arquivos de saída ePub, MOBI" #: /home/kovid/work/calibre/src/calibre/library/catalog.py:247 msgid "" @@ -8833,6 +8868,11 @@ msgid "" "Default: '%default'\n" "Applies to: ePub, MOBI output formats" msgstr "" +"Especifica o perfil de saída. Em alguns casos, um perfil de saída é " +"necessário para otimizar o catálogo para o dispositivo. Por exemplo, " +"'kindle' ou 'kindle_dx'\n" +"Padrão: '%default'\n" +"Aplica-se para: arquivos de saída ePub, MOBI" #: /home/kovid/work/calibre/src/calibre/library/catalog.py:268 msgid "" @@ -9132,7 +9172,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/library/cli.py:668 msgid "Error: You must specify a catalog output file" -msgstr "" +msgstr "Erro: Você deve especificar um arquivo de saída para o catálogo" #: /home/kovid/work/calibre/src/calibre/library/cli.py:688 msgid "" @@ -9785,6 +9825,8 @@ msgid "" "Failed to log in, check your username and password for the calibre " "Periodicals service." msgstr "" +"Falou em logar-se, verifique seu nome de usuário e senha para o serviço de " +"Periódicos do calibre." #: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:1467 msgid "" @@ -9819,25 +9861,30 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:483 msgid "Base directory into which URL is saved. Default is %default" -msgstr "" +msgstr "Diretório base no qual a URL é salva. O padrão é %default" #: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:486 msgid "" "Timeout in seconds to wait for a response from the server. Default: %default " "s" msgstr "" +"Tempo em segundos para esperar uma resposta do servidor. Padrão: %default s" #: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:489 msgid "" "Maximum number of levels to recurse i.e. depth of links to follow. Default " "%default" msgstr "" +"Máximo número de níveis na recursividade, ou seja a profundidade de links " +"para seguir. Padrão %default" #: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:492 msgid "" "The maximum number of files to download. This only applies to files from <a " "href> tags. Default is %default" msgstr "" +"O máximo número de arquivos para download. Isto só se aplica à arquivos de " +"tags <a href>. O padrão é %default" #: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:494 msgid "" diff --git a/src/calibre/translations/sl.po b/src/calibre/translations/sl.po index 7efc9ccb2b..e2df22a3ce 100644 --- a/src/calibre/translations/sl.po +++ b/src/calibre/translations/sl.po @@ -6,76 +6,81 @@ msgid "" msgstr "" "Project-Id-Version: calibre 0.4.17\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-09-18 19:33+0000\n" -"PO-Revision-Date: 2009-09-04 21:49+0000\n" -"Last-Translator: Ketrin <i_ketrin@mail.ru>\n" +"POT-Creation-Date: 2010-06-06 21:03+0000\n" +"PO-Revision-Date: 2010-06-09 07:34+0000\n" +"Last-Translator: Janko Slatenšek <Unknown>\n" "Language-Team: sl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2009-09-23 09:44+0000\n" +"X-Launchpad-Export-Date: 2010-06-10 03:34+0000\n" "X-Generator: Launchpad (build Unknown)\n" "Generated-By: pygettext.py 1.5\n" -#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:41 +#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:43 msgid "Does absolutely nothing" msgstr "Ne naredi popolnoma nič" -#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:44 -#: /home/kovid/work/calibre/src/calibre/devices/jetbook/driver.py:94 -#: /home/kovid/work/calibre/src/calibre/devices/kindle/driver.py:53 -#: /home/kovid/work/calibre/src/calibre/devices/prs505/books.py:58 -#: /home/kovid/work/calibre/src/calibre/devices/prs505/books.py:199 -#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:703 -#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:706 -#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:410 -#: /home/kovid/work/calibre/src/calibre/ebooks/fb2/input.py:65 +#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:46 +#: /home/kovid/work/calibre/src/calibre/devices/jetbook/driver.py:72 +#: /home/kovid/work/calibre/src/calibre/devices/kindle/driver.py:54 +#: /home/kovid/work/calibre/src/calibre/devices/nook/driver.py:70 +#: /home/kovid/work/calibre/src/calibre/devices/nook/driver.py:71 +#: /home/kovid/work/calibre/src/calibre/devices/prs500/books.py:267 +#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:418 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:347 +#: /home/kovid/work/calibre/src/calibre/ebooks/chm/input.py:98 +#: /home/kovid/work/calibre/src/calibre/ebooks/chm/input.py:101 +#: /home/kovid/work/calibre/src/calibre/ebooks/chm/metadata.py:56 +#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:428 #: /home/kovid/work/calibre/src/calibre/ebooks/fb2/input.py:67 -#: /home/kovid/work/calibre/src/calibre/ebooks/html/input.py:318 -#: /home/kovid/work/calibre/src/calibre/ebooks/html/input.py:321 -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1895 -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1897 +#: /home/kovid/work/calibre/src/calibre/ebooks/fb2/input.py:69 +#: /home/kovid/work/calibre/src/calibre/ebooks/html/input.py:329 +#: /home/kovid/work/calibre/src/calibre/ebooks/html/input.py:332 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1894 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1896 #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/output.py:24 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:225 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:256 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:259 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:359 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/ereader.py:23 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/ereader.py:45 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:230 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:270 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:273 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:373 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:19 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:20 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/ereader.py:36 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/ereader.py:61 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/fb2.py:46 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:36 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:61 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:63 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:103 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:105 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/mobi.py:171 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf.py:329 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf.py:444 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:870 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:62 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:64 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:118 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:120 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:943 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:1055 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/pdb.py:39 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/pdf.py:34 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/pdf.py:76 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/topaz.py:29 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/pdf.py:28 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/pml.py:23 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/pml.py:49 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/txt.py:14 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:44 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:70 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:79 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:121 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:154 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:588 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:775 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:38 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:64 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:77 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:118 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:152 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:610 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:816 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:818 #: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:49 #: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:51 -#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:886 -#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:891 -#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:947 -#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/reader.py:135 +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:908 +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:913 +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:979 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/reader.py:137 -#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/jacket.py:105 -#: /home/kovid/work/calibre/src/calibre/ebooks/pdb/ereader/writer.py:105 -#: /home/kovid/work/calibre/src/calibre/ebooks/pdb/ereader/writer.py:106 +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/reader.py:139 +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/jacket.py:108 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdb/ereader/writer.py:173 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdb/ereader/writer.py:174 #: /home/kovid/work/calibre/src/calibre/ebooks/pdb/input.py:39 -#: /home/kovid/work/calibre/src/calibre/ebooks/pdb/palmdoc/writer.py:28 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdb/palmdoc/writer.py:29 #: /home/kovid/work/calibre/src/calibre/ebooks/pdb/ztxt/writer.py:27 #: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/crop.py:82 #: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/crop.py:83 @@ -92,130 +97,147 @@ msgstr "Ne naredi popolnoma nič" #: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/rotate.py:63 #: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/split.py:81 #: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/split.py:82 -#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/writer.py:28 -#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/writer.py:29 -#: /home/kovid/work/calibre/src/calibre/ebooks/rtf/input.py:217 -#: /home/kovid/work/calibre/src/calibre/ebooks/rtf/input.py:219 -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:261 -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:268 -#: /home/kovid/work/calibre/src/calibre/gui2/add.py:111 -#: /home/kovid/work/calibre/src/calibre/gui2/add.py:118 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/writer.py:97 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/writer.py:98 +#: /home/kovid/work/calibre/src/calibre/ebooks/rtf/input.py:233 +#: /home/kovid/work/calibre/src/calibre/ebooks/rtf/input.py:235 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:273 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:280 +#: /home/kovid/work/calibre/src/calibre/gui2/add.py:170 +#: /home/kovid/work/calibre/src/calibre/gui2/add.py:177 #: /home/kovid/work/calibre/src/calibre/gui2/convert/__init__.py:21 -#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:99 -#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:124 -#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:126 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:539 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:548 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:765 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:768 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf.py:48 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:106 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:139 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:402 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:41 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:42 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:391 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:404 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:874 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:1000 -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:211 -#: /home/kovid/work/calibre/src/calibre/library/cli.py:277 -#: /home/kovid/work/calibre/src/calibre/library/database.py:917 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:654 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:666 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1061 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1098 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1428 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1430 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1539 -#: /home/kovid/work/calibre/src/calibre/library/server.py:493 -#: /home/kovid/work/calibre/src/calibre/library/server.py:565 -#: /home/kovid/work/calibre/src/calibre/utils/localization.py:103 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:107 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:132 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:134 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:657 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:666 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:946 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:949 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf.py:47 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:123 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:158 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:489 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:172 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:339 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:359 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:826 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:989 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1806 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1809 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:185 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:213 +#: /home/kovid/work/calibre/src/calibre/library/database.py:913 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:302 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:314 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:876 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:913 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1392 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1394 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1516 +#: /home/kovid/work/calibre/src/calibre/library/server/mobile.py:268 +#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:131 +#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:134 +#: /home/kovid/work/calibre/src/calibre/library/server/xml.py:68 +#: /home/kovid/work/calibre/src/calibre/utils/localization.py:114 #: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:45 #: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:63 #: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:77 -#: /home/kovid/work/calibre/src/calibre/utils/poppler/__init__.py:28 -#: /home/kovid/work/calibre/src/calibre/utils/poppler/__init__.py:32 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/collection.py:47 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/collection.py:50 msgid "Unknown" msgstr "Neznano" -#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:62 +#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:64 msgid "Base" msgstr "Osnovno" -#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:148 +#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:172 msgid "File type" msgstr "Tip datoteke" -#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:182 +#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:206 msgid "Metadata reader" msgstr "Bralnik meta podatkov" -#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:213 +#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:235 msgid "Metadata writer" msgstr "Pisalnik meta podatkov" -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:13 +#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:263 +msgid "Catalog generator" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:15 msgid "" "Follow all local links in an HTML file and create a ZIP file containing all " "linked files. This plugin is run every time you add an HTML file to the " "library." msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:48 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:50 msgid "" "Character encoding for the input HTML files. Common choices include: cp1252, " "latin1, iso-8859-1 and utf-8." msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:56 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:57 +msgid "" +"Create a PMLZ archive containing the PML file and all images in the " +"directory pmlname_img or images. This plugin is run every time you add a PML " +"file to the library." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:89 msgid "Extract cover from comic files" msgstr "Pridobi naslovno stran iz stripa" -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:77 -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:89 -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:99 -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:109 -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:120 -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:130 -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:140 -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:150 -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:160 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:116 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:127 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:139 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:149 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:159 #: /home/kovid/work/calibre/src/calibre/customize/builtins.py:170 -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:181 -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:192 -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:214 -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:225 -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:235 -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:245 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:180 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:190 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:200 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:210 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:220 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:231 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:242 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:254 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:275 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:286 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:296 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:306 msgid "Read metadata from %s files" msgstr "Preberi meta podatke iz %s datotek" -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:204 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:265 msgid "Read metadata from ebooks in RAR archives" msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:256 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:317 msgid "Read metadata from ebooks in ZIP archives" msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:267 -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:277 -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:287 -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:309 -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:320 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:328 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:338 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:348 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:370 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:381 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:391 msgid "Set metadata in %s files" msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:298 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:359 msgid "Set metadata from %s files" msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/conversion.py:99 +#: /home/kovid/work/calibre/src/calibre/customize/conversion.py:102 msgid "Conversion Input" msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/conversion.py:122 +#: /home/kovid/work/calibre/src/calibre/customize/conversion.py:125 msgid "" "Specify the character encoding of the input document. If set this option " "will override any encoding declared by the document itself. Particularly " @@ -223,121 +245,159 @@ msgid "" "encoding declarations." msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/conversion.py:225 +#: /home/kovid/work/calibre/src/calibre/customize/conversion.py:241 msgid "Conversion Output" msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/conversion.py:239 +#: /home/kovid/work/calibre/src/calibre/customize/conversion.py:255 msgid "" "If specified, the output plugin will try to create output that is as human " "readable as possible. May not have any effect for some output plugins." msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:44 +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:45 msgid "Input profile" msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:48 +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:49 msgid "" "This profile tries to provide sane defaults and is useful if you know " "nothing about the input document." msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:56 -#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:194 -msgid "This profile is intended for the SONY PRS line. The 500/505/700 etc." +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:57 +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:266 +msgid "" +"This profile is intended for the SONY PRS line. The 500/505/600/700 etc." msgstr "" #: /home/kovid/work/calibre/src/calibre/customize/profiles.py:69 -#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:229 +msgid "This profile is intended for the SONY PRS 300." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:78 +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:300 +msgid "This profile is intended for the SONY PRS-900." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:86 +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:330 msgid "This profile is intended for the Microsoft Reader." msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:80 -#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:240 +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:97 +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:341 msgid "This profile is intended for the Mobipocket books." msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:93 -#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:253 +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:110 +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:354 msgid "This profile is intended for the Hanlin V3 and its clones." msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:105 -#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:265 +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:122 +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:366 +msgid "This profile is intended for the Hanlin V5 and its clones." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:132 +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:374 msgid "This profile is intended for the Cybook G3." msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:118 -#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:278 +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:145 +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:387 msgid "This profile is intended for the Cybook Opus." msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:130 -#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:289 +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:157 +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:398 msgid "This profile is intended for the Amazon Kindle." msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:142 -#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:322 +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:169 +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:433 msgid "This profile is intended for the Irex Illiad." msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:154 -#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:335 +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:181 +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:446 msgid "This profile is intended for the IRex Digital Reader 1000." msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:172 +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:194 +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:460 +msgid "This profile is intended for the IRex Digital Reader 800." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:206 +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:474 +msgid "This profile is intended for the B&N Nook." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:226 msgid "Output profile" msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:176 +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:230 msgid "" "This profile tries to provide sane defaults and is useful if you want to " "produce a document intended to be read at a computer or on a range of " "devices." msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:206 +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:254 +msgid "" +"Intended for the iPad and similar devices with a resolution of 768x1024" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:279 +msgid "This profile is intended for the Kobo Reader." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:291 +msgid "This profile is intended for the SONY PRS-300." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:309 msgid "This profile is intended for the 5-inch JetBook." msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:217 +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:318 msgid "" "This profile is intended for the SONY PRS line. The 500/505/700 etc, in " "landscape mode. Mainly useful for comics." msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:306 +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:416 msgid "This profile is intended for the Amazon Kindle DX." msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/ui.py:29 +#: /home/kovid/work/calibre/src/calibre/customize/ui.py:31 msgid "Installed plugins" msgstr "Nameščeni plugini" -#: /home/kovid/work/calibre/src/calibre/customize/ui.py:30 +#: /home/kovid/work/calibre/src/calibre/customize/ui.py:32 msgid "Mapping for filetype plugins" msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/ui.py:31 +#: /home/kovid/work/calibre/src/calibre/customize/ui.py:33 msgid "Local plugin customization" msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/ui.py:32 +#: /home/kovid/work/calibre/src/calibre/customize/ui.py:34 msgid "Disabled plugins" msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/ui.py:74 +#: /home/kovid/work/calibre/src/calibre/customize/ui.py:77 msgid "No valid plugin found in " msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/ui.py:229 +#: /home/kovid/work/calibre/src/calibre/customize/ui.py:278 msgid "Initialization of plugin %s failed with traceback:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/ui.py:359 +#: /home/kovid/work/calibre/src/calibre/customize/ui.py:433 msgid "" " %prog options\n" "\n" @@ -345,29 +405,29 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/ui.py:365 +#: /home/kovid/work/calibre/src/calibre/customize/ui.py:439 msgid "Add a plugin by specifying the path to the zip file containing it." msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/ui.py:367 +#: /home/kovid/work/calibre/src/calibre/customize/ui.py:441 msgid "Remove a custom plugin by name. Has no effect on builtin plugins" msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/ui.py:369 +#: /home/kovid/work/calibre/src/calibre/customize/ui.py:443 msgid "" "Customize plugin. Specify name of plugin and customization string separated " "by a comma." msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/ui.py:371 +#: /home/kovid/work/calibre/src/calibre/customize/ui.py:445 msgid "List all installed plugins" msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/ui.py:373 +#: /home/kovid/work/calibre/src/calibre/customize/ui.py:447 msgid "Enable the named plugin" msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/ui.py:375 +#: /home/kovid/work/calibre/src/calibre/customize/ui.py:449 msgid "Disable the named plugin" msgstr "" @@ -375,274 +435,498 @@ msgstr "" msgid "Communicate with Android phones." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/bebook/driver.py:19 -msgid "Communicate with the BeBook eBook reader." +#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:39 +msgid "" +"Comma separated list of directories to send e-books to on the device. The " +"first one that exists will be used" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/bebook/driver.py:95 -msgid "Communicate with the BeBook Mini eBook reader." +#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:68 +msgid "Communicate with S60 phones." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/blackberry/driver.py:12 -msgid "Communicate with the Blackberry smart phone." +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:46 +msgid "Communicate with iBooks through iTunes." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:52 +msgid "Apple device detected, launching iTunes, please wait ..." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:154 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:172 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:175 +msgid "Updating device metadata listing..." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:240 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:271 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:861 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1023 +msgid "%d of %d" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:277 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1028 +msgid "finished" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:452 +msgid "" +"Some books not found in iTunes database.\n" +"Delete using the iBooks app.\n" +"Click 'Show Details' for a list." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:647 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/deviceconfig.py:28 +msgid "settings for device drivers" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:649 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/deviceconfig.py:30 +msgid "Ordered list of formats the device will accept" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:762 +msgid "" +"Some cover art could not be converted.\n" +"Click 'Show Details' for a list." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/binatone/driver.py:17 +msgid "Communicate with the Binatone Readme eBook reader." msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/blackberry/driver.py:13 -#: /home/kovid/work/calibre/src/calibre/devices/eb600/driver.py:24 -#: /home/kovid/work/calibre/src/calibre/devices/eslick/driver.py:17 -#: /home/kovid/work/calibre/src/calibre/devices/prs500/driver.py:88 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_hindu.py:13 +msgid "Communicate with the Blackberry smart phone." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/blackberry/driver.py:14 +#: /home/kovid/work/calibre/src/calibre/devices/nuut2/driver.py:18 +#: /home/kovid/work/calibre/src/calibre/devices/prs500/driver.py:90 msgid "Kovid Goyal" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/cybookg3/driver.py:21 -msgid "Communicate with the Cybook Gen 3 eBook reader." +#: /home/kovid/work/calibre/src/calibre/devices/cybook/driver.py:22 +msgid "Communicate with the Cybook Gen 3 / Opus eBook reader." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/cybookg3/driver.py:22 -#: /home/kovid/work/calibre/src/calibre/devices/cybookg3/driver.py:86 -#: /home/kovid/work/calibre/src/calibre/devices/iliad/driver.py:17 -#: /home/kovid/work/calibre/src/calibre/devices/irexdr/driver.py:18 -#: /home/kovid/work/calibre/src/calibre/devices/kindle/driver.py:22 -#: /home/kovid/work/calibre/src/calibre/devices/kindle/driver.py:67 -#: /home/kovid/work/calibre/src/calibre/devices/kindle/driver.py:78 -#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:30 -msgid "John Schember" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/devices/cybookg3/driver.py:74 -#: /home/kovid/work/calibre/src/calibre/devices/cybookg3/driver.py:76 -#: /home/kovid/work/calibre/src/calibre/devices/jetbook/driver.py:76 -#: /home/kovid/work/calibre/src/calibre/devices/jetbook/driver.py:78 -#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:130 -#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:132 -#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:99 -#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:101 -msgid "Transferring books to device..." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/devices/cybookg3/driver.py:85 -msgid "Communicate with the Cybook Opus eBook reader." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/devices/eb600/driver.py:23 +#: /home/kovid/work/calibre/src/calibre/devices/eb600/driver.py:24 msgid "Communicate with the EB600 eBook reader." msgstr "" +#: /home/kovid/work/calibre/src/calibre/devices/edge/driver.py:17 +msgid "Entourage Edge" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/edge/driver.py:18 +msgid "Communicate with the Entourage Edge." +msgstr "" + #: /home/kovid/work/calibre/src/calibre/devices/eslick/driver.py:16 msgid "Communicate with the ESlick eBook reader." msgstr "" +#: /home/kovid/work/calibre/src/calibre/devices/folder_device/driver.py:16 +#: /home/kovid/work/calibre/src/calibre/devices/folder_device/driver.py:30 +msgid "Use an arbitrary folder as a device." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/folder_device/driver.py:26 +#: /home/kovid/work/calibre/src/calibre/devices/interface.py:23 +msgid "Device Interface" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/hanlin/driver.py:19 +msgid "Communicate with Hanlin V3 eBook readers." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/hanlin/driver.py:90 +msgid "Communicate with Hanlin V5 eBook readers." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/hanlin/driver.py:109 +msgid "Communicate with the BOOX eBook reader." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/hanvon/driver.py:18 +msgid "Communicate with the Hanvon N520 eBook reader." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/hanvon/driver.py:40 +msgid "Communicate with The Book reader." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/hanvon/driver.py:51 +msgid "Communicate with the SpringDesign Alex eBook reader." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/hanvon/driver.py:67 +msgid "Communicate with the Azbooka" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/hanvon/driver.py:80 +msgid "Communicate with the Elonex EB 511 eBook reader." +msgstr "" + #: /home/kovid/work/calibre/src/calibre/devices/iliad/driver.py:16 msgid "Communicate with the IRex Iliad eBook reader." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/interface.py:20 -msgid "Device Interface" +#: /home/kovid/work/calibre/src/calibre/devices/iliad/driver.py:17 +#: /home/kovid/work/calibre/src/calibre/devices/irexdr/driver.py:18 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:29 +msgid "John Schember" msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/irexdr/driver.py:16 msgid "Communicate with the IRex Digital Reader 1000 eBook reader." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/jetbook/driver.py:22 -msgid "Communicate with the JetBook eBook reader." +#: /home/kovid/work/calibre/src/calibre/devices/irexdr/driver.py:42 +msgid "Communicate with the IRex Digital Reader 800" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/jetbook/driver.py:23 -msgid "James Ralston" +#: /home/kovid/work/calibre/src/calibre/devices/iriver/driver.py:15 +msgid "Communicate with the Iriver Story reader." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/jetbook/driver.py:20 +msgid "Communicate with the JetBook eBook reader." msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/kindle/driver.py:21 msgid "Communicate with the Kindle eBook reader." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kindle/driver.py:66 -#: /home/kovid/work/calibre/src/calibre/devices/kindle/driver.py:77 +#: /home/kovid/work/calibre/src/calibre/devices/kindle/driver.py:147 msgid "Communicate with the Kindle 2 eBook reader." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/prs500/driver.py:87 +#: /home/kovid/work/calibre/src/calibre/devices/kindle/driver.py:157 +msgid "Communicate with the Kindle DX eBook reader." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:14 +msgid "Communicate with the Kobo Reader" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/misc.py:15 +msgid "Communicate with the Palm Pre" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/misc.py:35 +msgid "Communicate with the Booq Avant" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/nokia/driver.py:17 +msgid "Communicate with the Nokia 770 internet tablet." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/nokia/driver.py:40 +msgid "Communicate with the Nokia 810 internet tablet." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/nook/driver.py:20 +msgid "The Nook" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/nook/driver.py:21 +msgid "Communicate with the Nook eBook reader." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/nuut2/driver.py:17 +msgid "Communicate with the Nuut2 eBook reader." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/prs500/driver.py:89 msgid "Communicate with the Sony PRS-500 eBook reader." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/prs505/books.py:150 -#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:93 -#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:96 -#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:99 -#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:110 -#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:49 -#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:52 -#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:55 -#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:68 -#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:74 -#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:78 -msgid "Getting list of books on device..." +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:22 +msgid "Communicate with all the Sony eBook readers." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:26 -msgid "Communicate with the Sony PRS-300/505 eBook reader." +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:60 +msgid "" +"Comma separated list of metadata fields to turn into collections on the " +"device. Possibilities include: " msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:27 -#: /home/kovid/work/calibre/src/calibre/devices/prs700/driver.py:18 -msgid "Kovid Goyal and John Schember" +#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:140 +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/structure.py:68 +msgid "Unnamed" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:163 -#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:170 -#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:119 -#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:134 -msgid "Removing books from device..." +#: /home/kovid/work/calibre/src/calibre/devices/sne/driver.py:17 +msgid "Communicate with the Samsung SNE eBook reader." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:198 -#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:149 -msgid "Sending metadata to device..." +#: /home/kovid/work/calibre/src/calibre/devices/teclast/driver.py:11 +msgid "Communicate with the Teclast K3 reader." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/prs700/driver.py:17 -msgid "Communicate with the Sony PRS-600/700 eBook reader." +#: /home/kovid/work/calibre/src/calibre/devices/teclast/driver.py:37 +msgid "Communicate with the Newsmy reader." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:285 -#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:357 +#: /home/kovid/work/calibre/src/calibre/devices/teclast/driver.py:49 +msgid "Communicate with the iPapyrus reader." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:247 msgid "Unable to detect the %s disk drive. Try rebooting." msgstr "Zaznava diska v pogonu %s ni mogoča. Poskusite s ponovnim zagonom." -#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:425 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:427 +msgid "Unable to detect the %s mount point. Try rebooting." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:492 msgid "Unable to detect the %s disk drive." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:518 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:585 msgid "Could not find mount helper: %s." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:530 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:597 msgid "" "Unable to detect the %s disk drive. Your kernel is probably exporting a " "deprecated version of SYSFS." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:538 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:605 msgid "Unable to mount main memory (Error code: %d)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:643 -#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:645 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:742 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:744 msgid "The reader has no storage card in this slot." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:647 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:746 msgid "Selected slot: %s is not supported." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:671 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:779 msgid "There is insufficient free space in main memory" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:673 -#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:675 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:781 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:783 msgid "There is insufficient free space on the storage card" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:686 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:434 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:83 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1005 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1009 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1332 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:813 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:819 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:847 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:239 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:141 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:152 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1276 +#: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:120 msgid "News" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/usbms/deviceconfig.py:11 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/deviceconfig.py:12 msgid "Configure Device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/usbms/deviceconfig.py:16 -msgid "settings for device drivers" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/devices/usbms/deviceconfig.py:17 -msgid "Ordered list of formats the device will accept" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/devices/usbms/deviceconfig.py:18 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/deviceconfig.py:32 msgid "Place files in sub directories if the device supports them" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/usbms/deviceconfig.py:19 -#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/configwidget_ui.py:64 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/deviceconfig.py:34 +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/configwidget_ui.py:78 msgid "Read metadata from files on device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:29 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/deviceconfig.py:36 +msgid "Template to control how books are saved" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/usbms/deviceconfig.py:39 +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/configwidget_ui.py:80 +msgid "Extra customization" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:28 msgid "Communicate with an eBook reader." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:41 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:44 msgid "Get device information..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:107 -#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:115 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:53 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:56 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:59 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:119 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:126 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:149 +msgid "Getting list of books on device..." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:174 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:176 +msgid "Transferring books to device..." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:191 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:220 msgid "Adding books to device metadata listing..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:138 -#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:143 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:224 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:242 +msgid "Removing books from device..." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:246 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:251 msgid "Removing books from device metadata listing..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:196 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:269 +msgid "Sending metadata to device..." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/chm/reader.py:41 +msgid "%prog [options] mybook.chm" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/chm/reader.py:42 +msgid "Output directory. Defaults to current directory" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/chm/reader.py:45 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:589 +msgid "Set the book title" +msgstr "Nastavi naslov knjige" + +#: /home/kovid/work/calibre/src/calibre/ebooks/chm/reader.py:47 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:591 +msgid "Set sort key for the title" +msgstr "Nastavi sortirni ključ za naslov" + +#: /home/kovid/work/calibre/src/calibre/ebooks/chm/reader.py:49 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:593 +msgid "Set the author" +msgstr "Nastavi avtorja" + +#: /home/kovid/work/calibre/src/calibre/ebooks/chm/reader.py:51 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:595 +msgid "Set sort key for the author" +msgstr "Nastavi sortirni ključ za avtorja" + +#: /home/kovid/work/calibre/src/calibre/ebooks/chm/reader.py:53 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:597 +msgid "The category this book belongs to. E.g.: History" +msgstr "Kategorija v katero spada ta knjig. Npr.: Zgodovina" + +#: /home/kovid/work/calibre/src/calibre/ebooks/chm/reader.py:56 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:600 +msgid "Path to a graphic that will be set as this files' thumbnail" +msgstr "Pot do slike, ki se bo uporabila kot thumbnail za to datoteko" + +#: /home/kovid/work/calibre/src/calibre/ebooks/chm/reader.py:59 +msgid "Path to a txt file containing a comment." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/chm/reader.py:62 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:607 +msgid "Extract thumbnail from LRF file" +msgstr "Pridobi thumbnail iz LRF datoteke" + +#: /home/kovid/work/calibre/src/calibre/ebooks/chm/reader.py:63 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:608 +msgid "Set the publisher" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/chm/reader.py:64 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:609 +msgid "Set the book classification" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/chm/reader.py:65 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:610 +msgid "Set the book creator" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/chm/reader.py:66 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:611 +msgid "Set the book producer" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/chm/reader.py:68 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:613 +msgid "" +"Extract cover from LRF file. Note that the LRF format has no defined cover, " +"so we use some heuristics to guess the cover." +msgstr "" +"Pridobi naslovnico iz LRF datoteke. Ker LRF format nima definirane " +"naslovnice, se uporabi nekaj hevristike za ugibanje kaj je naslovnica." + +#: /home/kovid/work/calibre/src/calibre/ebooks/chm/reader.py:70 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:615 +msgid "Set book ID" +msgstr "Nastavi ID knjige" + +#: /home/kovid/work/calibre/src/calibre/ebooks/chm/reader.py:72 +msgid "Set font delta" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:201 msgid "Rendered %s" msgstr "Upodobljen %s" -#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:199 +#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:204 msgid "Failed %s" msgstr "Neuspešno %s" -#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:256 +#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:261 msgid "" "Failed to process comic: \n" "\n" "%s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:274 +#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:279 msgid "" "Number of colors for grayscale image conversion. Default: %default. Values " "of less than 256 may result in blurred text on your device if you are " "creating your comics in EPUB format." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:278 +#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:283 msgid "" "Disable normalize (improve contrast) color range for pictures. Default: False" msgstr "" "Onemogoči normalizacijo (izboljšaj kontrast) barvnega razpona za slike. " "Privzeto: False" -#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:281 +#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:286 msgid "Maintain picture aspect ratio. Default is to fill the screen." msgstr "" "Obdrži razmerje slike. Privzeto je da se prilagodi velikosti zaslona." -#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:283 +#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:288 msgid "Disable sharpening." msgstr "Onemogoči ostrenje." -#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:285 +#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:290 msgid "" "Disable trimming of comic pages. For some comics, trimming might remove " "content as well as borders." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:288 +#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:293 msgid "Don't split landscape images into two portrait images" msgstr "Ne razdeli panoramskih slik v dve portretni" -#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:290 +#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:295 msgid "" "Keep aspect ratio and scale image using screen height as image width for " "viewing in landscape mode." @@ -650,7 +934,7 @@ msgstr "" "Obdrži razmerje pri skaliranju slik in uporabi višino zaslona za širino " "slike pri pregledovanju v panoramskem načinu." -#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:293 +#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:298 msgid "" "Used for right-to-left publications like manga. Causes landscape pages to be " "split into portrait pages from right to left." @@ -658,13 +942,13 @@ msgstr "" "Uporablja se za izdaje, ki se berejo od desne proti levi tako kot manga. " "Panoramske slike se razdelijo v portretne strani od desne proti levi." -#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:297 +#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:302 msgid "" "Enable Despeckle. Reduces speckle noise. May greatly increase processing " "time." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:300 +#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:305 msgid "" "Don't sort the files found in the comic alphabetically by name. Instead use " "the order they were added to the comic." @@ -672,19 +956,23 @@ msgstr "" "Ne razvrščaj datotek, ki se nahajajo v arhivu stripa po imenu. Upoštevaj " "vrstni red v katerem so bile dane v strip." -#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:304 +#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:309 msgid "" "The format that images in the created ebook are converted to. You can " "experiment to see which format gives you optimal size and look on your " "device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:308 +#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:313 msgid "Apply no processing to the image" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:434 -#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:445 +#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:315 +msgid "Do not convert the image to grayscale (black and white)" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:452 +#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:463 msgid "Page" msgstr "" @@ -757,22 +1045,22 @@ msgstr "" msgid "List builtin recipes" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/cli.py:251 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/cli.py:256 msgid "Output saved to" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:91 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:95 msgid "Level of verbosity. Specify multiple times for greater verbosity." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:98 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:102 msgid "" "Save the output from different stages of the conversion pipeline to the " "specified directory. Useful if you are unsure at which stage of the " "conversion process a bug is occurring." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:107 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:111 msgid "" "Specify the input profile. The input profile gives the conversion system " "information on how to interpret various information in the input document. " @@ -780,7 +1068,7 @@ msgid "" "are:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:118 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:122 msgid "" "Specify the output profile. The output profile tells the conversion system " "how to optimize the created document for the specified device. In some " @@ -788,7 +1076,7 @@ msgid "" "a device. For example EPUB on the SONY reader. Choices are:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:129 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:133 msgid "" "The base font size in pts. All font sizes in the produced book will be " "rescaled based on this size. By choosing a larger size you can make the " @@ -796,7 +1084,7 @@ msgid "" "chosen based on the output profile you chose." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:139 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:143 msgid "" "Mapping from CSS font names to font sizes in pts. An example setting is " "12,12,14,16,18,20,22,24. These are the mappings for the sizes xx-small to xx-" @@ -805,17 +1093,17 @@ msgid "" "use a mapping based on the output profile you chose." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:151 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:155 msgid "Disable all rescaling of font sizes." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:158 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:162 msgid "" "The line height in pts. Controls spacing between consecutive lines of text. " "By default no line height manipulation is performed." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:166 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:170 msgid "" "Some badly designed documents use tables to control the layout of text on " "the page. When converted these documents often have text that runs off the " @@ -823,58 +1111,58 @@ msgid "" "tables and present it in a linear fashion." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:176 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:180 msgid "" "XPath expression that specifies all tags that should be added to the Table " "of Contents at level one. If this is specified, it takes precedence over " "other forms of auto-detection." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:185 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:189 msgid "" "XPath expression that specifies all tags that should be added to the Table " "of Contents at level two. Each entry is added under the previous level one " "entry." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:193 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:197 msgid "" "XPath expression that specifies all tags that should be added to the Table " "of Contents at level three. Each entry is added under the previous level two " "entry." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:201 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:205 msgid "" "Normally, if the source file already has a Table of Contents, it is used in " "preference to the auto-generated one. With this option, the auto-generated " "one is always used." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:209 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:213 msgid "Don't add auto-detected chapters to the Table of Contents." msgstr "Ne dodaj samodejno zaznanih poglavij v Kazalo." -#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:216 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:220 msgid "" "If fewer than this number of chapters is detected, then links are added to " "the Table of Contents. Default: %default" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:223 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:227 msgid "" "Maximum number of links to insert into the TOC. Set to 0 to disable. Default " "is: %default. Links are only added to the TOC if less than the threshold " "number of chapters were detected." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:231 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:235 msgid "" "Remove entries from the Table of Contents whose titles match the specified " "regular expression. Matching entries and all their children are removed." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:242 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:246 msgid "" "An XPath expression to detect chapter titles. The default is to consider " "<h1> or <h2> tags that contain the words \"chapter\",\"book\",\"section\" or " @@ -884,7 +1172,7 @@ msgid "" "User Manual for further help on using this feature." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:256 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:260 msgid "" "Specify how to mark detected chapters. A value of \"pagebreak\" will insert " "page breaks before chapters. A value of \"rule\" will insert a line before " @@ -892,53 +1180,62 @@ msgid "" "\"both\" will use both page breaks and lines to mark chapters." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:266 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:270 msgid "" "Either the path to a CSS stylesheet or raw CSS. This CSS will be appended to " "the style rules from the source file, so it can be used to override those " "rules." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:275 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:279 msgid "" "An XPath expression. Page breaks are inserted before the specified elements." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:281 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:285 msgid "" "Set the top margin in pts. Default is %default. Note: 72 pts equals 1 inch" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:286 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:290 msgid "" "Set the bottom margin in pts. Default is %default. Note: 72 pts equals 1 inch" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:291 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:295 msgid "" "Set the left margin in pts. Default is %default. Note: 72 pts equals 1 inch" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:296 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:300 msgid "" "Set the right margin in pts. Default is %default. Note: 72 pts equals 1 inch" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:301 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:306 msgid "" -"Do not force text to be justified in output. Whether text is actually " -"displayed justified or not depends on whether the ebook format and reading " -"device support justification." +"Change text justification. A value of \"left\" converts all justified text " +"in the source to left aligned (i.e. unjustified) text. A value of " +"\"justify\" converts all unjustified text to justified. A value of " +"\"original\" (the default) does not change justification in the source file. " +"Note that only some output formats support justification." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:308 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:316 msgid "" "Remove spacing between paragraphs. Also sets an indent on paragraphs of " "1.5em. Spacing removal will not work if the source file does not use " "paragraphs (<p> or <div> tags)." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:315 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:323 +msgid "" +"When calibre removes inter paragraph spacing, it automatically sets a " +"paragraph indent, to ensure that paragraphs can be easily distinguished. " +"This option controls the width of that indent." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:330 msgid "" "Use the cover detected from the source file in preference to the specified " "cover." @@ -946,53 +1243,53 @@ msgstr "" "Uporabi naslovno stran zaznano v izvorni datoteki namesto v nastavitvah " "specificirane naslovne strani." -#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:321 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:336 msgid "" "Insert a blank line between paragraphs. Will not work if the source file " "does not use paragraphs (<p> or <div> tags)." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:328 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:343 msgid "" "Remove the first image from the input ebook. Useful if the first image in " "the source file is a cover and you are specifying an external cover." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:336 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:351 msgid "" "Insert the book metadata at the start of the book. This is useful if your " "ebook reader does not support displaying/searching metadata directly." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:344 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:359 msgid "" "Attempt to detect and correct hard line breaks and other problems in the " "source file. This may make things worse, so use with care." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:352 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:367 msgid "Use a regular expression to try and remove the header." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:359 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:374 msgid "The regular expression to use to remove the header." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:365 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:380 msgid "Use a regular expression to try and remove the footer." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:372 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:387 msgid "The regular expression to use to remove the footer." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:379 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:394 msgid "" "Read metadata from the specified OPF file. Metadata read from this file will " "override any metadata in the source file." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:386 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:401 msgid "" "Transliterate unicode characters to an ASCII representation. Use with care " "because this will replace unicode characters with ASCII. For instance it " @@ -1002,96 +1299,121 @@ msgid "" "number of people will be used (Chinese in the previous example)." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:401 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:37 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:416 +msgid "" +"Preserve ligatures present in the input document. A ligature is a special " +"rendering of a pair of characters like ff, fi, fl et cetera. Most readers do " +"not have support for ligatures in their default fonts, so they are unlikely " +"to render correctly. By default, calibre will turn a ligature into the " +"corresponding pair of normal characters. This option will preserve them " +"instead." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:428 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:38 msgid "Set the title." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:405 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:432 msgid "Set the authors. Multiple authors should be separated by ampersands." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:410 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:437 msgid "The version of the title to be used for sorting. " msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:414 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:441 msgid "String to be used when sorting by author. " msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:418 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:51 -msgid "Set the cover to the specified file." +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:445 +msgid "Set the cover to the specified file or URL" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:422 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:53 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:449 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:54 msgid "Set the ebook description." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:426 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:55 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:453 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:56 msgid "Set the ebook publisher." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:430 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:59 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:457 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:60 msgid "Set the series this ebook belongs to." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:434 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:61 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:461 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:62 msgid "Set the index of the book in this series." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:438 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:63 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:465 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:64 msgid "Set the rating. Should be a number between 1 and 5." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:442 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:65 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:469 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:66 msgid "Set the ISBN of the book." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:446 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:67 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:473 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:68 msgid "Set the tags for the book. Should be a comma separated list." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:450 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:69 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:477 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:70 msgid "Set the book producer." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:454 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:71 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:481 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:72 msgid "Set the language." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:546 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:485 +msgid "Set the publication date." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:489 +msgid "Set the book timestamp (used by the date column in calibre)." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:589 msgid "Could not find an ebook inside the archive" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:712 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:647 +msgid "Values of series index and rating must be numbers. Ignoring" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:654 +msgid "Failed to parse date/time" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:802 msgid "Converting input to HTML..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:735 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:829 msgid "Running transforms on ebook..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:821 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:916 msgid "Creating" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/output.py:57 +#: /home/kovid/work/calibre/src/calibre/ebooks/epub/output.py:56 msgid "" "Extract the contents of the generated EPUB file to the specified directory. " "The contents of the directory are first deleted, so be careful." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/output.py:63 +#: /home/kovid/work/calibre/src/calibre/ebooks/epub/output.py:62 msgid "" "Turn off splitting at page breaks. Normally, input files are automatically " "split at every page break into two files. This gives an output ebook that " @@ -1100,24 +1422,44 @@ msgid "" "turn off splitting on page breaks." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/output.py:74 +#: /home/kovid/work/calibre/src/calibre/ebooks/epub/output.py:73 msgid "" "Split all HTML files larger than this size (in KB). This is necessary as " "most EPUB readers cannot handle large file sizes. The default of %defaultKB " "is the size required for Adobe Digital Editions." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/epub/output.py:81 +#: /home/kovid/work/calibre/src/calibre/ebooks/epub/output.py:80 msgid "" "Normally, if the input file has no cover and you don't specify one, a " "default cover is generated with the title, authors, etc. This option " "disables the generation of this cover." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/fb2/fb2ml.py:122 -#: /home/kovid/work/calibre/src/calibre/ebooks/pml/pmlml.py:111 -#: /home/kovid/work/calibre/src/calibre/ebooks/rb/rbml.py:98 -#: /home/kovid/work/calibre/src/calibre/ebooks/txt/txtml.py:72 +#: /home/kovid/work/calibre/src/calibre/ebooks/epub/output.py:86 +msgid "" +"Do not use SVG for the book cover. Use this option if your EPUB is going to " +"be used ona device that does not support SVG, like the iPhone or the " +"JetBook Lite. Without this option, such devices will display the cover as a " +"blank page." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/epub/output.py:94 +msgid "" +"When using an SVG cover, this option will cause the cover to scale to cover " +"the available screen area, but still preserve its aspect ratio (ratio of " +"width to height). That means there may be white borders at the sides or top " +"and bottom of the image, but the image will never be distorted. Without this " +"option the image may be slightly distorted, but there will be no borders." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/epub/output.py:169 +msgid "Start" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/fb2/fb2ml.py:144 +#: /home/kovid/work/calibre/src/calibre/ebooks/rb/rbml.py:102 +#: /home/kovid/work/calibre/src/calibre/ebooks/txt/txtml.py:77 msgid "Table of Contents:" msgstr "" @@ -1133,20 +1475,20 @@ msgstr "" msgid "Add Table of Contents to beginning of the book." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/html/input.py:242 +#: /home/kovid/work/calibre/src/calibre/ebooks/html/input.py:243 msgid "" "Traverse links in HTML files breadth first. Normally, they are traversed " "depth first." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/html/input.py:249 +#: /home/kovid/work/calibre/src/calibre/ebooks/html/input.py:250 msgid "" "Maximum levels of recursion when following links in HTML files. Must be non-" "negative. 0 implies that no links in the root HTML file are followed. " "Default is %default." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/html/input.py:258 +#: /home/kovid/work/calibre/src/calibre/ebooks/html/input.py:259 msgid "" "Normally this input plugin re-arranges all the input files into a standard " "folder hierarchy. Only use this option if you know what you are doing as it " @@ -1154,7 +1496,7 @@ msgid "" "pipeline." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/html/input.py:266 +#: /home/kovid/work/calibre/src/calibre/ebooks/html/input.py:267 msgid "" "Average line length for line breaking if the HTML is from a previous partial " "conversion of a PDF file. Default is %default which disables this." @@ -1164,56 +1506,56 @@ msgstr "" msgid "Creating LIT file from EPUB..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:321 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:320 msgid "\tBook Designer file detected." msgstr "\tBook Designer datoteka zaznana." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:323 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:322 msgid "\tParsing HTML..." msgstr "\tParsanje HTML ..." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:346 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:345 msgid "\tBaen file detected. Re-parsing..." msgstr "\tBaen datoteka zaznana. Ponovno parsanje ..." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:362 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:361 msgid "Written preprocessed HTML to " msgstr "Preprocesiran HTML zapisan v " -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:380 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:379 msgid "Processing %s" msgstr "Procesiranje %s" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:394 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:393 msgid "\tConverting to BBeB..." msgstr "\tPretvarjanje v BBeB ..." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:540 -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:553 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:539 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:552 msgid "Could not parse file: %s" msgstr "Parsanje datoteke ni mogoče: %s" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:545 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:544 msgid "%s is an empty file" msgstr "%s je prazna datoteka" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:565 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:564 msgid "Failed to parse link %s %s" msgstr "Neuspešno parsanje povezave %s %s" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:609 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:608 msgid "Cannot add link %s to TOC" msgstr "Dodajanje povezave %s v kazalo ni možno" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:958 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:957 msgid "Unable to process image %s. Error: %s" msgstr "Procesiranje slikovne datoteke %s ni možno. Napaka: %s" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1003 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1002 msgid "Unable to process interlaced PNG %s" msgstr "Procesiranje interlaced PNG %s ni možno" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1018 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1017 msgid "" "Could not process image: %s\n" "%s" @@ -1221,13 +1563,13 @@ msgstr "" "Neuspešno procesiranje slike: %s\n" "%s" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1773 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1772 msgid "" "An error occurred while processing a table: %s. Ignoring table markup." msgstr "" "Prišlo je do napake pri obdelavi tabele: %s. Zgradba tabele se ignorira." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1775 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1774 msgid "" "Bad table:\n" "%s" @@ -1235,19 +1577,19 @@ msgstr "" "Slaba tabela:\n" "%s" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1797 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1796 msgid "Table has cell that is too large" msgstr "Tabela vsebuje preveliko celico" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1863 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1862 msgid "Could not read cover image: %s" msgstr "Branje slike naslovne strani ni mogoče: %s" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1866 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1865 msgid "Cannot read from: %s" msgstr "Ne morem brati iz: %s" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1996 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1994 msgid "Failed to process opf file" msgstr "Napaka pri obdelavi opf datoteke" @@ -1322,30 +1664,6 @@ msgstr "" "Prikaži/uredi meta podatke v LRF datoteki.\n" "\n" -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:589 -msgid "Set the book title" -msgstr "Nastavi naslov knjige" - -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:591 -msgid "Set sort key for the title" -msgstr "Nastavi sortirni ključ za naslov" - -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:593 -msgid "Set the author" -msgstr "Nastavi avtorja" - -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:595 -msgid "Set sort key for the author" -msgstr "Nastavi sortirni ključ za avtorja" - -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:597 -msgid "The category this book belongs to. E.g.: History" -msgstr "Kategorija v katero spada ta knjig. Npr.: Zgodovina" - -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:600 -msgid "Path to a graphic that will be set as this files' thumbnail" -msgstr "Pot do slike, ki se bo uporabila kot thumbnail za to datoteko" - #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:603 msgid "" "Path to a txt file containing the comment to be stored in the lrf file." @@ -1353,38 +1671,6 @@ msgstr "" "Pot do tekstovne datoteke, ki vsebuje opombe, ki bodo shranjene v lrf " "datoteki." -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:607 -msgid "Extract thumbnail from LRF file" -msgstr "Pridobi thumbnail iz LRF datoteke" - -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:608 -msgid "Set the publisher" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:609 -msgid "Set the book classification" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:610 -msgid "Set the book creator" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:611 -msgid "Set the book producer" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:613 -msgid "" -"Extract cover from LRF file. Note that the LRF format has no defined cover, " -"so we use some heuristics to guess the cover." -msgstr "" -"Pridobi naslovnico iz LRF datoteke. Ker LRF format nima definirane " -"naslovnice, se uporabi nekaj hevristike za ugibanje kaj je naslovnica." - -#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:615 -msgid "Set book ID" -msgstr "Nastavi ID knjige" - #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/output.py:90 msgid "Enable autorotation of images that are wider than the screen width." msgstr "Omogoči samodejno rotacijo slik, ki so večje od širine zaslona." @@ -1449,87 +1735,102 @@ msgstr "Izbrana pisava iz družine monospace" msgid "Comic" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:358 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:372 #: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/info.py:45 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:69 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:70 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:56 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:158 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:388 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:1066 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:97 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:98 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:61 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:46 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:336 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:831 +#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:536 msgid "Title" msgstr "Naslov" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:359 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:57 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:159 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:393 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:1067 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:373 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:62 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:48 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:341 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:832 msgid "Author(s)" msgstr "Avtor(ji)" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:360 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:59 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:164 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:374 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:64 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:53 msgid "Publisher" msgstr "Založnik" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:361 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:375 #: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/info.py:49 msgid "Producer" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:362 -#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:183 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:71 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info_ui.py:64 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:349 -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:58 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:376 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:184 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:99 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info_ui.py:67 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:297 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1008 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:107 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:149 msgid "Comments" msgstr "Opombe" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:370 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:165 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:338 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:1010 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:1070 -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:60 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:83 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:384 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories.py:46 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:54 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:286 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1004 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:106 +#: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:130 msgid "Tags" msgstr "Značke" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:372 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:166 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:354 -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:59 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:83 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:386 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories.py:46 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:55 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:302 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1013 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:105 +#: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:82 msgid "Series" msgstr "Serija" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:373 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:387 msgid "Language" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:375 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:1009 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:389 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:996 msgid "Timestamp" msgstr "Časovna znamka" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:377 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:61 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:162 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:391 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:66 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:51 msgid "Published" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:379 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:393 msgid "Rights" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:19 -msgid "options" +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/amazon.py:85 +msgid "EDITORIAL REVIEW" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/archive.py:22 +msgid "" +"Extract common e-book formats from archives (zip/rar) files. Also try to " +"autodetect if they are actually cbz/cbr files." msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:20 +msgid "options" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:21 msgid "" "\n" "Read/Write metadata from/to ebook files.\n" @@ -1543,73 +1844,119 @@ msgid "" "silently ignored.\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:39 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:40 msgid "" "Set the authors. Multiple authors should be separated by the & character. " "Author names should be in the order Firstname Lastname." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:43 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:44 msgid "" "The version of the title to be used for sorting. If unspecified, and the " "title is specified, it will be auto-generated from the title." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:47 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:48 msgid "" "String to be used when sorting by author. If unspecified, and the author(s) " "are specified, it will be auto-generated from the author(s)." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:57 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:52 +msgid "Set the cover to the specified file." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:58 msgid "Set the book category." msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:74 -msgid "Get the cover from the ebook and save it at as the specified file." +msgid "Set the published date." msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:77 +msgid "Get the cover from the ebook and save it at as the specified file." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:80 msgid "" "Specify the name of an OPF file. The metadata will be written to the OPF " "file." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:80 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:83 msgid "" "Read metadata from the specified OPF file and use it to set metadata in the " "ebook. Metadata specified on the command line will override metadata read " "from the OPF file" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:85 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:88 msgid "Set the BookID in LRF files" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:144 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:153 msgid "No file specified" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:159 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:168 msgid "Original metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:176 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:185 msgid "Changed metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:188 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:197 msgid "OPF created in" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:194 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:203 msgid "Cover saved to" msgstr "Naslovnica shranjena v" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:196 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:205 msgid "No cover found" msgstr "" +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/fetch.py:33 +msgid "Metadata download" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/fetch.py:110 +msgid "ratings" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/fetch.py:110 +msgid "tags" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/fetch.py:111 +msgid "description/reviews" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/fetch.py:112 +msgid "Download %s from %s" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/fetch.py:136 +msgid "Downloads metadata from Google Books" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/fetch.py:152 +msgid "Downloads metadata from isbndb.com" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/fetch.py:180 +msgid "" +"To use isbndb.com you must sign up for a %sfree account%s and enter your " +"access key below." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/fetch.py:188 +msgid "Downloads social metadata from amazon.com" +msgstr "" + #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/isbndb.py:94 msgid "" "\n" @@ -1672,8 +2019,8 @@ msgstr "" "\n" "Pridobi naslovnico za knjigo, identificirano po ISBN iz LibraryThing.com\n" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:1055 -#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1310 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:1220 +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1371 msgid "Cover" msgstr "" @@ -1700,102 +2047,86 @@ msgstr "" msgid "Disable compression of the file contents." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/output.py:102 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/output.py:40 +msgid "Tag marking book to be filed with Personal Docs" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/output.py:108 msgid "All articles" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1311 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:258 +msgid "This is an Amazon Topaz book. It cannot be processed." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1372 msgid "Title Page" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1312 +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1373 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/htmltoc.py:15 -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:51 -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:168 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:53 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:194 msgid "Table of Contents" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1313 +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1374 msgid "Index" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1314 +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1375 msgid "Glossary" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1315 +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1376 msgid "Acknowledgements" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1316 +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1377 msgid "Bibliography" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1317 +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1378 msgid "Colophon" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1318 +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1379 msgid "Copyright" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1319 +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1380 msgid "Dedication" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1320 +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1381 msgid "Epigraph" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1321 +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1382 msgid "Foreword" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1322 +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1383 msgid "List of Illustrations" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1323 +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1384 msgid "List of Tables" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1324 +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1385 msgid "Notes" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1325 +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1386 msgid "Preface" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1326 +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1387 msgid "Main Text" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/factory.py:53 -msgid "Options to control e-book conversion." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/factory.py:60 -msgid "Character encoding for input. Default is to auto detect." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/factory.py:62 -msgid "Output file. Default is derived from input filename." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/factory.py:64 -msgid "Produce more human-readable XML output." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/factory.py:66 -msgid "Useful for debugging." -msgstr "Koristno za razhroščevanje." - -#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/factory.py:71 -msgid "Usage: ebook-convert INFILE OUTFILE [OPTIONS..]" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/iterator.py:38 +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/iterator.py:41 msgid "%s format books are not supported" msgstr "" @@ -1803,7 +2134,7 @@ msgstr "" msgid "HTML TOC generation options." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/jacket.py:108 +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/jacket.py:113 msgid "Book Jacket" msgstr "" @@ -1812,10 +2143,6 @@ msgid "" "Could not find reasonable point at which to split: %s Sub-tree size: %d KB" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/structure.py:68 -msgid "Unnamed" -msgstr "" - #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/writer.py:32 msgid "OPF/NCX/etc. generation options." msgstr "" @@ -1829,23 +2156,25 @@ msgid "" "Generate an Adobe \"page-map\" file if pagination information is available." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/pdb/ereader/reader132.py:120 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdb/ereader/reader132.py:128 msgid "Footnotes" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/pdb/ereader/reader132.py:129 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdb/ereader/reader132.py:135 msgid "Sidebar" msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/pdb/input.py:22 -#: /home/kovid/work/calibre/src/calibre/ebooks/txt/input.py:22 +#: /home/kovid/work/calibre/src/calibre/ebooks/tcr/input.py:23 +#: /home/kovid/work/calibre/src/calibre/ebooks/txt/input.py:23 msgid "" "Normally calibre treats blank lines as paragraph markers. With this option " "it will assume that every line represents a paragraph instead." msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/pdb/input.py:26 -#: /home/kovid/work/calibre/src/calibre/ebooks/txt/input.py:26 +#: /home/kovid/work/calibre/src/calibre/ebooks/tcr/input.py:27 +#: /home/kovid/work/calibre/src/calibre/ebooks/txt/input.py:27 msgid "" "Normally calibre treats blank lines as paragraph markers. With this option " "it will assume that every line starting with an indent (either a tab or 2+ " @@ -1863,17 +2192,21 @@ msgid "" "cp1252. Note: This option is not honored by all formats." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/input.py:22 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/input.py:24 msgid "Do not extract images from the document" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/input.py:24 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/input.py:26 msgid "" "Scale used to determine the length at which a line should be unwrapped. " "Valid values are a decimal between 0 and 1. The default is 0.5, this is the " "median line length." msgstr "" +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/input.py:30 +msgid "Use the new PDF conversion engine." +msgstr "" + #: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/cli.py:31 msgid "" "command ...\n" @@ -2069,7 +2402,13 @@ msgstr "" msgid "The orientation of the page. Default is portrait. Choices are %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/pdftohtml.py:52 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/output.py:49 +msgid "" +"Preserve the aspect ratio of the cover, instead of stretching it to fill the " +"ull first page of the generated pdf." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/pdftohtml.py:55 msgid "Could not find pdftohtml, check it is in your PATH" msgstr "Ne najdem pdftohtml, preverite če se nahaja v PATH" @@ -2078,18 +2417,41 @@ msgid "" "Specify the character encoding of the output document. The default is cp1252." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/rtf/input.py:183 +#: /home/kovid/work/calibre/src/calibre/ebooks/rtf/input.py:199 msgid "" "This RTF file has a feature calibre does not support. Convert it to HTML " -"first and then try it." +"first and then try it.\n" +"%s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/txt/input.py:32 +#: /home/kovid/work/calibre/src/calibre/ebooks/tcr/output.py:23 +msgid "" +"Specify the character encoding of the output document. The default is utf-8." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/tcr/output.py:27 +msgid "" +"Specify the compression level to use. Scale 1 - 10. 1 being the lowest " +"compression but the fastest and 10 being the highest compression but the " +"slowest." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/txt/input.py:33 +msgid "" +"Normally extra spaces are condensed into a single space. With this option " +"all spaces will be displayed." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/txt/input.py:36 msgid "" "Run the text input through the markdown pre-processor. To learn more about " "markdown see" msgstr "" +#: /home/kovid/work/calibre/src/calibre/ebooks/txt/input.py:39 +msgid "Do not insert a Table of Contents into the output text." +msgstr "" + #: /home/kovid/work/calibre/src/calibre/ebooks/txt/output.py:24 msgid "" "Type of newline to use. Options are %s. Default is 'system'. Use 'old_mac' " @@ -2104,11 +2466,6 @@ msgid "" msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/txt/output.py:38 -#: /home/kovid/work/calibre/src/calibre/gui2/convert/txt_output_ui.py:54 -msgid "Do not add a blank line between paragraphs." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/txt/output.py:41 msgid "" "The maximum number of characters per line. This splits on the first space " "before the specified value. If no space is found the line will be broken at " @@ -2116,190 +2473,356 @@ msgid "" "minimum of 25 characters. Use 0 to disable line splitting." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/txt/output.py:48 +#: /home/kovid/work/calibre/src/calibre/ebooks/txt/output.py:45 msgid "" "Force splitting on the max-line-length value when no space is present. Also " "allows max-line-length to be below the minimum" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/txt/output.py:52 -msgid "Add a tab at the beginning of each paragraph." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:27 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:33 msgid "Send file to storage card instead of main memory by default" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:29 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:35 msgid "Confirm before deleting" msgstr "Potrdite pred brisanjem" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:31 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:37 msgid "Toolbar icon size" msgstr "Velikost ikon v orodni vrstici" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:33 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:39 msgid "Show button labels in the toolbar" msgstr "Prikaži tekstovne oznake v orodni vrstici" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:35 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:41 msgid "Main window geometry" msgstr "Geometrija glavnega okna" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:37 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:43 msgid "Notify when a new version is available" msgstr "Opozori me kadar je na voljo nova verzija" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:39 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:45 msgid "Use Roman numerals for series number" msgstr "Uporabi rimska števila za številke serij" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:41 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:47 msgid "Sort tags list by popularity" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:43 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:49 msgid "Number of covers to show in the cover browsing mode" msgstr "Število naslovnic, ki se pokažejo v cover browsing mode" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:45 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:51 msgid "Defaults for conversion to LRF" msgstr "Privzete nastavitve za pretvorbo v LRF" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:47 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:53 msgid "Options for the LRF ebook viewer" msgstr "Možnosti za pregledovalnik LRF eknjig" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:50 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:56 msgid "Formats that are viewed using the internal viewer" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:52 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:58 msgid "Columns to be displayed in the book list" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:53 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:59 msgid "Automatically launch content server on application startup" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:54 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:60 msgid "Oldest news kept in database" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:55 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:61 msgid "Show system tray icon" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:57 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:63 msgid "Upload downloaded news to device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:59 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:65 msgid "Delete books from library after uploading to device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:61 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:67 msgid "" "Show the cover flow in a separate window instead of in the main calibre " "window" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:63 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:69 msgid "Disable notifications from the system tray icon" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:65 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:71 msgid "Default action to perform when send to device button is clicked" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:85 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:93 msgid "Maximum number of waiting worker processes" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:123 -#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:397 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:95 +msgid "Download social metadata (tags/rating/etc.)" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:97 +msgid "Overwrite author and title with new metadata" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:99 +msgid "Limit max simultaneous jobs to number of CPUs" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:101 +msgid "tag browser categories not to display" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:138 +#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:476 msgid "Copied" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:152 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:172 msgid "Copy" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:152 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:172 msgid "Copy to Clipboard" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:381 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:382 msgid "Choose Files" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/add.py:52 +#: /home/kovid/work/calibre/src/calibre/gui2/add.py:54 msgid "Searching in" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/add.py:155 +#: /home/kovid/work/calibre/src/calibre/gui2/add.py:229 msgid "Adding..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/add.py:168 +#: /home/kovid/work/calibre/src/calibre/gui2/add.py:242 msgid "Searching in all sub-directories..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/add.py:244 +#: /home/kovid/work/calibre/src/calibre/gui2/add.py:255 +msgid "Path error" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/add.py:256 +msgid "The specified directory could not be processed." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/add.py:260 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:599 +msgid "No books" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/add.py:261 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1938 +msgid "No books found" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/add.py:327 msgid "Added" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/add.py:257 +#: /home/kovid/work/calibre/src/calibre/gui2/add.py:340 msgid "Adding failed" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/add.py:258 +#: /home/kovid/work/calibre/src/calibre/gui2/add.py:341 msgid "" "The add books process seems to have hung. Try restarting calibre and adding " "the books in smaller increments, until you find the problem book." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/add.py:270 +#: /home/kovid/work/calibre/src/calibre/gui2/add.py:353 msgid "Duplicates found!" msgstr "Duplikati najdeni!" -#: /home/kovid/work/calibre/src/calibre/gui2/add.py:271 +#: /home/kovid/work/calibre/src/calibre/gui2/add.py:354 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/add.py:274 +#: /home/kovid/work/calibre/src/calibre/gui2/add.py:357 msgid "Adding duplicates..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/add.py:335 +#: /home/kovid/work/calibre/src/calibre/gui2/add.py:423 msgid "Saving..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/add.py:388 +#: /home/kovid/work/calibre/src/calibre/gui2/add.py:476 msgid "Saved" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/bulk.py:60 -msgid "Bulk Convert" +#: /home/kovid/work/calibre/src/calibre/gui2/add_wizard/__init__.py:57 +msgid "Searching for sub-folders" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/bulk.py:73 -#: /home/kovid/work/calibre/src/calibre/gui2/convert/single.py:184 -msgid "Options specific to the output format." +#: /home/kovid/work/calibre/src/calibre/gui2/add_wizard/__init__.py:62 +msgid "Searching for books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input.py:15 -msgid "Comic Input" +#: /home/kovid/work/calibre/src/calibre/gui2/add_wizard/__init__.py:74 +msgid "Looking for duplicates based on file hash" msgstr "" +#: /home/kovid/work/calibre/src/calibre/gui2/add_wizard/__init__.py:109 +#: /home/kovid/work/calibre/src/calibre/gui2/add_wizard/welcome_ui.py:65 +msgid "Choose root folder" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/add_wizard/__init__.py:137 +msgid "Invalid root folder" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/add_wizard/__init__.py:138 +msgid "is not a valid root folder" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/add_wizard/__init__.py:148 +msgid "Add books to calibre" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/add_wizard/scan_ui.py:21 +#: /home/kovid/work/calibre/src/calibre/gui2/add_wizard/welcome_ui.py:57 +#: /home/kovid/work/calibre/src/calibre/gui2/wizard/finish_ui.py:45 +#: /home/kovid/work/calibre/src/calibre/gui2/wizard/kindle_ui.py:41 +#: /home/kovid/work/calibre/src/calibre/gui2/wizard/library_ui.py:49 +#: /home/kovid/work/calibre/src/calibre/gui2/wizard/stanza_ui.py:41 +msgid "WizardPage" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/add_wizard/scan_ui.py:22 +msgid "Scanning root folder for books" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/add_wizard/scan_ui.py:23 +msgid "This may take a few minutes" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/add_wizard/welcome_ui.py:58 +msgid "Choose the location to add books from" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/add_wizard/welcome_ui.py:59 +msgid "Select a folder on your hard disk" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/add_wizard/welcome_ui.py:60 +msgid "" +"<p>calibre can scan your computer for existing books automatically. These " +"books will then be <b>copied</b> into the calibre library. This wizard will " +"help you customize the scanning and import process for your existing book " +"collection.</p>\n" +"<p>Choose a root folder. Books will be searched for only inside this folder " +"and any sub-folders.</p>\n" +"<p>Make sure that the folder you chose for your calibre library <b>is " +"not</b> under the root folder you choose.</p>" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/add_wizard/welcome_ui.py:63 +msgid "&Root folder:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/add_wizard/welcome_ui.py:64 +msgid "" +"This folder and its sub-folders will be scanned for books to import into " +"calibre's library" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/add_wizard/welcome_ui.py:66 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/debug_ui.py:52 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/debug_ui.py:53 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:125 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:171 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/xexp_edit_ui.py:52 +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/configwidget_ui.py:76 +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/configwidget_ui.py:77 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:539 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:553 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:554 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:571 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:573 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:575 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:577 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:578 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:614 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:369 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:374 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:388 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:399 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:401 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:403 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:408 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:410 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/saved_search_editor_ui.py:87 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/saved_search_editor_ui.py:90 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories_ui.py:156 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories_ui.py:159 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories_ui.py:163 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories_ui.py:166 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_editor_ui.py:126 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_editor_ui.py:128 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_editor_ui.py:131 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_editor_ui.py:135 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor_ui.py:74 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor_ui.py:76 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:267 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:269 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:270 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:396 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:401 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:407 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:410 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:412 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:414 +#: /home/kovid/work/calibre/src/calibre/gui2/shortcuts_ui.py:75 +#: /home/kovid/work/calibre/src/calibre/gui2/shortcuts_ui.py:80 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:186 +msgid "..." +msgstr "..." + +#: /home/kovid/work/calibre/src/calibre/gui2/add_wizard/welcome_ui.py:67 +msgid "Handle multiple files per book" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/add_wizard/welcome_ui.py:68 +msgid "" +"&One book per folder, assumes every ebook file in a folder is the same book " +"in a different format" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/add_wizard/welcome_ui.py:69 +msgid "" +"&Multiple books per folder, assumes every ebook file is a different book" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_csv_xml.py:16 +msgid "CSV/XML Options" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_csv_xml.py:17 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:18 #: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input.py:16 #: /home/kovid/work/calibre/src/calibre/gui2/convert/epub_output.py:16 #: /home/kovid/work/calibre/src/calibre/gui2/convert/fb2_input.py:13 #: /home/kovid/work/calibre/src/calibre/gui2/convert/fb2_output.py:15 #: /home/kovid/work/calibre/src/calibre/gui2/convert/lrf_output.py:20 -#: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output.py:16 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output.py:21 #: /home/kovid/work/calibre/src/calibre/gui2/convert/pdb_input.py:13 #: /home/kovid/work/calibre/src/calibre/gui2/convert/pdb_output.py:17 #: /home/kovid/work/calibre/src/calibre/gui2/convert/pdf_input.py:13 @@ -2310,6 +2833,127 @@ msgstr "" msgid "Options specific to" msgstr "" +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_csv_xml.py:17 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:18 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/epub_output.py:16 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/fb2_output.py:15 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/lrf_output.py:20 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output.py:21 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdb_output.py:17 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdf_output.py:18 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/rb_output.py:15 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/txt_output.py:17 +msgid "output" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_csv_xml_ui.py:37 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:68 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_tab_template_ui.py:27 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input_ui.py:88 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/debug_ui.py:49 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/epub_output_ui.py:48 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/fb2_input_ui.py:28 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/fb2_output_ui.py:28 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:119 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/lrf_output_ui.py:115 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:166 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output_ui.py:66 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/page_setup_ui.py:115 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdb_input_ui.py:31 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdb_output_ui.py:35 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdf_input_ui.py:38 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdf_output_ui.py:42 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/rb_output_ui.py:28 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/structure_detection_ui.py:59 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/toc_ui.py:62 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/txt_input_ui.py:45 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/txt_output_ui.py:45 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/xexp_edit_ui.py:49 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/xpath_wizard_ui.py:67 +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/configwidget_ui.py:74 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/save_template_ui.py:41 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_item_ui.py:35 +#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:106 +#: /home/kovid/work/calibre/src/calibre/gui2/wizard/send_email_ui.py:107 +msgid "Form" +msgstr "Forma" + +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_csv_xml_ui.py:38 +msgid "Fields to include in output:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:17 +msgid "E-book options" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:20 +#: /home/kovid/work/calibre/src/calibre/library/catalog.py:222 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1239 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1257 +msgid "Catalog" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:69 +msgid "'Don't include this book' tag:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:70 +msgid "'Mark this book as read' tag:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:71 +msgid "Additional note tag prefix:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:72 +msgid "Regex pattern describing tags to exclude as genres:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:73 +msgid "" +"Regex tips:\n" +"- The default regex - \\[[\\w ]*\\] - excludes genre tags of the form [tag], " +"e.g., [Amazon Freebie]\n" +"- A regex pattern of a single dot excludes all genre tags, generating no " +"Genre Section" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:76 +msgid "Include 'Titles' Section" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:77 +msgid "Include 'Recently Added' Section" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:78 +msgid "Sort numbers as text" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_tab_template_ui.py:28 +msgid "Tab template for catalog.ui" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/bulk.py:36 +msgid "" +"For settings that cannot be specified in this dialog, use the values saved " +"in a previous conversion (if they exist) instead of using the defaults " +"specified in the Preferences" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/bulk.py:67 +msgid "Bulk Convert" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/bulk.py:80 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/single.py:185 +msgid "Options specific to the output format." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input.py:15 +msgid "Comic Input" +msgstr "" + #: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input.py:16 #: /home/kovid/work/calibre/src/calibre/gui2/convert/fb2_input.py:13 #: /home/kovid/work/calibre/src/calibre/gui2/convert/pdb_input.py:13 @@ -2318,93 +2962,69 @@ msgstr "" msgid "input" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input_ui.py:84 -#: /home/kovid/work/calibre/src/calibre/gui2/convert/debug_ui.py:45 -#: /home/kovid/work/calibre/src/calibre/gui2/convert/epub_output_ui.py:41 -#: /home/kovid/work/calibre/src/calibre/gui2/convert/fb2_input_ui.py:28 -#: /home/kovid/work/calibre/src/calibre/gui2/convert/fb2_output_ui.py:28 -#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:88 -#: /home/kovid/work/calibre/src/calibre/gui2/convert/lrf_output_ui.py:115 -#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:165 -#: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output_ui.py:44 -#: /home/kovid/work/calibre/src/calibre/gui2/convert/page_setup_ui.py:110 -#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdb_input_ui.py:31 -#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdb_output_ui.py:35 -#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdf_input_ui.py:38 -#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdf_output_ui.py:39 -#: /home/kovid/work/calibre/src/calibre/gui2/convert/rb_output_ui.py:28 -#: /home/kovid/work/calibre/src/calibre/gui2/convert/structure_detection_ui.py:59 -#: /home/kovid/work/calibre/src/calibre/gui2/convert/toc_ui.py:61 -#: /home/kovid/work/calibre/src/calibre/gui2/convert/txt_input_ui.py:38 -#: /home/kovid/work/calibre/src/calibre/gui2/convert/txt_output_ui.py:51 -#: /home/kovid/work/calibre/src/calibre/gui2/convert/xexp_edit_ui.py:41 -#: /home/kovid/work/calibre/src/calibre/gui2/convert/xpath_wizard_ui.py:67 -#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/configwidget_ui.py:59 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_item_ui.py:35 -#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:96 -#: /home/kovid/work/calibre/src/calibre/gui2/wizard/send_email_ui.py:107 -msgid "Form" -msgstr "Forma" - -#: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input_ui.py:85 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input_ui.py:89 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf_ui.py:94 msgid "&Number of Colors:" msgstr "&Število Barv:" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input_ui.py:86 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input_ui.py:90 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf_ui.py:96 msgid "Disable &normalize" msgstr "Izklopi &normalizacijo" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input_ui.py:87 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input_ui.py:91 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf_ui.py:97 msgid "Keep &aspect ratio" msgstr "Ohrani r&azmerje" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input_ui.py:88 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input_ui.py:92 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf_ui.py:98 msgid "Disable &Sharpening" msgstr "Onemogoči O&strenje" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input_ui.py:89 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input_ui.py:93 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf_ui.py:104 msgid "Disable &Trimming" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input_ui.py:90 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input_ui.py:94 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf_ui.py:103 msgid "&Wide" msgstr "&Široko" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input_ui.py:91 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input_ui.py:95 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf_ui.py:99 msgid "&Landscape" msgstr "&Panorama" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input_ui.py:92 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input_ui.py:96 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf_ui.py:101 msgid "&Right to left" msgstr "Od desne p&roti levi" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input_ui.py:93 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input_ui.py:97 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf_ui.py:100 msgid "Don't so&rt" msgstr "Ne &razvrščaj" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input_ui.py:94 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input_ui.py:98 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf_ui.py:102 msgid "De&speckle" msgstr "De&speckle" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input_ui.py:95 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input_ui.py:99 msgid "&Disable comic processing" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input_ui.py:96 -#: /home/kovid/work/calibre/src/calibre/gui2/convert/single_ui.py:107 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input_ui.py:100 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/single_ui.py:111 msgid "&Output format:" msgstr "" +#: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input_ui.py:101 +msgid "Disable conversion of images to &black and white" +msgstr "" + #: /home/kovid/work/calibre/src/calibre/gui2/convert/debug.py:19 msgid "Debug" msgstr "" @@ -2414,7 +3034,7 @@ msgid "Debug the conversion process." msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/convert/debug.py:38 -#: /home/kovid/work/calibre/src/calibre/gui2/convert/debug_ui.py:47 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/debug_ui.py:51 msgid "Choose debug folder" msgstr "" @@ -2426,7 +3046,7 @@ msgstr "" msgid "Failed to create debug directory" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/debug_ui.py:46 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/debug_ui.py:50 msgid "" "Choose a folder to put the debug output into. If you specify a folder, " "calibre will place a lot of debug output into it. This will be useful in " @@ -2434,70 +3054,41 @@ msgid "" "conversion parameters like Table of Contents and Chapter Detection." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/debug_ui.py:48 -#: /home/kovid/work/calibre/src/calibre/gui2/convert/debug_ui.py:49 -#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:170 -#: /home/kovid/work/calibre/src/calibre/gui2/convert/xexp_edit_ui.py:44 -#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/configwidget_ui.py:61 -#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/configwidget_ui.py:62 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:471 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:483 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:484 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:500 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:501 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:533 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:343 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:348 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:362 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:371 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:373 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:375 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:380 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:382 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_editor_ui.py:126 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_editor_ui.py:128 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_editor_ui.py:131 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_editor_ui.py:135 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:267 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:269 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:270 -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:333 -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:335 -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:341 -msgid "..." -msgstr "..." +#: /home/kovid/work/calibre/src/calibre/gui2/convert/debug_ui.py:54 +msgid "" +"The debug process outputs the intermediate HTML generated at various stages " +"of the conversion process. This HTML can sometimes serve as a good starting " +"point for hand editing a conversion." +msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/convert/epub_output.py:15 msgid "EPUB Output" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/epub_output.py:16 -#: /home/kovid/work/calibre/src/calibre/gui2/convert/fb2_output.py:15 -#: /home/kovid/work/calibre/src/calibre/gui2/convert/lrf_output.py:20 -#: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output.py:16 -#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdb_output.py:17 -#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdf_output.py:18 -#: /home/kovid/work/calibre/src/calibre/gui2/convert/rb_output.py:15 -#: /home/kovid/work/calibre/src/calibre/gui2/convert/txt_output.py:17 -msgid "output" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/convert/epub_output_ui.py:42 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/epub_output_ui.py:49 msgid "Do not &split on page breaks" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/epub_output_ui.py:43 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/epub_output_ui.py:50 +msgid "No default &cover" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/epub_output_ui.py:51 +msgid "No &SVG cover" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/epub_output_ui.py:52 +msgid "Preserve cover &aspect ratio" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/epub_output_ui.py:53 msgid "Split files &larger than:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/epub_output_ui.py:44 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/epub_output_ui.py:54 msgid " KB" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/epub_output_ui.py:45 -msgid "No default &cover" -msgstr "" - #: /home/kovid/work/calibre/src/calibre/gui2/convert/fb2_input.py:12 msgid "FB2 Input" msgstr "" @@ -2513,72 +3104,160 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/convert/fb2_output_ui.py:29 #: /home/kovid/work/calibre/src/calibre/gui2/convert/pdb_output_ui.py:37 #: /home/kovid/work/calibre/src/calibre/gui2/convert/rb_output_ui.py:29 -#: /home/kovid/work/calibre/src/calibre/gui2/convert/txt_output_ui.py:53 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/txt_output_ui.py:47 msgid "&Inline TOC" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel.py:15 -msgid "Look & Feel" -msgstr "Izgled & Občutek" - -#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel.py:17 -msgid "Control the look and feel of the output" +#: /home/kovid/work/calibre/src/calibre/gui2/convert/font_key_ui.py:99 +msgid "Font rescaling wizard" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:89 -msgid "Base &font size:" -msgstr "Osnovna &velikost pisave:" - -#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:90 -#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:92 -#: /home/kovid/work/calibre/src/calibre/gui2/convert/lrf_output_ui.py:118 -#: /home/kovid/work/calibre/src/calibre/gui2/convert/lrf_output_ui.py:120 -#: /home/kovid/work/calibre/src/calibre/gui2/convert/lrf_output_ui.py:125 -#: /home/kovid/work/calibre/src/calibre/gui2/convert/page_setup_ui.py:116 -#: /home/kovid/work/calibre/src/calibre/gui2/convert/page_setup_ui.py:118 -#: /home/kovid/work/calibre/src/calibre/gui2/convert/page_setup_ui.py:120 -#: /home/kovid/work/calibre/src/calibre/gui2/convert/page_setup_ui.py:122 -msgid " pt" +#: /home/kovid/work/calibre/src/calibre/gui2/convert/font_key_ui.py:100 +msgid "" +"<p>This wizard will help you choose an appropriate font size key for your " +"needs. Just enter the base font size of the input document and then enter an " +"input font size. The wizard will display what font size it will be mapped " +"to, by the font rescaling algorithm. You can adjust the algorithm by " +"adjusting the output base font size and font key below. When you find values " +"suitable for you, click OK.</p>\n" +"<p>By default, if the output base font size is zero and/or no font size key " +"is specified, calibre will use the values from the current Output Profile. " +"</p>\n" +"<p>See the <a href=\"http://calibre-" +"ebook.com/user_manual/conversion.html#font-size-rescaling\">User Manual</a> " +"for a discussion of how font size rescaling works.</p>" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:91 -msgid "Line &height:" +#: /home/kovid/work/calibre/src/calibre/gui2/convert/font_key_ui.py:103 +msgid "&Output document" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:93 -msgid "Remove &spacing between paragraphs" +#: /home/kovid/work/calibre/src/calibre/gui2/convert/font_key_ui.py:104 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/font_key_ui.py:109 +msgid "&Base font size:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:94 -msgid "No text &justification" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:95 -msgid "&Linearize tables" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:96 -msgid "&Transliterate unicode characters to ASCII." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:97 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/font_key_ui.py:105 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:123 msgid "Font size &key:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:98 -msgid "Input character &encoding" +#: /home/kovid/work/calibre/src/calibre/gui2/convert/font_key_ui.py:106 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/font_key_ui.py:110 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/font_key_ui.py:112 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:122 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:127 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/lrf_output_ui.py:118 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/lrf_output_ui.py:120 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/lrf_output_ui.py:125 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/page_setup_ui.py:121 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/page_setup_ui.py:123 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/page_setup_ui.py:125 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/page_setup_ui.py:127 +msgid " pt" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:99 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/font_key_ui.py:107 +msgid "Use &default values" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/font_key_ui.py:108 +msgid "&Input document" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/font_key_ui.py:111 +msgid "&Font size: " +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/font_key_ui.py:113 +msgid " will map to size: " +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/font_key_ui.py:114 +msgid "0.0 pt" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel.py:16 +msgid "Look & Feel" +msgstr "Izgled & Občutek" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel.py:18 +msgid "Control the look and feel of the output" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel.py:30 +msgid "Original" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel.py:31 +msgid "Left align" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel.py:32 +msgid "Justify text" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:120 msgid "&Disable font size rescaling" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:100 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:121 +msgid "Base &font size:" +msgstr "Osnovna &velikost pisave:" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:124 +msgid "Wizard to help you choose an appropriate font size key" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:126 +msgid "Line &height:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:128 +msgid "Input character &encoding:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:129 +msgid "Remove &spacing between paragraphs" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:130 +msgid "Indent size:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:131 +msgid "" +"<p>When calibre removes inter paragraph spacing, it automatically sets a " +"paragraph indent, to ensure that paragraphs can be easily distinguished. " +"This option controls the width of that indent." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:132 +msgid " em" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:133 +msgid "Text justification:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:134 +msgid "&Linearize tables" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:135 +msgid "Extra &CSS" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:136 +msgid "&Transliterate unicode characters to ASCII" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:137 msgid "Insert &blank line" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:101 -msgid "Extra &CSS" +#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:138 +msgid "Keep &ligatures" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/convert/lrf_output.py:19 @@ -2634,8 +3313,8 @@ msgid "&Monospaced font family:" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:41 -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:145 -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:169 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:114 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:195 msgid "Metadata" msgstr "Meta podatki" @@ -2645,97 +3324,97 @@ msgid "" "possible." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:152 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:95 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:161 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:101 msgid "Choose cover for " msgstr "Izberi naslovnico za " -#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:159 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:102 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:168 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:108 msgid "Cannot read" msgstr "Ne morem prebrati" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:160 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:103 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:169 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:109 msgid "You do not have permission to read the file: " msgstr "Nimate pravic za branje datoteke: " -#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:168 -#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:175 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:111 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:177 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:184 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:117 msgid "Error reading file" msgstr "Napaka pri branju zbirke" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:169 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:112 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:178 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:118 msgid "<p>There was an error reading from file: <br /><b>" msgstr "<p>Prišlo je do napake pri branju iz zbirke: <br /><b>" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:176 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:120 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:185 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:126 msgid " is not a valid picture" msgstr " ni veljavna slika" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:166 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:377 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:167 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:405 msgid "Book Cover" msgstr "Naslovna Stran" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:167 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:168 msgid "Use cover from &source file" msgstr "Uporabi na&slovnico iz izvorne datoteke" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:168 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:378 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:169 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:406 msgid "Change &cover image:" msgstr "Spremeni &sliko naslovne strani:" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:169 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:379 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:170 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:407 msgid "Browse for an image to use as the cover of this book." msgstr "Izberi sliko, ki bo uporabljena za naslovnico te knjige." -#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:171 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:340 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:172 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:366 msgid "&Title: " msgstr "&Naslov: " -#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:172 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:341 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:173 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:367 msgid "Change the title of this book" msgstr "Spremeni naslov knjige" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:173 -#: /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:344 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:174 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:158 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:370 msgid "&Author(s): " msgstr "&Avtor(ji): " -#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:174 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:175 msgid "Author So&rt:" msgstr "Razv&rščanje Avtorjev:" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:175 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:176 msgid "" "Change the author(s) of this book. Multiple authors should be separated by a " "comma" msgstr "" "Spremeni avtorja(je) te knjige. Če je avtorjev več jih ločite z vejicami." -#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:176 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:143 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:353 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:177 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:167 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:379 msgid "&Publisher: " msgstr "&Založnik: " -#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:177 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:354 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:178 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:380 msgid "Ta&gs: " msgstr "&Značke: " -#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:178 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:145 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:355 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:179 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:169 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:381 msgid "" "Tags categorize the book. This is particularly useful while searching. " "<br><br>They can be any words or phrases, separated by commas." @@ -2743,83 +3422,99 @@ msgstr "" "Značke kategorizirajo knjigo. To je uporabno predvsem pri iskanju. " "<br><br>Lahko so poljubni, z vejicami ločeni, izrazi ali besede." -#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:179 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:150 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:358 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:180 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:174 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:384 msgid "&Series:" msgstr "&Serije:" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:180 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:181 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:151 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:152 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:359 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:360 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:182 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:175 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:176 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:385 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:386 msgid "List of known series. You can add new series." msgstr "Seznam znanih serij. Lahko dodate nove serije." -#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:182 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:365 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:183 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:391 msgid "Book " msgstr "Knjiga " -#: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output.py:15 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output.py:20 msgid "MOBI Output" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output_ui.py:45 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output.py:42 +msgid "Default" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output_ui.py:67 msgid "&Title for Table of Contents:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output_ui.py:46 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output_ui.py:68 msgid "Rescale images for &Palm devices" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output_ui.py:47 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output_ui.py:69 msgid "Use author &sort for author" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output_ui.py:48 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output_ui.py:70 msgid "Disable compression of the file contents" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output_ui.py:49 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output_ui.py:71 msgid "Do not add Table of Contents to book" msgstr "" +#: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output_ui.py:72 +msgid "Kindle options" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output_ui.py:73 +msgid "Periodical masthead font:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output_ui.py:74 +msgid "Personal Doc tag:" +msgstr "" + #: /home/kovid/work/calibre/src/calibre/gui2/convert/page_setup.py:35 msgid "Page Setup" msgstr "Nastavitve strani" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/page_setup_ui.py:111 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/page_setup_ui.py:116 msgid "&Output profile:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/page_setup_ui.py:112 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/page_setup_ui.py:117 msgid "Profile description" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/page_setup_ui.py:113 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/page_setup_ui.py:118 msgid "&Input profile:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/page_setup_ui.py:114 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/page_setup_ui.py:119 msgid "Margins" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/page_setup_ui.py:115 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/page_setup_ui.py:120 msgid "&Left:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/page_setup_ui.py:117 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/page_setup_ui.py:122 msgid "&Top:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/page_setup_ui.py:119 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/page_setup_ui.py:124 msgid "&Right:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/page_setup_ui.py:121 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/page_setup_ui.py:126 msgid "&Bottom:" msgstr "" @@ -2828,12 +3523,12 @@ msgid "PDB Input" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/convert/pdb_input_ui.py:32 -#: /home/kovid/work/calibre/src/calibre/gui2/convert/txt_input_ui.py:39 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/txt_input_ui.py:46 msgid "Treat each &line as a paragraph" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/convert/pdb_input_ui.py:33 -#: /home/kovid/work/calibre/src/calibre/gui2/convert/txt_input_ui.py:42 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/txt_input_ui.py:47 msgid "Assume print formatting" msgstr "" @@ -2861,20 +3556,24 @@ msgstr "" msgid "PDF Output" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdf_output_ui.py:40 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdf_output_ui.py:43 msgid "&Paper Size:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdf_output_ui.py:41 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdf_output_ui.py:44 msgid "&Orientation:" msgstr "" +#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdf_output_ui.py:45 +msgid "Preserve &aspect ratio of cover" +msgstr "" + #: /home/kovid/work/calibre/src/calibre/gui2/convert/rb_output.py:14 msgid "RB Output" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/convert/regex_builder.py:76 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1321 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2183 msgid "Choose the format to view" msgstr "Izberite format, ki ga želite videti" @@ -2886,45 +3585,50 @@ msgstr "" msgid "No formats available" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/regex_builder.py:98 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/regex_builder.py:100 msgid "Open book" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/regex_builder.py:98 -msgid "~" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/convert/regex_builder_ui.py:46 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/regex_builder_ui.py:52 msgid "Regex Builder" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/regex_builder_ui.py:47 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/regex_builder_ui.py:53 msgid "Preview" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/regex_builder_ui.py:48 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/regex_builder_ui.py:54 msgid "Regex:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/single.py:170 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/regex_builder_ui.py:55 +#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:117 +msgid "Test" +msgstr "Test" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/single.py:171 msgid "Convert" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/single.py:195 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/single.py:196 msgid "Options specific to the input format." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/single_ui.py:105 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info_ui.py:61 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/single_ui.py:108 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info_ui.py:64 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf_ui.py:91 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/progress_ui.py:48 msgid "Dialog" msgstr "Dialog" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/single_ui.py:106 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/single_ui.py:109 msgid "&Input format:" msgstr "" +#: /home/kovid/work/calibre/src/calibre/gui2/convert/single_ui.py:110 +msgid "Use &saved conversion settings for individual books" +msgstr "" + #: /home/kovid/work/calibre/src/calibre/gui2/convert/structure_detection.py:17 msgid "" "Structure\n" @@ -2953,12 +3657,12 @@ msgid "Footer regular expression:" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/convert/structure_detection.py:56 -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:72 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:71 msgid "Invalid regular expression" msgstr "Neveljaven regularni izraz" #: /home/kovid/work/calibre/src/calibre/gui2/convert/structure_detection.py:57 -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:73 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:72 msgid "Invalid regular expression: %s" msgstr "Neveljaven regularni izraz: %s" @@ -3018,23 +3722,23 @@ msgstr "" msgid "Level &3 TOC (XPath expression):" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/toc_ui.py:62 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/toc_ui.py:63 msgid "Do not add &detected chapters to the Table of Contents" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/toc_ui.py:63 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/toc_ui.py:64 msgid "Number of &links to add to Table of Contents" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/toc_ui.py:64 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/toc_ui.py:65 msgid "Chapter &threshold" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/toc_ui.py:65 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/toc_ui.py:66 msgid "&Force use of auto-generated Table of Contents" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/toc_ui.py:66 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/toc_ui.py:67 msgid "TOC &Filter:" msgstr "" @@ -3042,40 +3746,44 @@ msgstr "" msgid "TXT Input" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/txt_input_ui.py:40 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/txt_input_ui.py:48 msgid "Process using markdown" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/txt_input_ui.py:41 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/txt_input_ui.py:49 msgid "" "<p>Markdown is a simple markup language for text files, that allows for " "advanced formatting. To learn more visit <a " "href=\"http://daringfireball.net/projects/markdown\">markdown</a>." msgstr "" +#: /home/kovid/work/calibre/src/calibre/gui2/convert/txt_input_ui.py:50 +msgid "Do not insert Table of Contents into output text when using markdown" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/txt_input_ui.py:51 +msgid "Preserve &spaces" +msgstr "" + #: /home/kovid/work/calibre/src/calibre/gui2/convert/txt_output.py:16 msgid "TXT Output" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/txt_output_ui.py:52 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/txt_output_ui.py:46 msgid "&Line ending style:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/txt_output_ui.py:55 -msgid "Add a tab at the beginning of each paragraph" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/convert/txt_output_ui.py:56 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/txt_output_ui.py:48 msgid "&Maximum line length:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/txt_output_ui.py:57 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/txt_output_ui.py:49 msgid "Force maximum line lenght" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/xexp_edit_ui.py:42 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info_ui.py:62 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info_ui.py:63 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/xexp_edit_ui.py:50 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info_ui.py:65 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info_ui.py:66 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_format_ui.py:41 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/confirm_delete_ui.py:49 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/password_ui.py:57 @@ -3084,7 +3792,7 @@ msgstr "" msgid "TextLabel" msgstr "TextLabel" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/xexp_edit_ui.py:43 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/xexp_edit_ui.py:51 msgid "Use a wizard to help construct the XPath expression" msgstr "" @@ -3159,255 +3867,359 @@ msgid "" "<i>chapter</i>.</p><p>Leaving attribute blank will match any attribute and " "leaving value blank will match any value. Setting tag to * will match any " "tag.</p><p>To learn more advanced usage of XPath see the <a " -"href=\"http://calibre.kovidgoyal.net/user_manual/xpath.html\">XPath " -"Tutorial</a>." +"href=\"http://calibre-ebook.com/user_manual/xpath.html\">XPath Tutorial</a>." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:52 +#: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:77 +#: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:101 +#: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:132 +#: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:143 +#: /home/kovid/work/calibre/src/calibre/gui2/library/delegates.py:110 +#: /home/kovid/work/calibre/src/calibre/gui2/library/delegates.py:130 +#: /home/kovid/work/calibre/src/calibre/gui2/library/delegates.py:205 +#: /home/kovid/work/calibre/src/calibre/gui2/library/delegates.py:238 +#: /home/kovid/work/calibre/src/calibre/gui2/library/delegates.py:242 +msgid "Undefined" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:52 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_ct_column_ui.py:131 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_ct_column_ui.py:133 +msgid "Yes" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:52 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_ct_column_ui.py:132 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_ct_column_ui.py:134 +msgid "No" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:110 +msgid "star(s)" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:111 +msgid "Unrated" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:352 +msgid "Remove all tags" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:373 +msgid "tags to add" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:378 +msgid "tags to remove" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/device.py:39 -#: /home/kovid/work/calibre/src/calibre/utils/ipc/job.py:130 +#: /home/kovid/work/calibre/src/calibre/utils/ipc/job.py:135 msgid "No details available." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:128 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:138 msgid "Device no longer connected." msgstr "Naprava ni več priklopljena." -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:195 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:243 msgid "Get device information" msgstr "Pridobi podatke o napravi" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:206 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:269 msgid "Get list of books on device" msgstr "Pridobi seznam knjig iz naprave" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:215 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:279 +msgid "Get annotations from device" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:288 msgid "Send metadata to device" msgstr "Pošlji meta podatke v napravo" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:224 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:297 msgid "Upload %d books to device" msgstr "Prenesi %d knjig v napravo" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:239 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:312 msgid "Delete books from device" msgstr "Izbriši knjige iz naprave" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:256 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:329 msgid "Download books from device" msgstr "Prenesi knjige iz naprave" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:266 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:339 msgid "View book on device" msgstr "Poglej knjigo na napravi" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:273 -msgid "and delete from library" -msgstr "in izbriši iz knjižnice" - -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:294 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:373 msgid "Set default send to device action" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:299 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:306 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:308 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:310 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:379 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:386 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:388 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:390 msgid "Email to" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:321 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:328 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:401 msgid "Send to main memory" msgstr "Pošlji v glavni pomnilnik" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:323 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:330 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:403 msgid "Send to storage card A" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:325 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:332 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:405 msgid "Send to storage card B" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:335 -msgid "Send specific format to main memory" +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:410 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:419 +msgid "Main Memory" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:337 -msgid "Send specific format to storage card A" +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:412 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:421 +msgid "Storage Card A" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:339 -msgid "Send specific format to storage card B" +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:414 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:423 +msgid "Storage Card B" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:437 +msgid "Send and delete from library" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:438 +msgid "Send specific format" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:477 +msgid "Connect to folder" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/device.py:482 -msgid "No books" +msgid "Disconnect from folder" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:483 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:490 +msgid "Fetch annotations (experimental)" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:600 msgid "selected to send" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:488 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:605 msgid "Choose format to send to device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:495 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:613 msgid "No device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:496 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:614 msgid "Cannot send: No device is connected" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:499 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:503 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:617 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:621 msgid "No card" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:500 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:504 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:618 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:622 msgid "Cannot send: Device has no storage card" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:546 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:664 msgid "E-book:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:549 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:667 msgid "Attached, you will find the e-book" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:550 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:177 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:668 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:180 msgid "by" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:551 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:669 msgid "in the %s format." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:564 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:682 msgid "Sending email to" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:594 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:601 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:692 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:806 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:813 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:712 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:719 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:811 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:871 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:990 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:997 msgid "No suitable formats" msgstr "Ni ustreznih formatov" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:595 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:713 msgid "Auto convert the following books before sending via email?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:602 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:720 msgid "" "Could not email the following books as no suitable formats were found:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:621 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:738 msgid "Failed to email books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:622 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:739 msgid "Failed to email the following books:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:626 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:743 msgid "Sent by email:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:653 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:770 msgid "News:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:654 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:771 msgid "Attached is the" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:665 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:782 msgid "Sent news to" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:693 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:807 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:812 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:872 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:991 msgid "Auto convert the following books before uploading to the device?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:724 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:841 +msgid "Sending catalogs to device." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:902 msgid "Sending news to device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:776 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:957 msgid "Sending books to device." msgstr "Pošlji knjige v napravo." -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:814 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:998 msgid "" "Could not upload the following books to the device, as no suitable formats " "were found. Convert the book(s) to a format supported by your device first." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:862 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1046 msgid "No space on device" msgstr "Na napravi ni več prostora" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:863 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1047 msgid "" "<p>Cannot upload books to device there is no more free space available " msgstr "" "<p>Prenos knjig na napravo ni mogoč, ker na napravi ni dovolj prostora " -#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/configwidget_ui.py:60 +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/configwidget_ui.py:75 msgid "Select available formats and their order for this device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/configwidget_ui.py:63 +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/configwidget_ui.py:79 msgid "Use sub directories" 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:345 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:1005 -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:56 +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/configwidget_ui.py:81 +msgid "Save &template:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:114 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:115 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:116 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:293 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:994 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:102 msgid "Path" msgstr "Pot" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:87 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:88 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:89 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:92 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:216 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:344 -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:57 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:83 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:117 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:118 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:119 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:122 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:219 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:292 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:103 +#: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:91 msgid "Formats" msgstr "Formati" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info_ui.py:65 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info_ui.py:68 +msgid "Fit &cover to view" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info_ui.py:69 msgid "&Previous" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info_ui.py:66 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info_ui.py:70 msgid "&Next" msgstr "" +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/catalog.py:38 +msgid "My Books" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/catalog_ui.py:69 +#: /home/kovid/work/calibre/src/calibre/gui2/tools.py:287 +msgid "Generate catalog" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/catalog_ui.py:70 +msgid "Generate catalog for {0} books" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/catalog_ui.py:71 +msgid "Catalog &format:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/catalog_ui.py:72 +msgid "" +"Catalog &title (existing catalog with the same title will be replaced):" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/catalog_ui.py:73 +msgid "&Send catalog to device automatically" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/catalog_ui.py:74 +msgid "Catalog options" +msgstr "" + #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_format_ui.py:40 msgid "Choose Format" msgstr "Izberi Format" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf.py:34 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf.py:33 msgid "Set defaults for conversion of comics (CBR/CBZ files)" msgstr "Nastavi privzete možnosti za pretvorbo stripov (CBR/CBZ datoteke)" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf.py:49 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf.py:48 msgid "Set options for converting %s" msgstr "Nastavi nastavitve za pretvorbo %s" @@ -3423,193 +4235,241 @@ msgstr "&Avtor(ji):" msgid "&Profile:" msgstr "&Profil:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:170 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comments_dialog_ui.py:41 +msgid "Edit Comments" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:173 msgid "%(plugin_type)s %(plugins)s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:171 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:174 msgid "plugins" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:196 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:183 +msgid "" +"\n" +"Customization: " +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:199 msgid "Conversion" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:196 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:199 msgid "General" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:196 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:199 msgid "Interface" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:197 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:200 msgid "Add/Save" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:197 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:200 msgid "" "Email\n" "Delivery" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:198 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:201 msgid "Advanced" msgstr "Napredno" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:198 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:201 msgid "" "Content\n" "Server" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:198 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:201 msgid "Plugins" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:216 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:219 msgid "Auto send" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:216 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:219 msgid "Email" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:221 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:224 msgid "Formats to email. The first matching format will be sent." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:222 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:225 msgid "" "If checked, downloaded news will be automatically mailed <br>to this email " "address (provided it is in one of the listed formats)." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:296 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:299 msgid "new email address" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:461 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:788 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:140 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1004 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:490 +msgid "System port selected" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:491 +msgid "" +"The value <b>%d</b> you have chosen for the content server port is a system " +"port. Your operating system <b>may</b> not allow the server to run on this " +"port. To be safe choose a port number larger than 1024." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:510 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:933 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:190 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1650 #: /home/kovid/work/calibre/src/calibre/utils/ipc/job.py:53 msgid "Error" msgstr "Napaka" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:462 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:511 msgid "Failed to install command line tools." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:465 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:514 msgid "Command line tools installed" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:466 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:515 msgid "Command line tools installed in" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:467 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:516 msgid "" "If you move calibre.app, you have to re-install the command line tools." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:518 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:567 msgid "No valid plugin path" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:519 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:568 msgid "%s is not a valid plugin path" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:522 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:571 msgid "Choose plugin" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:534 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:583 msgid "Plugin cannot be disabled" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:535 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:584 msgid "The plugin: %s cannot be disabled" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:544 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:593 msgid "Plugin not customizable" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:545 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:594 msgid "Plugin: %s does not need customization" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:569 -msgid "Customize %s" +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:602 +msgid "Customize" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:579 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:640 msgid "Cannot remove builtin plugin" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:580 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:641 msgid " cannot be removed. It is a builtin plugin. Try disabling it instead." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:613 -msgid "Error log:" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:620 -msgid "Access log:" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:645 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:573 -msgid "Failed to start content server" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:669 -#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:470 -msgid "Select location for books" +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:672 +msgid "You must select a column to delete it" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:677 -msgid "Invalid size" +msgid "The selected column is not a custom column" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:678 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/confirm_delete_ui.py:48 +msgid "Are you sure?" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:679 +msgid "Do you really want to delete column %s and all its data?" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:746 +msgid "Error log:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:753 +msgid "Access log:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:781 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:761 +msgid "Failed to start content server" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:805 +#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:587 +msgid "Select location for books" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:812 +msgid "Invalid size" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:813 msgid "The size %s is invalid. must be of the form widthxheight" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:729 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:734 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:868 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:873 msgid "Invalid database location" msgstr "Napačna lokacija podatkovne baze" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:730 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:869 msgid "Invalid database location " msgstr "Napačna lokacija podatkovne baze " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:731 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:870 msgid "<br>Must be a directory." msgstr "<br>Mora biti direktorij." -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:735 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:874 msgid "Invalid database location.<br>Cannot write to " msgstr "Napačna lokacija podatkovne baze. <br>Ne morem pisati v " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:769 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:879 +msgid "Must restart" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:880 +msgid "" +"The changes you made require that Calibre be restarted. Please restart as " +"soon as practical." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:914 msgid "Checking database integrity" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:789 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:934 msgid "Failed to check database integrity" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:794 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:939 msgid "Some inconsistencies found" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:795 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:940 msgid "" "The following books had formats listed in the database that are not actually " "available. The entries for the formats have been removed. You should check " @@ -3617,103 +4477,116 @@ msgid "" "folder directly." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/add_save.py:68 -msgid "Invalid template" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/add_save.py:69 -msgid "The template %s is invalid:" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/add_save_ui.py:100 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/add_save_ui.py:103 msgid "TabWidget" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/add_save_ui.py:101 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/add_save_ui.py:104 msgid "" "Here you can control how calibre will read metadata from the files you add " "to it. calibre can either read metadata from the contents of the file, or " "from the filename." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/add_save_ui.py:102 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/add_save_ui.py:105 msgid "Read metadata only from &file name" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/add_save_ui.py:103 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/add_save_ui.py:106 +msgid "" +"Swap the firstname and lastname of the author. This affects only metadata " +"read from file names." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/add_save_ui.py:107 +msgid "&Swap author firstname and lastname" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/add_save_ui.py:108 +msgid "" +"If an existing book with a similar title and author is found that does not " +"have the format being added, the format is added \n" +"to the existing book, instead of creating a new entry. If the existing book " +"already has the format, then it is silently ignored.\n" +"\n" +"Title match ignores leading indefinite articles (\"the\", \"a\", \"an\"), " +"punctuation, case, etc. Author match is exact." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/add_save_ui.py:112 +msgid "" +"If books with similar titles and authors found, &merge the new files " +"automatically" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/add_save_ui.py:113 msgid "&Configure metadata from file name" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/add_save_ui.py:104 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/add_save_ui.py:114 msgid "&Adding books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/add_save_ui.py:105 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/add_save_ui.py:115 msgid "" "Here you can control how calibre will save your books when you click the " "Save to Disk button:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/add_save_ui.py:106 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/add_save_ui.py:116 msgid "Save &cover separately" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/add_save_ui.py:107 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/add_save_ui.py:117 msgid "Update &metadata in saved copies" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/add_save_ui.py:108 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/add_save_ui.py:118 msgid "Save metadata in &OPF file" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/add_save_ui.py:109 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/add_save_ui.py:119 msgid "Convert non-English characters to &English equivalents" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/add_save_ui.py:110 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/add_save_ui.py:120 msgid "Format &dates as:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/add_save_ui.py:111 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/add_save_ui.py:121 msgid "File &formats to save:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/add_save_ui.py:112 -msgid "Save &template" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/add_save_ui.py:113 -msgid "" -"By adjusting the template below, you can control what folders the files are " -"saved in and what filenames they are given. You can use the / character to " -"indicate sub-folders. Available metadata variables are described below. If a " -"particular book does not have some metadata, the variable will be replaced " -"by the empty string." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/add_save_ui.py:114 -msgid "Available variables:" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/add_save_ui.py:115 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/add_save_ui.py:122 msgid "Replace space with &underscores" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/add_save_ui.py:116 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/add_save_ui.py:123 msgid "Change paths to &lowercase" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/add_save_ui.py:117 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/add_save_ui.py:124 msgid "&Saving books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:468 -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:367 -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:173 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/add_save_ui.py:125 +msgid "" +"Here you can control how calibre will save your books when you click the " +"Send to Device button. This setting can be overriden for individual devices " +"by customizing the device interface plugins in Preferences->Plugins" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/add_save_ui.py:126 +msgid "Sending to &device" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:536 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:444 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:201 msgid "Preferences" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:469 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:537 msgid "" "&Location of ebooks (The ebooks are stored in folders sorted by author and " "metadata is stored in the file metadata.db)" @@ -3721,224 +4594,267 @@ msgstr "" "&Lokacija eknjig (eKnjige so shranjene v datoteke sortirane po avtorjih, " "meta podatki pa v datoteki metadata.db)" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:470 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:538 msgid "Browse for the new database location" msgstr "Prebrskaj za novo lokacijo podatkovne baze" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:472 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:540 msgid "Show notification when &new version is available" msgstr "Opozori me, ko je na voljo &nova verzija" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:473 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:541 +msgid "Download &social metadata (tags/ratings/etc.) by default" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:542 +msgid "&Overwrite author and title by default when fetching metadata" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:543 msgid "Default network &timeout:" msgstr "Privzeti omrežni &timeout:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:474 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:544 msgid "" "Set the default timeout for network fetches (i.e. anytime we go out to the " "internet to get information)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:475 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:545 msgid " seconds" msgstr " sekund" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:476 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:546 msgid "Choose &language (requires restart):" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:477 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:547 msgid "Normal" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:478 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:548 msgid "High" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:479 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:549 msgid "Low" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:480 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:550 msgid "Job &priority:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:481 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:551 msgid "Preferred &output format:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:482 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:552 msgid "Preferred &input format order:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:485 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:555 msgid "Use &Roman numerals for series number" msgstr "Uporabi &rimska števila za številke serij" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:486 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:556 msgid "Enable system &tray icon (needs restart)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:487 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:557 msgid "Show ¬ifications in system tray" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:488 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:558 +msgid "Show &splash screen at startup" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:559 msgid "Show cover &browser in a separate window (needs restart)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:489 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:560 msgid "Search as you type" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:490 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:561 msgid "Automatically send downloaded &news to ebook reader" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:491 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:562 msgid "&Delete news from library when it is automatically sent to reader" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:492 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:563 msgid "&Number of covers to show in browse mode (needs restart):" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:493 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:564 msgid "Toolbar" msgstr "Orodna vrstica" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:494 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:565 msgid "Large" msgstr "Veliko" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:495 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:566 msgid "Medium" msgstr "Srednje" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:496 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:567 msgid "Small" msgstr "Majhno" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:497 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:568 msgid "&Button size in toolbar" msgstr "Velikost gum&ba orodne vrstice" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:498 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:569 msgid "Show &text in toolbar buttons" msgstr "Prikaži &tekst pri gumbih v orodni vrstici" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:499 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:570 msgid "Select visible &columns in library view" msgstr "Izberi vidne stolp&ce v knjižničnem pogledu" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:502 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:572 +msgid "Remove a user-defined column" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:574 +msgid "Add a user-defined column" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:576 +msgid "Edit settings of a user-defined column" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:579 msgid "Use internal &viewer for:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:503 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:580 msgid "Add an email address to which to send books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:504 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:581 msgid "&Add email" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:505 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:582 msgid "Make &default" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:506 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:583 msgid "&Remove email" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:507 -msgid "calibre can send your books to you (or your reader) by email" +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:584 +msgid "" +"calibre can send your books to you (or your reader) by email. Emails will be " +"automatically sent for downloaded news to all email addresses that have Auto-" +"send checked." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:508 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:585 msgid "&Maximum number of waiting worker processes (needs restart):" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:509 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:586 msgid "&Check database integrity" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:510 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:587 msgid "&Install command line tools" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:511 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:588 +msgid "Open calibre &configuration directory" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:589 +msgid "Limit the max. simultaneous jobs to the available CPU &cores" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:590 +msgid "Debug &device detection" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:591 msgid "" "calibre contains a network server that allows you to access your book " "collection using a browser from anywhere in the world. Any changes to the " "settings will only take effect after a server restart." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:512 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:592 msgid "Server &port:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:513 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:593 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/password_ui.py:58 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:178 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:212 #: /home/kovid/work/calibre/src/calibre/gui2/wizard/send_email_ui.py:117 msgid "&Username:" msgstr "&Uporabniško ime:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:514 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:594 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/password_ui.py:59 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:179 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:213 #: /home/kovid/work/calibre/src/calibre/gui2/wizard/send_email_ui.py:119 msgid "&Password:" msgstr "&Geslo:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:515 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:595 msgid "" "If you leave the password blank, anyone will be able to access your book " "collection using the web interface." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:516 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:596 msgid "" "The maximum size (widthxheight) for displayed covers. Larger covers are " "resized. " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:517 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:597 msgid "Max. &cover size:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:518 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:598 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/password_ui.py:60 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:180 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:214 msgid "&Show password" msgstr "&Prikaži geslo" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:519 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:599 msgid "Max. &OPDS items per query:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:520 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:600 +msgid "Max. OPDS &ungrouped items:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:601 msgid "&Start Server" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:521 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:602 msgid "St&op Server" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:522 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:603 msgid "&Test Server" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:523 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:604 msgid "Run server &automatically on startup" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:524 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:605 msgid "View &server logs" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:525 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:606 #: /home/kovid/work/calibre/src/calibre/gui2/wizard/stanza_ui.py:46 msgid "" "<p>Remember to leave calibre running as the server only runs as long as " @@ -3949,91 +4865,301 @@ msgid "" "the IP address of the computer calibre is running on." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:527 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:608 msgid "" "Here you can customize the behavior of Calibre by controlling what plugins " "it uses." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:528 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:609 msgid "Enable/&Disable plugin" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:529 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:610 msgid "&Customize plugin" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:530 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:611 msgid "&Remove plugin" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:531 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:612 msgid "Add new plugin" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:532 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:613 msgid "Plugin &file:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:534 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:615 msgid "&Add" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/confirm_delete_ui.py:48 -msgid "Are you sure?" +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_ct_column_ui.py:125 +msgid "Create Tag-based Column" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_ct_column_ui.py:126 +msgid "Lookup name" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_ct_column_ui.py:127 +msgid "Column heading" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_ct_column_ui.py:128 +msgid "Column type" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_ct_column_ui.py:129 +msgid "Use brackets" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_ct_column_ui.py:130 +msgid "Values can be edited" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_ct_column_ui.py:135 +msgid "Text" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_ct_column_ui.py:136 +msgid "Number" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_ct_column_ui.py:137 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column.py:27 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:50 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:833 +#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:535 +msgid "Date" +msgstr "Datum" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_ct_column_ui.py:138 +msgid "Tag on book" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_ct_column_ui.py:139 +msgid "Explanation text added in create_ct_column.py" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_ct_column_ui.py:140 +msgid "Create and edit tag-based columns" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column.py:18 +msgid "Text, column shown in the tag browser" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column.py:21 +msgid "Comma separated text, like tags, shown in the tag browser" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column.py:24 +msgid "Long text, like comments, not shown in the tag browser" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column.py:29 +msgid "Floating point numbers" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column.py:31 +msgid "Integers" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column.py:33 +msgid "Ratings, shown with stars" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column.py:36 +msgid "Yes/No" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column.py:60 +msgid "No column selected" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column.py:61 +msgid "No column has been selected" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column.py:65 +msgid "Selected column is not a user-defined column" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column.py:96 +msgid "No lookup name was provided" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column.py:98 +msgid "" +"The label must contain only letters and digits, and start with a letter" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column.py:107 +msgid "No column heading was provided" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column.py:113 +msgid "The lookup name %s is already used" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column.py:123 +msgid "The heading %s is already used" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column.py:125 +msgid "" +"The lookup name must be lower case and cannot contain \":\"s or spaces" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column_ui.py:101 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column_ui.py:117 +msgid "Create or edit custom columns" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column_ui.py:102 +msgid "&Lookup name" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column_ui.py:103 +msgid "Column &heading" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column_ui.py:104 +msgid "" +"Used for searching the column. Must contain only digits and lower case " +"letters." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column_ui.py:105 +msgid "" +"Column heading in the library view and category name in the tag browser" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column_ui.py:106 +msgid "Column &type" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column_ui.py:107 +msgid "What kind of information will be kept in the column." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column_ui.py:108 +msgid "" +"<p>Date format. Use 1-4 'd's for day, 1-4 'M's for month, and 2 or 4 'y's " +"for year.</p>\n" +"<p>For example:\n" +"<ul>\n" +"<li> ddd, d MMM yyyy gives Mon, 5 Jan 2010<li>\n" +"<li>dd MMMM yy gives 05 January 10</li>\n" +"</ul> " +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column_ui.py:114 +msgid "Use MMM yyyy for month + year, yyyy for year only" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column_ui.py:115 +msgid "Default: dd MMM yyyy." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column_ui.py:116 +msgid "Format for &dates" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/device_debug.py:21 +msgid "Getting debug information" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/device_debug.py:22 +msgid "Copy to &clipboard" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/device_debug.py:24 +msgid "Debug device detection" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/save_template.py:44 +msgid "Invalid template" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/save_template.py:45 +msgid "The template %s is invalid:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/save_template_ui.py:42 +msgid "Save &template" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/save_template_ui.py:43 +msgid "" +"By adjusting the template below, you can control what folders the files are " +"saved in and what filenames they are given. You can use the / character to " +"indicate sub-folders. Available metadata variables are described below. If a " +"particular book does not have some metadata, the variable will be replaced " +"by the empty string." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/save_template_ui.py:44 +msgid "Available variables:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/social.py:34 +msgid "Downloading social metadata, please wait..." msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/confirm_delete_ui.py:50 msgid "&Show this warning again" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/conversion_error_ui.py:41 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/conversion_error_ui.py:42 msgid "ERROR" msgstr "NAPAKA" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:58 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:63 msgid "Author Sort" msgstr "Razvrščanje Avtorjev" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:60 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:65 msgid "ISBN" msgstr "ISBN" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:146 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:165 msgid "Finding metadata..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:158 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:179 msgid "Could not find metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:159 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:180 msgid "The metadata download seems to have stalled. Try again later." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:168 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:189 msgid "Warning" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:169 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:190 msgid "Could not fetch metadata from:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:173 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:194 msgid "No metadata found" msgstr "Ne najdem meta podatkov" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:174 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:195 msgid "" "No metadata found, try adjusting the title and author or the ISBN key." msgstr "" "Ne najdem meta podatkov, poskusite spremeniti naslov, avtorja ali ISBN ključ." -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata_ui.py:78 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata_ui.py:85 msgid "Fetch metadata" msgstr "Prenesi meta podatke" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata_ui.py:79 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata_ui.py:86 msgid "" "<p>calibre can find metadata for your books from two locations: <b>Google " "Books</b> and <b>isbndb.com</b>. <p>To use isbndb.com you must sign up for a " @@ -4041,24 +5167,32 @@ msgid "" "below." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata_ui.py:80 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata_ui.py:87 msgid "&Access Key:" msgstr "&Dostopni Ključ" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata_ui.py:81 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata_ui.py:88 msgid "Fetch" msgstr "Prenesi" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata_ui.py:82 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata_ui.py:89 msgid "Matches" msgstr "Zadetki" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata_ui.py:83 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata_ui.py:90 msgid "" "Select the book that most closely matches your copy from the list below" msgstr "" "Iz seznama spodaj izberite knjigo, ki se najbolje ujema z vašo kopijo." +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata_ui.py:91 +msgid "Download &social metadata (tags/rating/etc.) for the selected book" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata_ui.py:92 +msgid "Overwrite author and title with author and title of selected book" +msgstr "" + #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/job_view_ui.py:37 msgid "Details of job" msgstr "Podrobnosti o poslu" @@ -4079,25 +5213,24 @@ msgstr "" msgid "Stop &all jobs" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:133 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:24 +msgid "Editing meta information for <b>%d books</b>" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:157 msgid "Edit Meta information" msgstr "Uredi Meta podatke" -#: /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:339 -msgid "Meta information" -msgstr "Meta podatki" - -#: /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:159 msgid "A&utomatically set author sort" msgstr "" -#: /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:160 msgid "Author s&ort: " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:138 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:346 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:161 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:372 msgid "" "Specify how the author(s) of this book should be sorted. For example Charles " "Dickens should be sorted as Dickens, Charles." @@ -4105,189 +5238,276 @@ msgstr "" "Določi kako se sortirajo avtor(ji) te knige. Naprimer Charles Dickens se " "sortira kot Dickens, Charles." -#: /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:349 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:162 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:375 msgid "&Rating:" msgstr "&Ocena:" -#: /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:350 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:351 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:163 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:164 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:376 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:377 msgid "Rating of this book. 0-5 stars" msgstr "Ocena za to knjigo. 0-5 zvezdic" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:142 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:352 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:165 +msgid "No change" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:166 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:378 msgid " stars" msgstr " zvezdic" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:144 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:168 msgid "Add ta&gs: " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:146 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:147 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:356 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:357 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:170 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:171 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:382 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:383 msgid "Open Tag Editor" msgstr "Odpri Urejevalnik Značk" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:148 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:172 msgid "&Remove tags:" msgstr "Odst&rani značke:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:149 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:173 msgid "Comma separated list of tags to remove from the books. " msgstr "Z vejico ločen seznam značk, ki bodo odstranjene iz knjig. " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:153 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:177 msgid "Remove &format:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:119 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:178 +msgid "&Swap title and author" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:179 +msgid "" +"Selected books will be automatically numbered,\n" +"in the order you selected them.\n" +"So if you selected Book A and then Book B,\n" +"Book A will have series number 1 and Book B series number 2." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:183 +msgid "Automatically number books in this series" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:184 +msgid "" +"Remove stored conversion settings for the selected books.\n" +"\n" +"Future conversion of these books will use the default settings." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:187 +msgid "Remove &stored conversion settings for the selected books" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:188 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:412 +msgid "&Basic metadata" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:189 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:413 +msgid "&Custom metadata" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:125 msgid "Not a valid picture" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:166 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:138 +msgid "Choose formats for " +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:139 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1391 +msgid "Books" +msgstr "" + #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:167 +msgid "No permission" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:168 +msgid "You do not have permission to read the following files:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:195 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:196 msgid "No format selected" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:178 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:207 msgid "Could not read metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:179 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:208 msgid "Could not read metadata from %s format" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:224 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:230 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:256 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:262 msgid "Could not read cover" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:225 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:257 msgid "Could not read cover from %s format" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:231 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:263 msgid "The cover in the %s format is invalid" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:268 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:300 msgid "Abort the editing of all remaining books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:459 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:442 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:447 +msgid "This ISBN number is valid" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:450 +msgid "This ISBN number is invalid" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:546 msgid "Downloading cover..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:471 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:476 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:482 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:558 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:563 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:569 msgid "Cannot fetch cover" msgstr "Prenos naslovnice ni možen" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:472 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:483 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:559 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:570 msgid "<b>Could not fetch cover.</b><br/>" msgstr "<b>Prenos naslovnice ni uspel.</b><br/>" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:473 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:560 msgid "The download timed out." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:477 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:564 msgid "Could not find cover for this book. Try specifying the ISBN first." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:489 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:576 msgid "Bad cover" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:490 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:577 msgid "The cover is not a valid picture" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:529 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:610 +msgid "There were errors" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:611 +msgid "There were errors downloading social metadata" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:640 msgid "Cannot fetch metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:530 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:641 msgid "You must specify at least one of ISBN, Title, Authors or Publisher" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:576 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:712 msgid "Permission denied" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:577 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:713 msgid "Could not open %s. Is it being used by another program?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:338 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:364 msgid "Edit Meta Information" msgstr "Uredi Meta Podatke" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:342 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:365 +msgid "Meta information" +msgstr "Meta podatki" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:368 msgid "Swap the author and title" msgstr "Zamenjaj avtorja in naslov" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:345 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:371 msgid "Author S&ort: " msgstr "&Razvrščanje Avtorjev: " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:347 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:373 msgid "" "Automatically create the author sort entry based on the current author entry" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:361 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:387 msgid "Remove unused series (Series that have no books)" msgstr "Odstrani neuporabljene serije (Serije, ki ne vsebujejo knjig)" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:363 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:389 msgid "IS&BN:" msgstr "IS&BN:" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:364 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:390 msgid "Publishe&d:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:367 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:393 +msgid "dd MMM yyyy" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:394 +msgid "&Date:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:395 msgid "&Comments" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:368 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:396 msgid "&Fetch metadata from server" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:369 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:397 msgid "Available Formats" msgstr "Razpoložljivi Formati" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:370 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:398 msgid "Add a new format for this book to the database" msgstr "Dodaj novi format za to knjigo v podatkovno bazo" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:372 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:400 msgid "Remove the selected formats for this book from the database." msgstr "Odstrani izbran format za to knjigo iz podatkovne baze." -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:374 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:402 msgid "Set the cover for the book from the selected format" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:376 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:404 msgid "Update metadata from the metadata in the selected format" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:381 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:409 msgid "Reset cover to default" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:383 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:411 msgid "Download &cover" msgstr "" @@ -4295,160 +5515,197 @@ msgstr "" msgid "Password needed" msgstr "Potrebno je geslo" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/progress.py:53 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/progress.py:52 msgid "Aborting..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:43 -msgid "You" +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/saved_search_editor.py:54 +msgid "" +"The current saved search will be <b>permanently deleted</b>. Are you sure?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:127 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:146 -msgid "Custom" +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/saved_search_editor_ui.py:83 +msgid "Saved Search Editor" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:129 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:138 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:144 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:231 -msgid "Scheduled" +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/saved_search_editor_ui.py:84 +msgid "Saved Search: " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:285 -msgid "%d recipes" +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/saved_search_editor_ui.py:85 +msgid "Select a saved search to edit" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:286 -msgid "Monday" +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/saved_search_editor_ui.py:86 +msgid "Delete this selected saved search" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:286 -msgid "Tuesday" +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/saved_search_editor_ui.py:88 +msgid "Enter a new saved search name." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:286 -msgid "Wednesday" +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/saved_search_editor_ui.py:89 +msgid "Add the new saved search" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:286 -msgid "day" +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/saved_search_editor_ui.py:91 +msgid "Change the contents of the saved search" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:287 -msgid "Friday" +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:119 +msgid "Need username and password" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:287 -msgid "Saturday" +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:120 +msgid "You must provide a username and/or password to use this news source." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:287 -msgid "Sunday" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:287 -msgid "Thursday" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:324 -msgid "Must set account information" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:325 -msgid "This recipe requires a username and password" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:356 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:171 msgid "Created by: " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:394 -msgid "%d days, %d hours and %d minutes ago" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:396 -msgid "Last downloaded" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:398 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:178 msgid "Last downloaded: never" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:424 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:165 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:193 +msgid "%d days, %d hours and %d minutes ago" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:195 +msgid "Last downloaded" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:216 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:192 msgid "Schedule news download" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:427 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:219 msgid "Add a custom news source" msgstr "Dodaj vir novic po meri" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:166 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:222 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:224 +msgid "Download all scheduled new sources" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:321 +msgid "No internet connection" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:322 +msgid "Cannot download news as no internet connection is active" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:193 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:278 msgid "Recipes" msgstr "Recepti" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:167 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:194 msgid "Download all scheduled recipes at once" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:168 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:195 msgid "Download &all scheduled" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:169 -msgid "Schedule for download" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:170 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:196 msgid "blurb" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:171 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:197 msgid "&Schedule for download:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:172 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:174 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:198 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:208 msgid "Every " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:173 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:199 +msgid "day" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:200 +msgid "Monday" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:201 +msgid "Tuesday" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:202 +msgid "Wednesday" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:203 +msgid "Thursday" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:204 +msgid "Friday" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:205 +msgid "Saturday" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:206 +msgid "Sunday" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:207 msgid "at" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:175 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:209 msgid "" "Interval at which to download this recipe. A value of zero means that the " "recipe will be downloaded every hour." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:176 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:184 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:210 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:222 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:263 msgid " days" msgstr " dni" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:177 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:211 msgid "&Account" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:181 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:215 msgid "For the scheduling to work, you must leave calibre running." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:182 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:216 +msgid "&Schedule" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:217 +msgid "Add &title as tag" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:218 +msgid "&Extra tags:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:219 +msgid "&Advanced" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:220 msgid "&Download now" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:183 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:221 msgid "" "Delete downloaded news older than the specified number of days. Set to zero " "to disable." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:185 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:223 msgid "Delete downloaded news older than " msgstr "" @@ -4472,45 +5729,138 @@ msgstr "" msgid "Negate" msgstr "Negiraj" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_ui.py:88 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_ui.py:113 msgid "Advanced Search" msgstr "Napredno iskanje" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_ui.py:89 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_ui.py:114 msgid "Find entries that have..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_ui.py:90 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_ui.py:115 msgid "&All these words:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_ui.py:91 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_ui.py:116 msgid "This exact &phrase:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_ui.py:92 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_ui.py:117 msgid "&One or more of these words:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_ui.py:93 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_ui.py:118 msgid "But dont show entries that have..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_ui.py:94 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_ui.py:119 msgid "Any of these &unwanted words:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_ui.py:95 -msgid "" -"See the <a href=\"http://calibre.kovidgoyal.net/user_manual/gui.html#the-" -"search-interface\">User Manual</a> for more help" +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_ui.py:120 +msgid "What kind of match to use:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_editor.py:62 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_ui.py:121 +msgid "Contains: the word or phrase matches anywhere in the metadata" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_ui.py:122 +msgid "Equals: the word or phrase must match an entire metadata field" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_ui.py:123 +msgid "" +"Regular expression: the expression must match anywhere in the metadata" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_ui.py:124 +msgid " " +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_ui.py:125 +msgid "" +"See the <a href=\"http://calibre-ebook.com/user_manual/gui.html#the-search-" +"interface\">User Manual</a> for more help" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/select_formats.py:45 +msgid "Choose formats" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories.py:46 +#: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:72 +msgid "Authors" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories.py:46 +#: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:101 +msgid "Publishers" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories.py:110 +msgid " (not on any book)" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories.py:162 +msgid "" +"The current tag category will be <b>permanently deleted</b>. Are you sure?" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories_ui.py:153 +msgid "User Categories Editor" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories_ui.py:154 +msgid "A&vailable items" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories_ui.py:155 +msgid "Apply tags to current tag category" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories_ui.py:157 +msgid "A&pplied items" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories_ui.py:158 +msgid "Unapply (remove) tag from current tag category" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories_ui.py:160 +msgid "Category name: " +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories_ui.py:161 +msgid "Select a category to edit" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories_ui.py:162 +msgid "Delete this selected tag category" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories_ui.py:164 +msgid "Enter a new category name. Select the kind before adding it." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories_ui.py:165 +msgid "Add the new category" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories_ui.py:167 +msgid "Category filter: " +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories_ui.py:168 +msgid "Select the content kind of the new category" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_editor.py:68 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor.py:93 msgid "Are your sure?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_editor.py:63 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_editor.py:69 msgid "" "The following tags are used by one or more books. Are you certain you want " "to delete them?" @@ -4560,99 +5910,159 @@ msgstr "" msgid "Add tag to available tags and apply it to current book" msgstr "Dodaj značko k trenutni knjigi in značkam, ki so na voljo" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/test_email_ui.py:50 -msgid "Test email settings" +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor.py:60 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:410 +msgid "Item is blank" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor.py:61 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:411 +msgid "An item cannot be set to nothing. Delete it instead." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor.py:66 +msgid "Item already used" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor.py:67 +msgid "The item %s is already used." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor.py:79 +msgid "No item selected" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor.py:80 +msgid "You must select one item from the list of Available items." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor.py:89 +msgid "No items selected" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor.py:90 +msgid "You must select at least one items from the list." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor.py:94 +msgid "Are you certain you want to delete the following items?" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor_ui.py:71 +msgid "Category Editor" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor_ui.py:72 +msgid "Items in use" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor_ui.py:73 +msgid "" +"Delete item from database. This will unapply the item from all books and " +"then remove it from the database." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor_ui.py:75 +msgid "Rename the item in every book where it is used." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor_ui.py:77 +msgid "Ctrl+S" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/test_email_ui.py:51 -msgid "Send test mail from %s to:" +msgid "Test email settings" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/test_email_ui.py:52 -#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:105 +msgid "Send test mail from %s to:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/test_email_ui.py:53 +#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:115 msgid "&Test" msgstr "&Test" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:62 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:127 msgid "No recipe selected" msgstr "Noben recept ni izbran." -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:68 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:132 msgid "The attached file: %s is a recipe to download %s." msgstr "Pripeta datoteka: %s je recept za prenos %s." -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:69 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:133 msgid "Recipe for " msgstr "Recept za " -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:85 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:96 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:150 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:161 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:255 msgid "Switch to Advanced mode" msgstr "Preklopi v Napredni način" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:91 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:99 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:156 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:164 msgid "Switch to Basic mode" msgstr "Preklopi v Osnovni način" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:109 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:174 msgid "Feed must have a title" msgstr "Feed mora imeti naslov" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:110 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:175 msgid "The feed must have a title" msgstr "Feed mora imeti naslov" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:114 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:179 msgid "Feed must have a URL" msgstr "Feed mora imeti URL" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:115 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:180 msgid "The feed %s must have a URL" msgstr "Feed %s mora imeti URL" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:120 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:185 msgid "Already exists" msgstr "Že obstaja" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:121 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:186 msgid "This feed has already been added to the recipe" msgstr "Ta feed je že bil dodan v recept" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:162 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:171 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:229 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:227 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:236 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:286 msgid "Invalid input" msgstr "Nepravilen vnos" -#: /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:230 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:228 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:237 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:287 msgid "<p>Could not create recipe. Error:<br>%s" msgstr "<p>Kreiranje recepta ni bilo mogoče. Napaka:<br>%s" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:178 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:211 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:235 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:241 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:263 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:290 msgid "Replace recipe?" msgstr "Zamenjam recept?" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:179 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:212 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:236 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:242 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:264 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:291 msgid "A custom recipe named %s already exists. Do you want to replace it?" msgstr "Vir novic po meri z imenom %s že obstaja. Ga želite zamenjati?" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:202 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:257 msgid "Pick recipe" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:202 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:257 msgid "Pick the recipe to customize" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:222 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:277 msgid "Choose a recipe file" msgstr "Izberite recept" @@ -4756,22 +6166,22 @@ msgstr "" msgid "Recipe source code (python)" msgstr "Izvorna koda recepta (python)" -#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:97 +#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:107 msgid "" "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" " "\"http://www.w3.org/TR/REC-html40/strict.dtd\">\n" "<html><head><meta name=\"qrichtext\" content=\"1\" /><style " "type=\"text/css\">\n" "p, li { white-space: pre-wrap; }\n" -"</style></head><body style=\" font-family:'DejaVu Sans'; font-size:10pt; " -"font-weight:400; font-style:normal;\">\n" +"</style></head><body style=\" font-family:'Candara'; font-size:10pt; font-" +"weight:400; font-style:normal;\">\n" "<p style=\" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-" "right:0px; -qt-block-indent:0; text-indent:0px;\">Set a regular expression " "pattern to use when trying to guess ebook metadata from filenames. </p>\n" "<p style=\" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-" "right:0px; -qt-block-indent:0; text-indent:0px;\">A <a " "href=\"http://docs.python.org/lib/re-syntax.html\"><span style=\" text-" -"decoration: underline; color:#0000ee;\">reference</span></a> on the syntax " +"decoration: underline; color:#0000ff;\">reference</span></a> on the syntax " "of regular expressions is available.</p>\n" "<p style=\" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-" "right:0px; -qt-block-indent:0; text-indent:0px;\">Use the <span style=\" " @@ -4780,155 +6190,237 @@ msgid "" "metadata entries are documented in tooltips.</p></body></html>" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:104 +#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:114 msgid "Regular &expression" msgstr "R&egularni izraz" -#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:106 +#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:116 msgid "File &name:" msgstr "&Ime datoteke:" -#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:107 -msgid "Test" -msgstr "Test" - -#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:108 +#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:118 msgid "Title:" msgstr "Naslov:" -#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:109 +#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:119 msgid "Regular expression (?P<title>)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:110 -#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:113 -#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:116 -#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:119 -#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:122 -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:79 -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:83 -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:88 -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:93 -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:95 +#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:120 +#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:123 +#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:126 +#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:129 +#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:132 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:78 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:82 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:87 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:92 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:94 msgid "No match" msgstr "Brez zadetka" -#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:111 +#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:121 msgid "Authors:" msgstr "Avtorji:" -#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:112 +#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:122 msgid "Regular expression (?P<author>)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:114 +#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:124 msgid "Series:" msgstr "Serije:" -#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:115 +#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:125 msgid "Regular expression (?P<series>)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:117 +#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:127 msgid "Series index:" msgstr "Indeks serij:" -#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:118 +#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:128 msgid "Regular expression (?P<series_index>)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:120 +#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:130 msgid "ISBN:" msgstr "ISBN:" -#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:121 +#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:131 msgid "Regular expression (?P<isbn>)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:52 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:54 msgid "Job" msgstr "Posel" -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:53 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:55 msgid "Status" msgstr "Status" -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:54 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:56 msgid "Progress" msgstr "Napredek" -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:55 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:57 msgid "Running time" msgstr "Čas izvajanja" -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:71 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:69 +msgid "There are %d running jobs:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:73 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:80 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:95 msgid "Unknown job" msgstr "Neznan posel" -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:189 -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:192 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:76 +msgid "There are %d waiting jobs:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:212 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:215 msgid "Cannot kill job" msgstr "Prekinitev posla ni mogoča" -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:190 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:213 msgid "Cannot kill jobs that communicate with the device" msgstr "Ne morem prekiniti poslov, ki komunicirajo z napravo" -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:193 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:216 msgid "Job has already run" msgstr "Posel je že bil pognan" -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:221 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:244 msgid "Unavailable" msgstr "Ni na voljo" -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:232 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:280 msgid " - Jobs" msgstr " - Posli" -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:160 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:1068 +#: /home/kovid/work/calibre/src/calibre/gui2/library/delegates.py:284 +msgid "N" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/library/delegates.py:284 +msgid "Y" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:47 +msgid "On Device" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:49 msgid "Size (MB)" msgstr "Velikost (MB)" -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:161 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:1069 -msgid "Date" -msgstr "Datum" - -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:163 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:52 msgid "Rating" msgstr "Ocena" -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:337 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:343 -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:348 -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:376 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:285 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:291 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:296 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1003 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1007 +#: /home/kovid/work/calibre/src/calibre/gui2/shortcuts.py:47 +#: /home/kovid/work/calibre/src/calibre/gui2/shortcuts_ui.py:73 +#: /home/kovid/work/calibre/src/calibre/gui2/shortcuts_ui.py:78 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:414 msgid "None" msgstr "Nič" -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:354 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:302 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1013 msgid "Book <font face=\"serif\">%s</font> of %s." msgstr "Knjiga <font face=\"serif\">%s</font> od %s." -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:832 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:639 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1071 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:337 +msgid "The lookup/search name is \"{0}\"" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:830 +msgid "In Library" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:834 +msgid "Size" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:835 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:997 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:104 +msgid "Collections" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:993 +msgid "Format" +msgstr "Format" + +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1053 +msgid "Marked for deletion" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1056 +msgid "Double click to <b>edit</b> me<br><br>" +msgstr "Dvoklikni me da me <b>urediš</b><br><br>" + +#: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:101 +msgid "Hide column %s" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:106 +msgid "Sort on %s" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:107 +msgid "Ascending" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:110 +msgid "Descending" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:122 +msgid "Change text alignment for %s" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:124 +msgid "Left" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:124 +msgid "Right" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:125 +msgid "Center" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:144 +msgid "Show column" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:156 +msgid "Restore default layout" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:475 msgid "Not allowed" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:833 +#: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:476 msgid "" "Dropping onto a device is not supported. First add the book to the calibre " "library." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:1004 -msgid "Format" -msgstr "Format" - -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:1058 -msgid "Double click to <b>edit</b> me<br><br>" -msgstr "Dvoklikni me da me <b>urediš</b><br><br>" - #: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/config_ui.py:47 msgid "Configure Viewer" msgstr "Nastavi Pregledovalnik" @@ -4945,16 +6437,16 @@ msgstr "Veži z vezajem" msgid "<b>Changes will only take effect after a restart.</b>" msgstr "<b>Spremembe se upoštevajo po ponovnem zagonu.</b>" -#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main.py:64 +#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main.py:70 msgid " - LRF Viewer" msgstr " - LRF Pregledovalnik" -#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main.py:157 +#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main.py:160 msgid "<b>No matches</b> for the search phrase <i>%s</i> were found." msgstr "<b>Ni zadetkov</b> za iskalni niz <i>%s</i>." -#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main.py:157 -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:421 +#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main.py:160 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:440 msgid "No matches found" msgstr "Nič zadetkov najdenih" @@ -4971,20 +6463,22 @@ msgid "LRF Viewer toolbar" msgstr "Orodna vrstica LRF Pregledovalnika" #: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main_ui.py:131 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:476 msgid "Next Page" msgstr "Naslednja Stran" #: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main_ui.py:132 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:477 msgid "Previous Page" msgstr "Prejšnja Stran" #: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main_ui.py:133 -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:162 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:188 msgid "Back" msgstr "Nazaj" #: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main_ui.py:134 -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:163 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:189 msgid "Forward" msgstr "Naprej" @@ -4993,7 +6487,7 @@ msgid "Next match" msgstr "Naslednji zadetek" #: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main_ui.py:136 -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:170 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:196 msgid "Open ebook" msgstr "Odpri eknjigo" @@ -5001,157 +6495,702 @@ msgstr "Odpri eknjigo" msgid "Configure" msgstr "Nastavi" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:57 -msgid "Save single format to disk..." +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:30 +msgid "Use the library located at the specified path." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:124 -msgid "Search (For Advanced Search click the button to the left)" -msgstr "Najdi (Za Napredno Iskanje pritisnite gumb na levi)" +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:32 +msgid "Start minimized to system tray." +msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:141 -msgid "Error communicating with device" -msgstr "Napaka pri komuniciranju z napravo" +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:34 +msgid "Log debugging information to console" +msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:155 -msgid "&Restore" +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:36 +msgid "Do not check for updates" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:67 +msgid "Choose a location for your calibre e-book library" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:76 +msgid "Failed to create library" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:77 +msgid "Failed to create calibre library at: %r. Aborting." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:132 +msgid "Initializing user interface..." msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/main.py:157 -msgid "&Donate to support calibre" +msgid "Repairing failed" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:158 +msgid "The database repair failed. Starting with a new empty library." msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/main.py:162 -msgid "&Restart" +#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:595 +msgid "Calibre Library" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:201 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:175 +msgid "Choose a location for your new calibre e-book library" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:185 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:218 +msgid "Bad database location" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:186 +msgid "Bad database location %r. calibre will now quit." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:199 +msgid "Corrupted database" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:200 msgid "" -"<p>For help visit <a " -"href=\"http://%s.kovidgoyal.net/user_manual\">%s.kovidgoyal.net</a><br>" +"Your calibre database appears to be corrupted. Do you want calibre to try " +"and repair it automatically? If you say No, a new empty calibre library will " +"be created." msgstr "" -"<p>Za pomoč obiščite <a " -"href=\"http://%s.kovidgoyal.net/user_manual\">%s.kovidgoyal.net</a><br>" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:204 -msgid "<b>%s</b>: %s by <b>Kovid Goyal %%(version)s</b><br>%%(device)s</p>" -msgstr "<b>%s</b>: %s by <b>Kovid Goyal %%(version)s</b><br>%%(device)s</p>" +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:206 +msgid "" +"Repairing database. This can take a very long time for a large collection" +msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:225 -msgid "Edit metadata individually" -msgstr "Posamično urejanje meta podatkov" - -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:227 -msgid "Edit metadata in bulk" -msgstr "Paketno urejanje meta podatkov" - -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:229 -msgid "Download metadata and covers" +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:219 +msgid "" +"Bad database location %r. Will start with a new, empty calibre library" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/main.py:230 +msgid "Starting %s: Loading books..." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:275 +msgid "If you are sure it is not running" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:277 +msgid "Cannot Start " +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:278 +msgid "%s is already running." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:281 +msgid "may be running in the system tray, in the" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:283 +msgid "upper right region of the screen." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:285 +msgid "lower right region of the screen." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:288 +msgid "try rebooting your computer." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:290 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:302 +msgid "try deleting the file" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:395 +msgid "calibre" +msgstr "calibre" + +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:397 +msgid "&Restrict to:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:398 +msgid "" +"Books display will be restricted to those matching the selected saved search" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:399 +msgid "set in ui.py" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:400 +msgid "Advanced search" +msgstr "Napredno iskanje" + +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:402 +msgid "Alt+S" +msgstr "Alt+S" + +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:403 +msgid "&Search:" +msgstr "I&skanje:" + +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:404 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:405 +msgid "" +"<p>Search the list of books by title, author, publisher, tags, comments, " +"etc.<br><br>Words separated by spaces are ANDed" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:406 +msgid "Reset Quick Search" +msgstr "Resetiraj Hitro Iskanje" + +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:408 +msgid "Choose saved search or enter name for new saved search" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:409 +msgid "Copy current search text (instead of search name)" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:411 +msgid "Save current search under the name shown in the box" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:413 +msgid "Delete current saved search" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:415 +msgid "Sort by &popularity" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:416 +msgid "Match any" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:417 +msgid "Match all" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:418 +msgid "Create, edit, and delete user categories" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:419 +msgid "Manage &user categories" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:420 +msgid "Add books" +msgstr "Dodaj knjige" + +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:421 +msgid "A" +msgstr "A" + +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:422 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:423 +msgid "Remove books" +msgstr "Odstrani knjige" + +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:424 +msgid "Del" +msgstr "Del" + +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:425 +msgid "Edit meta information" +msgstr "Uredi meta podatke" + +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:426 +msgid "E" +msgstr "E" + +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:427 +msgid "Merge book records" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:428 +msgid "M" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:429 +msgid "Send to device" +msgstr "Pošlji napravi" + +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:430 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:355 +msgid "Save to disk" +msgstr "Shrani na disk" + +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:431 +msgid "S" +msgstr "S" + +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:432 +msgid "Fetch news" +msgstr "Prenesi novice" + +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:433 +msgid "F" +msgstr "F" + +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:434 +msgid "Convert E-books" +msgstr "Pretvori eKnjige" + +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:435 +msgid "C" +msgstr "C" + +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:436 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:369 +msgid "View" +msgstr "Poglej" + +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:437 +msgid "V" +msgstr "V" + +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:438 +msgid "Open containing folder" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:439 +msgid "Show book details" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:440 +msgid "Books by same author" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:441 +msgid "Books in this series" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:442 +msgid "Books by this publisher" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:443 +msgid "Books with the same tags" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:445 +msgid "Configure calibre" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:446 +msgid "Ctrl+P" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main_window.py:20 +msgid "" +"Redirect console output to a dialog window (both stdout and stderr). Useful " +"on windows where GUI apps do not have a output streams." +msgstr "" +"Preusmeri konzolne izhodne podatke v okno (stdout in stderr). Koristno za " +"windows ker v njem GUI aplikacije nimajo izhodnih nizov." + +#: /home/kovid/work/calibre/src/calibre/gui2/main_window.py:61 +msgid "&Preferences" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main_window.py:62 +msgid "&Quit" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main_window.py:90 +msgid "ERROR: Unhandled exception" +msgstr "NAPAKA: Neobdelana izjema" + +#: /home/kovid/work/calibre/src/calibre/gui2/metadata.py:89 +msgid "Book has neither title nor ISBN" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/metadata.py:115 +msgid "No matches found for this book" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/search_box.py:83 +#: /home/kovid/work/calibre/src/calibre/gui2/search_box.py:243 +msgid "Search" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/search_box.py:297 +msgid "The selected search will be <b>permanently deleted</b>. Are you sure?" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/shortcuts.py:58 +msgid "Press a key..." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/shortcuts.py:79 +msgid "Already assigned" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/shortcuts.py:81 +msgid "already assigned to" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/shortcuts.py:131 +#: /home/kovid/work/calibre/src/calibre/gui2/shortcuts.py:223 +msgid " or " +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/shortcuts.py:133 +#: /home/kovid/work/calibre/src/calibre/gui2/shortcuts_ui.py:69 +msgid "&Default" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/shortcuts.py:135 +msgid "Customize shortcuts for" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/shortcuts.py:223 +msgid "Keys" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/shortcuts.py:225 +msgid "Double click to change" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/shortcuts_ui.py:68 +msgid "Frame" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/shortcuts_ui.py:70 +msgid "&Custom" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/shortcuts_ui.py:71 +msgid "&Shortcut:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/shortcuts_ui.py:72 +#: /home/kovid/work/calibre/src/calibre/gui2/shortcuts_ui.py:77 +msgid "Click to change" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/shortcuts_ui.py:74 +#: /home/kovid/work/calibre/src/calibre/gui2/shortcuts_ui.py:79 +msgid "Clear" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/shortcuts_ui.py:76 +msgid "&Alternate shortcut:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/sidebar.py:24 +msgid "Jobs:" +msgstr "Posli:" + +#: /home/kovid/work/calibre/src/calibre/gui2/sidebar.py:32 +msgid "Click to see list of active jobs." +msgstr "Klikni za seznam aktivnih poslov." + +#: /home/kovid/work/calibre/src/calibre/gui2/sidebar.py:83 +msgid "Hide Book Details" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/sidebar.py:83 +msgid "Show Book Details" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/sidebar.py:84 +msgid "Hide Tag Browser" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/sidebar.py:84 +msgid "Show Tag Browser" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/sidebar.py:85 +msgid "Hide Cover Browser" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/sidebar.py:85 +msgid "Show Cover Browser" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/sidebar.py:95 +msgid "Side bar" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/sidebar.py:135 +msgid "Cover browser could not be loaded: " +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:142 +msgid "Rename" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:147 +msgid "Hide category %s" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:150 +msgid "Show category" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:154 +msgid "Show all categories" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:161 +msgid "Manage " +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:165 +msgid "Manage Saved Searches" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:172 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:176 +msgid "Manage User Categories" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:329 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:238 +msgid "Searches" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:420 +msgid "The name %s is already used." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/tools.py:63 +#: /home/kovid/work/calibre/src/calibre/gui2/tools.py:182 +msgid "Convert book %d of %d (%s)" +msgstr "Pretvori knjigo %d od %d (%s)" + +#: /home/kovid/work/calibre/src/calibre/gui2/tools.py:90 +#: /home/kovid/work/calibre/src/calibre/gui2/tools.py:202 +msgid "Could not convert some books" +msgstr "Pretvorba nekaterih knjig ni bila možna" + +#: /home/kovid/work/calibre/src/calibre/gui2/tools.py:91 +#: /home/kovid/work/calibre/src/calibre/gui2/tools.py:203 +msgid "" +"Could not convert %d of %d books, because no suitable source format was " +"found." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/tools.py:120 +msgid "Queueing books for bulk conversion" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/tools.py:181 +msgid "Queueing " +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/tools.py:237 +msgid "Fetch news from " +msgstr "Prenesi novice iz " + +#: /home/kovid/work/calibre/src/calibre/gui2/tools.py:299 +msgid "Convert existing" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/tools.py:300 +msgid "" +"The following books have already been converted to %s format. Do you wish to " +"reconvert them?" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:70 +msgid "Save single format to disk..." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:162 +msgid "Search (For Advanced Search click the button to the left)" +msgstr "Najdi (Za Napredno Iskanje pritisnite gumb na levi)" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:168 +msgid "Saved Searches" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:191 +msgid "Error communicating with device" +msgstr "Napaka pri komuniciranju z napravo" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:208 +msgid "&Restore" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:210 +msgid "&Donate to support calibre" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:213 +msgid "&Eject connected device" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:218 +msgid "&Restart" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:258 +msgid "<p>For help see the: <a href=\"%s\">User Manual</a><br>" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:264 +msgid "<b>%s</b>: %s by <b>Kovid Goyal %%(version)s</b><br>%%(device)s</p>" +msgstr "<b>%s</b>: %s by <b>Kovid Goyal %%(version)s</b><br>%%(device)s</p>" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:281 +msgid "Edit metadata individually" +msgstr "Posamično urejanje meta podatkov" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:283 +msgid "Edit metadata in bulk" +msgstr "Paketno urejanje meta podatkov" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:285 +msgid "Download metadata and covers" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:286 msgid "Download only metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:231 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:287 msgid "Download only covers" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:234 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:288 +msgid "Download only social metadata" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:292 +msgid "Merge into first selected book - delete others" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:294 +msgid "Merge into first selected book - keep others" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:301 msgid "Add books from a single directory" msgstr "Dodaj knjige iz enega direktorija" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:235 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:302 msgid "" "Add books from directories, including sub-directories (One book per " "directory, assumes every ebook file is the same book in a different format)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:238 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:305 msgid "" "Add books from directories, including sub directories (Multiple books per " "directory, assumes every ebook file is a different book)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:241 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:308 msgid "Add Empty book. (Book entry with no formats)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:278 -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:353 -msgid "Save to disk" -msgstr "Shrani na disk" - -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:279 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:356 msgid "Save to disk in a single directory" msgstr "Shrani na disk v en direktorij" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:280 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1423 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:357 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2299 msgid "Save only %s format to disk" msgstr "Shrani samo %s format na disk" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:288 -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:359 -msgid "View" -msgstr "Poglej" +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:360 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2302 +msgid "Save only %s format to disk in a single directory" +msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:289 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:370 msgid "View specific format" msgstr "Poglej specifičen format" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:315 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:375 +msgid "Remove selected books" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:377 +msgid "Remove files of a specific format from selected books.." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:379 +msgid "Remove all formats from selected books, except..." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:381 +msgid "Remove covers from selected books" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:420 msgid "Convert individually" msgstr "Posamična pretvorba" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:316 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:421 msgid "Bulk convert" msgstr "Paketna pretvorba" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:331 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:424 +msgid "Create catalog of books in your calibre library" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:440 msgid "Run welcome wizard" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:365 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:480 msgid "Similar books..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:424 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:425 -msgid "Bad database location" +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:564 +msgid "Calibre Quick Start Guide" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:427 -#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:477 -msgid "Calibre Library" +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:689 +msgid "Select folder to open as device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:437 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1566 -msgid "Choose a location for your ebook library." -msgstr "Izberite lokacijo za vašo eKnjižnico." - -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:616 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:800 msgid "Browse by covers" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:723 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:870 +msgid "({0} of {1})" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:875 +msgid "(all books)" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:877 +msgid "({0} of all)" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1000 msgid "Device: " msgstr "Naprava: " -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:725 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1002 msgid " detected." msgstr " zaznan." -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:747 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1034 msgid "Connected " msgstr "Povezan " -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:759 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1046 msgid "Device database corrupted" msgstr "Podatkovna baza poškodovana" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:760 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1047 msgid "" "\n" " <p>The database of books on the reader is corrupted. Try the " @@ -5181,166 +7220,310 @@ msgstr "" " </ol>\n" " " -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:836 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:879 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1110 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1287 +msgid "Use library only" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1111 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1288 +msgid "User annotations generated from main library only" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1118 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1604 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1661 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1699 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1720 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1850 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1915 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2033 +msgid "No books selected" +msgstr "Nobena od knjig ni izbrana." + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1119 +msgid "No books selected to fetch annotations from" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1144 +msgid "Merging user annotations into database" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1172 +msgid "%s<br />Last Page Read: %d (%d%%)" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1178 +msgid "%s<br />Last Page Read: Location %d (%d%%)" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1197 +msgid "<b>Location %d • %s</b><br />%s<br />" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1206 +msgid "<b>Page %d • %s</b><br />" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1211 +msgid "<b>Location %d • %s</b><br />" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1331 +msgid "How many empty books?" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1332 +msgid "How many empty books should be added?" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1380 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1431 msgid "Uploading books to device." msgstr "Prenašanje knjig na napravo." -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:844 -msgid "Books" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:845 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1392 msgid "EPUB Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:846 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1393 msgid "LRF Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:847 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1394 msgid "HTML Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:848 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1395 msgid "LIT Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:849 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1396 msgid "MOBI Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:850 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1397 +msgid "Topaz books" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1398 msgid "Text books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:851 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1399 msgid "PDF Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:852 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1400 msgid "Comics" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:853 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1401 msgid "Archives" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:888 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1405 +msgid "Supported books" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1440 +msgid "Merged some books" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1441 +msgid "" +"Some duplicates were found and merged into the following existing books:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1450 msgid "Failed to read metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:889 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1451 msgid "Failed to read metadata from the following" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:908 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1471 +msgid "Cannot delete" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1474 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2177 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2202 +msgid "No book selected" +msgstr "Nobena od knjig ni izbrana" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1484 +msgid "Choose formats to be deleted" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1502 +msgid "Choose formats <b>not</b> to be deleted" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1540 msgid "" "The selected books will be <b>permanently deleted</b> and the files removed " "from your computer. Are you sure?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:935 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1557 +msgid "" +"The selected books will be <b>permanently deleted</b> from your device. Are " +"you sure?" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1572 msgid "Deleting books from device." msgstr "Izbriši knjige iz naprave." -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:966 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1603 msgid "Cannot download metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:967 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1015 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1048 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1073 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1185 -msgid "No books selected" -msgstr "Nobena od knjig ni izbrana." +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1619 +msgid "social metadata" +msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:976 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1621 msgid "covers" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:976 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1621 msgid "metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:978 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1623 msgid "Downloading %s for %d book(s)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:999 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1645 msgid "Failed to download some metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1000 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1646 msgid "Failed to download metadata for the following:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1003 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1649 msgid "Failed to download metadata:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1014 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1047 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1660 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1698 msgid "Cannot edit metadata" msgstr "Spreminjanje meta podatkov ni mogoče" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1072 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1719 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1722 +msgid "Cannot merge books" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1723 +msgid "At least two books must be selected for merging" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1727 +msgid "" +"All book formats and metadata from the selected books will be added to the " +"<b>first selected book.</b><br><br> The second and subsequently selected " +"books will not be deleted or changed.<br><br>Please confirm you want to " +"proceed." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1738 +msgid "" +"All book formats and metadata from the selected books will be merged into " +"the <b>first selected book</b>.<br><br>After merger the second and " +"subsequently selected books will be <b>deleted</b>. <br><br>All book formats " +"of the first selected book will be kept and any duplicate formats in the " +"second and subsequently selected books will be permanently <b>deleted</b> " +"from your computer.<br><br> Are you <b>sure</b> you want to proceed?" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1750 +msgid "" +"You are about to merge more than 5 books. Are you <b>sure</b> you want to " +"proceed?" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1849 msgid "Cannot save to disk" msgstr "Ne morem shraniti na disk" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1075 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1852 msgid "Choose destination directory" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1102 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1885 msgid "Error while saving" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1103 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1886 msgid "There was an error while saving." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1110 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1111 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1893 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1894 msgid "Could not save some books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1112 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1895 msgid "Click the show details button to see which ones." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1131 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1916 +msgid "No books selected to generate catalog for" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1933 +msgid "Generating %s catalog..." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1939 +msgid "" +"No books to catalog\n" +"Check exclude tags" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1949 +msgid "Catalog generated." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1952 +msgid "Export Catalog Directory" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1953 +msgid "Select destination for %s.%s" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1967 msgid "Fetching news from " msgstr "Prenašam novice iz " -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1144 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1981 msgid " fetched." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1184 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2032 msgid "Cannot convert" msgstr "Pretvorba ni možna" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1315 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1334 -msgid "No book selected" -msgstr "Nobena od knjig ni izbrana" +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2061 +msgid "Starting conversion of %d book(s)" +msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1315 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1365 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2177 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2235 msgid "Cannot view" msgstr "Pogled ni možen" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1333 -msgid "Cannot open folder" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1350 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2191 msgid "Multiple Books Selected" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1351 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2192 msgid "" "You are attempting to open %d books. Opening too many books at once can be " "slow and have a negative effect on the responsiveness of your computer. Once " @@ -5348,31 +7531,44 @@ msgid "" "continue?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1366 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2201 +msgid "Cannot open folder" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2236 msgid "%s has no available formats." msgstr "%s nima razpoložljivih formatov." -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1407 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2277 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2282 msgid "Cannot configure" msgstr "Nemogoča konfiguracija" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1408 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2278 msgid "Cannot configure while there are running jobs." msgstr "Spreminjanje konfiguracije med poganjanjem poslov ni mogoče." -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1451 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2283 +msgid "Cannot configure before calibre is restarted." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2334 msgid "No detailed info available" msgstr "Podrobne informacije niso na voljo" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1452 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2335 msgid "No detailed information is available for books on the device." msgstr "Podrobne informacije za knjige na napravi niso na voljo." -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1504 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2385 +msgid "Failed" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2391 msgid "Error talking to device" msgstr "Napaka pri pogovoru z napravo" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1505 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2392 msgid "" "There was a temporary error talking to the device. Please unplug and " "reconnect the device and or reboot." @@ -5380,57 +7576,53 @@ msgstr "" "Prišlo je do napake pri komuniciranju z napravo. Prosim ponovno zaženite ali " "izklopite in ponovno vklopite napravo." -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1528 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1546 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2415 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2443 msgid "Conversion Error" msgstr "Pretvorna Napaka" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1529 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2416 msgid "" "<p>Could not convert: %s<p>It is a <a href=\"%s\">DRM</a>ed book. You must " "first remove the DRM using third party tools." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1547 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2429 +msgid "Recipe Disabled" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2444 msgid "<b>Failed</b>" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1575 -msgid "Invalid library location" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1576 -msgid "Could not access %s. Using %s as the library." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1623 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2491 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:1647 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2516 msgid "There are active jobs. Are you sure you want to quit?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1650 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2519 msgid "" " is communicating with the device!<br>\n" " Quitting may cause corruption on the device.<br>\n" " Are you sure you want to quit?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1654 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2523 msgid "WARNING: Active jobs" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1705 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2575 msgid "" "will keep running in the system tray. To close it, choose <b>Quit</b> in the " "context menu of the system tray." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1724 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2594 msgid "" "<span style=\"color:red; font-weight:bold\">Latest version: <a " "href=\"%s\">%s</a></span>" @@ -5438,307 +7630,14 @@ msgstr "" "<span style=\"color:red; font-weight:bold\">Zadnja verzija: <a " "href=\"%s\">%s</a></span>" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1732 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2602 msgid "Update available" msgstr "Navoljo je posodobitev" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1733 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2603 msgid "" -"%s has been updated to version %s. See the <a " -"href=\"http://calibre.kovidgoyal.net/wiki/Changelog\">new features</a>. " -"Visit the download page?" -msgstr "" -"%s je bil nadgrajen na verzijo %s. Poglejte <a " -"href=\"http://calibre.kovidgoyal.net/wiki/Changelog\">seznam " -"posodobitev</a>. Prikažem domačo stran?" - -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1751 -msgid "Use the library located at the specified path." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1753 -msgid "Start minimized to system tray." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1755 -msgid "Log debugging information to console" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1757 -msgid "Do not check for updates" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1805 -msgid "If you are sure it is not running" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1807 -msgid "Cannot Start " -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1808 -msgid "%s is already running." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1811 -msgid "may be running in the system tray, in the" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1813 -msgid "upper right region of the screen." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1815 -msgid "lower right region of the screen." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1818 -msgid "try rebooting your computer." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1820 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1832 -msgid "try deleting the file" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:332 -msgid "calibre" -msgstr "calibre" - -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:334 -msgid "Advanced search" -msgstr "Napredno iskanje" - -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:336 -msgid "Alt+S" -msgstr "Alt+S" - -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:337 -msgid "&Search:" -msgstr "I&skanje:" - -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:338 -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:339 -msgid "" -"<p>Search the list of books by title, author, publisher, tags, comments, " -"etc.<br><br>Words separated by spaces are ANDed" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:340 -msgid "Reset Quick Search" -msgstr "Resetiraj Hitro Iskanje" - -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:342 -msgid "Match any" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:343 -msgid "Match all" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:344 -msgid "Sort by &popularity" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:345 -msgid "Add books" -msgstr "Dodaj knjige" - -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:346 -msgid "A" -msgstr "A" - -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:347 -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:348 -msgid "Remove books" -msgstr "Odstrani knjige" - -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:349 -msgid "Del" -msgstr "Del" - -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:350 -msgid "Edit meta information" -msgstr "Uredi meta podatke" - -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:351 -msgid "E" -msgstr "E" - -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:352 -msgid "Send to device" -msgstr "Pošlji napravi" - -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:354 -msgid "S" -msgstr "S" - -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:355 -msgid "Fetch news" -msgstr "Prenesi novice" - -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:356 -msgid "F" -msgstr "F" - -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:357 -msgid "Convert E-books" -msgstr "Pretvori eKnjige" - -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:358 -msgid "C" -msgstr "C" - -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:360 -msgid "V" -msgstr "V" - -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:361 -msgid "Open containing folder" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:362 -msgid "Show book details" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:363 -msgid "Books by same author" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:364 -msgid "Books in this series" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:365 -msgid "Books by this publisher" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:366 -msgid "Books with the same tags" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:368 -msgid "Configure calibre" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:369 -msgid "Ctrl+P" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/main_window.py:20 -msgid "" -"Redirect console output to a dialog window (both stdout and stderr). Useful " -"on windows where GUI apps do not have a output streams." -msgstr "" -"Preusmeri konzolne izhodne podatke v okno (stdout in stderr). Koristno za " -"windows ker v njem GUI aplikacije nimajo izhodnih nizov." - -#: /home/kovid/work/calibre/src/calibre/gui2/main_window.py:59 -msgid "&Preferences" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/main_window.py:60 -msgid "&Quit" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/main_window.py:85 -msgid "ERROR: Unhandled exception" -msgstr "NAPAKA: Neobdelana izjema" - -#: /home/kovid/work/calibre/src/calibre/gui2/metadata.py:80 -msgid "Book has neither title nor ISBN" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/metadata.py:96 -msgid "No matches found for this book" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/search_box.py:55 -msgid "Search" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:115 -msgid "Jobs:" -msgstr "Posli:" - -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:124 -msgid "Click to see list of active jobs." -msgstr "Klikni za seznam aktivnih poslov." - -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:154 -msgid "Click to browse books by their covers" -msgstr "Kliknite za izbiranje knjig po platnici." - -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:154 -msgid "Click to turn off Cover Browsing" -msgstr "Pritisnite za izklop Preletavanja Platnic" - -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:159 -msgid "" -"<p>Browsing books by their covers is disabled.<br>Import of pictureflow " -"module failed:<br>" -msgstr "" -"<p>Izbiranje knjig po platnici je onemogočeno.<br>Uvoz pictureflow modula ni " -"uspel:<br>" - -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:167 -msgid "Click to browse books by tags" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:83 -msgid "Authors" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:83 -msgid "Publishers" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/tools.py:34 -#: /home/kovid/work/calibre/src/calibre/gui2/tools.py:106 -msgid "Starting conversion of %d books" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/tools.py:64 -#: /home/kovid/work/calibre/src/calibre/gui2/tools.py:184 -msgid "Convert book %d of %d (%s)" -msgstr "Pretvori knjigo %d od %d (%s)" - -#: /home/kovid/work/calibre/src/calibre/gui2/tools.py:91 -#: /home/kovid/work/calibre/src/calibre/gui2/tools.py:204 -msgid "Could not convert some books" -msgstr "Pretvorba nekaterih knjig ni bila možna" - -#: /home/kovid/work/calibre/src/calibre/gui2/tools.py:92 -#: /home/kovid/work/calibre/src/calibre/gui2/tools.py:205 -msgid "" -"Could not convert %d of %d books, because no suitable source format was " -"found." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/tools.py:123 -msgid "Queueing books for bulk conversion" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/tools.py:183 -msgid "Queueing " -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/tools.py:237 -msgid "You must set a username and password for %s" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/tools.py:242 -msgid "Fetch news from " -msgstr "Prenesi novice iz " - -#: /home/kovid/work/calibre/src/calibre/gui2/tools.py:253 -msgid "Convert existing" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/tools.py:254 -msgid "" -"The following books have already been converted to %s format. Do you wish to " -"reconvert them?" +"%s has been updated to version %s. See the <a href=\"http://calibre-" +"ebook.com/whats-new\">new features</a>. Visit the download page?" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/viewer/bookmarkmanager.py:43 @@ -5797,397 +7696,531 @@ msgstr "" msgid "Import" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:133 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:154 msgid "Configure Ebook viewer" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:134 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:155 msgid "&Font options" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:135 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:156 msgid "Se&rif family:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:136 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:157 msgid "&Sans family:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:137 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:158 msgid "&Monospace family:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:138 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:159 msgid "&Default font size:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:139 -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:141 -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:147 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:160 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:162 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:168 msgid " px" msgstr " px" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:140 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:161 msgid "Monospace &font size:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:142 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:163 msgid "S&tandard font:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:143 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:164 msgid "Serif" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:144 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:165 msgid "Sans-serif" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:145 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:166 msgid "Monospace" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:146 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:167 msgid "Remember last used &window size" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:148 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:169 msgid "Maximum &view width:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:149 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:170 msgid "H&yphenate (break line in the middle of large words)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:150 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:171 msgid "" "The default language to use for hyphenation rules. If the book does not " "specify a language, this will be used." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:151 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:172 msgid "Default &language for hyphenation:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:152 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:173 +msgid "&Resize images larger than the viewer window (needs restart)" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:174 msgid "&User stylesheet" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:30 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:175 +msgid "&General" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:176 +msgid "Double click to change a keyboard shortcut" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:177 +msgid "&Keyboard shortcuts" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/dictionary.py:53 +msgid "No results found for:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:35 msgid "Options to customize the ebook viewer" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:37 -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:650 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:42 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:675 msgid "Remember last used window size" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:39 -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:88 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:44 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:81 msgid "" "Set the user CSS stylesheet. This can be used to customize the look of all " "books." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:41 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:46 msgid "Maximum width of the viewer window, in pixels." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:42 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:48 +msgid "Resize images larger than the viewer window to fit inside it" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:49 msgid "Hyphenate text" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:44 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:51 msgid "Default language for hyphenation rules" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:46 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:53 msgid "Font options" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:48 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:55 msgid "The serif font family" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:50 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:57 msgid "The sans-serif font family" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:52 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:59 msgid "The monospaced font family" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:53 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:60 msgid "The standard font size in px" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:54 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:61 msgid "The monospaced font size in px" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:55 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:62 msgid "The standard font type" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:146 -msgid "Book format" +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:452 +msgid "&Lookup in dictionary" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:169 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:455 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:138 msgid "Go to..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:210 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:467 +msgid "Next Section" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:468 +msgid "Previous Section" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:470 +msgid "Document Start" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:471 +msgid "Document End" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:473 +msgid "Section Start" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:474 +msgid "Section End" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/keys.py:12 +msgid "Scroll to the next page" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/keys.py:15 +msgid "Scroll to the previous page" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/keys.py:18 +msgid "Scroll to the next section" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/keys.py:21 +msgid "Scroll to the previous section" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/keys.py:24 +msgid "Scroll to the bottom of the section" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/keys.py:27 +msgid "Scroll to the top of the section" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/keys.py:30 +msgid "Scroll to the end of the document" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/keys.py:33 +msgid "Scroll to the start of the document" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/keys.py:36 +msgid "Scroll down" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/keys.py:39 +msgid "Scroll up" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/keys.py:42 +msgid "Scroll left" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/keys.py:45 +msgid "Scroll right" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:115 +msgid "Book format" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:184 msgid "Position in book" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:216 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:191 msgid "Go to a reference. To get reference numbers, use the reference mode." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:223 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:199 msgid "Search for text in book" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:286 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:268 msgid "Print Preview" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:381 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:299 +msgid "Connecting to dict.org to lookup: <b>%s</b>…" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:398 msgid "Choose ebook" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:382 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:399 msgid "Ebooks" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:401 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:418 msgid "Add bookmark" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:401 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:418 msgid "Enter title for bookmark:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:422 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:441 msgid "No matches found for: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:462 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:478 msgid "Loading flow..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:489 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:514 msgid "Laying out %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:518 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:543 msgid "Manage Bookmarks" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:553 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:578 msgid "Loading ebook..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:561 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:586 msgid "DRM Error" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:562 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:587 msgid "<p>This book is protected by <a href=\"%s\">DRM</a>" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:566 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:591 msgid "Could not open ebook" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:640 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:665 msgid "Options to control the ebook viewer" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:647 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:672 msgid "" "If specified, viewer window will try to come to the front when started." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:652 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:677 msgid "Print javascript alert and console messages to the console" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:658 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:683 msgid "" "%prog [options] file\n" "\n" "View an ebook.\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:160 -msgid "Ebook Viewer" +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:184 +msgid "E-book Viewer" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:161 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:185 +msgid "Close dictionary" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:187 msgid "toolBar" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:164 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:190 msgid "Next page" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:165 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:191 msgid "Previous page" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:166 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:192 msgid "Font size larger" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:167 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:193 msgid "Font size smaller" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:171 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:197 msgid "Find next" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:172 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:198 +msgid "Find next occurrence" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:199 +msgid "F3" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:200 msgid "Copy to clipboard" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:174 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:202 msgid "Reference Mode" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:175 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:203 msgid "Bookmark" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:176 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:204 msgid "Toggle full screen" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:177 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:205 msgid "Print" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/printing.py:113 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:206 +msgid "Find previous" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:207 +msgid "Find previous occurrence" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:208 +msgid "Shift+F3" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/printing.py:114 msgid "Print eBook" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:166 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:196 +msgid "Copy Image" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:197 +msgid "Paste Image" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:226 msgid "" "Library\n" "%d\n" "books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:167 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:227 msgid "" "Reader\n" "%s\n" "available" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:168 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:228 msgid "" "Card A\n" "%s\n" "available" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:169 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:229 msgid "" "Card B\n" "%s\n" "available" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:174 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:233 msgid "Click to see the books available on your computer" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:175 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:236 msgid "Click to see the books in the main memory of your reader" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:176 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:237 msgid "Click to see the books on storage card A in your reader" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:177 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:238 msgid "Click to see the books on storage card B in your reader" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:466 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:246 +msgid "Books located at" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:504 msgid "Change Case" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:467 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:505 msgid "Upper Case" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:468 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:506 msgid "Lower Case" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:469 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:507 msgid "Swap Case" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:470 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:508 msgid "Title Case" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:36 -#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:37 -#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:149 -#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:150 -msgid "Default" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:288 +#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:367 msgid "" "If you use the WordPlayer e-book app on your Android phone, you can access " "your calibre book collection directly on the device. To do this you have to " "turn on the content server." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:292 +#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:371 msgid "" "Remember to leave calibre running as the server only runs as long as calibre " "is running." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:294 +#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:373 msgid "" "You have to add the URL http://myhostname:8080 as your calibre library in " "WordPlayer. Here myhostname should be the fully qualified hostname or the IP " "address of the computer calibre is running on." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:371 +#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:450 msgid "Moving library..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:387 -#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:388 +#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:466 +#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:467 msgid "Failed to move library" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:442 +#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:521 msgid "Invalid database" msgstr "Neustrezna podatkovna baza" -#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:443 +#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:522 msgid "" "<p>An invalid library already exists at %s, delete it before trying to move " "the existing library.<br>Error: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:454 +#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:533 msgid "Could not move library" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:528 +#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:662 msgid "welcome wizard" msgstr "" @@ -6195,7 +8228,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/wizard/device_ui.py:49 #: /home/kovid/work/calibre/src/calibre/gui2/wizard/finish_ui.py:46 #: /home/kovid/work/calibre/src/calibre/gui2/wizard/kindle_ui.py:42 -#: /home/kovid/work/calibre/src/calibre/gui2/wizard/library_ui.py:41 +#: /home/kovid/work/calibre/src/calibre/gui2/wizard/library_ui.py:50 #: /home/kovid/work/calibre/src/calibre/gui2/wizard/stanza_ui.py:42 msgid "Welcome to calibre" msgstr "" @@ -6203,7 +8236,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/wizard/device_ui.py:50 #: /home/kovid/work/calibre/src/calibre/gui2/wizard/finish_ui.py:47 #: /home/kovid/work/calibre/src/calibre/gui2/wizard/kindle_ui.py:43 -#: /home/kovid/work/calibre/src/calibre/gui2/wizard/library_ui.py:42 +#: /home/kovid/work/calibre/src/calibre/gui2/wizard/library_ui.py:51 #: /home/kovid/work/calibre/src/calibre/gui2/wizard/stanza_ui.py:43 msgid "The one stop solution to all your e-book needs." msgstr "" @@ -6222,13 +8255,6 @@ msgstr "" msgid "&Devices" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/wizard/finish_ui.py:45 -#: /home/kovid/work/calibre/src/calibre/gui2/wizard/kindle_ui.py:41 -#: /home/kovid/work/calibre/src/calibre/gui2/wizard/library_ui.py:40 -#: /home/kovid/work/calibre/src/calibre/gui2/wizard/stanza_ui.py:41 -msgid "WizardPage" -msgstr "" - #: /home/kovid/work/calibre/src/calibre/gui2/wizard/finish_ui.py:48 msgid "" "<h2>Congratulations!</h2> You have successfully setup calibre. Press the %s " @@ -6238,14 +8264,13 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/wizard/finish_ui.py:49 msgid "" "<h2>Demo videos</h2>Videos demonstrating the various features of calibre are " -"available <a " -"href=\"http://calibre.kovidgoyal.net/downloads/videos/\">online</a>." +"available <a href=\"http://calibre-ebook.com/demo\">online</a>." msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/wizard/finish_ui.py:50 msgid "" -"<h2>User Manual</h2>A User Manual is also available <a " -"href=\"http://calibre.kovidgoyal.net/user_manual\">online</a>." +"<h2>User Manual</h2>A User Manual is also available <a href=\"http://calibre-" +"ebook.com/user_manual\">online</a>." msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/wizard/kindle_ui.py:44 @@ -6261,17 +8286,21 @@ msgstr "" msgid "&Kindle email:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/wizard/library_ui.py:43 +#: /home/kovid/work/calibre/src/calibre/gui2/wizard/library_ui.py:52 +msgid "Choose your &language:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/wizard/library_ui.py:53 msgid "" "Choose a location for your books. When you add books to calibre, they will " "be copied here:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/wizard/library_ui.py:44 +#: /home/kovid/work/calibre/src/calibre/gui2/wizard/library_ui.py:54 msgid "&Change" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/wizard/library_ui.py:45 +#: /home/kovid/work/calibre/src/calibre/gui2/wizard/library_ui.py:55 msgid "" "If you have an existing calibre library, it will be copied to the new " "location. If a calibre library already exists at the new location, calibre " @@ -6408,48 +8437,155 @@ msgstr "" msgid "Turn on the &content server" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/__init__.py:8 -msgid "Settings to control the calibre content server" +#: /home/kovid/work/calibre/src/calibre/library/caches.py:270 +msgid "today" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/__init__.py:12 -msgid "The port on which to listen. Default is %default" +#: /home/kovid/work/calibre/src/calibre/library/caches.py:273 +msgid "yesterday" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/__init__.py:14 -msgid "The server timeout in seconds. Default is %default" +#: /home/kovid/work/calibre/src/calibre/library/caches.py:276 +msgid "thismonth" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/__init__.py:16 -msgid "The max number of worker threads to use. Default is %default" +#: /home/kovid/work/calibre/src/calibre/library/caches.py:279 +#: /home/kovid/work/calibre/src/calibre/library/caches.py:280 +msgid "daysago" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/__init__.py:18 -msgid "Set a password to restrict access. By default access is unrestricted." +#: /home/kovid/work/calibre/src/calibre/library/caches.py:430 +#: /home/kovid/work/calibre/src/calibre/library/caches.py:440 +msgid "no" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/__init__.py:20 -msgid "Username for access. By default, it is: %default" +#: /home/kovid/work/calibre/src/calibre/library/caches.py:430 +#: /home/kovid/work/calibre/src/calibre/library/caches.py:440 +msgid "unchecked" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/__init__.py:24 -msgid "The maximum size for displayed covers. Default is %default." +#: /home/kovid/work/calibre/src/calibre/library/caches.py:433 +#: /home/kovid/work/calibre/src/calibre/library/caches.py:443 +msgid "checked" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/__init__.py:26 +#: /home/kovid/work/calibre/src/calibre/library/caches.py:433 +#: /home/kovid/work/calibre/src/calibre/library/caches.py:443 +msgid "yes" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/caches.py:437 +msgid "blank" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/caches.py:437 +msgid "empty" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/catalog.py:41 msgid "" -"The maximum number of matches to return per OPDS query. This affects Stanza, " -"WordPlayer, etc. integration." +"The fields to output when cataloging books in the database. Should be a " +"comma-separated list of fields.\n" +"Available fields: %s.\n" +"Default: '%%default'\n" +"Applies to: CSV, XML output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:117 +#: /home/kovid/work/calibre/src/calibre/library/catalog.py:51 +msgid "" +"Output field to sort on.\n" +"Available fields: author_sort, id, rating, size, timestamp, title.\n" +"Default: '%default'\n" +"Applies to: CSV, XML output formats" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/catalog.py:202 +msgid "" +"Title of generated catalog used as title in metadata.\n" +"Default: '%default'\n" +"Applies to: ePub, MOBI output formats" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/catalog.py:209 +msgid "" +"Save the output from different stages of the conversion pipeline to the " +"specified directory. Useful if you are unsure at which stage of the " +"conversion process a bug is occurring.\n" +"Default: '%default'None\n" +"Applies to: ePub, MOBI output formats" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/catalog.py:219 +msgid "" +"Regex describing tags to exclude as genres.\n" +"Default: '%default' excludes bracketed tags, e.g. '[<tag>]'\n" +"Applies to: ePub, MOBI output formats" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/catalog.py:225 +msgid "" +"Comma-separated list of tag words indicating book should be excluded from " +"output. Case-insensitive.\n" +"--exclude-tags=skip will match 'skip this book' and 'Skip will like this'.\n" +"Default: '%default'\n" +"Applies to: ePub, MOBI output formats" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/catalog.py:233 +msgid "" +"Include 'Titles' section in catalog.\n" +"Default: '%default'\n" +"Applies to: ePub, MOBI output formats" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/catalog.py:240 +msgid "" +"Include 'Recently Added' section in catalog.\n" +"Default: '%default'\n" +"Applies to: ePub, MOBI output formats" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/catalog.py:247 +msgid "" +"Tag prefix for user notes, e.g. '*Jeff might enjoy reading this'.\n" +"Default: '%default'\n" +"Applies to: ePub, MOBI output formats" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/catalog.py:254 +msgid "" +"Sort titles with leading numbers as text, e.g.,\n" +"'2001: A Space Odyssey' sorts as \n" +"'Two Thousand One: A Space Odyssey'.\n" +"Default: '%default'\n" +"Applies to: ePub, MOBI output formats" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/catalog.py:261 +msgid "" +"Specifies the output profile. In some cases, an output profile is required " +"to optimize the catalog for the device. For example, 'kindle' or " +"'kindle_dx' creates a structured Table of Contents with Sections and " +"Articles.\n" +"Default: '%default'\n" +"Applies to: ePub, MOBI output formats" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/catalog.py:268 +msgid "" +"Tag indicating book has been read.\n" +"Default: '%default'\n" +"Applies to: ePub, MOBI output formats" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:41 msgid "" "Path to the calibre library. Default is to use the path stored in the " "settings." msgstr "" "Pot do calibre knjižnice. Privzeta je pot, ki je shranjena v nastavitvah." -#: /home/kovid/work/calibre/src/calibre/library/cli.py:196 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:120 msgid "" "%prog list [options]\n" "\n" @@ -6459,7 +8595,7 @@ msgstr "" "\n" "Izpiše knjige ki so na voljo v podatkovni bazi od calibre.\n" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:204 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:128 msgid "" "The fields to display when listing books in the database. Should be a comma " "separated list of fields.\n" @@ -6468,7 +8604,7 @@ msgid "" "fields. Only has effect in the text output format." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:206 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:135 msgid "" "The field by which to sort the results.\n" "Available fields: %s\n" @@ -6478,11 +8614,11 @@ msgstr "" "Polja, ki so na voljo: %s\n" "Privzeto: %%default" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:208 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:137 msgid "Sort results in ascending order" msgstr "Sortiraj zadetke v naraščujočem redu" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:210 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:139 msgid "" "Filter the results by the search query. For the format of the search query, " "please see the search related documentation in the User Manual. Default is " @@ -6492,37 +8628,31 @@ msgstr "" "dokumentacijo povezano z iskanje v Priročniku za uporabo. Privzeto je " "iskanje brez filtriranja." -#: /home/kovid/work/calibre/src/calibre/library/cli.py:212 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:141 msgid "" "The maximum width of a single line in the output. Defaults to detecting " "screen size." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:213 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:142 msgid "The string used to separate fields. Default is a space." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:214 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:143 msgid "" "The prefix for all file paths. Default is the absolute path to the library " "folder." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:217 -msgid "" -"The format in which to output the data. Available choices: %s. Defaults is " -"text." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/library/cli.py:230 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:165 msgid "Invalid fields. Available fields:" msgstr "Neveljavna polja. Polja, ki so na voljo:" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:237 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:172 msgid "Invalid sort field. Available fields:" msgstr "Neveljavno sortirno polje. Polja, ki so na voljo:" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:308 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:244 msgid "" "The following books were not added as they already exist in the database " "(see --duplicates option):" @@ -6530,7 +8660,7 @@ msgstr "" "Naslednje knjige niso bile dodane ker se že nahajajo v bazi (glej --" "duplicates možnost):" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:331 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:267 msgid "" "%prog add [options] file1 file2 file3 ...\n" "\n" @@ -6544,7 +8674,7 @@ msgstr "" "poglejte\n" "z direktoriji povezane možnosti spodaj.\n" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:340 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:276 msgid "" "Assume that each directory has only a single logical book and that all files " "in it are different e-book formats of that book" @@ -6552,22 +8682,38 @@ msgstr "" "Privzami da vsebuje vsak direktorij samo eno knjigo in da so vse datoteke " "ista knjiga v različnih formatih." -#: /home/kovid/work/calibre/src/calibre/library/cli.py:342 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:278 msgid "Process directories recursively" msgstr "Obdelaj direktorije rekurzivno" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:344 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:280 msgid "" "Add books to database even if they already exist. Comparison is done based " "on book titles." msgstr "" "Dodaj knjige v bazo tudi če že obstajajo. Primerjava se izvede po naslovu." -#: /home/kovid/work/calibre/src/calibre/library/cli.py:354 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:282 +msgid "Add an empty book (a book with no formats)" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:284 +msgid "Set the title of the added empty book" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:286 +msgid "Set the authors of the added empty book" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:288 +msgid "Set the ISBN of the added empty book" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:313 msgid "You must specify at least one file to add" msgstr "Določiti morate vsaj eno datoteko za dodajanje" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:370 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:329 msgid "" "%prog remove ids\n" "\n" @@ -6581,11 +8727,11 @@ msgstr "" "z vejico. (id številke lahko dobite z uporabo ukaza list). Naprimer 23,34,57-" "85\n" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:385 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:344 msgid "You must specify at least one book to remove" msgstr "Vsaj eno knjigo morate določiti za odstranitev" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:404 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:363 msgid "" "%prog add_format [options] id ebook_file\n" "\n" @@ -6599,15 +8745,15 @@ msgstr "" "knjigo identificirano z id-jem. ID lahko dobite z ukazom list. Če format že " "obstaja, se ga zamenja.\n" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:419 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:378 msgid "You must specify an id and an ebook file" msgstr "Določiti morate id in datotko eknjige" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:424 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:383 msgid "ebook file must have an extension" msgstr "datoteka eknjige mora imeti končnico" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:432 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:391 msgid "" "\n" "%prog remove_format [options] id fmt\n" @@ -6623,11 +8769,11 @@ msgstr "" "dobite z ukazom list. fmt naj bo končnica datoteke, kot je nprimer LRF, TXT " "ali EPUB. Če logična knjiga nima formata fmt se ne zgodi nič.\n" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:449 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:408 msgid "You must specify an id and a format" msgstr "Določiti morate id in format" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:467 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:426 msgid "" "\n" "%prog show_metadata [options] id\n" @@ -6642,15 +8788,15 @@ msgstr "" "Prikaži meta pdatke shranjene v bazi za knjigo identificirano z id-jem.\n" "id je identifikacijska številka, ki jo dobite z ukazom list.\n" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:475 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:434 msgid "Print metadata in OPF form (XML)" msgstr "Natisni meta podatke v OPF obliki (XML)" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:484 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:443 msgid "You must specify an id" msgstr "Določiti morate id" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:497 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:456 msgid "" "\n" "%prog set_metadata [options] id /path/to/metadata.opf\n" @@ -6673,11 +8819,11 @@ msgstr "" "ukazom\n" "show_metadata.\n" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:513 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:472 msgid "You must specify an id and a metadata file" msgstr "Določiti morate id in datoteko z meta podatki" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:533 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:492 msgid "" "%prog export [options] ids\n" "\n" @@ -6695,27 +8841,149 @@ msgstr "" "opf datoteki).\n" "ID številke lahko dobite z ukazom list.\n" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:541 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:500 msgid "Export all books in database, ignoring the list of ids." msgstr "Izvozi vse knjige iz podatkovne baze brez upoštevanja seznama id-jev" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:543 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:502 msgid "Export books to the specified directory. Default is" msgstr "Izvozi knjige v podan direktorij. Privzeto je" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:545 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:504 msgid "Export all books into a single directory" msgstr "Izvozi vse knjige v en direktorij" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:552 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:511 msgid "Specifying this switch will turn this behavior off." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:575 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:534 msgid "You must specify some ids or the %s option" msgstr "Določiti morate nekaj id-jev ali možnost %s" -#: /home/kovid/work/calibre/src/calibre/library/cli.py:587 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:547 +msgid "" +"%prog add_custom_column [options] label name datatype\n" +"\n" +"Create a custom column. label is the machine friendly name of the column. " +"Should\n" +"not contain spaces or colons. name is the human friendly name of the " +"column.\n" +"datatype is one of: {0}\n" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:556 +msgid "" +"This column stores tag like data (i.e. multiple comma separated values). " +"Only applies if datatype is text." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:560 +msgid "" +"A dictionary of options to customize how the data in this column will be " +"interpreted." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:573 +msgid "You must specify label, name and datatype" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:631 +msgid "" +"\n" +" %prog catalog /path/to/destination.(csv|epub|mobi|xml ...) [options]\n" +"\n" +" Export a catalog in format specified by path/to/destination extension.\n" +" Options control how entries are displayed in the generated catalog " +"ouput.\n" +" " +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:645 +msgid "" +"Comma-separated list of database IDs to catalog.\n" +"If declared, --search is ignored.\n" +"Default: all" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:649 +msgid "" +"Filter the results by the search query. For the format of the search query, " +"please see the search-related documentation in the User Manual.\n" +"Default: no filtering" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:655 +#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:503 +msgid "Show detailed output information. Useful for debugging" +msgstr "Podrobneje prikaži izhodne informacije. Koristno za razhroščevanje." + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:668 +msgid "Error: You must specify a catalog output file" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:688 +msgid "" +"\n" +" %prog set_custom [options] column id value\n" +"\n" +" Set the value of a custom column for the book identified by id.\n" +" You can get a list of ids using the list command.\n" +" You can get a list of custom column names using the custom_columns\n" +" command.\n" +" " +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:699 +msgid "" +"If the column stores multiple values, append the specified values to the " +"existing ones, instead of replacing them." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:710 +msgid "Error: You must specify a field name, id and value" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:729 +msgid "" +"\n" +" %prog custom_columns [options]\n" +"\n" +" List available custom columns. Shows column labels and ids.\n" +" " +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:736 +msgid "Show details for each column." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:748 +msgid "You will lose all data in the column: %r. Are you sure (y/n)? " +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:750 +msgid "y" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:756 +msgid "" +"\n" +" %prog remove_custom_column [options] label\n" +"\n" +" Remove the custom column identified by label. You can see available\n" +" columns with the custom_columns command.\n" +" " +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:764 +msgid "Do not ask for confirmation" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:774 +msgid "Error: You must specify a column label" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:787 msgid "" "%%prog command [options] [arguments]\n" "\n" @@ -6727,107 +8995,127 @@ msgid "" "For help on an individual command: %%prog command --help\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1565 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:487 +msgid "Main" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/database2.py:489 +msgid "Card A" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/database2.py:491 +msgid "Card B" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1542 msgid "<p>Migrating old database to ebook library in %s<br><center>" msgstr "<p>Selitev stare podatkovne baze v knjižnico eknjig v %s<br><center>" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1594 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1571 msgid "Copying <b>%s</b>" msgstr "Kopiram <b>%s</b>" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1611 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1588 msgid "Compacting database" msgstr "Krčim bazo" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1699 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1681 msgid "Checking SQL integrity..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1736 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1720 msgid "Checking for missing files." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1760 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1742 msgid "Checked id" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:22 -msgid "The title" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:23 -msgid "The authors" +#: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:111 +msgid "Ratings" msgstr "" #: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:24 -msgid "The author sort string" +msgid "The title" msgstr "" #: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:25 -msgid "The tags" +msgid "The authors" msgstr "" #: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:26 -msgid "The series" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:27 -msgid "The series number" +msgid "" +"The author sort string. To use only the first letter of the name use " +"{author_sort[0]}" msgstr "" #: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:28 -msgid "The rating" +msgid "The tags" msgstr "" #: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:29 -msgid "The ISBN" +msgid "The series" msgstr "" #: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:30 -msgid "The publisher" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:31 -msgid "The date" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:32 -msgid "The published date" +msgid "" +"The series number. To get leading zeros use {series_index:0>3s} or " +"{series_index:>3s} for leading spaces" msgstr "" #: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:33 +msgid "The rating" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:34 +msgid "The ISBN" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:35 +msgid "The publisher" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:36 +msgid "The date" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:37 +msgid "The published date" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:38 msgid "The calibre internal id" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:43 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:48 msgid "Options to control saving to disk" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:49 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:54 msgid "" "Normally, calibre will update the metadata in the saved files from what is " "in the calibre library. Makes saving to disk slower." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:52 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:57 msgid "" "Normally, calibre will write the metadata into a separate OPF file along " "with the actual e-book files." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:55 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:60 msgid "" "Normally, calibre will save the cover in a separate file along with the " "actual e-book file(s)." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:58 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:63 msgid "" "Comma separated list of formats to save for each book. By default all " "available books are saved." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:61 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:66 msgid "" "The template to control the filename and directory structure of the saved " "files. Default is \"%s\" which will save books into a per-author " @@ -6835,7 +9123,15 @@ msgid "" "are: {%s}" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:66 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:71 +msgid "" +"The template to control the filename and directory structure of files sent " +"to the device. Default is \"%s\" which will save books into a per-author " +"directory with filenames containing title and author. Available controls " +"are: {%s}" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:78 msgid "" "Normally, calibre will convert all non English characters into English " "equivalents for the file names. WARNING: If you turn this off, you may " @@ -6843,89 +9139,194 @@ msgid "" "saving to supports unicode." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:72 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:84 msgid "" "The format in which to display dates. %d - day, %b - month, %Y - year. " "Default is: %b, %Y" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:75 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:87 msgid "Convert paths to lowercase." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:77 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:89 msgid "Replace whitespace with underscores." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:230 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:258 msgid "Requested formats not available" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server.py:222 +#: /home/kovid/work/calibre/src/calibre/library/server/__init__.py:21 +msgid "Settings to control the calibre content server" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/server/__init__.py:25 +msgid "The port on which to listen. Default is %default" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/server/__init__.py:27 +msgid "The server timeout in seconds. Default is %default" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/server/__init__.py:29 +msgid "The max number of worker threads to use. Default is %default" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/server/__init__.py:31 +msgid "Set a password to restrict access. By default access is unrestricted." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/server/__init__.py:33 +msgid "Username for access. By default, it is: %default" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/server/__init__.py:37 +msgid "The maximum size for displayed covers. Default is %default." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/server/__init__.py:39 +msgid "" +"The maximum number of matches to return per OPDS query. This affects Stanza, " +"WordPlayer, etc. integration." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/server/__init__.py:43 +msgid "" +"Group items in categories such as author/tags by first letter when there are " +"more than this number of items. Default: %default. Set to a large number to " +"disable grouping." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/server/base.py:93 msgid "Password to access your calibre library. Username is " msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/server.py:645 +#: /home/kovid/work/calibre/src/calibre/library/server/main.py:28 msgid "" "[options]\n" "\n" "Start the calibre content server." msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/config.py:45 +#: /home/kovid/work/calibre/src/calibre/library/server/main.py:30 +msgid "Path to the library folder to serve with the content server" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/server/main.py:32 +msgid "Write process PID to the specified file" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:112 +msgid "%d books" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:124 +msgid "%d items" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:141 +msgid "RATING: %s<br />" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:144 +msgid "TAGS: %s<br />" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:148 +msgid "SERIES: %s [%s]<br />" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:189 +msgid "Library" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:228 +msgid "Books in your library" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:234 +msgid "By " +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:235 +msgid "Books sorted by " +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:535 +msgid "Newest" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/utils/config.py:48 msgid "%sUsage%s: %s\n" msgstr "%sUporaba%s: %s\n" -#: /home/kovid/work/calibre/src/calibre/utils/config.py:89 +#: /home/kovid/work/calibre/src/calibre/utils/config.py:92 msgid "Created by " -msgstr "созданное " +msgstr "Naredil " -#: /home/kovid/work/calibre/src/calibre/utils/config.py:90 +#: /home/kovid/work/calibre/src/calibre/utils/config.py:93 msgid "" "Whenever you pass arguments to %prog that have spaces in them, enclose the " "arguments in quotation marks." msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/config.py:553 +#: /home/kovid/work/calibre/src/calibre/utils/config.py:670 msgid "Path to the database in which books are stored" -msgstr "Путь к базе данных в которой загружены книги" +msgstr "Pot do podatkovne baze v kateri so shranjene knjige" -#: /home/kovid/work/calibre/src/calibre/utils/config.py:555 +#: /home/kovid/work/calibre/src/calibre/utils/config.py:672 msgid "Pattern to guess metadata from filenames" msgstr "Vzorec za ugotavljanje meta podatkov iz datotek" -#: /home/kovid/work/calibre/src/calibre/utils/config.py:557 +#: /home/kovid/work/calibre/src/calibre/utils/config.py:674 msgid "Access key for isbndb.com" -msgstr "Ключ доступа для isbndb.com" +msgstr "Dostopni ključ za isbndb.com" -#: /home/kovid/work/calibre/src/calibre/utils/config.py:559 +#: /home/kovid/work/calibre/src/calibre/utils/config.py:676 msgid "Default timeout for network operations (seconds)" msgstr "Privzet čas neaktivnosti za omrežne operacije (sekunde)" -#: /home/kovid/work/calibre/src/calibre/utils/config.py:561 +#: /home/kovid/work/calibre/src/calibre/utils/config.py:678 msgid "Path to directory in which your library of books is stored" msgstr "Pot do direktorija v katerem so shranjene vaše eknjige" -#: /home/kovid/work/calibre/src/calibre/utils/config.py:563 +#: /home/kovid/work/calibre/src/calibre/utils/config.py:680 msgid "The language in which to display the user interface" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/config.py:565 +#: /home/kovid/work/calibre/src/calibre/utils/config.py:682 msgid "The default output format for ebook conversions." msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/config.py:569 +#: /home/kovid/work/calibre/src/calibre/utils/config.py:686 msgid "Ordered list of formats to prefer for input." msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/config.py:571 +#: /home/kovid/work/calibre/src/calibre/utils/config.py:688 msgid "Read metadata from files" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/config.py:573 +#: /home/kovid/work/calibre/src/calibre/utils/config.py:690 msgid "The priority of worker processes" msgstr "" +#: /home/kovid/work/calibre/src/calibre/utils/config.py:692 +msgid "Swap author first and last names when reading metadata" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/utils/config.py:694 +msgid "Add new formats to existing book records" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/utils/config.py:699 +msgid "List of named saved searches" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/utils/config.py:700 +msgid "User-created tag browser categories" +msgstr "" + #: /home/kovid/work/calibre/src/calibre/utils/ipc/job.py:43 msgid "Waiting..." msgstr "" @@ -6938,44 +9339,92 @@ msgstr "" msgid "Finished" msgstr "Končano" -#: /home/kovid/work/calibre/src/calibre/utils/ipc/job.py:70 +#: /home/kovid/work/calibre/src/calibre/utils/ipc/job.py:75 msgid "Working..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/localization.py:94 +#: /home/kovid/work/calibre/src/calibre/utils/localization.py:93 msgid "Brazilian Portuguese" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/localization.py:95 +#: /home/kovid/work/calibre/src/calibre/utils/localization.py:94 msgid "English (UK)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/localization.py:96 +#: /home/kovid/work/calibre/src/calibre/utils/localization.py:95 msgid "Simplified Chinese" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/localization.py:97 +#: /home/kovid/work/calibre/src/calibre/utils/localization.py:96 msgid "Chinese (HK)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/localization.py:98 +#: /home/kovid/work/calibre/src/calibre/utils/localization.py:97 msgid "Traditional Chinese" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/localization.py:99 +#: /home/kovid/work/calibre/src/calibre/utils/localization.py:98 msgid "English" msgstr "" +#: /home/kovid/work/calibre/src/calibre/utils/localization.py:99 +msgid "English (Australia)" +msgstr "" + #: /home/kovid/work/calibre/src/calibre/utils/localization.py:100 -msgid "English (AU)" +msgid "English (New Zealand)" msgstr "" #: /home/kovid/work/calibre/src/calibre/utils/localization.py:101 -msgid "English (CA)" +msgid "English (Canada)" msgstr "" #: /home/kovid/work/calibre/src/calibre/utils/localization.py:102 -msgid "English (IND)" +msgid "English (India)" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/utils/localization.py:103 +msgid "English (Thailand)" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/utils/localization.py:104 +msgid "English (Cyprus)" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/utils/localization.py:105 +msgid "English (Pakistan)" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/utils/localization.py:106 +msgid "English (Singapore)" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/utils/localization.py:107 +msgid "English (Yemen)" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/utils/localization.py:108 +msgid "English (Ireland)" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/utils/localization.py:109 +msgid "English (China)" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/utils/localization.py:110 +msgid "Spanish (Paraguay)" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/utils/localization.py:111 +msgid "German (AT)" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/utils/localization.py:112 +msgid "Dutch (NL)" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/utils/localization.py:113 +msgid "Dutch (BE)" msgstr "" #: /home/kovid/work/calibre/src/calibre/utils/sftp.py:53 @@ -6998,21 +9447,21 @@ msgstr "Avtentikacija s strežnikom ni uspela: %s" msgid "Control email delivery" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:101 -#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:123 +#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:118 +#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:140 msgid "Unknown feed" msgstr "Neznani feed" -#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:141 -#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:164 +#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:158 +#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:183 msgid "Untitled article" msgstr "Neznan članek" -#: /home/kovid/work/calibre/src/calibre/web/feeds/input.py:17 +#: /home/kovid/work/calibre/src/calibre/web/feeds/input.py:21 msgid "Download periodical content from the internet" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/input.py:32 +#: /home/kovid/work/calibre/src/calibre/web/feeds/input.py:36 msgid "" "Useful for recipe development. Forces max_articles_per_feed to 2 and " "downloads at most 2 feeds." @@ -7020,107 +9469,131 @@ msgstr "" "Uporabno za razvoj receptov. Prisili max_articles_per_feed na 2 in prenese " "največ dva feed-a." -#: /home/kovid/work/calibre/src/calibre/web/feeds/input.py:35 +#: /home/kovid/work/calibre/src/calibre/web/feeds/input.py:39 msgid "Username for sites that require a login to access content." msgstr "Uporabniško ime za zaščitene strani." -#: /home/kovid/work/calibre/src/calibre/web/feeds/input.py:38 +#: /home/kovid/work/calibre/src/calibre/web/feeds/input.py:42 msgid "Password for sites that require a login to access content." msgstr "Geslo za zaščitene strani." -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:40 +#: /home/kovid/work/calibre/src/calibre/web/feeds/input.py:46 +msgid "" +"Do not download latest version of builtin recipes from the calibre server" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:43 msgid "Unknown News Source" msgstr "Neznan Vir Novic" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:588 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:595 +msgid "The \"%s\" recipe needs a username and password." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:692 msgid "Download finished" msgstr "Prenos končan" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:590 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:694 msgid "Failed to download the following articles:" msgstr "Prenos naslednjih člankov ni uspel:" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:596 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:700 msgid "Failed to download parts of the following articles:" msgstr "Prenos nekaterih delov od naslednjih člankov ni uspel:" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:598 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:702 msgid " from " msgstr " iz " -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:600 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:704 msgid "\tFailed links:" msgstr "\tNeuspešne povezave:" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:681 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:821 msgid "Could not fetch article. Run with -vv to see the reason" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:702 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:842 msgid "Fetching feeds..." msgstr "Prenašam feed-e..." -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:706 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:847 msgid "Got feeds from index page" msgstr "Dobljeni feed-i iz indeks strani" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:712 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:853 msgid "Trying to download cover..." msgstr "Poskušam prenesti naslovnico ..." -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:766 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:855 +msgid "Generating masthead..." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:936 msgid "Starting download [%d thread(s)]..." msgstr "Začenjam prenos [%d nit(i)]..." -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:782 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:952 msgid "Feeds downloaded to %s" msgstr "Feed-i prenešeni v %s" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:792 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:962 msgid "Could not download cover: %s" msgstr "Prenos naslovnico ne bil mogoč: %s" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:799 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:974 msgid "Downloading cover from %s" msgstr "Prenašam naslovnico iz %s" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:925 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:1009 +msgid "Masthead image downloaded" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:1205 msgid "Untitled Article" msgstr "Članek brez naslova" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:996 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:1276 msgid "Article downloaded: %s" msgstr "Članek prenešen: %s" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:1007 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:1287 msgid "Article download failed: %s" msgstr "Prenos članka ni uspel: %s" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:1024 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_borba.py:81 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_glas_srpske.py:77 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_instapaper.py:59 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_lamujerdemivida.py:60 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_laprensa_ni.py:64 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_monitor.py:79 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_pobjeda.py:84 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_republika.py:67 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:1304 msgid "Fetching feed" msgstr "Prenašam feed" -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_borba.py:21 -msgid "sr-Latn-RS" +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:1451 +msgid "" +"Failed to log in, check your username and password for the calibre " +"Periodicals service." msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_le_monde.py:119 -msgid "Skipping duplicated article: %s" +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:1467 +msgid "" +"You do not have permission to download this issue. Either your subscription " +"has expired or you have exceeded the maximum allowed downloads for today." msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_le_monde.py:126 -msgid "Skipping filtered article: %s" +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/collection.py:47 +msgid "You" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:452 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/model.py:73 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/model.py:82 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/model.py:181 +msgid "Scheduled" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/model.py:84 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/model.py:182 +msgid "Custom" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:480 msgid "" "%prog URL\n" "\n" @@ -7130,25 +9603,25 @@ msgstr "" "\n" "Kjer je URL naprimer http://google.com" -#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:455 +#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:483 msgid "Base directory into which URL is saved. Default is %default" msgstr "Osnovni direktorij v katerega se shrani URL. Privzet je %default" -#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:458 +#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:486 msgid "" "Timeout in seconds to wait for a response from the server. Default: %default " "s" msgstr "" "Timeout v sekundah za čakanje odgovora od strežnika. Privzeto: %default s" -#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:461 +#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:489 msgid "" "Maximum number of levels to recurse i.e. depth of links to follow. Default " "%default" msgstr "" "Maksimalna globina rekurzije. To je globina povezav. Privzeto %default" -#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:464 +#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:492 msgid "" "The maximum number of files to download. This only applies to files from <a " "href> tags. Default is %default" @@ -7156,14 +9629,14 @@ msgstr "" "Maksimalno število prenešenih datotek. To velja samo za datoteke iz <a href> " "značk. Privzeto je %default" -#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:466 +#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:494 msgid "" "Minimum interval in seconds between consecutive fetches. Default is %default " "s" msgstr "" "Minimalni interval v sekundah med zaporednimi prenosi. Privzeto: %default s" -#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:468 +#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:496 msgid "" "The character encoding for the websites you are trying to download. The " "default is to try and guess the encoding." @@ -7171,7 +9644,7 @@ msgstr "" "Kodna tabela znakov za spletne strani, ki jih hočete prenesti. Privzeto je " "ugibanje uporabljene kodne tabele." -#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:470 +#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:498 msgid "" "Only links that match this regular expression will be followed. This option " "can be specified multiple times, in which case as long as a link matches any " @@ -7181,7 +9654,7 @@ msgstr "" "možnost se lahko uporabi večkrat, kar pomeni da če povezava ustreza enemu " "izmed regularnih izrazov, se ji bo sledilo. Privzeto se sledi vsem povezavam." -#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:472 +#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:500 msgid "" "Any link that matches this regular expression will be ignored. This option " "can be specified multiple times, in which case as long as any regexp matches " @@ -7195,14 +9668,10 @@ msgstr "" "uporabljena tako --filter-regexp kot --match-regexp, potem se najprej " "upošteva --filter-regexp." -#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:474 +#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:502 msgid "Do not download CSS stylesheets." msgstr "Ne prenesi CSS oblikovnih informacij." -#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:475 -msgid "Show detailed output information. Useful for debugging" -msgstr "Podrobneje prikaži izhodne informacije. Koristno za razhroščevanje." - #~ msgid "You must specify an input HTML file" #~ msgstr "Izbrati morate vhodno HTML datoteko" @@ -7224,6 +9693,9 @@ msgstr "Podrobneje prikaži izhodne informacije. Koristno za razhroščevanje." #~ msgid "Options useful for debugging" #~ msgstr "Možnosti koristne za razhroščevanje" +#~ msgid "Useful for debugging." +#~ msgstr "Koristno za razhroščevanje." + #~ msgid "OEB ebook created in" #~ msgstr "OEB eknjiga ustvarjena v" @@ -7326,6 +9798,13 @@ msgstr "Podrobneje prikaži izhodne informacije. Koristno za razhroščevanje." #~ msgid "Convert book: " #~ msgstr "Pretvori knjigo: " +#~ msgid "" +#~ "<p>For help visit <a " +#~ "href=\"http://%s.kovidgoyal.net/user_manual\">%s.kovidgoyal.net</a><br>" +#~ msgstr "" +#~ "<p>Za pomoč obiščite <a " +#~ "href=\"http://%s.kovidgoyal.net/user_manual\">%s.kovidgoyal.net</a><br>" + #~ msgid "Change the publisher of this book" #~ msgstr "Spremeni založnika te knjige" @@ -7715,6 +10194,9 @@ msgstr "Podrobneje prikaži izhodne informacije. Koristno za razhroščevanje." #~ msgid "Send to storage card" #~ msgstr "Pošlji v spominsko kartico" +#~ msgid "and delete from library" +#~ msgstr "in izbriši iz knjižnice" + #~ msgid "Set defaults for conversion of comics" #~ msgstr "Nastavi privzete možnosti za pretvorbo stripov" @@ -7727,6 +10209,9 @@ msgstr "Podrobneje prikaži izhodne informacije. Koristno za razhroščevanje." #~ msgid "Could not move database" #~ msgstr "Premik podatkovne baze ni bil mogoč" +#~ msgid "Choose a location for your ebook library." +#~ msgstr "Izberite lokacijo za vašo eKnjižnico." + #~ msgid "Click to see the list of books available on your computer" #~ msgstr "Kliknite za seznam knjig, ki so na voljo na vašem računalniku" @@ -7975,6 +10460,15 @@ msgstr "Podrobneje prikaži izhodne informacije. Koristno za razhroščevanje." #~ "<p>Neveljavna podatkovna baza že obstaja v %s, izbrišite jo preden poskusite " #~ "premakniti obstoječo podatkovno bazo.<br>Napaka: %s" +#~ msgid "" +#~ "%s has been updated to version %s. See the <a " +#~ "href=\"http://calibre.kovidgoyal.net/wiki/Changelog\">new features</a>. " +#~ "Visit the download page?" +#~ msgstr "" +#~ "%s je bil nadgrajen na verzijo %s. Poglejte <a " +#~ "href=\"http://calibre.kovidgoyal.net/wiki/Changelog\">seznam " +#~ "posodobitev</a>. Prikažem domačo stran?" + #~ msgid "" #~ "Search the list of books by title or author<br><br>Words separated by spaces " #~ "are ANDed" @@ -7989,6 +10483,19 @@ msgstr "Podrobneje prikaži izhodne informacije. Koristno za razhroščevanje." #~ "Iskanje knjig po naslovu, avtorju, založniku, značkah ali " #~ "opombah<br><br>Besede ločene s presledkom se obravnavajo po pravilu IN" +#~ msgid "Click to browse books by their covers" +#~ msgstr "Kliknite za izbiranje knjig po platnici." + +#~ msgid "Click to turn off Cover Browsing" +#~ msgstr "Pritisnite za izklop Preletavanja Platnic" + +#~ msgid "" +#~ "<p>Browsing books by their covers is disabled.<br>Import of pictureflow " +#~ "module failed:<br>" +#~ msgstr "" +#~ "<p>Izbiranje knjig po platnici je onemogočeno.<br>Uvoz pictureflow modula ni " +#~ "uspel:<br>" + #~ msgid "Could not initialize the fontconfig library" #~ msgstr "Inicializacija fontconfig knjižnice ni uspela." From eb73e3a33bbc35aa1821e444218d61f1ac90ded4 Mon Sep 17 00:00:00 2001 From: Charles Haley <> Date: Thu, 10 Jun 2010 10:21:37 +0100 Subject: [PATCH 063/112] Put the flag back in usbms.driver to force metadata from paths, if that flag is set in the driver. Continue to ignore the flag set in the add-books dialog --- src/calibre/devices/usbms/driver.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/calibre/devices/usbms/driver.py b/src/calibre/devices/usbms/driver.py index 1666398fc9..0cd6a8f79c 100644 --- a/src/calibre/devices/usbms/driver.py +++ b/src/calibre/devices/usbms/driver.py @@ -374,8 +374,13 @@ class USBMS(CLI, Device): @classmethod def book_from_path(cls, prefix, lpath): from calibre.ebooks.metadata import MetaInformation - mi = cls.metadata_from_path(cls.normalize_path(os.path.join(prefix, lpath))) + if cls.settings().read_metadata or cls.MUST_READ_METADATA: + mi = cls.metadata_from_path(cls.normalize_path(os.path.join(prefix, lpath))) + else: + from calibre.ebooks.metadata.meta import metadata_from_filename + mi = metadata_from_filename(cls.normalize_path(os.path.basename(lpath)), + cls.build_template_regexp()) if mi is None: mi = MetaInformation(os.path.splitext(os.path.basename(lpath))[0], [_('Unknown')]) From 03d4ee7b3f7133f5ce264f75ceac2136b7da523b Mon Sep 17 00:00:00 2001 From: Charles Haley <> Date: Thu, 10 Jun 2010 11:38:35 +0100 Subject: [PATCH 064/112] search mixins --- src/calibre/gui2/init.py | 5 +- src/calibre/gui2/search_box.py | 77 ++++++++++- src/calibre/gui2/search_restriction_mixin.py | 56 ++++++++ src/calibre/gui2/ui.py | 135 +++---------------- 4 files changed, 150 insertions(+), 123 deletions(-) create mode 100644 src/calibre/gui2/search_restriction_mixin.py diff --git a/src/calibre/gui2/init.py b/src/calibre/gui2/init.py index a991c4d1f8..ed1035e2b6 100644 --- a/src/calibre/gui2/init.py +++ b/src/calibre/gui2/init.py @@ -275,7 +275,10 @@ class LibraryViewMixin(object): # {{{ if search: self.search.set_search_string(join.join(search)) - + def search_done(self, view, ok): + if view is self.current_view(): + self.search.search_done(ok) + self.set_number_of_books_shown() # }}} diff --git a/src/calibre/gui2/search_box.py b/src/calibre/gui2/search_box.py index 4e9ccc2900..17a815c4ce 100644 --- a/src/calibre/gui2/search_box.py +++ b/src/calibre/gui2/search_box.py @@ -7,11 +7,15 @@ __copyright__ = '2009, Kovid Goyal <kovid@kovidgoyal.net>' __docformat__ = 'restructuredtext en' from PyQt4.Qt import QComboBox, Qt, QLineEdit, QStringList, pyqtSlot, \ - pyqtSignal, SIGNAL + pyqtSignal, SIGNAL, QObject, QDialog from PyQt4.QtGui import QCompleter from calibre.gui2 import config from calibre.gui2.dialogs.confirm_delete import confirm +from calibre.gui2.dialogs.saved_search_editor import SavedSearchEditor +from calibre.gui2.dialogs.search import SearchDialog +from calibre.utils.config import prefs +from calibre.utils.search_query_parser import saved_searches class SearchLineEdit(QLineEdit): @@ -79,8 +83,7 @@ class SearchBox2(QComboBox): self.setMinimumContentsLength(25) self._in_a_search = False - def initialize(self, opt_name, colorize=False, - help_text=_('Search')): + def initialize(self, opt_name, colorize=False, help_text=_('Search')): self.as_you_type = config['search_as_you_type'] self.opt_name = opt_name self.addItems(QStringList(list(set(config[opt_name])))) @@ -239,9 +242,9 @@ class SavedSearchBox(QComboBox): self.setInsertPolicy(self.NoInsert) self.setSizeAdjustPolicy(self.AdjustToMinimumContentsLengthWithIcon) self.setMinimumContentsLength(10) + self.tool_tip_text = self.toolTip() def initialize(self, _saved_searches, _search_box, colorize=False, help_text=_('Search')): - self.tool_tip_text = self.toolTip() self.saved_searches = _saved_searches self.search_box = _search_box self.help_text = help_text @@ -331,3 +334,69 @@ class SavedSearchBox(QComboBox): if idx < 0: return self.search_box.set_search_string(self.saved_searches.lookup(unicode(self.currentText()))) + +class SearchBoxMixin(object): + + def __init__(self): + self.search.initialize('main_search_history', colorize=True, + help_text=_('Search (For Advanced Search click the button to the left)')) + self.connect(self.search, SIGNAL('cleared()'), self.search_box_cleared) + self.connect(self.clear_button, SIGNAL('clicked()'), self.search.clear) + QObject.connect(self.advanced_search_button, SIGNAL('clicked(bool)'), + self.do_advanced_search) + + self.search.clear() + self.search.setFocus(Qt.OtherFocusReason) + self.search.setMaximumWidth(self.width()-150) + + def search_box_cleared(self): + self.tags_view.clear() + self.saved_search.clear_to_help() + self.set_number_of_books_shown() + + def do_advanced_search(self, *args): + d = SearchDialog(self) + if d.exec_() == QDialog.Accepted: + self.search.set_search_string(d.search_string()) + +class SavedSearchBoxMixin(object): + + def __init__(self): + self.connect(self.saved_search, SIGNAL('changed()'), self.saved_searches_changed) + self.saved_searches_changed() + self.connect(self.clear_button, SIGNAL('clicked()'), self.saved_search.clear_to_help) + self.saved_search.initialize(saved_searches, self.search, colorize=True, + help_text=_('Saved Searches')) + self.connect(self.save_search_button, SIGNAL('clicked()'), + self.saved_search.save_search_button_clicked) + self.connect(self.delete_search_button, SIGNAL('clicked()'), + self.saved_search.delete_search_button_clicked) + self.connect(self.copy_search_button, SIGNAL('clicked()'), + self.saved_search.copy_search_button_clicked) + + + def saved_searches_changed(self): + p = prefs['saved_searches'].keys() + p.sort() + t = unicode(self.search_restriction.currentText()) + self.search_restriction.clear() # rebuild the restrictions combobox using current saved searches + self.search_restriction.addItem('') + self.tags_view.recount() + for s in p: + self.search_restriction.addItem(s) + if t: + if t in p: # redo the current restriction, if there was one + self.search_restriction.setCurrentIndex(self.search_restriction.findText(t)) + # self.tags_view.set_search_restriction(t) + else: + self.search_restriction.setCurrentIndex(0) + self.apply_search_restriction('') + + def do_saved_search_edit(self, search): + d = SavedSearchEditor(self, search) + d.exec_() + if d.result() == d.Accepted: + self.saved_searches_changed() + self.saved_search.clear_to_help() + + diff --git a/src/calibre/gui2/search_restriction_mixin.py b/src/calibre/gui2/search_restriction_mixin.py new file mode 100644 index 0000000000..b25e202352 --- /dev/null +++ b/src/calibre/gui2/search_restriction_mixin.py @@ -0,0 +1,56 @@ +''' +Created on 10 Jun 2010 + +@author: charles +''' + +class SearchRestrictionMixin(object): + + def __init__(self): + self.library_view.model().count_changed_signal.connect(self.restriction_count_changed) + self.search_restriction.setSizeAdjustPolicy(self.search_restriction.AdjustToMinimumContentsLengthWithIcon) + self.search_restriction.setMinimumContentsLength(10) + + ''' + Adding and deleting books while restricted creates a complexity. When added, + they are displayed regardless of whether they match a search restriction. + However, if they do not, they are removed at the next search. The counts + must take this behavior into effect. + ''' + + def restriction_count_changed(self, c): + self.restriction_count_of_books_in_view += \ + c - self.restriction_count_of_books_in_library + self.restriction_count_of_books_in_library = c + if self.restriction_in_effect: + self.set_number_of_books_shown() + + def apply_search_restriction(self, r): + r = unicode(r) + if r is not None and r != '': + self.restriction_in_effect = True + restriction = 'search:"%s"'%(r) + else: + self.restriction_in_effect = False + restriction = '' + self.restriction_count_of_books_in_view = \ + self.library_view.model().set_search_restriction(restriction) + self.search.clear_to_help() + self.saved_search.clear_to_help() + self.tags_view.set_search_restriction(restriction) + self.set_number_of_books_shown() + + def set_number_of_books_shown(self): + if self.current_view() == self.library_view and self.restriction_in_effect: + t = _("({0} of {1})").format(self.current_view().row_count(), + self.restriction_count_of_books_in_view) + self.search_count.setStyleSheet \ + ('QLabel { border-radius: 8px; background-color: yellow; }') + else: # No restriction or not library view + if not self.search.in_a_search(): + t = _("(all books)") + else: + t = _("({0} of all)").format(self.current_view().row_count()) + self.search_count.setStyleSheet( + 'QLabel { background-color: transparent; }') + self.search_count.setText(t) diff --git a/src/calibre/gui2/ui.py b/src/calibre/gui2/ui.py index b342728ff4..675261d09d 100644 --- a/src/calibre/gui2/ui.py +++ b/src/calibre/gui2/ui.py @@ -29,7 +29,6 @@ from calibre.utils.filenames import ascii_filename from calibre.ptempfile import PersistentTemporaryFile from calibre.utils.config import prefs, dynamic from calibre.utils.ipc.server import Server -from calibre.utils.search_query_parser import saved_searches from calibre.devices.errors import UserFeedback from calibre.gui2 import warning_dialog, choose_files, error_dialog, \ question_dialog,\ @@ -51,7 +50,6 @@ from calibre.gui2.dialogs.metadata_bulk import MetadataBulkDialog from calibre.gui2.tools import convert_single_ebook, convert_bulk_ebook, \ fetch_scheduled_recipe, generate_catalog from calibre.gui2.dialogs.config import ConfigDialog -from calibre.gui2.dialogs.search import SearchDialog from calibre.gui2.dialogs.choose_format import ChooseFormatDialog from calibre.gui2.dialogs.book_info import BookInfo from calibre.ebooks import BOOK_EXTENSIONS @@ -59,9 +57,10 @@ from calibre.ebooks.BeautifulSoup import BeautifulSoup, Tag, NavigableString from calibre.library.database2 import LibraryDatabase2 from calibre.library.caches import CoverCache from calibre.gui2.dialogs.confirm_delete import confirm -from calibre.gui2.dialogs.saved_search_editor import SavedSearchEditor -from calibre.gui2.tag_view import TagBrowserMixin from calibre.gui2.init import ToolbarMixin, LibraryViewMixin +from calibre.gui2.search_box import SearchBoxMixin, SavedSearchBoxMixin +from calibre.gui2.search_restriction_mixin import SearchRestrictionMixin +from calibre.gui2.tag_view import TagBrowserMixin class Listener(Thread): # {{{ @@ -106,7 +105,8 @@ class SystemTrayIcon(QSystemTrayIcon): # {{{ # }}} class Main(MainWindow, Ui_MainWindow, DeviceMixin, ToolbarMixin, - TagBrowserMixin, CoverFlowMixin, LibraryViewMixin): + TagBrowserMixin, CoverFlowMixin, LibraryViewMixin, SearchBoxMixin, + SavedSearchBoxMixin, SearchRestrictionMixin): 'The main GUI' def set_default_thumbnail(self, height): @@ -149,20 +149,6 @@ class Main(MainWindow, Ui_MainWindow, DeviceMixin, ToolbarMixin, self.restriction_count_of_books_in_view = 0 self.restriction_count_of_books_in_library = 0 self.restriction_in_effect = False - self.search.initialize('main_search_history', colorize=True, - help_text=_('Search (For Advanced Search click the button to the left)')) - self.connect(self.clear_button, SIGNAL('clicked()'), self.search.clear) - self.connect(self.clear_button, SIGNAL('clicked()'), self.saved_search.clear_to_help) - self.search.clear() - - self.saved_search.initialize(saved_searches, self.search, colorize=True, - help_text=_('Saved Searches')) - self.connect(self.save_search_button, SIGNAL('clicked()'), - self.saved_search.save_search_button_clicked) - self.connect(self.delete_search_button, SIGNAL('clicked()'), - self.saved_search.delete_search_button_clicked) - self.connect(self.copy_search_button, SIGNAL('clicked()'), - self.saved_search.copy_search_button_clicked) self.progress_indicator = ProgressIndicator(self) self.verbose = opts.verbose @@ -225,8 +211,6 @@ class Main(MainWindow, Ui_MainWindow, DeviceMixin, ToolbarMixin, self.connect(self.system_tray_icon, SIGNAL('activated(QSystemTrayIcon::ActivationReason)'), self.system_tray_icon_activated) - QObject.connect(self.advanced_search_button, SIGNAL('clicked(bool)'), - self.do_advanced_search) DeviceMixin.__init__(self) @@ -265,6 +249,7 @@ class Main(MainWindow, Ui_MainWindow, DeviceMixin, ToolbarMixin, self.update_checker.update_found.connect(self.update_found, type=Qt.QueuedConnection) self.update_checker.start() + ####################### Status Bar ##################### self.status_bar.initialize(self.system_tray_icon) self.status_bar.show_book_info.connect(self.show_book_info) @@ -273,6 +258,10 @@ class Main(MainWindow, Ui_MainWindow, DeviceMixin, ToolbarMixin, ####################### Setup Toolbar ##################### ToolbarMixin.__init__(self) + ####################### Search boxes ######################## + SavedSearchBoxMixin.__init__(self) + SearchBoxMixin.__init__(self) + ####################### Library view ######################## LibraryViewMixin.__init__(self, db) @@ -281,19 +270,13 @@ class Main(MainWindow, Ui_MainWindow, DeviceMixin, ToolbarMixin, if self.system_tray_icon.isVisible() and opts.start_in_tray: self.hide_windows() self.stack.setCurrentIndex(0) - self.search.setFocus(Qt.OtherFocusReason) self.cover_cache = CoverCache(self.library_path) self.cover_cache.start() self.library_view.model().cover_cache = self.cover_cache self.connect(self.edit_categories, SIGNAL('clicked()'), self.do_user_categories_edit) self.search_restriction.activated[str].connect(self.apply_search_restriction) - for x in (self.location_view.count_changed, self.tags_view.recount, - self.restriction_count_changed): - self.library_view.model().count_changed_signal.connect(x) - - self.connect(self.search, SIGNAL('cleared()'), self.search_box_cleared) - self.connect(self.saved_search, SIGNAL('changed()'), self.saved_searches_changed) - self.saved_searches_changed() + self.library_view.model().count_changed_signal.connect \ + (self.location_view.count_changed) if not gprefs.get('quick_start_guide_added', False): from calibre.ebooks.metadata import MetaInformation mi = MetaInformation(_('Calibre Quick Start Guide'), ['John Schember']) @@ -313,9 +296,12 @@ class Main(MainWindow, Ui_MainWindow, DeviceMixin, ToolbarMixin, type=Qt.QueuedConnection) ########################### Tags Browser ############################## + + self.library_view.model().count_changed_signal.connect(self.tags_view.recount) TagBrowserMixin.__init__(self, db) - self.search_restriction.setSizeAdjustPolicy(self.search_restriction.AdjustToMinimumContentsLengthWithIcon) - self.search_restriction.setMinimumContentsLength(10) + + ######################### Search Restriction ########################## + SearchRestrictionMixin.__init__(self) ########################### Cover Flow ################################ @@ -324,7 +310,6 @@ class Main(MainWindow, Ui_MainWindow, DeviceMixin, ToolbarMixin, self._calculated_available_height = min(max_available_height()-15, self.height()) self.resize(self.width(), self._calculated_available_height) - self.search.setMaximumWidth(self.width()-150) # Jobs Button {{{ self.jobs_button = JobsButton() @@ -363,13 +348,6 @@ class Main(MainWindow, Ui_MainWindow, DeviceMixin, ToolbarMixin, self.keyboard_interrupt.connect(self.quit, type=Qt.QueuedConnection) - def do_saved_search_edit(self, search): - d = SavedSearchEditor(self, search) - d.exec_() - if d.result() == d.Accepted: - self.saved_searches_changed() - self.saved_search.clear_to_help() - def resizeEvent(self, ev): MainWindow.resizeEvent(self, ev) self.search.setMaximumWidth(self.width()-150) @@ -451,76 +429,6 @@ class Main(MainWindow, Ui_MainWindow, DeviceMixin, ToolbarMixin, error_dialog(self, _('Failed to start content server'), unicode(self.content_server.exception)).exec_() - ''' - Restrictions. - Adding and deleting books creates a complexity. When added, they are - displayed regardless of whether they match a search restriction. However, if - they do not, they are removed at the next search. The counts must take this - behavior into effect. - ''' - - def restriction_count_changed(self, c): - self.restriction_count_of_books_in_view += c - self.restriction_count_of_books_in_library - self.restriction_count_of_books_in_library = c - if self.restriction_in_effect: - self.set_number_of_books_shown() - - def apply_search_restriction(self, r): - r = unicode(r) - if r is not None and r != '': - self.restriction_in_effect = True - restriction = 'search:"%s"'%(r) - else: - self.restriction_in_effect = False - restriction = '' - self.restriction_count_of_books_in_view = \ - self.library_view.model().set_search_restriction(restriction) - self.search.clear_to_help() - self.saved_search.clear_to_help() - self.tags_view.set_search_restriction(restriction) - self.set_number_of_books_shown() - - def set_number_of_books_shown(self): - if self.current_view() == self.library_view and self.restriction_in_effect: - t = _("({0} of {1})").format(self.current_view().row_count(), - self.restriction_count_of_books_in_view) - self.search_count.setStyleSheet('QLabel { border-radius: 8px; background-color: yellow; }') - else: # No restriction or not library view - if not self.search.in_a_search(): - t = _("(all books)") - else: - t = _("({0} of all)").format(self.current_view().row_count()) - self.search_count.setStyleSheet( - 'QLabel { background-color: transparent; }') - self.search_count.setText(t) - - def search_box_cleared(self): - self.tags_view.clear() - self.saved_search.clear_to_help() - self.set_number_of_books_shown() - - def search_done(self, view, ok): - if view is self.current_view(): - self.search.search_done(ok) - self.set_number_of_books_shown() - - def saved_searches_changed(self): - p = prefs['saved_searches'].keys() - p.sort() - t = unicode(self.search_restriction.currentText()) - self.search_restriction.clear() # rebuild the restrictions combobox using current saved searches - self.search_restriction.addItem('') - self.tags_view.recount() - for s in p: - self.search_restriction.addItem(s) - if t: - if t in p: # redo the current restriction, if there was one - self.search_restriction.setCurrentIndex(self.search_restriction.findText(t)) - # self.tags_view.set_search_restriction(t) - else: - self.search_restriction.setCurrentIndex(0) - self.apply_search_restriction('') - def another_instance_wants_to_talk(self): try: @@ -559,8 +467,6 @@ class Main(MainWindow, Ui_MainWindow, DeviceMixin, ToolbarMixin, def booklists(self): return self.memory_view.model().db, self.card_a_view.model().db, self.card_b_view.model().db - - ########################## Connect to device ############################## def save_device_view_settings(self): @@ -1859,13 +1765,6 @@ class Main(MainWindow, Ui_MainWindow, DeviceMixin, ToolbarMixin, ############################################################################ - ########################### Do advanced search ############################# - - def do_advanced_search(self, *args): - d = SearchDialog(self) - if d.exec_() == QDialog.Accepted: - self.search.set_search_string(d.search_string()) - ############################################################################ ############################### Do config ################################## From 3f1e6645e2fb3c3da736b24971b0a5a7acc3c3d4 Mon Sep 17 00:00:00 2001 From: GRiker <griker@hotmail.com> Date: Thu, 10 Jun 2010 04:56:36 -0600 Subject: [PATCH 065/112] GwR wip --- src/calibre/devices/apple/driver.py | 405 +++++++++++++++++----------- 1 file changed, 254 insertions(+), 151 deletions(-) diff --git a/src/calibre/devices/apple/driver.py b/src/calibre/devices/apple/driver.py index 8ad006e361..fc7d56e496 100644 --- a/src/calibre/devices/apple/driver.py +++ b/src/calibre/devices/apple/driver.py @@ -738,7 +738,6 @@ class ITUNES(DevicePlugin): new_booklist = [] self.update_list = [] - strip_tags = re.compile(r'<[^<]*?/?>') file_count = float(len(files)) self.problem_titles = [] self.problem_msg = _("Some cover art could not be converted.\n" @@ -750,36 +749,27 @@ class ITUNES(DevicePlugin): # self._dump_cached_books('upload_books()') self._dump_update_list('upload_books()') + ''' if isosx: + for (i,file) in enumerate(files): - # Delete existing from Library|Books - # Add to self.update_list for deletion from booklist[0] during add_books_to_metadata - path = self.path_template % (metadata[i].title, metadata[i].author[0]) - if path in self.cached_books: - if DEBUG: - self.log.info(" adding '%s' by %s to self.update_list" % - (self.cached_books[path]['title'],self.cached_books[path]['author'])) - self.update_list.append(self.cached_books[path]) - if DEBUG: - self.log.info( " deleting existing '%s'" % (path)) - self._remove_from_iTunes(self.cached_books[path]) - if self.manual_sync_mode: - dev_book_added = self._remove_from_device(self.cached_books[path]) + if self.manual_sync_mode: + # Delete existing from Device|Books, add to self.update_list + # for deletion from booklist[0] during add_books_to_metadata + if path in self.cached_books: + self.update_list.append(self.cached_books[path]) + if DEBUG: + self.log.info(" adding '%s' by %s to self.update_list" % + (self.cached_books[path]['title'],self.cached_books[path]['author'])) - ''' - Old code testing for PTO - Use this with manuals_sync_mode to decide whether to add to Library|Books - if DEBUG: - self.log.info(" file: %s" % (file._name if isinstance(file,PersistentTemporaryFile) else file)) - # Add to iTunes Library|Books - if isinstance(file,PersistentTemporaryFile): - added = self.iTunes.add(appscript.mactypes.File(file._name)) - else: - added = self.iTunes.add(appscript.mactypes.File(file)) + if DEBUG: + self.log.info( " deleting existing '%s'" % (path)) + self._remove_from_iTunes(self.cached_books[path]) + if self.manual_sync_mode: + dev_book_added = self._remove_from_device(self.cached_books[path]) - ''' # Add to iTunes Library|Books fpath = file @@ -873,152 +863,54 @@ class ITUNES(DevicePlugin): # Report progress if self.report_progress is not None: self.report_progress(i+1/file_count, _('%d of %d') % (i+1, file_count)) + ''' + if isosx: + for (i,file) in enumerate(files): + path = self.path_template % (metadata[i].title, metadata[i].author[0]) + self._remove_existing_copies(path,file,metadata[i]) + fpath = self._get_fpath(file) + db_added, lb_added = self._add_new_copy(fpath, metadata[i]) + thumb = self._cover_to_thumb(path, metadata[i], lb_added, db_added) + this_book = self._create_new_book(fpath, metadata[i], path, db_added, lb_added, thumb) + new_booklist.append(this_book) + self._update_iTunes_metadata(metadata[i], db_added, lb_added, this_book) + + # Add new_book to self.cached_paths + self.cached_books[this_book.path] = { + 'title': metadata[i].title, + 'author': metadata[i].author[0], + 'lib_book': lb_added, + 'dev_book': db_added } + + # Report progress + if self.report_progress is not None: + self.report_progress(i+1/file_count, _('%d of %d') % (i+1, file_count)) elif iswindows: try: pythoncom.CoInitialize() self.iTunes = win32com.client.Dispatch("iTunes.Application") - lib = self.iTunes.LibraryPlaylist for (i,file) in enumerate(files): path = self.path_template % (metadata[i].title, metadata[i].author[0]) - - if self.manual_sync_mode: - # Delete existing from Device|Books, add to self.update_list - # for deletion from booklist[0] during add_books_to_metadata - if path in self.cached_books: - self.update_list.append(self.cached_books[path]) - self._remove_from_device(self.cached_books[path]) - if DEBUG: - self.log.info( " deleting device book '%s'" % (path)) - if not getattr(fpath, 'deleted_after_upload', False): - self._remove_from_iTunes(self.cached_books[path]) - if DEBUG: - self.log.info(" deleting library book '%s'" % path) - else: - if DEBUG: - self.log.info(" '%s' not in cached_books" % metadata[i].title) - else: - # Delete existing from Library|Books, add to self.update_list - # for deletion from booklist[0] during add_books_to_metadata - if path in self.cached_books: - self.update_list.append(self.cached_books[path]) - self._remove_from_iTunes(self.cached_books[path]) - if DEBUG: - self.log.info("ITUNES.upload_books():") - self.log.info( " deleting library book '%s'" % path) - else: - if DEBUG: - self.log.info(" '%s' not in cached_books" % metadata[i].title) - - # If the database copy will be deleted after upload, we have to - # use file (the PersistentTemporaryFile), which will be around until - # calibre exits. - fpath = file - lb_added = None - db_added = None - if not getattr(fpath, 'deleted_after_upload', False): - if getattr(file, 'orig_file_path', None) is not None: - fpath = file.orig_file_path - elif getattr(file, 'name', None) is not None: - fpath = file.name - else: - if DEBUG: - self.log.info(" file will be deleted after upload") - - if self.manual_sync_mode: - db_added = self._add_device_book(fpath, metadata[i]) - if DEBUG: - self.log.info(" file uploaded to Device|Books") - if not getattr(fpath, 'deleted_after_upload', False): - lb_added = self._add_library_book(fpath, metadata[i]) - if DEBUG: - self.log.info(" file added to Library|Books for iTunes:iBooks tracking") - else: - lb_added = self._add_library_book(fpath, metadata[i]) - if DEBUG: - self.log.info(" file added to Library|Books for pending sync") - - # Use calibre cover data as artwork if available + self._remove_existing_copies(path,file,metadata[i]) + fpath = self._get_fpath(file) + db_added, lb_added = self._add_new_copy(fpath, metadata[i]) thumb = self._cover_to_thumb(path, metadata[i], lb_added, db_added) - - # Create a new Book - this_book = Book(metadata[i].title, metadata[i].author[0]) - if lb_added: - try: - this_book.datetime = parse_date(str(lb_added.DateAdded)).timetuple() - except: - pass - elif db_added: - try: - this_book.datetime = parse_date(str(db_added.DateAdded)).timetuple() - except: - pass - this_book.db_id = None - this_book.device_collections = [] - this_book.library_id = lb_added - this_book.path = path - if lb_added: - this_book.size = self._get_device_book_size(fpath, lb_added.Size) - else: - this_book.size = self._get_device_book_size(fpath, db_added.Size) - this_book.thumbnail = thumb - if lb_added: - this_book.iTunes_id = lb_added + this_book = self._create_new_book(fpath, metadata[i], path, db_added, lb_added, thumb) new_booklist.append(this_book) - - # Flesh out the iTunes metadata - if metadata[i].comments: - if lb_added: - lb_added.Comment = (strip_tags.sub('',metadata[i].comments)) - if db_added: - db_added.Comment = (strip_tags.sub('',metadata[i].comments)) - - if metadata[i].rating: - if lb_added: - lb_added.AlbumRating = (metadata[i].rating*10) - # iBooks currently doesn't allow setting rating ... ? - try: - if db_added: - db_added.AlbumRating = (metadata[i].rating*10) - except: - pass - - if lb_added: - lb_added.Description = ("added by calibre %s" % strftime('%Y-%m-%d %H:%M:%S')) - lb_added.Enabled = True - lb_added.SortArtist = (metadata[i].author_sort.title()) - lb_added.SortName = (this_book.title_sorter) - - if db_added: - db_added.Description = ("added by calibre %s" % strftime('%Y-%m-%d %H:%M:%S')) - db_added.Enabled = True - db_added.SortArtist = (metadata[i].author_sort.title()) - db_added.SortName = (this_book.title_sorter) - - # Set genre from metadata - # iTunes grabs the first dc:subject from the opf metadata, - # But we can manually override with first tag starting with alpha - for tag in metadata[i].tags: - if self._is_alpha(tag[0]): - if lb_added: - lb_added.Category = (tag) - if db_added: - db_added.Category = (tag) - break + self._update_iTunes_metadata(metadata[i], db_added, lb_added, this_book) # Add new_book to self.cached_paths self.cached_books[this_book.path] = { 'title': metadata[i].title, 'author': metadata[i].author[0], 'lib_book': lb_added, - 'dev_book': db_added - } + 'dev_book': db_added } # Report progress if self.report_progress is not None: self.report_progress(i+1/file_count, _('%d of %d') % (i+1, file_count)) - finally: pythoncom.CoUninitialize() @@ -1172,6 +1064,30 @@ class ITUNES(DevicePlugin): 'author': metadata.author[0]}) return added + def _add_new_copy(self, fpath, metadata): + ''' + ''' + if DEBUG: + self.log.info("ITUNES._add_new_copy()") + + db_added = None + lb_added = None + + if self.manual_sync_mode: + db_added = self._add_device_book(fpath, metadata) + if DEBUG: + self.log.info(" file uploaded to Device|Books") + if not getattr(fpath, 'deleted_after_upload', False): + lb_added = self._add_library_book(fpath, metadata) + if DEBUG: + self.log.info(" file added to Library|Books for iTunes:iBooks tracking") + else: + lb_added = self._add_library_book(fpath, metadata) + if DEBUG: + self.log.info(" file added to Library|Books for pending sync") + + return db_added, lb_added + def _cover_to_thumb(self, path, metadata, lb_added, db_added): ''' assumes pythoncom wrapper for db_added @@ -1215,6 +1131,51 @@ class ITUNES(DevicePlugin): return thumb + def _create_new_book(self,fpath, metadata, path, db_added, lb_added, thumb): + ''' + ''' + if DEBUG: + self.log.info("ITUNES._create_new_book()") + + this_book = Book(metadata.title, metadata.author[0]) + + this_book.db_id = None + this_book.device_collections = [] + this_book.library_id = lb_added + this_book.path = path + this_book.thumbnail = thumb + this_book.iTunes_id = lb_added + + if isosx: + if lb_added: + this_book.size = self._get_device_book_size(fpath, lb_added.size()) + try: + this_book.datetime = parse_date(str(lb_added.date_added())).timetuple() + except: + pass + elif db_added: + this_book.size = self._get_device_book_size(fpath, db_added.size()) + try: + this_book.datetime = parse_date(str(db_added.date_added())).timetuple() + except: + pass + + elif iswindows: + if lb_added: + this_book.size = self._get_device_book_size(fpath, lb_added.Size) + try: + this_book.datetime = parse_date(str(lb_added.DateAdded)).timetuple() + except: + pass + elif db_added: + this_book.size = self._get_device_book_size(fpath, db_added.Size) + try: + this_book.datetime = parse_date(str(db_added.DateAdded)).timetuple() + except: + pass + + return this_book + def _discover_manual_sync_mode(self, wait=0): ''' Assumes pythoncom for windows @@ -1602,6 +1563,26 @@ class ITUNES(DevicePlugin): self.log.error(" no iPad|Books playlist found") return pl + def _get_fpath(self,file): + ''' + If the database copy will be deleted after upload, we have to + use file (the PersistentTemporaryFile), which will be around until + calibre exits. + ''' + if DEBUG: + self.log.info("ITUNES._get_fpath()") + + fpath = file + if not getattr(fpath, 'deleted_after_upload', False): + if getattr(file, 'orig_file_path', None) is not None: + fpath = file.orig_file_path + elif getattr(file, 'name', None) is not None: + fpath = file.name + else: + if DEBUG: + self.log.info(" file will be deleted after upload") + return fpath + def _get_library_books(self): ''' Populate a dict of paths from iTunes Library|Books @@ -1812,6 +1793,39 @@ class ITUNES(DevicePlugin): self.version[0],self.version[1],self.version[2])) self.log.info(" iTunes_media: %s" % self.iTunes_media) + def _remove_existing_copies(self,path,file,metadata): + ''' + ''' + if DEBUG: + self.log.info("ITUNES._remove_existing_copies()") + + if self.manual_sync_mode: + # Delete existing from Device|Books, add to self.update_list + # for deletion from booklist[0] during add_books_to_metadata + if path in self.cached_books: + self.update_list.append(self.cached_books[path]) + self._remove_from_device(self.cached_books[path]) + if DEBUG: + self.log.info( " deleting device book '%s'" % (path)) + if not getattr(file, 'deleted_after_upload', False): + self._remove_from_iTunes(self.cached_books[path]) + if DEBUG: + self.log.info(" deleting library book '%s'" % path) + else: + if DEBUG: + self.log.info(" '%s' not in cached_books" % metadata.title) + else: + # Delete existing from Library|Books, add to self.update_list + # for deletion from booklist[0] during add_books_to_metadata + if path in self.cached_books: + self.update_list.append(self.cached_books[path]) + self._remove_from_iTunes(self.cached_books[path]) + if DEBUG: + self.log.info( " deleting library book '%s'" % path) + else: + if DEBUG: + self.log.info(" '%s' not in cached_books" % metadata.title) + def _remove_from_device(self, cached_book): ''' Windows assumes pythoncom wrapper @@ -1955,6 +1969,95 @@ class ITUNES(DevicePlugin): finally: pythoncom.CoUninitialize() + def _update_iTunes_metadata(self, metadata, db_added, lb_added, this_book): + ''' + ''' + if DEBUG: + self.log.info("ITUNES._update_iTunes_metadata()") + + strip_tags = re.compile(r'<[^<]*?/?>') + + if isosx: + if metadata.comments: + if lb_added: + lb_added.comment.set(strip_tags.sub('',metadata.comments)) + if db_added: + db_added.comment.set(strip_tags.sub('',metadata.comments)) + + if metadata.rating: + if lb_added: + lb_added.rating.set(metadata.rating*10) + # iBooks currently doesn't allow setting rating ... ? + try: + if db_added: + db_added.rating.set(metadata.rating*10) + except: + pass + + if lb_added: + lb_added.description.set("added by calibre %s" % strftime('%Y-%m-%d %H:%M:%S')) + lb_added.enabled.set(True) + lb_added.sort_artist.set(metadata.author_sort.title()) + lb_added.sort_name.set(this_book.title_sorter) + + if db_added: + db_added.description.set("added by calibre %s" % strftime('%Y-%m-%d %H:%M:%S')) + db_added.enabled.set(True) + db_added.sort_artist.set(metadata.author_sort.title()) + db_added.sort_name.set(this_book.title_sorter) + + # Set genre from metadata + # iTunes grabs the first dc:subject from the opf metadata, + # But we can manually override with first tag starting with alpha + for tag in metadata.tags: + if self._is_alpha(tag[0]): + if lb_added: + lb_added.genre.set(tag) + if db_added: + db_added.genre.set(tag) + break + + + elif iswindows: + if metadata.comments: + if lb_added: + lb_added.Comment = (strip_tags.sub('',metadata.comments)) + if db_added: + db_added.Comment = (strip_tags.sub('',metadata.comments)) + + if metadata.rating: + if lb_added: + lb_added.AlbumRating = (metadata.rating*10) + # iBooks currently doesn't allow setting rating ... ? + try: + if db_added: + db_added.AlbumRating = (metadata.rating*10) + except: + pass + + if lb_added: + lb_added.Description = ("added by calibre %s" % strftime('%Y-%m-%d %H:%M:%S')) + lb_added.Enabled = True + lb_added.SortArtist = (metadata.author_sort.title()) + lb_added.SortName = (this_book.title_sorter) + + if db_added: + db_added.Description = ("added by calibre %s" % strftime('%Y-%m-%d %H:%M:%S')) + db_added.Enabled = True + db_added.SortArtist = (metadata.author_sort.title()) + db_added.SortName = (this_book.title_sorter) + + # Set genre from metadata + # iTunes grabs the first dc:subject from the opf metadata, + # But we can manually override with first tag starting with alpha + for tag in metadata.tags: + if self._is_alpha(tag[0]): + if lb_added: + lb_added.Category = (tag) + if db_added: + db_added.Category = (tag) + break + class BookList(list): ''' A list of books. Each Book object must have the fields: From a88d51134cf3e73c97ceda326faddc28662a90c7 Mon Sep 17 00:00:00 2001 From: Charles Haley <> Date: Thu, 10 Jun 2010 13:00:12 +0100 Subject: [PATCH 066/112] Bug #5774: make ondevice match both author and author_sort --- src/calibre/gui2/device.py | 40 ++++++++++++++++++++++++++++---------- 1 file changed, 30 insertions(+), 10 deletions(-) diff --git a/src/calibre/gui2/device.py b/src/calibre/gui2/device.py index 1445b0f36e..6926c751b2 100644 --- a/src/calibre/gui2/device.py +++ b/src/calibre/gui2/device.py @@ -1140,6 +1140,13 @@ class DeviceMixin(object): in cache['authors']: loc[i] = True continue + # Also check author sort, because it can be used as author in + # some formats + if mi.author_sort and \ + re.sub('(?u)\W|[_]', '', mi.author_sort.lower()) \ + in cache['authors']: + loc[i] = True + continue return loc def set_books_in_library(self, booklists, reset=False): @@ -1152,10 +1159,16 @@ class DeviceMixin(object): mi = db.get_metadata(id, index_is_id=True) title = re.sub('(?u)\W|[_]', '', mi.title.lower()) if title not in self.db_book_title_cache: - self.db_book_title_cache[title] = {'authors':{}, 'db_ids':{}} - authors = authors_to_string(mi.authors).lower() if mi.authors else '' - authors = re.sub('(?u)\W|[_]', '', authors) - self.db_book_title_cache[title]['authors'][authors] = mi + self.db_book_title_cache[title] = \ + {'authors':{}, 'author_sort':{}, 'db_ids':{}} + if mi.authors: + authors = authors_to_string(mi.authors).lower() + authors = re.sub('(?u)\W|[_]', '', authors) + self.db_book_title_cache[title]['authors'][authors] = mi + if mi.author_sort: + aus = mi.author_sort.lower() + aus = re.sub('(?u)\W|[_]', '', aus) + self.db_book_title_cache[title]['author_sort'][aus] = mi self.db_book_title_cache[title]['db_ids'][mi.application_id] = mi self.db_book_uuid_cache.add(mi.uuid) @@ -1186,12 +1199,19 @@ class DeviceMixin(object): book.smart_update(d['db_ids'][book.db_id]) resend_metadata = True continue - book_authors = authors_to_string(book.authors).lower() if book.authors else '' - book_authors = re.sub('(?u)\W|[_]', '', book_authors) - if book_authors in d['authors']: - book.in_library = True - book.smart_update(d['authors'][book_authors]) - resend_metadata = True + if book.authors: + # Compare against both author and author sort, because + # either can appear as the author + book_authors = authors_to_string(book.authors).lower() + book_authors = re.sub('(?u)\W|[_]', '', book_authors) + if book_authors in d['authors']: + book.in_library = True + book.smart_update(d['authors'][book_authors]) + resend_metadata = True + elif book_authors in d['author_sort']: + book.in_library = True + book.smart_update(d['author_sort'][book_authors]) + resend_metadata = True # Set author_sort if it isn't already asort = getattr(book, 'author_sort', None) if not asort and book.authors: From e25b0e7f41de0917255afcc2e5411a30df1caf3d Mon Sep 17 00:00:00 2001 From: Charles Haley <> Date: Thu, 10 Jun 2010 13:48:05 +0100 Subject: [PATCH 067/112] Remove a print statement --- src/calibre/devices/usbms/driver.py | 1 - 1 file changed, 1 deletion(-) diff --git a/src/calibre/devices/usbms/driver.py b/src/calibre/devices/usbms/driver.py index 0cd6a8f79c..6f558b9b34 100644 --- a/src/calibre/devices/usbms/driver.py +++ b/src/calibre/devices/usbms/driver.py @@ -304,7 +304,6 @@ class USBMS(CLI, Device): else: return '(.+?)' template = cls.save_template().rpartition('/')[2] - print 'bftr', template return re.compile(re.sub('{([^}]*)}', replfunc, template) + '([_\d]*$)') @classmethod From 7a67294ae7fd0f3b77e6a7b3a918fea7bff22e4b Mon Sep 17 00:00:00 2001 From: GRiker <griker@hotmail.com> Date: Thu, 10 Jun 2010 09:03:23 -0600 Subject: [PATCH 068/112] GwR revisions apple driver 0.5 --- src/calibre/devices/apple/driver.py | 332 +++++++++++++++++----------- 1 file changed, 201 insertions(+), 131 deletions(-) diff --git a/src/calibre/devices/apple/driver.py b/src/calibre/devices/apple/driver.py index fc7d56e496..1bff7b9779 100644 --- a/src/calibre/devices/apple/driver.py +++ b/src/calibre/devices/apple/driver.py @@ -114,6 +114,7 @@ class ITUNES(DevicePlugin): # Properties cached_books = {} cache_dir = os.path.join(config_dir, 'caches', 'itunes') + description_prefix = "added by calibre" ejected = False iTunes= None iTunes_media = None @@ -620,6 +621,7 @@ class ITUNES(DevicePlugin): if DEBUG: self.log.info("ITUNES.remove_books_from_metadata()") for path in paths: + self._dump_cached_book(self.cached_books[path]) if self.cached_books[path]['lib_book']: # Remove from the booklist for i,book in enumerate(booklists[0]): @@ -881,6 +883,7 @@ class ITUNES(DevicePlugin): 'author': metadata[i].author[0], 'lib_book': lb_added, 'dev_book': db_added } + self._dump_cached_books(header="after upload_books()") # Report progress if self.report_progress is not None: @@ -928,7 +931,7 @@ class ITUNES(DevicePlugin): def _add_device_book(self,fpath, metadata): ''' ''' - self.log.info("ITUNES._add_device_book()") + self.log.info(" ITUNES._add_device_book()") if isosx: if 'iPod' in self.sources: connected_device = self.sources['iPod'] @@ -961,7 +964,7 @@ class ITUNES(DevicePlugin): break else: if DEBUG: - self.log.info(" no Books playlist found") + self.log.info(" no Books playlist found") # Add the passed book to the Device|Books playlist if pl: @@ -976,7 +979,7 @@ class ITUNES(DevicePlugin): op_status = pl.AddFiles(fa) if DEBUG: - sys.stdout.write(" uploading '%s' to device ..." % metadata.title) + sys.stdout.write(" uploading '%s' to device ..." % metadata.title) sys.stdout.flush() while op_status.InProgress: @@ -991,7 +994,7 @@ class ITUNES(DevicePlugin): # This doesn't seem to work with device, just Library if False: if DEBUG: - sys.stdout.write(" waiting for handle to added '%s' ..." % metadata.title) + sys.stdout.write(" waiting for handle to added '%s' ..." % metadata.title) sys.stdout.flush() while op_status.Tracks is None: time.sleep(0.5) @@ -1015,11 +1018,11 @@ class ITUNES(DevicePlugin): def _add_library_book(self,file, metadata): ''' - assumes pythoncom wrapper + windows assumes pythoncom wrapper ''' - self.log.info("ITUNES._add_library_book()") + self.log.info(" ITUNES._add_library_book()") if isosx: - print "to be implemented" + added = self.iTunes.add(appscript.mactypes.File(file)) elif iswindows: lib = self.iTunes.LibraryPlaylist @@ -1028,12 +1031,12 @@ class ITUNES(DevicePlugin): fa = FileArray(file_s) op_status = lib.AddFiles(fa) if DEBUG: - self.log.info(" file added to Library|Books") + self.log.info(" file added to Library|Books") - self.log.info(" iTunes adding '%s'" % file) + self.log.info(" iTunes adding '%s'" % file) if DEBUG: - sys.stdout.write(" iTunes copying '%s' ..." % metadata.title) + sys.stdout.write(" iTunes copying '%s' ..." % metadata.title) sys.stdout.flush() while op_status.InProgress: @@ -1047,7 +1050,7 @@ class ITUNES(DevicePlugin): if True: if DEBUG: - sys.stdout.write(" waiting for handle to added '%s' ..." % metadata.title) + sys.stdout.write(" waiting for handle to added '%s' ..." % metadata.title) sys.stdout.flush() while op_status.Tracks is None: time.sleep(0.5) @@ -1062,13 +1065,13 @@ class ITUNES(DevicePlugin): added = self._find_library_book( {'title': metadata.title, 'author': metadata.author[0]}) - return added + return added def _add_new_copy(self, fpath, metadata): ''' ''' if DEBUG: - self.log.info("ITUNES._add_new_copy()") + self.log.info(" ITUNES._add_new_copy()") db_added = None lb_added = None @@ -1076,15 +1079,15 @@ class ITUNES(DevicePlugin): if self.manual_sync_mode: db_added = self._add_device_book(fpath, metadata) if DEBUG: - self.log.info(" file uploaded to Device|Books") + self.log.info(" file uploaded to Device|Books") if not getattr(fpath, 'deleted_after_upload', False): lb_added = self._add_library_book(fpath, metadata) if DEBUG: - self.log.info(" file added to Library|Books for iTunes:iBooks tracking") + self.log.info(" file added to Library|Books for iTunes:iBooks tracking") else: lb_added = self._add_library_book(fpath, metadata) if DEBUG: - self.log.info(" file added to Library|Books for pending sync") + self.log.info(" file added to Library|Books for pending sync") return db_added, lb_added @@ -1092,20 +1095,42 @@ class ITUNES(DevicePlugin): ''' assumes pythoncom wrapper for db_added ''' - self.log.info("ITUNES._cover_to_thumb()") + self.log.info(" ITUNES._cover_to_thumb()") thumb = None if metadata.cover: - if lb_added: - if lb_added.Artwork.Count: - lb_added.Artwork.Item(1).SetArtworkFromFile(metadata.cover) - else: - lb_added.AddArtworkFromFile(metadata.cover) + if isosx: + cover_data = open(metadata.cover,'rb') + if lb_added: + lb_added.artworks[1].data_.set(cover_data.read()) - if db_added: - if db_added.Artwork.Count: - db_added.Artwork.Item(1).SetArtworkFromFile(metadata.cover) - else: - db_added.AddArtworkFromFile(metadata.cover) + if db_added: + # The following command generates an error, but the artwork does in fact + # get sent to the device. Seems like a bug in Apple's automation interface + try: + db_added.artworks[1].data_.set(cover_data.read()) + except: + if DEBUG: + self.log.warning(" iTunes automation interface generated an error" + " when adding artwork to '%s'" % metadata.title) + #import traceback + #traceback.print_exc() + #from calibre import ipython + #ipython(user_ns=locals()) + pass + + + elif iswindows: + if lb_added: + if lb_added.Artwork.Count: + lb_added.Artwork.Item(1).SetArtworkFromFile(metadata.cover) + else: + lb_added.AddArtworkFromFile(metadata.cover) + + if db_added: + if db_added.Artwork.Count: + db_added.Artwork.Item(1).SetArtworkFromFile(metadata.cover) + else: + db_added.AddArtworkFromFile(metadata.cover) try: # Resize for thumb @@ -1119,7 +1144,7 @@ class ITUNES(DevicePlugin): # Refresh the thumbnail cache if DEBUG: - self.log.info( " refreshing cached thumb for '%s'" % metadata.title) + self.log.info( " refreshing cached thumb for '%s'" % metadata.title) archive_path = os.path.join(self.cache_dir, "thumbs.zip") zfw = zipfile.ZipFile(archive_path, mode='a') thumb_path = path.rpartition('.')[0] + '.jpg' @@ -1127,7 +1152,7 @@ class ITUNES(DevicePlugin): zfw.close() except: self.problem_titles.append("'%s' by %s" % (metadata.title, metadata.author[0])) - self.log.error(" error converting '%s' to thumb for '%s'" % (metadata.cover,metadata.title)) + self.log.error(" error converting '%s' to thumb for '%s'" % (metadata.cover,metadata.title)) return thumb @@ -1135,7 +1160,7 @@ class ITUNES(DevicePlugin): ''' ''' if DEBUG: - self.log.info("ITUNES._create_new_book()") + self.log.info(" ITUNES._create_new_book()") this_book = Book(metadata.title, metadata.author[0]) @@ -1183,7 +1208,7 @@ class ITUNES(DevicePlugin): ''' if DEBUG: - self.log.info("ITUNES._discover_manual_sync_mode()") + self.log.info(" ITUNES._discover_manual_sync_mode()") if isosx: connected_device = self.sources['iPod'] dev_books = None @@ -1193,18 +1218,18 @@ class ITUNES(DevicePlugin): dev_books = pl.file_tracks() break else: - self.log.error(" book_playlist not found") + self.log.error(" book_playlist not found") if len(dev_books): first_book = dev_books[0] #if DEBUG: - #self.log.info(" determing manual mode by modifying '%s' by %s" % (first_book.name(), first_book.artist())) + #self.log.info(" determing manual mode by modifying '%s' by %s" % (first_book.name(), first_book.artist())) try: first_book.bpm.set(0) self.manual_sync_mode = True except: self.manual_sync_mode = False - self.log.info(" iTunes.manual_sync_mode: %s" % self.manual_sync_mode) + self.log.info(" iTunes.manual_sync_mode: %s" % self.manual_sync_mode) elif iswindows: if wait: @@ -1228,7 +1253,7 @@ class ITUNES(DevicePlugin): self.manual_sync_mode = True except: self.manual_sync_mode = False - self.log.info(" iTunes.manual_sync_mode: %s" % self.manual_sync_mode) + self.log.info(" iTunes.manual_sync_mode: %s" % self.manual_sync_mode) def _dump_booklist(self, booklist, header=None): ''' @@ -1246,6 +1271,31 @@ class ITUNES(DevicePlugin): self.log.info("%-40.40s %-30.30s" % (book.title, book.author)) + def _dump_cached_book(self, cached_book, header=None): + ''' + ''' + if header: + msg = '%s' % header + self.log.info(msg) + self.log.info( "%s" % ('-' * len(msg))) + if isosx: + self.log.info("%-40.40s %-30.30s %-10.10s %-10.10s" % + ('title', + 'author', + 'lib_book', + 'dev_book')) + self.log.info("%-40.40s %-30.30s %-10.10s %-10.10s" % + (cached_book['title'], + cached_book['author'], + str(cached_book['lib_book'])[-9:], + str(cached_book['dev_book'])[-9:])) + elif iswindows: + self.log.info("%-40.40s %-30.30s" % + (cached_book['title'], + cached_book['author'])) + + self.log.info() + def _dump_cached_books(self, header=None): ''' ''' @@ -1254,6 +1304,11 @@ class ITUNES(DevicePlugin): self.log.info(msg) self.log.info( "%s" % ('-' * len(msg))) if isosx: + self.log.info("%-40.40s %-30.30s %-10.10s %-10.10s" % + ('title', + 'author', + 'lib_book', + 'dev_book')) for cb in self.cached_books.keys(): self.log.info("%-40.40s %-30.30s %-10.10s %-10.10s" % (self.cached_books[cb]['title'], @@ -1318,8 +1373,8 @@ class ITUNES(DevicePlugin): ''' if iswindows: if DEBUG: - self.log.info("ITUNES._find_device_book()") - self.log.info(" looking for '%s' by %s" % (cached_book['title'], cached_book['author'])) + self.log.info(" ITUNES._find_device_book()") + self.log.info(" looking for '%s' by %s" % (cached_book['title'], cached_book['author'])) dev_books = self._get_device_books_playlist() attempts = 9 @@ -1328,17 +1383,17 @@ class ITUNES(DevicePlugin): hits = dev_books.Search(cached_book['author'],self.SearchField.index('Artists')) if hits: for hit in hits: - self.log.info(" evaluating '%s' by %s" % (hit.Name, hit.Artist)) + self.log.info(" evaluating '%s' by %s" % (hit.Name, hit.Artist)) if hit.Name == cached_book['title']: - self.log.info(" matched '%s' by %s" % (hit.Name, hit.Artist)) + self.log.info(" matched '%s' by %s" % (hit.Name, hit.Artist)) return hit attempts -= 1 time.sleep(0.5) if DEBUG: - self.log.warning(" attempt #%d" % (10 - attempts)) + self.log.warning(" attempt #%d" % (10 - attempts)) if DEBUG: - self.log.error(" search for '%s' yielded no hits" % cached_book['title']) + self.log.error(" search for '%s' yielded no hits" % cached_book['title']) return None def _find_library_book(self, cached_book): @@ -1347,18 +1402,18 @@ class ITUNES(DevicePlugin): ''' if iswindows: if DEBUG: - self.log.info("ITUNES._find_library_book()") - self.log.info(" looking for '%s' by %s" % (cached_book['title'], cached_book['author'])) + self.log.info(" ITUNES._find_library_book()") + self.log.info(" looking for '%s' by %s" % (cached_book['title'], cached_book['author'])) for source in self.iTunes.sources: if source.Kind == self.Sources.index('Library'): lib = source if DEBUG: - self.log.info(" Library source: '%s' kind: %s" % (lib.Name, self.Sources[lib.Kind])) + self.log.info(" Library source: '%s' kind: %s" % (lib.Name, self.Sources[lib.Kind])) break else: if DEBUG: - self.log.info(" Library source not found") + self.log.info(" Library source not found") if lib is not None: lib_books = None @@ -1366,12 +1421,12 @@ class ITUNES(DevicePlugin): if pl.Kind == self.PlaylistKind.index('User') and \ pl.SpecialKind == self.PlaylistSpecialKind.index('Books'): if DEBUG: - self.log.info(" Books playlist: '%s'" % (pl.Name)) + self.log.info(" Books playlist: '%s'" % (pl.Name)) lib_books = pl break else: if DEBUG: - self.log.error(" no Books playlist found") + self.log.error(" no Books playlist found") attempts = 9 while attempts: @@ -1379,17 +1434,17 @@ class ITUNES(DevicePlugin): hits = lib_books.Search(cached_book['author'],self.SearchField.index('Artists')) if hits: for hit in hits: - self.log.info(" evaluating '%s' by %s" % (hit.Name, hit.Artist)) + self.log.info(" evaluating '%s' by %s" % (hit.Name, hit.Artist)) if hit.Name == cached_book['title']: - self.log.info(" matched '%s' by %s" % (hit.Name, hit.Artist)) + self.log.info(" matched '%s' by %s" % (hit.Name, hit.Artist)) return hit attempts -= 1 time.sleep(0.5) if DEBUG: - self.log.warning(" attempt #%d" % (10 - attempts)) + self.log.warning(" attempt #%d" % (10 - attempts)) if DEBUG: - self.log.error(" search for '%s' yielded no hits" % cached_book['title']) + self.log.error(" search for '%s' yielded no hits" % cached_book['title']) return None def _generate_thumbnail(self, book_path, book): @@ -1411,6 +1466,7 @@ class ITUNES(DevicePlugin): else: return thumb_data + self.log.info(" ITUNES._generate_thumbnail()") if isosx: try: # Resize the cover @@ -1424,21 +1480,19 @@ class ITUNES(DevicePlugin): # Cache the tagged thumb if DEBUG: - self.log.info("ITUNES._generate_thumbnail(): generated thumb for '%s', caching" % book.name()) + self.log.info(" generated thumb for '%s', caching" % book.name()) zfw.writestr(thumb_path, thumb.getvalue()) zfw.close() return thumb.getvalue() except: - self.log.error("ITUNES._generate_thumbnail(): error generating thumb for '%s'" % book.name()) + self.log.error(" error generating thumb for '%s'" % book.name()) return None elif iswindows: - if DEBUG: - self.log.info("ITUNES._generate_thumbnail()") if not book.Artwork.Count: if DEBUG: - self.log.info(" no artwork available") + self.log.info(" no artwork available") return None # Save the cover from iTunes @@ -1455,12 +1509,12 @@ class ITUNES(DevicePlugin): # Cache the tagged thumb if DEBUG: - self.log.info(" generated thumb for '%s', caching" % book.Name) + self.log.info(" generated thumb for '%s', caching" % book.Name) zfw.writestr(thumb_path, thumb.getvalue()) zfw.close() return thumb.getvalue() except: - self.log.error(" error generating thumb for '%s'" % book.Name) + self.log.error(" error generating thumb for '%s'" % book.Name) return None def _get_device_book_size(self, file, compressed_size): @@ -1473,9 +1527,9 @@ class ITUNES(DevicePlugin): for file in myZipList: exploded_file_size += file.file_size if DEBUG: - self.log.info("ITUNES._get_device_book_size()") - self.log.info(" %d items in archive" % len(myZipList)) - self.log.info(" compressed: %d exploded: %d" % (compressed_size, exploded_file_size)) + self.log.info(" ITUNES._get_device_book_size()") + self.log.info(" %d items in archive" % len(myZipList)) + self.log.info(" compressed: %d exploded: %d" % (compressed_size, exploded_file_size)) return exploded_file_size def _get_device_books(self): @@ -1483,7 +1537,7 @@ class ITUNES(DevicePlugin): Assumes pythoncom wrapper for Windows ''' if DEBUG: - self.log.info("\nITUNES._get_device_books()") + self.log.info("\n ITUNES._get_device_books()") device_books = [] if isosx: @@ -1493,20 +1547,20 @@ class ITUNES(DevicePlugin): for pl in device.playlists(): if pl.special_kind() == appscript.k.Books: if DEBUG: - self.log.info(" Book playlist: '%s'" % (pl.name())) + self.log.info(" Book playlist: '%s'" % (pl.name())) books = pl.file_tracks() break else: - self.log.error(" book_playlist not found") + self.log.error(" book_playlist not found") for book in books: # This may need additional entries for international iTunes users if book.kind() in ['MPEG audio file']: if DEBUG: - self.log.info(" ignoring '%s' of type '%s'" % (book.name(), book.kind())) + self.log.info(" ignoring '%s' of type '%s'" % (book.name(), book.kind())) else: if DEBUG: - self.log.info(" adding %-30.30s [%s]" % (book.name(), book.kind())) + self.log.info(" adding %-30.30s [%s]" % (book.name(), book.kind())) device_books.append(book) elif iswindows: @@ -1521,21 +1575,21 @@ class ITUNES(DevicePlugin): if pl.Kind == self.PlaylistKind.index('User') and \ pl.SpecialKind == self.PlaylistSpecialKind.index('Books'): if DEBUG: - self.log.info(" Books playlist: '%s'" % (pl.Name)) + self.log.info(" Books playlist: '%s'" % (pl.Name)) dev_books = pl.Tracks break else: if DEBUG: - self.log.info(" no Books playlist found") + self.log.info(" no Books playlist found") for book in dev_books: # This may need additional entries for international iTunes users if book.KindAsString in ['MPEG audio file']: if DEBUG: - self.log.info(" ignoring '%s' of type '%s'" % (book.Name, book.KindAsString)) + self.log.info(" ignoring '%s' of type '%s'" % (book.Name, book.KindAsString)) else: if DEBUG: - self.log.info(" adding %-30.30s [%s]" % (book.Name, book.KindAsString)) + self.log.info(" adding %-30.30s [%s]" % (book.Name, book.KindAsString)) device_books.append(book) finally: @@ -1547,6 +1601,8 @@ class ITUNES(DevicePlugin): ''' assumes pythoncom wrapper ''' + if DEBUG: + self.log.info(" ITUNES._get_device_books_playlist()") if iswindows: if 'iPod' in self.sources: pl = None @@ -1560,7 +1616,7 @@ class ITUNES(DevicePlugin): break else: if DEBUG: - self.log.error(" no iPad|Books playlist found") + self.log.error(" no iPad|Books playlist found") return pl def _get_fpath(self,file): @@ -1570,7 +1626,7 @@ class ITUNES(DevicePlugin): calibre exits. ''' if DEBUG: - self.log.info("ITUNES._get_fpath()") + self.log.info(" ITUNES._get_fpath()") fpath = file if not getattr(fpath, 'deleted_after_upload', False): @@ -1580,7 +1636,7 @@ class ITUNES(DevicePlugin): fpath = file.name else: if DEBUG: - self.log.info(" file will be deleted after upload") + self.log.info(" file will be deleted after upload") return fpath def _get_library_books(self): @@ -1588,7 +1644,7 @@ class ITUNES(DevicePlugin): Populate a dict of paths from iTunes Library|Books ''' if DEBUG: - self.log.info("\nITUNES._get_library_books()") + self.log.info("\n ITUNES._get_library_books()") library_books = {} lib = None @@ -1598,11 +1654,11 @@ class ITUNES(DevicePlugin): if source.kind() == appscript.k.library: lib = source if DEBUG: - self.log.info(" Library source: '%s'" % (lib.name())) + self.log.info(" Library source: '%s'" % (lib.name())) break else: if DEBUG: - self.log.error(' Library source not found') + self.log.error(' Library source not found') if lib is not None: lib_books = None @@ -1610,29 +1666,37 @@ class ITUNES(DevicePlugin): for pl in lib.playlists(): if pl.special_kind() == appscript.k.Books: if DEBUG: - self.log.info(" Books playlist: '%s'" % (pl.name())) + self.log.info(" Books playlist: '%s'" % (pl.name())) break else: if DEBUG: - self.log.info(" no Library|Books playlist found") + self.log.info(" no Library|Books playlist found") lib_books = pl.file_tracks() for book in lib_books: # This may need additional entries for international iTunes users if book.kind() in ['MPEG audio file']: if DEBUG: - self.log.info(" ignoring '%s' of type '%s'" % (book.name(), book.kind())) + self.log.info(" ignoring '%s' of type '%s'" % (book.name(), book.kind())) else: - if DEBUG: - self.log.info(" adding %-30.30s [%s]" % (book.name(), book.kind())) + # Remove calibre orphans + if str(book.description()).startswith(self.description_prefix): + if book.location() == appscript.k.missing_value: + if DEBUG: + self.log.info(" deleting calibre orphan '%s' from Library|Books" % book.name()) + book.delete() + continue + path = self.path_template % (book.name(), book.artist()) library_books[path] = book + if DEBUG: + self.log.info(" adding %-30.30s [%s]" % (book.name(), book.kind())) else: if DEBUG: - self.log.info('No Library playlists') + self.log.info(' no Library playlists') else: if DEBUG: - self.log.info(' no Library found') + self.log.info(' no Library found') elif iswindows: lib = None @@ -1671,10 +1735,18 @@ class ITUNES(DevicePlugin): if DEBUG: self.log.info(" ignoring %-30.30s of type '%s'" % (book.Name, book.KindAsString)) else: - if DEBUG: - self.log.info(" adding %-30.30s [%s]" % (book.Name, book.KindAsString)) + # Remove calibre orphans + if book.Description.startswith(self.description_prefix): + if not book.Location: + if DEBUG: + self.log.info(" deleting calibre orphan '%s' from Library|Books" % book.Name) + book.Delete() + continue + path = self.path_template % (book.Name, book.Artist) library_books[path] = book + if DEBUG: + self.log.info(" adding %-30.30s [%s]" % (book.Name, book.KindAsString)) except: if DEBUG: self.log.info(" no books in library") @@ -1730,7 +1802,7 @@ class ITUNES(DevicePlugin): ''' ''' if DEBUG: - self.log.info("ITUNES:_launch_iTunes():\n Instantiating iTunes") + self.log.info(" ITUNES:_launch_iTunes():\n Instantiating iTunes") if isosx: ''' @@ -1756,13 +1828,13 @@ class ITUNES(DevicePlugin): if os.path.exists(media_dir): self.iTunes_media = media_dir else: - self.log.error(" could not confirm valid iTunes.media_dir from %s" % 'com.apple.itunes') + self.log.error(" could not confirm valid iTunes.media_dir from %s" % 'com.apple.itunes') if DEBUG: - self.log.info(" [%s - %s (%s), driver version %d.%d.%d]" % + self.log.info(" [%s - %s (%s), driver version %d.%d.%d]" % (self.iTunes.name(), self.iTunes.version(), initial_status, self.version[0],self.version[1],self.version[2])) - self.log.info(" iTunes_media: %s" % self.iTunes_media) + self.log.info(" iTunes_media: %s" % self.iTunes_media) if iswindows: ''' Launch iTunes if not already running @@ -1783,21 +1855,21 @@ class ITUNES(DevicePlugin): if os.path.exists(media_dir): self.iTunes_media = media_dir else: - self.log.error(" could not extract valid iTunes.media_dir from %s" % self.iTunes.LibraryXMLPath) - self.log.error(" %s" % string.parent.prettify()) - self.log.error(" '%s' not found" % media_dir) + self.log.error(" could not extract valid iTunes.media_dir from %s" % self.iTunes.LibraryXMLPath) + self.log.error(" %s" % string.parent.prettify()) + self.log.error(" '%s' not found" % media_dir) if DEBUG: - self.log.info( " [%s - %s (%s), driver version %d.%d.%d]" % + self.log.info(" [%s - %s (%s), driver version %d.%d.%d]" % (self.iTunes.Windows[0].name, self.iTunes.Version, initial_status, self.version[0],self.version[1],self.version[2])) - self.log.info(" iTunes_media: %s" % self.iTunes_media) + self.log.info(" iTunes_media: %s" % self.iTunes_media) def _remove_existing_copies(self,path,file,metadata): ''' ''' if DEBUG: - self.log.info("ITUNES._remove_existing_copies()") + self.log.info(" ITUNES._remove_existing_copies()") if self.manual_sync_mode: # Delete existing from Device|Books, add to self.update_list @@ -1806,14 +1878,14 @@ class ITUNES(DevicePlugin): self.update_list.append(self.cached_books[path]) self._remove_from_device(self.cached_books[path]) if DEBUG: - self.log.info( " deleting device book '%s'" % (path)) + self.log.info( " deleting device book '%s'" % (path)) if not getattr(file, 'deleted_after_upload', False): self._remove_from_iTunes(self.cached_books[path]) if DEBUG: - self.log.info(" deleting library book '%s'" % path) + self.log.info(" deleting library book '%s'" % path) else: if DEBUG: - self.log.info(" '%s' not in cached_books" % metadata.title) + self.log.info(" '%s' not in cached_books" % metadata.title) else: # Delete existing from Library|Books, add to self.update_list # for deletion from booklist[0] during add_books_to_metadata @@ -1821,21 +1893,20 @@ class ITUNES(DevicePlugin): self.update_list.append(self.cached_books[path]) self._remove_from_iTunes(self.cached_books[path]) if DEBUG: - self.log.info( " deleting library book '%s'" % path) + self.log.info( " deleting library book '%s'" % path) else: if DEBUG: - self.log.info(" '%s' not in cached_books" % metadata.title) + self.log.info(" '%s' not in cached_books" % metadata.title) def _remove_from_device(self, cached_book): ''' Windows assumes pythoncom wrapper ''' - self.log.info("ITUNES._remove_from_device()") + self.log.info(" ITUNES._remove_from_device()") if isosx: if DEBUG: - self.log.info(" deleting %s" % cached_book['dev_book']) + self.log.info(" deleting %s" % cached_book['dev_book']) result = cached_book['dev_book'].delete() - print "result: %s" % result elif iswindows: dev_pl = self._get_device_books_playlist() @@ -1843,10 +1914,10 @@ class ITUNES(DevicePlugin): if hits: for hit in hits: if DEBUG: - self.log.info(" evaluating '%s' by %s" % (hit.Name, hit.Artist)) + self.log.info(" evaluating '%s' by %s" % (hit.Name, hit.Artist)) if hit.Name == cached_book['title']: if DEBUG: - self.log.info(" deleting '%s' by %s" % (hit.Name, hit.Artist)) + self.log.info(" deleting '%s' by %s" % (hit.Name, hit.Artist)) results = hit.Delete() break @@ -1856,34 +1927,36 @@ class ITUNES(DevicePlugin): We only want to delete stored copies if the file is stored in iTunes We don't want to delete files stored outside of iTunes ''' + if DEBUG: + self.log.info(" ITUNES._remove_from_iTunes():") + if isosx: storage_path = os.path.split(cached_book['lib_book'].location().path) if cached_book['lib_book'].location().path.startswith(self.iTunes_media): title_storage_path = storage_path[0] if DEBUG: - self.log.info("ITUNES._remove_from_iTunes():") - self.log.info(" removing title_storage_path: %s" % title_storage_path) + self.log.info(" removing title_storage_path: %s" % title_storage_path) try: shutil.rmtree(title_storage_path) except: - self.log.info(" '%s' not empty" % title_storage_path) + self.log.info(" '%s' not empty" % title_storage_path) # Clean up title/author directories author_storage_path = os.path.split(title_storage_path)[0] - self.log.info(" author_storage_path: %s" % author_storage_path) + self.log.info(" author_storage_path: %s" % author_storage_path) author_files = os.listdir(author_storage_path) if '.DS_Store' in author_files: author_files.pop(author_files.index('.DS_Store')) if not author_files: shutil.rmtree(author_storage_path) if DEBUG: - self.log.info(" removing empty author_storage_path") + self.log.info(" removing empty author_storage_path") else: if DEBUG: - self.log.info(" author_storage_path not empty (%d objects):" % len(author_files)) - self.log.info(" %s" % '\n'.join(author_files)) + self.log.info(" author_storage_path not empty (%d objects):" % len(author_files)) + self.log.info(" %s" % '\n'.join(author_files)) else: - self.log.info(" '%s' stored external to iTunes, no files deleted" % cached_book['title']) + self.log.info(" '%s' stored external to iTunes, no files deleted" % cached_book['title']) self.iTunes.delete(cached_book['lib_book']) @@ -1892,42 +1965,40 @@ class ITUNES(DevicePlugin): Assume we're wrapped in a pythoncom Windows stores the book under a common author directory, so we just delete the .epub ''' - if DEBUG: - self.log.info("ITUNES._remove_from_iTunes():\n '%s'" % cached_book['title']) + book = self._find_library_book(cached_book) if book: path = book.Location storage_path = os.path.split(book.Location) if book.Location.startswith(self.iTunes_media): if DEBUG: - self.log.info("ITUNES._remove_from_iTunes():") - self.log.info(" removing '%s' at %s" % + self.log.info(" removing '%s' at %s" % (cached_book['title'], path)) try: os.remove(path) except: - self.log.warning(" could not find '%s' in iTunes storage" % path) + self.log.warning(" could not find '%s' in iTunes storage" % path) try: os.rmdir(storage_path[0]) - self.log.info(" removed folder '%s'" % storage_path[0]) + self.log.info(" removed folder '%s'" % storage_path[0]) except: - self.log.info(" folder '%s' not found or not empty" % storage_path[0]) + self.log.info(" folder '%s' not found or not empty" % storage_path[0]) # Delete from iTunes database else: - self.log.info(" '%s' stored external to iTunes, no files deleted" % cached_book['title']) + self.log.info(" '%s' stored external to iTunes, no files deleted" % cached_book['title']) book.Delete() else: - self.log.warning(" could not find '%s' in iTunes database" % cached_book['title']) + self.log.warning(" could not find '%s' in iTunes database" % cached_book['title']) def _update_device(self, msg='', wait=True): ''' Trigger a sync, wait for completion ''' if DEBUG: - self.log.info("ITUNES:_update_device():\n %s" % msg) + self.log.info(" ITUNES:_update_device():\n %s" % msg) if isosx: self.iTunes.update() @@ -1935,7 +2006,7 @@ class ITUNES(DevicePlugin): if wait: # This works if iTunes has books not yet synced to iPad. if DEBUG: - sys.stdout.write(" waiting for iPad sync to complete ...") + sys.stdout.write(" waiting for iPad sync to complete ...") sys.stdout.flush() while len(self._get_device_books()) != (len(self._get_library_books()) + len(self._get_purchased_book_ids())): if DEBUG: @@ -1950,7 +2021,7 @@ class ITUNES(DevicePlugin): self.iTunes.UpdateIPod() if wait: if DEBUG: - sys.stdout.write(" waiting for iPad sync to complete ...") + sys.stdout.write(" waiting for iPad sync to complete ...") sys.stdout.flush() while True: db_count = len(self._get_device_books()) @@ -1973,7 +2044,7 @@ class ITUNES(DevicePlugin): ''' ''' if DEBUG: - self.log.info("ITUNES._update_iTunes_metadata()") + self.log.info(" ITUNES._update_iTunes_metadata()") strip_tags = re.compile(r'<[^<]*?/?>') @@ -1995,13 +2066,13 @@ class ITUNES(DevicePlugin): pass if lb_added: - lb_added.description.set("added by calibre %s" % strftime('%Y-%m-%d %H:%M:%S')) + lb_added.description.set("%s %s" % (self.description_prefix,strftime('%Y-%m-%d %H:%M:%S'))) lb_added.enabled.set(True) lb_added.sort_artist.set(metadata.author_sort.title()) lb_added.sort_name.set(this_book.title_sorter) if db_added: - db_added.description.set("added by calibre %s" % strftime('%Y-%m-%d %H:%M:%S')) + db_added.description.set("%s %s" % (self.description_prefix,strftime('%Y-%m-%d %H:%M:%S'))) db_added.enabled.set(True) db_added.sort_artist.set(metadata.author_sort.title()) db_added.sort_name.set(this_book.title_sorter) @@ -2036,14 +2107,13 @@ class ITUNES(DevicePlugin): pass if lb_added: - lb_added.Description = ("added by calibre %s" % strftime('%Y-%m-%d %H:%M:%S')) + lb_added.Description = ("%s %s" % (self.description_prefix,strftime('%Y-%m-%d %H:%M:%S'))) lb_added.Enabled = True lb_added.SortArtist = (metadata.author_sort.title()) lb_added.SortName = (this_book.title_sorter) if db_added: - db_added.Description = ("added by calibre %s" % strftime('%Y-%m-%d %H:%M:%S')) - db_added.Enabled = True + db_added.Description = ("%s %s" % (self.description_prefix,strftime('%Y-%m-%d %H:%M:%S'))) db_added.SortArtist = (metadata.author_sort.title()) db_added.SortName = (this_book.title_sorter) From d2677fc1bb1bc83251e42a1bce5f78f922add53e Mon Sep 17 00:00:00 2001 From: Charles Haley <> Date: Thu, 10 Jun 2010 17:21:17 +0100 Subject: [PATCH 069/112] Fixup date on windows in sony driver --- src/calibre/devices/prs505/sony_cache.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/calibre/devices/prs505/sony_cache.py b/src/calibre/devices/prs505/sony_cache.py index 5542e28d90..413d6959a6 100644 --- a/src/calibre/devices/prs505/sony_cache.py +++ b/src/calibre/devices/prs505/sony_cache.py @@ -12,7 +12,7 @@ from uuid import uuid4 from lxml import etree -from calibre import prints, guess_type +from calibre import prints, guess_type, iswindows from calibre.devices.errors import DeviceError from calibre.devices.usbms.driver import debug_print from calibre.constants import DEBUG @@ -423,7 +423,10 @@ class XMLCache(object): return ans def update_text_record(self, record, book, path, bl_index): - timestamp = os.path.getctime(path) + timestamp = os.path.getmtime(path) + # Correct for MS DST time 'adjustment' + if iswindows and time.daylight: + timestamp -= time.altzone - time.timezone date = strftime(timestamp) if date != record.get('date', None): record.set('date', date) From 624dfff639b159f62b34d9c5e9f2e31f0cf359b1 Mon Sep 17 00:00:00 2001 From: Kovid Goyal <kovid@kovidgoyal.net> Date: Thu, 10 Jun 2010 10:42:07 -0600 Subject: [PATCH 070/112] Fix #5749 (SMH news feed broken) --- resources/recipes/smh.recipe | 6 +++--- src/calibre/web/feeds/__init__.py | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/resources/recipes/smh.recipe b/resources/recipes/smh.recipe index 21643b9611..b5c7f4d54e 100644 --- a/resources/recipes/smh.recipe +++ b/resources/recipes/smh.recipe @@ -21,7 +21,7 @@ class Smh_au(BasicNewsRecipe): language = 'en_AU' remove_empty_feeds = True masthead_url = 'http://images.smh.com.au/2010/02/02/1087188/smh-620.jpg' - publication_type = 'newspaper' + publication_type = 'newspaper' extra_css = ' h1{font-family: Georgia,"Times New Roman",Times,serif } body{font-family: Arial,Helvetica,sans-serif} .cT-imageLandscape{font-size: x-small} ' conversion_options = { @@ -47,7 +47,7 @@ class Smh_au(BasicNewsRecipe): for itimg in soup.findAll('img',src=True): if itimg['src'].endswith('frontpage.jpg'): self.cover_url = itimg['src'] - + for item in soup.findAll(attrs={'class':'cN-storyHeadlineLead cfix'}): description = '' title_prefix = '' @@ -65,4 +65,4 @@ class Smh_au(BasicNewsRecipe): ,'url' :url ,'description':description }) - return [(soup.head.title.string, articles)] + return [(self.tag_to_string(soup.find('title')), articles)] diff --git a/src/calibre/web/feeds/__init__.py b/src/calibre/web/feeds/__init__.py index da7122c491..c34334ee09 100644 --- a/src/calibre/web/feeds/__init__.py +++ b/src/calibre/web/feeds/__init__.py @@ -137,7 +137,7 @@ class Feed(object): def populate_from_preparsed_feed(self, title, articles, oldest_article=7, max_articles_per_feed=100): - self.title = title if title else _('Unknown feed') + self.title = unicode(title if title else _('Unknown feed')) self.description = '' self.image_url = None self.articles = [] From fe1316f201d541e2cbc6db34120b0daca6f66559 Mon Sep 17 00:00:00 2001 From: Charles Haley <> Date: Thu, 10 Jun 2010 21:16:54 +0100 Subject: [PATCH 071/112] Title sort tweak. --- resources/default_tweaks.py | 10 ++++++++++ src/calibre/ebooks/metadata/__init__.py | 9 +++++---- src/calibre/gui2/cover_flow.py | 4 +++- 3 files changed, 18 insertions(+), 5 deletions(-) diff --git a/resources/default_tweaks.py b/resources/default_tweaks.py index e9ad64cee2..9f58ab3f03 100644 --- a/resources/default_tweaks.py +++ b/resources/default_tweaks.py @@ -61,3 +61,13 @@ sort_columns_at_startup = None # default if not set: MMM yyyy gui_pubdate_display_format = 'MMM yyyy' +# Control title sorting. +# If set to 'library_order', Leading articles such as The and A will be ignored. +# If set to 'strictly_alphabetic', the titles will be sorted without processing +# For example, with library_order, The Client will sort under 'C'. With +# strictly_alphabetic, the book will sort under 'T'. +# This flag affects Calibre's library display. It has no effect on devices. In +# addition, books added before changing the flag will retain their order until +# the title is edited. Double-clicking on a title and hitting return without +# changing anything is sufficient to change the sort. +title_sorting = 'library_order' diff --git a/src/calibre/ebooks/metadata/__init__.py b/src/calibre/ebooks/metadata/__init__.py index 6b573a0420..e6551e9019 100644 --- a/src/calibre/ebooks/metadata/__init__.py +++ b/src/calibre/ebooks/metadata/__init__.py @@ -43,10 +43,11 @@ def authors_to_sort_string(authors): _title_pat = re.compile('^(A|The|An)\s+', re.IGNORECASE) def title_sort(title): - match = _title_pat.search(title) - if match: - prep = match.group(1) - title = title[len(prep):] + ', ' + prep + if tweaks['title_sorting'] == 'library_order': + match = _title_pat.search(title) + if match: + prep = match.group(1) + title = title[len(prep):] + ', ' + prep return title.strip() coding = zip( diff --git a/src/calibre/gui2/cover_flow.py b/src/calibre/gui2/cover_flow.py index 3bd554e891..27f8687b22 100644 --- a/src/calibre/gui2/cover_flow.py +++ b/src/calibre/gui2/cover_flow.py @@ -67,7 +67,9 @@ if pictureflow is not None: return ans def reset(self): - self.dataChanged.emit() + from PyQt4.Qt import SIGNAL ### TEMP + self.emit(SIGNAL('dataChanged()')) # TEMP +# self.dataChanged.emit() def image(self, index): return self.model.cover(index) From 1411f34b15fded7fc770349595f76d0d6a65bf62 Mon Sep 17 00:00:00 2001 From: Charles Haley <> Date: Thu, 10 Jun 2010 21:29:37 +0100 Subject: [PATCH 072/112] Change to reduce impact of the tweak to only the DB --- src/calibre/ebooks/metadata/__init__.py | 10 ++++------ src/calibre/library/database2.py | 15 +++++++++++---- src/calibre/library/sqlite.py | 6 +++++- 3 files changed, 20 insertions(+), 11 deletions(-) diff --git a/src/calibre/ebooks/metadata/__init__.py b/src/calibre/ebooks/metadata/__init__.py index e6551e9019..b4ba6683c0 100644 --- a/src/calibre/ebooks/metadata/__init__.py +++ b/src/calibre/ebooks/metadata/__init__.py @@ -12,7 +12,6 @@ from urlparse import urlparse from calibre import relpath, prints -from calibre.utils.config import tweaks from calibre.utils.date import isoformat _author_pat = re.compile(',?\s+(and|with)\s+', re.IGNORECASE) @@ -43,11 +42,10 @@ def authors_to_sort_string(authors): _title_pat = re.compile('^(A|The|An)\s+', re.IGNORECASE) def title_sort(title): - if tweaks['title_sorting'] == 'library_order': - match = _title_pat.search(title) - if match: - prep = match.group(1) - title = title[len(prep):] + ', ' + prep + match = _title_pat.search(title) + if match: + prep = match.group(1) + title = title[len(prep):] + ', ' + prep return title.strip() coding = zip( diff --git a/src/calibre/library/database2.py b/src/calibre/library/database2.py index 5868a782ad..64fcfd7a6e 100644 --- a/src/calibre/library/database2.py +++ b/src/calibre/library/database2.py @@ -28,7 +28,7 @@ from calibre.customize.ui import run_plugins_on_import from calibre.utils.filenames import ascii_filename from calibre.utils.date import utcnow, now as nowf, utcfromtimestamp -from calibre.utils.config import prefs +from calibre.utils.config import prefs, tweaks from calibre.utils.search_query_parser import saved_searches from calibre.ebooks import BOOK_EXTENSIONS, check_ebook_format from calibre.utils.magick_draw import save_cover_data_to @@ -736,8 +736,12 @@ class LibraryDatabase2(LibraryDatabase, SchemaUpgrade, CustomColumns): icon=icon, tooltip = tooltip) for r in data if item_not_zero_func(r)] if category == 'series' and not sort_on_count: - categories[category].sort(cmp=lambda x,y:cmp(title_sort(x.name).lower(), - title_sort(y.name).lower())) + if tweaks['title_sorting'] == 'library_order': + ts = lambda x: title_sort(x) + else: + ts = lambda x:x + categories[category].sort(cmp=lambda x,y:cmp(ts(x.name).lower(), + ts(y.name).lower())) # We delayed computing the standard formats category because it does not # use a view, but is computed dynamically @@ -950,7 +954,10 @@ class LibraryDatabase2(LibraryDatabase, SchemaUpgrade, CustomColumns): title = title.decode(preferred_encoding, 'replace') self.conn.execute('UPDATE books SET title=? WHERE id=?', (title, id)) self.data.set(id, self.FIELD_MAP['title'], title, row_is_id=True) - self.data.set(id, self.FIELD_MAP['sort'], title_sort(title), row_is_id=True) + if tweaks['title_sorting'] == 'library_order': + self.data.set(id, self.FIELD_MAP['sort'], title_sort(title), row_is_id=True) + else: + self.data.set(id, self.FIELD_MAP['sort'], title, row_is_id=True) self.set_path(id, True) self.conn.commit() if notify: diff --git a/src/calibre/library/sqlite.py b/src/calibre/library/sqlite.py index d95eae9226..ca501b9300 100644 --- a/src/calibre/library/sqlite.py +++ b/src/calibre/library/sqlite.py @@ -15,6 +15,7 @@ from threading import RLock from datetime import datetime from calibre.ebooks.metadata import title_sort +from calibre.utils.config import tweaks from calibre.utils.date import parse_date, isoformat global_lock = RLock() @@ -115,7 +116,10 @@ class DBThread(Thread): self.conn.create_aggregate('concat', 1, Concatenate) self.conn.create_aggregate('sortconcat', 2, SortedConcatenate) self.conn.create_aggregate('sort_concat', 2, SafeSortedConcatenate) - self.conn.create_function('title_sort', 1, title_sort) + if tweaks['title_sorting'] == 'library_order': + self.conn.create_function('title_sort', 1, title_sort) + else: + self.conn.create_function('title_sort', 1, lambda x:x) self.conn.create_function('uuid4', 0, lambda : str(uuid.uuid4())) # Dummy functions for dynamically created filters self.conn.create_function('books_list_filter', 1, lambda x: 1) From c1c1f43654939d467b370d6431fad4b388ff2270 Mon Sep 17 00:00:00 2001 From: Charles Haley <> Date: Thu, 10 Jun 2010 21:31:02 +0100 Subject: [PATCH 073/112] Fix up deleted import that shouldn't have been deleted --- src/calibre/ebooks/metadata/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/calibre/ebooks/metadata/__init__.py b/src/calibre/ebooks/metadata/__init__.py index b4ba6683c0..55d70ee909 100644 --- a/src/calibre/ebooks/metadata/__init__.py +++ b/src/calibre/ebooks/metadata/__init__.py @@ -11,7 +11,7 @@ from urllib import unquote, quote from urlparse import urlparse from calibre import relpath, prints - +from calibre.utils.config import tweaks from calibre.utils.date import isoformat _author_pat = re.compile(',?\s+(and|with)\s+', re.IGNORECASE) From 93a425d76719e65f28a208503371882f35b9af33 Mon Sep 17 00:00:00 2001 From: Charles Haley <> Date: Thu, 10 Jun 2010 21:32:05 +0100 Subject: [PATCH 074/112] Back out temp change to cover_flow --- src/calibre/gui2/cover_flow.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/calibre/gui2/cover_flow.py b/src/calibre/gui2/cover_flow.py index 27f8687b22..3bd554e891 100644 --- a/src/calibre/gui2/cover_flow.py +++ b/src/calibre/gui2/cover_flow.py @@ -67,9 +67,7 @@ if pictureflow is not None: return ans def reset(self): - from PyQt4.Qt import SIGNAL ### TEMP - self.emit(SIGNAL('dataChanged()')) # TEMP -# self.dataChanged.emit() + self.dataChanged.emit() def image(self, index): return self.model.cover(index) From 30c209fd7e1c61d8df3107967424958fd1dba4ed Mon Sep 17 00:00:00 2001 From: Charles Haley <> Date: Thu, 10 Jun 2010 21:33:44 +0100 Subject: [PATCH 075/112] Make metadata.__init__ be identical to previous --- src/calibre/ebooks/metadata/__init__.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/calibre/ebooks/metadata/__init__.py b/src/calibre/ebooks/metadata/__init__.py index 55d70ee909..6b573a0420 100644 --- a/src/calibre/ebooks/metadata/__init__.py +++ b/src/calibre/ebooks/metadata/__init__.py @@ -11,6 +11,7 @@ from urllib import unquote, quote from urlparse import urlparse from calibre import relpath, prints + from calibre.utils.config import tweaks from calibre.utils.date import isoformat From cbe0b78aefc8c03f2a8da4886089d8fe42e5c946 Mon Sep 17 00:00:00 2001 From: Charles Haley <> Date: Thu, 10 Jun 2010 21:48:01 +0100 Subject: [PATCH 076/112] Make series sorting on library and tag views honor the the title_series_sorting flag (and rename the flag --- resources/default_tweaks.py | 10 +++++----- src/calibre/library/caches.py | 9 ++++++--- src/calibre/library/database2.py | 4 ++-- src/calibre/library/sqlite.py | 2 +- 4 files changed, 14 insertions(+), 11 deletions(-) diff --git a/resources/default_tweaks.py b/resources/default_tweaks.py index 9f58ab3f03..bda839b28f 100644 --- a/resources/default_tweaks.py +++ b/resources/default_tweaks.py @@ -61,13 +61,13 @@ sort_columns_at_startup = None # default if not set: MMM yyyy gui_pubdate_display_format = 'MMM yyyy' -# Control title sorting. +# Control title and series sorting in the library view. # If set to 'library_order', Leading articles such as The and A will be ignored. # If set to 'strictly_alphabetic', the titles will be sorted without processing # For example, with library_order, The Client will sort under 'C'. With # strictly_alphabetic, the book will sort under 'T'. # This flag affects Calibre's library display. It has no effect on devices. In -# addition, books added before changing the flag will retain their order until -# the title is edited. Double-clicking on a title and hitting return without -# changing anything is sufficient to change the sort. -title_sorting = 'library_order' +# addition, titles for books added before changing the flag will retain their +# order until the title is edited. Double-clicking on a title and hitting return +# without changing anything is sufficient to change the sort. +title_series_sorting = 'library_order' diff --git a/src/calibre/library/caches.py b/src/calibre/library/caches.py index e2ecdd9f55..95ca4cc826 100644 --- a/src/calibre/library/caches.py +++ b/src/calibre/library/caches.py @@ -619,9 +619,12 @@ class ResultCache(SearchQueryParser): if self.first_sort: subsort = True self.first_sort = False - fcmp = self.seriescmp if field == 'series' else \ - functools.partial(self.cmp, self.FIELD_MAP[field], subsort=subsort, - asstr=as_string) + fcmp = self.seriescmp \ + if field == 'series' and \ + tweaks['title_sorting'] == 'library_order' \ + else \ + functools.partial(self.cmp, self.FIELD_MAP[field], + subsort=subsort, asstr=as_string) self._map.sort(cmp=fcmp, reverse=not ascending) self._map_filtered = [id for id in self._map if id in self._map_filtered] diff --git a/src/calibre/library/database2.py b/src/calibre/library/database2.py index 64fcfd7a6e..0168737fca 100644 --- a/src/calibre/library/database2.py +++ b/src/calibre/library/database2.py @@ -736,7 +736,7 @@ class LibraryDatabase2(LibraryDatabase, SchemaUpgrade, CustomColumns): icon=icon, tooltip = tooltip) for r in data if item_not_zero_func(r)] if category == 'series' and not sort_on_count: - if tweaks['title_sorting'] == 'library_order': + if tweaks['title_series_sorting'] == 'library_order': ts = lambda x: title_sort(x) else: ts = lambda x:x @@ -954,7 +954,7 @@ class LibraryDatabase2(LibraryDatabase, SchemaUpgrade, CustomColumns): title = title.decode(preferred_encoding, 'replace') self.conn.execute('UPDATE books SET title=? WHERE id=?', (title, id)) self.data.set(id, self.FIELD_MAP['title'], title, row_is_id=True) - if tweaks['title_sorting'] == 'library_order': + if tweaks['title_series_sorting'] == 'library_order': self.data.set(id, self.FIELD_MAP['sort'], title_sort(title), row_is_id=True) else: self.data.set(id, self.FIELD_MAP['sort'], title, row_is_id=True) diff --git a/src/calibre/library/sqlite.py b/src/calibre/library/sqlite.py index ca501b9300..adf6691671 100644 --- a/src/calibre/library/sqlite.py +++ b/src/calibre/library/sqlite.py @@ -116,7 +116,7 @@ class DBThread(Thread): self.conn.create_aggregate('concat', 1, Concatenate) self.conn.create_aggregate('sortconcat', 2, SortedConcatenate) self.conn.create_aggregate('sort_concat', 2, SafeSortedConcatenate) - if tweaks['title_sorting'] == 'library_order': + if tweaks['title_series_sorting'] == 'library_order': self.conn.create_function('title_sort', 1, title_sort) else: self.conn.create_function('title_sort', 1, lambda x:x) From e355672c7045f5a100e1fcd84e6a5694ab095bb9 Mon Sep 17 00:00:00 2001 From: Kovid Goyal <kovid@kovidgoyal.net> Date: Thu, 10 Jun 2010 20:45:04 -0600 Subject: [PATCH 077/112] More GUI Refactoring. Cover browser can now be dynamically resized like the other GUI areas --- src/calibre/gui2/__init__.py | 7 + src/calibre/gui2/cover_flow.py | 99 ++++--- src/calibre/gui2/init.py | 123 +++++++- src/calibre/gui2/library/views.py | 21 ++ src/calibre/gui2/main.ui | 297 ------------------- src/calibre/gui2/pictureflow/pictureflow.cpp | 6 +- src/calibre/gui2/sidebar.py | 147 --------- src/calibre/gui2/tag_view.py | 33 ++- src/calibre/gui2/ui.py | 43 ++- src/calibre/gui2/widgets.py | 180 +++++++++-- src/calibre/gui2/wizard/__init__.py | 4 +- 11 files changed, 408 insertions(+), 552 deletions(-) delete mode 100644 src/calibre/gui2/sidebar.py diff --git a/src/calibre/gui2/__init__.py b/src/calibre/gui2/__init__.py index bddefe97f8..cbe9449f1f 100644 --- a/src/calibre/gui2/__init__.py +++ b/src/calibre/gui2/__init__.py @@ -99,6 +99,8 @@ def _config(): help=_('Limit max simultaneous jobs to number of CPUs')) c.add_opt('tag_browser_hidden_categories', default=set(), help=_('tag browser categories not to display')) + c.add_opt('gui_layout', choices=['wide', 'narrow'], + help=_('The layout of the user interface'), default='narrow') return ConfigProxy(c) config = _config() @@ -125,6 +127,11 @@ def available_width(): desktop = QCoreApplication.instance().desktop() return desktop.availableGeometry().width() +try: + is_widescreen = float(available_width())/available_height() > 1.4 +except: + is_widescreen = True + def extension(path): return os.path.splitext(path)[1][1:].lower() diff --git a/src/calibre/gui2/cover_flow.py b/src/calibre/gui2/cover_flow.py index 3bd554e891..c2705e5d9b 100644 --- a/src/calibre/gui2/cover_flow.py +++ b/src/calibre/gui2/cover_flow.py @@ -10,10 +10,11 @@ Module to implement the Cover Flow feature import sys, os, time from PyQt4.Qt import QImage, QSizePolicy, QTimer, QDialog, Qt, QSize, \ - QStackedLayout + QStackedLayout, QLabel from calibre import plugins from calibre.gui2 import config, available_height, available_width + pictureflow, pictureflowerror = plugins['pictureflow'] if pictureflow is not None: @@ -78,12 +79,15 @@ if pictureflow is not None: def __init__(self, parent=None): pictureflow.PictureFlow.__init__(self, parent, config['cover_flow_queue_length']+1) - self.setMinimumSize(QSize(10, 10)) + self.setMinimumSize(QSize(300, 150)) self.setFocusPolicy(Qt.WheelFocus) self.setSizePolicy(QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)) self.setZoomFactor(150) + def sizeHint(self): + return self.minimumSize() + def wheelEvent(self, ev): ev.accept() if ev.delta() < 0: @@ -107,56 +111,58 @@ class CoverFlowMixin(object): self.cover_flow_sync_timer.timeout.connect(self.cover_flow_do_sync) self.cover_flow_sync_flag = True self.cover_flow = CoverFlow(parent=self) - self.cover_flow.setVisible(False) - if not config['separate_cover_flow']: - self.cb_layout.addWidget(self.cover_flow) self.cover_flow.currentChanged.connect(self.sync_listview_to_cf) self.library_view.selectionModel().currentRowChanged.connect( self.sync_cf_to_listview) self.db_images = DatabaseImages(self.library_view.model()) self.cover_flow.setImages(self.db_images) - ah, aw = available_height(), available_width() - self._cb_layout_is_horizontal = float(aw)/ah >= 1.4 - self.cb_layout.setDirection(self.cb_layout.LeftToRight if - self._cb_layout_is_horizontal else - self.cb_layout.TopToBottom) - - def toggle_cover_flow_visibility(self, show): + else: + self.cover_flow = QLabel('<p>'+_('Cover browser could not be loaded') + +'<br>'+pictureflowerror) + self.cover_flow.setWordWrap(True) if config['separate_cover_flow']: - if show: - d = QDialog(self) - ah, aw = available_height(), available_width() - d.resize(int(aw/1.5), ah-60) - d._layout = QStackedLayout() - d.setLayout(d._layout) - d.setWindowTitle(_('Browse by covers')) - d.layout().addWidget(self.cover_flow) - self.cover_flow.setVisible(True) - self.cover_flow.setFocus(Qt.OtherFocusReason) - d.show() - d.finished.connect(self.sidebar.external_cover_flow_finished) - self.cf_dialog = d - else: - cfd = getattr(self, 'cf_dialog', None) - if cfd is not None: - self.cover_flow.setVisible(False) - cfd.hide() - self.cf_dialog = None + self.cb_splitter.button.clicked.connect(self.toggle_cover_browser) + if CoverFlow is not None: + self.cover_flow.stop.connect(self.hide_cover_browser) else: - if show: - self.cover_flow.setVisible(True) - self.cover_flow.setFocus(Qt.OtherFocusReason) - else: - self.cover_flow.setVisible(False) + self.cb_splitter.insertWidget(self.cb_splitter.side_index, self.cover_flow) + if CoverFlow is not None: + self.cover_flow.stop.connect(self.cb_splitter.hide_side_pane) - def toggle_cover_flow(self, show): - if show: - self.cover_flow.setCurrentSlide(self.library_view.currentIndex().row()) - self.library_view.setCurrentIndex( - self.library_view.currentIndex()) - self.cover_flow_sync_timer.start(500) - self.library_view.scroll_to_row(self.library_view.currentIndex().row()) + def toggle_cover_browser(self): + cbd = getattr(self, 'cb_dialog', None) + if cbd is not None: + self.hide_cover_browser() else: + self.show_cover_browser() + + def show_cover_browser(self): + if CoverFlow is not None: + self.cover_flow.setCurrentSlide(self.library_view.currentIndex().row()) + self.cover_flow_sync_timer.start(500) + self.library_view.setCurrentIndex( + self.library_view.currentIndex()) + self.library_view.scroll_to_row(self.library_view.currentIndex().row()) + + if config['separate_cover_flow']: + d = QDialog(self) + ah, aw = available_height(), available_width() + d.resize(int(aw/1.5), ah-60) + d._layout = QStackedLayout() + d.setLayout(d._layout) + d.setWindowTitle(_('Browse by covers')) + d.layout().addWidget(self.cover_flow) + self.cover_flow.setVisible(True) + self.cover_flow.setFocus(Qt.OtherFocusReason) + d.show() + self.cb_splitter.button.set_state_to_hide() + d.finished.connect(self.cb_splitter.button.set_state_to_show) + self.cb_dialog = d + else: + self.cover_flow.setFocus(Qt.OtherFocusReason) + + def hide_cover_browser(self): + if CoverFlow is not None: self.cover_flow_sync_timer.stop() idx = self.library_view.model().index(self.cover_flow.currentSlide(), 0) if idx.isValid(): @@ -164,7 +170,12 @@ class CoverFlowMixin(object): sm.select(idx, sm.ClearAndSelect|sm.Rows) self.library_view.setCurrentIndex(idx) self.library_view.scroll_to_row(idx.row()) - self.toggle_cover_flow_visibility(show) + + if config['separate_cover_flow']: + cbd = getattr(self, 'cb_dialog', None) + if cbd is not None: + cbd.accept() + self.cb_dialog = None def sync_cf_to_listview(self, current, previous): if self.cover_flow_sync_flag and self.cover_flow.isVisible() and \ diff --git a/src/calibre/gui2/init.py b/src/calibre/gui2/init.py index a991c4d1f8..9ec37df8ff 100644 --- a/src/calibre/gui2/init.py +++ b/src/calibre/gui2/init.py @@ -7,12 +7,16 @@ __docformat__ = 'restructuredtext en' import functools -from PyQt4.Qt import QMenu, Qt, pyqtSignal, QToolButton, QIcon +from PyQt4.Qt import QMenu, Qt, pyqtSignal, QToolButton, QIcon, QStackedWidget, \ + QWidget, QHBoxLayout, QToolBar, QSize, QSizePolicy from calibre.utils.config import prefs from calibre.ebooks import BOOK_EXTENSIONS -from calibre.constants import isosx -from calibre.gui2 import config +from calibre.constants import isosx, __appname__ +from calibre.gui2 import config, is_widescreen +from calibre.gui2.library.views import BooksView, DeviceBooksView +from calibre.gui2.widgets import Splitter +from calibre.gui2.tag_view import TagBrowserWidget _keep_refs = [] @@ -279,3 +283,116 @@ class LibraryViewMixin(object): # {{{ # }}} +class LibraryWidget(Splitter): # {{{ + + def __init__(self, parent): + orientation = Qt.Vertical if config['gui_layout'] == 'narrow' and \ + not is_widescreen else Qt.Horizontal + #orientation = Qt.Vertical + idx = 0 if orientation == Qt.Vertical else 1 + Splitter.__init__(self, 'cover_browser_splitter', _('Cover Browser'), + I('cover_flow.svg'), + orientation=orientation, parent=parent, + connect_button=not config['separate_cover_flow'], + side_index=idx, initial_side_size=400, initial_show=False) + parent.library_view = BooksView(parent) + parent.library_view.setObjectName('library_view') + self.addWidget(parent.library_view) +# }}} + +class Stack(QStackedWidget): # {{{ + + def __init__(self, parent): + QStackedWidget.__init__(self, parent) + + parent.cb_splitter = LibraryWidget(parent) + self.tb_widget = TagBrowserWidget(parent) + parent.tb_splitter = Splitter('tag_browser_splitter', + _('Tag Browser'), I('tags.svg'), + parent=parent, side_index=0, initial_side_size=200) + parent.tb_splitter.addWidget(self.tb_widget) + parent.tb_splitter.addWidget(parent.cb_splitter) + parent.tb_splitter.setCollapsible(parent.tb_splitter.other_index, False) + + self.addWidget(parent.tb_splitter) + for x in ('memory', 'card_a', 'card_b'): + name = x+'_view' + w = DeviceBooksView(parent) + setattr(parent, name, w) + self.addWidget(w) + w.setObjectName(name) + + +# }}} + +class SideBar(QToolBar): # {{{ + + + def __init__(self, splitters, jobs_button, parent=None): + QToolBar.__init__(self, _('Side bar'), parent) + self.setOrientation(Qt.Vertical) + self.setMovable(False) + self.setFloatable(False) + self.setToolButtonStyle(Qt.ToolButtonIconOnly) + self.setIconSize(QSize(48, 48)) + self.spacer = QWidget(self) + self.spacer.setSizePolicy(QSizePolicy.Minimum, QSizePolicy.Expanding) + for s in splitters: + self.addWidget(s.button) + self.addWidget(self.spacer) + self.addWidget(jobs_button) + + for ch in self.children(): + if isinstance(ch, QToolButton): + ch.setCursor(Qt.PointingHandCursor) + +# }}} + +class LayoutMixin(object): # {{{ + + def __init__(self): + self.setupUi(self) + self.setWindowTitle(__appname__) + + if config['gui_layout'] == 'narrow': + from calibre.gui2.status import StatusBar + self.status_bar = StatusBar(self) + self.stack = Stack(self) + self.bd_splitter = Splitter('book_details_splitter', + _('Book Details'), I('book.svg'), + orientation=Qt.Vertical, parent=self, side_index=1) + self._layout_mem = [QWidget(self), QHBoxLayout()] + self._layout_mem[0].setLayout(self._layout_mem[1]) + l = self._layout_mem[1] + l.addWidget(self.stack) + self.sidebar = SideBar([getattr(self, x+'_splitter') + for x in ('bd', 'tb', 'cb')], self.jobs_button, parent=self) + l.addWidget(self.sidebar) + self.bd_splitter.addWidget(self._layout_mem[0]) + self.bd_splitter.addWidget(self.status_bar) + self.bd_splitter.setCollapsible((self.bd_splitter.side_index+1)%2, False) + self.centralwidget.layout().addWidget(self.bd_splitter) + + def finalize_layout(self): + m = self.library_view.model() + if m.rowCount(None) > 0: + self.library_view.set_current_row(0) + m.current_changed(self.library_view.currentIndex(), + self.library_view.currentIndex()) + + + def save_layout_state(self): + for x in ('library', 'memory', 'card_a', 'card_b'): + getattr(self, x+'_view').save_state() + + for x in ('cb', 'tb', 'bd'): + getattr(self, x+'_splitter').save_state() + + def read_layout_settings(self): + # View states are restored automatically when set_database is called + + for x in ('cb', 'tb', 'bd'): + getattr(self, x+'_splitter').restore_state() + +# }}} + diff --git a/src/calibre/gui2/library/views.py b/src/calibre/gui2/library/views.py index 109b001925..6d8efd68fa 100644 --- a/src/calibre/gui2/library/views.py +++ b/src/calibre/gui2/library/views.py @@ -26,6 +26,15 @@ class BooksView(QTableView): # {{{ def __init__(self, parent, modelcls=BooksModel): QTableView.__init__(self, parent) + + self.setDragEnabled(True) + self.setDragDropOverwriteMode(False) + self.setDragDropMode(self.DragDrop) + self.setAlternatingRowColors(True) + self.setSelectionBehavior(self.SelectRows) + self.setShowGrid(False) + self.setWordWrap(False) + self.rating_delegate = RatingDelegate(self) self.timestamp_delegate = DateDelegate(self) self.pubdate_delegate = PubDateDelegate(self) @@ -434,6 +443,18 @@ class BooksView(QTableView): # {{{ self.scrollTo(self.model().index(row, i)) break + def set_current_row(self, row, select=True): + if row > -1: + h = self.horizontalHeader() + for i in range(h.count()): + if not h.isSectionHidden(i): + index = self.model().index(row, i) + self.setCurrentIndex(index) + if select: + sm = self.selectionModel() + sm.select(index, sm.ClearAndSelect|sm.Rows) + break + def close(self): self._model.close() diff --git a/src/calibre/gui2/main.ui b/src/calibre/gui2/main.ui index b4bafc3b79..819bee7f63 100644 --- a/src/calibre/gui2/main.ui +++ b/src/calibre/gui2/main.ui @@ -304,270 +304,6 @@ </item> </layout> </item> - <item> - <widget class="Splitter" name="vertical_splitter"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Preferred" vsizetype="Expanding"> - <horstretch>0</horstretch> - <verstretch>100</verstretch> - </sizepolicy> - </property> - <property name="orientation"> - <enum>Qt::Vertical</enum> - </property> - <widget class="QWidget" name="layoutWidget"> - <layout class="QHBoxLayout" name="horizontalLayout"> - <item> - <widget class="QStackedWidget" name="stack"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Expanding" vsizetype="Expanding"> - <horstretch>100</horstretch> - <verstretch>100</verstretch> - </sizepolicy> - </property> - <property name="currentIndex"> - <number>0</number> - </property> - <widget class="QWidget" name="library"> - <layout class="QVBoxLayout" name="verticalLayout_4"> - <item> - <widget class="Splitter" name="horizontal_splitter"> - <property name="orientation"> - <enum>Qt::Horizontal</enum> - </property> - <widget class="QWidget" name="layoutWidget"> - <layout class="QVBoxLayout" name="verticalLayout"> - <item> - <widget class="TagsView" name="tags_view"> - <property name="tabKeyNavigation"> - <bool>true</bool> - </property> - <property name="alternatingRowColors"> - <bool>true</bool> - </property> - <property name="animated"> - <bool>true</bool> - </property> - <property name="headerHidden"> - <bool>true</bool> - </property> - </widget> - </item> - <item> - <widget class="QCheckBox" name="popularity"> - <property name="text"> - <string>Sort by &popularity</string> - </property> - </widget> - </item> - <item> - <widget class="QComboBox" name="tag_match"> - <property name="currentIndex"> - <number>0</number> - </property> - <item> - <property name="text"> - <string>Match any</string> - </property> - </item> - <item> - <property name="text"> - <string>Match all</string> - </property> - </item> - </widget> - </item> - <item> - <widget class="QPushButton" name="edit_categories"> - <property name="toolTip"> - <string>Create, edit, and delete user categories</string> - </property> - <property name="text"> - <string>Manage &user categories</string> - </property> - </widget> - </item> - </layout> - </widget> - <widget class="QWidget" name=""> - <layout class="QVBoxLayout" name="cb_layout"> - <item> - <widget class="BooksView" name="library_view"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Expanding" vsizetype="Expanding"> - <horstretch>100</horstretch> - <verstretch>10</verstretch> - </sizepolicy> - </property> - <property name="acceptDrops"> - <bool>true</bool> - </property> - <property name="dragEnabled"> - <bool>true</bool> - </property> - <property name="dragDropOverwriteMode"> - <bool>false</bool> - </property> - <property name="dragDropMode"> - <enum>QAbstractItemView::DragDrop</enum> - </property> - <property name="alternatingRowColors"> - <bool>true</bool> - </property> - <property name="selectionBehavior"> - <enum>QAbstractItemView::SelectRows</enum> - </property> - <property name="showGrid"> - <bool>false</bool> - </property> - <property name="wordWrap"> - <bool>false</bool> - </property> - </widget> - </item> - </layout> - </widget> - </widget> - </item> - </layout> - </widget> - <widget class="QWidget" name="main_memory"> - <layout class="QGridLayout"> - <item row="0" column="0"> - <widget class="DeviceBooksView" name="memory_view"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Expanding" vsizetype="Expanding"> - <horstretch>100</horstretch> - <verstretch>10</verstretch> - </sizepolicy> - </property> - <property name="acceptDrops"> - <bool>true</bool> - </property> - <property name="dragEnabled"> - <bool>true</bool> - </property> - <property name="dragDropOverwriteMode"> - <bool>false</bool> - </property> - <property name="dragDropMode"> - <enum>QAbstractItemView::DragDrop</enum> - </property> - <property name="alternatingRowColors"> - <bool>true</bool> - </property> - <property name="selectionBehavior"> - <enum>QAbstractItemView::SelectRows</enum> - </property> - <property name="showGrid"> - <bool>false</bool> - </property> - <property name="wordWrap"> - <bool>false</bool> - </property> - </widget> - </item> - </layout> - </widget> - <widget class="QWidget" name="card_a_memory"> - <layout class="QGridLayout"> - <item row="0" column="0"> - <widget class="DeviceBooksView" name="card_a_view"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Preferred" vsizetype="Expanding"> - <horstretch>10</horstretch> - <verstretch>10</verstretch> - </sizepolicy> - </property> - <property name="acceptDrops"> - <bool>true</bool> - </property> - <property name="dragEnabled"> - <bool>true</bool> - </property> - <property name="dragDropOverwriteMode"> - <bool>false</bool> - </property> - <property name="dragDropMode"> - <enum>QAbstractItemView::DragDrop</enum> - </property> - <property name="alternatingRowColors"> - <bool>true</bool> - </property> - <property name="selectionBehavior"> - <enum>QAbstractItemView::SelectRows</enum> - </property> - <property name="showGrid"> - <bool>false</bool> - </property> - <property name="wordWrap"> - <bool>false</bool> - </property> - </widget> - </item> - </layout> - </widget> - <widget class="QWidget" name="card_b_memory"> - <layout class="QGridLayout"> - <item row="0" column="0"> - <widget class="DeviceBooksView" name="card_b_view"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Preferred" vsizetype="Expanding"> - <horstretch>10</horstretch> - <verstretch>10</verstretch> - </sizepolicy> - </property> - <property name="acceptDrops"> - <bool>true</bool> - </property> - <property name="dragEnabled"> - <bool>true</bool> - </property> - <property name="dragDropOverwriteMode"> - <bool>false</bool> - </property> - <property name="dragDropMode"> - <enum>QAbstractItemView::DragDrop</enum> - </property> - <property name="alternatingRowColors"> - <bool>true</bool> - </property> - <property name="selectionBehavior"> - <enum>QAbstractItemView::SelectRows</enum> - </property> - <property name="showGrid"> - <bool>false</bool> - </property> - <property name="wordWrap"> - <bool>false</bool> - </property> - </widget> - </item> - </layout> - </widget> - </widget> - </item> - <item> - <widget class="SideBar" name="sidebar" native="true"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Minimum" vsizetype="Preferred"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="minimumSize"> - <size> - <width>30</width> - <height>0</height> - </size> - </property> - </widget> - </item> - </layout> - </widget> - <widget class="StatusBar" name="status_bar" native="true"/> - </widget> - </item> </layout> </widget> <widget class="QToolBar" name="tool_bar"> @@ -804,26 +540,11 @@ </action> </widget> <customwidgets> - <customwidget> - <class>BooksView</class> - <extends>QTableView</extends> - <header>calibre/gui2/library/views.h</header> - </customwidget> <customwidget> <class>LocationView</class> <extends>QListView</extends> <header>widgets.h</header> </customwidget> - <customwidget> - <class>DeviceBooksView</class> - <extends>QTableView</extends> - <header>calibre/gui2/library/views.h</header> - </customwidget> - <customwidget> - <class>TagsView</class> - <extends>QTreeView</extends> - <header>calibre/gui2/tag_view.h</header> - </customwidget> <customwidget> <class>SearchBox2</class> <extends>QComboBox</extends> @@ -834,24 +555,6 @@ <extends>QComboBox</extends> <header>calibre.gui2.search_box</header> </customwidget> - <customwidget> - <class>StatusBar</class> - <extends>QWidget</extends> - <header>calibre/gui2/status.h</header> - <container>1</container> - </customwidget> - <customwidget> - <class>Splitter</class> - <extends>QSplitter</extends> - <header>calibre/gui2/widgets.h</header> - <container>1</container> - </customwidget> - <customwidget> - <class>SideBar</class> - <extends>QWidget</extends> - <header>calibre/gui2/sidebar.h</header> - <container>1</container> - </customwidget> </customwidgets> <resources> <include location="../../../resources/images.qrc"/> diff --git a/src/calibre/gui2/pictureflow/pictureflow.cpp b/src/calibre/gui2/pictureflow/pictureflow.cpp index 9bb9a0954c..60985a1a12 100644 --- a/src/calibre/gui2/pictureflow/pictureflow.cpp +++ b/src/calibre/gui2/pictureflow/pictureflow.cpp @@ -713,8 +713,9 @@ void PictureFlowPrivate::render() QPainter painter; painter.begin(&buffer); - QFont font("Arial", FONT_SIZE); + QFont font = QFont(); font.setBold(true); + font.setPointSize(FONT_SIZE); painter.setFont(font); painter.setPen(Qt::white); //painter.setPen(QColor(255,255,255,127)); @@ -763,8 +764,9 @@ void PictureFlowPrivate::render() QPainter painter; painter.begin(&buffer); - QFont font("Arial", FONT_SIZE); + QFont font = QFont(); font.setBold(true); + font.setPointSize(FONT_SIZE); painter.setFont(font); int leftTextIndex = (step>0) ? centerIndex : centerIndex-1; diff --git a/src/calibre/gui2/sidebar.py b/src/calibre/gui2/sidebar.py deleted file mode 100644 index 6710b5d471..0000000000 --- a/src/calibre/gui2/sidebar.py +++ /dev/null @@ -1,147 +0,0 @@ -#!/usr/bin/env python -# vim:fileencoding=UTF-8:ts=4:sw=4:sta:et:sts=4:ai - -__license__ = 'GPL v3' -__copyright__ = '2010, Kovid Goyal <kovid@kovidgoyal.net>' -__docformat__ = 'restructuredtext en' - -from functools import partial - -from PyQt4.Qt import QToolBar, Qt, QIcon, QSizePolicy, QWidget, \ - QSize, QToolButton - -from calibre.gui2 import dynamic - -class SideBar(QToolBar): - - toggle_texts = { - 'book_info' : (_('Show Book Details'), _('Hide Book Details')), - 'tag_browser' : (_('Show Tag Browser'), _('Hide Tag Browser')), - 'cover_browser': (_('Show Cover Browser'), _('Hide Cover Browser')), - } - toggle_icons = { - 'book_info' : 'book.svg', - 'tag_browser' : 'tags.svg', - 'cover_browser': 'cover_flow.svg', - } - - - def __init__(self, parent=None): - QToolBar.__init__(self, _('Side bar'), parent) - self.setOrientation(Qt.Vertical) - self.setMovable(False) - self.setFloatable(False) - self.setToolButtonStyle(Qt.ToolButtonIconOnly) - self.setIconSize(QSize(48, 48)) - - for ac in ('book_info', 'tag_browser', 'cover_browser'): - action = self.addAction(QIcon(I(self.toggle_icons[ac])), - self.toggle_texts[ac][1], getattr(self, '_toggle_'+ac)) - setattr(self, 'action_toggle_'+ac, action) - w = self.widgetForAction(action) - w.setCheckable(True) - setattr(self, 'show_'+ac, partial(getattr(self, '_toggle_'+ac), - show=True)) - setattr(self, 'hide_'+ac, partial(getattr(self, '_toggle_'+ac), - show=False)) - - - self.spacer = QWidget(self) - self.spacer.setSizePolicy(QSizePolicy.Minimum, QSizePolicy.Expanding) - self.addWidget(self.spacer) - - self.show_cover_browser = partial(self._toggle_cover_browser, show=True) - self.hide_cover_browser = partial(self._toggle_cover_browser, - show=False) - for ch in self.children(): - if isinstance(ch, QToolButton): - ch.setCursor(Qt.PointingHandCursor) - - def initialize(self, jobs_button, cover_browser, toggle_cover_browser, - cover_browser_error, vertical_splitter, horizontal_splitter): - self.cover_browser, self.do_toggle_cover_browser = cover_browser, \ - toggle_cover_browser - if self.cover_browser is None: - self.action_toggle_cover_browser.setEnabled(False) - self.action_toggle_cover_browser.setText( - _('Cover browser could not be loaded: ') + cover_browser_error) - else: - self.cover_browser.stop.connect(self.hide_cover_browser) - self._toggle_cover_browser(dynamic.get('cover_flow_visible', False)) - - self.horizontal_splitter = horizontal_splitter - self.vertical_splitter = vertical_splitter - - tb_state = dynamic.get('tag_browser_state', None) - if tb_state is not None: - self.horizontal_splitter.restoreState(tb_state) - tb_last_open_state = dynamic.get('tag_browser_last_open_state', None) - if tb_last_open_state is not None and \ - not self.horizontal_splitter.is_side_index_hidden: - self.horizontal_splitter.restoreState(tb_last_open_state) - - bi_state = dynamic.get('book_info_state', None) - if bi_state is not None: - self.vertical_splitter.restoreState(bi_state) - bi_last_open_state = dynamic.get('book_info_last_open_state', None) - if bi_last_open_state is not None and \ - not self.vertical_splitter.is_side_index_hidden: - self.vertical_splitter.restoreState(bi_last_open_state) - - self.horizontal_splitter.initialize(name='tag_browser') - self.vertical_splitter.initialize(name='book_info') - self.view_status_changed('book_info', not - self.vertical_splitter.is_side_index_hidden) - self.view_status_changed('tag_browser', not - self.horizontal_splitter.is_side_index_hidden) - self.vertical_splitter.state_changed.connect(partial(self.view_status_changed, - 'book_info'), type=Qt.QueuedConnection) - self.horizontal_splitter.state_changed.connect(partial(self.view_status_changed, - 'tag_browser'), type=Qt.QueuedConnection) - self.addWidget(jobs_button) - - - - def view_status_changed(self, name, visible): - action = getattr(self, 'action_toggle_'+name) - texts = self.toggle_texts[name] - action.setText(texts[int(visible)]) - w = self.widgetForAction(action) - w.setCheckable(True) - w.setChecked(visible) - - def location_changed(self, location): - is_lib = location == 'library' - for ac in ('cover_browser', 'tag_browser'): - ac = getattr(self, 'action_toggle_'+ac) - ac.setEnabled(is_lib) - self.widgetForAction(ac).setVisible(is_lib) - - def save_state(self): - dynamic.set('cover_flow_visible', self.is_cover_browser_visible) - dynamic.set('tag_browser_state', - str(self.horizontal_splitter.saveState())) - dynamic.set('book_info_state', - str(self.vertical_splitter.saveState())) - - - @property - def is_cover_browser_visible(self): - return self.cover_browser is not None and self.cover_browser.isVisible() - - def _toggle_cover_browser(self, show=None): - if show is None: - show = not self.is_cover_browser_visible - self.do_toggle_cover_browser(show) - self.view_status_changed('cover_browser', show) - - def external_cover_flow_finished(self, *args): - self.view_status_changed('cover_browser', False) - - def _toggle_tag_browser(self, show=None): - self.horizontal_splitter.toggle_side_index() - - def _toggle_book_info(self, show=None): - self.vertical_splitter.toggle_side_index() - - diff --git a/src/calibre/gui2/tag_view.py b/src/calibre/gui2/tag_view.py index b5ced8d626..8c7d466b29 100644 --- a/src/calibre/gui2/tag_view.py +++ b/src/calibre/gui2/tag_view.py @@ -10,9 +10,11 @@ Browsing book collection by tags. from itertools import izip from functools import partial -from PyQt4.Qt import Qt, QTreeView, QApplication, pyqtSignal, \ - QFont, QSize, QIcon, QPoint, \ - QAbstractItemModel, QVariant, QModelIndex, QMenu +from PyQt4.Qt import Qt, QTreeView, QApplication, pyqtSignal, QCheckBox, \ + QFont, QSize, QIcon, QPoint, QVBoxLayout, QComboBox, \ + QAbstractItemModel, QVariant, QModelIndex, QMenu, \ + QPushButton, QWidget + from calibre.gui2 import config, NONE from calibre.utils.config import prefs from calibre.library.field_metadata import TagsIcons @@ -633,3 +635,28 @@ class TagBrowserMixin(object): # {{{ # }}} +class TagBrowserWidget(QWidget): # {{{ + + def __init__(self, parent): + QWidget.__init__(self, parent) + self._layout = QVBoxLayout() + self.setLayout(self._layout) + + parent.tags_view = TagsView(parent) + self._layout.addWidget(parent.tags_view) + + parent.popularity = QCheckBox(parent) + parent.popularity.setText(_('Sort by &popularity')) + self._layout.addWidget(parent.popularity) + + parent.tag_match = QComboBox(parent) + for x in (_('Match any'), _('Match all')): + parent.tag_match.addItem(x) + parent.tag_match.setCurrentIndex(0) + self._layout.addWidget(parent.tag_match) + + parent.edit_categories = QPushButton(_('Manage &user categories'), parent) + self._layout.addWidget(parent.edit_categories) + +# }}} + diff --git a/src/calibre/gui2/ui.py b/src/calibre/gui2/ui.py index 9ff30aa768..17d3c4d627 100644 --- a/src/calibre/gui2/ui.py +++ b/src/calibre/gui2/ui.py @@ -37,7 +37,7 @@ from calibre.gui2 import warning_dialog, choose_files, error_dialog, \ Dispatcher, gprefs, \ max_available_height, config, info_dialog, \ GetMetadata -from calibre.gui2.cover_flow import pictureflowerror, CoverFlowMixin +from calibre.gui2.cover_flow import CoverFlowMixin from calibre.gui2.widgets import ProgressIndicator, IMAGE_EXTENSIONS from calibre.gui2.wizard import move_library from calibre.gui2.dialogs.scheduler import Scheduler @@ -61,7 +61,7 @@ from calibre.library.caches import CoverCache from calibre.gui2.dialogs.confirm_delete import confirm from calibre.gui2.dialogs.saved_search_editor import SavedSearchEditor from calibre.gui2.tag_view import TagBrowserMixin -from calibre.gui2.init import ToolbarMixin, LibraryViewMixin +from calibre.gui2.init import ToolbarMixin, LibraryViewMixin, LayoutMixin class Listener(Thread): # {{{ @@ -106,7 +106,7 @@ class SystemTrayIcon(QSystemTrayIcon): # {{{ # }}} class Main(MainWindow, Ui_MainWindow, DeviceMixin, ToolbarMixin, - TagBrowserMixin, CoverFlowMixin, LibraryViewMixin): + TagBrowserMixin, CoverFlowMixin, LibraryViewMixin, LayoutMixin): 'The main GUI' def set_default_thumbnail(self, height): @@ -143,8 +143,15 @@ class Main(MainWindow, Ui_MainWindow, DeviceMixin, ToolbarMixin, self.check_messages_timer.start(1000) Ui_MainWindow.__init__(self) - self.setupUi(self) - self.setWindowTitle(__appname__) + + # Jobs Button {{{ + self.job_manager = JobManager() + self.jobs_dialog = JobsDialog(self, self.job_manager) + self.jobs_button = JobsButton() + self.jobs_button.initialize(self.jobs_dialog, self.job_manager) + # }}} + + LayoutMixin.__init__(self) self.restriction_count_of_books_in_view = 0 self.restriction_count_of_books_in_library = 0 @@ -167,11 +174,8 @@ class Main(MainWindow, Ui_MainWindow, DeviceMixin, ToolbarMixin, self.progress_indicator = ProgressIndicator(self) self.verbose = opts.verbose self.get_metadata = GetMetadata() - self.read_settings() - self.job_manager = JobManager() self.emailer = Emailer() self.emailer.start() - self.jobs_dialog = JobsDialog(self, self.job_manager) self.upload_memory = {} self.delete_memory = {} self.conversion_jobs = {} @@ -326,17 +330,6 @@ class Main(MainWindow, Ui_MainWindow, DeviceMixin, ToolbarMixin, self.resize(self.width(), self._calculated_available_height) self.search.setMaximumWidth(self.width()-150) - # Jobs Button {{{ - self.jobs_button = JobsButton() - self.jobs_button.initialize(self.jobs_dialog, self.job_manager) - # }}} - - ####################### Side Bar ############################### - - self.sidebar.initialize(self.jobs_button, self.cover_flow, - self.toggle_cover_flow, pictureflowerror, - self.vertical_splitter, self.horizontal_splitter) - if config['autolaunch_server']: from calibre.library.server.main import start_threaded_server @@ -362,6 +355,8 @@ class Main(MainWindow, Ui_MainWindow, DeviceMixin, ToolbarMixin, self._add_filesystem_book = Dispatcher(self.__add_filesystem_book) self.keyboard_interrupt.connect(self.quit, type=Qt.QueuedConnection) + self.read_settings() + self.finalize_layout() def do_saved_search_edit(self, search): d = SavedSearchEditor(self, search) @@ -1934,7 +1929,9 @@ class Main(MainWindow, Ui_MainWindow, DeviceMixin, ToolbarMixin, page = 0 if location == 'library' else 1 if location == 'main' else 2 if location == 'carda' else 3 self.stack.setCurrentIndex(page) self.status_bar.reset_info() - self.sidebar.location_changed(location) + for x in ('tb', 'cb'): + splitter = getattr(self, x+'_splitter') + splitter.button.setEnabled(location == 'library') if location == 'library': self.action_edit.setEnabled(True) self.action_merge.setEnabled(True) @@ -2037,14 +2034,12 @@ class Main(MainWindow, Ui_MainWindow, DeviceMixin, ToolbarMixin, if geometry is not None: self.restoreGeometry(geometry) self.read_toolbar_settings() + self.read_layout_settings() def write_settings(self): config.set('main_window_geometry', self.saveGeometry()) dynamic.set('sort_history', self.library_view.model().sort_history) - self.sidebar.save_state() - for view in ('library_view', 'memory_view', 'card_a_view', - 'card_b_view'): - getattr(self, view).save_state() + self.save_layout_state() def restart(self): self.quit(restart=True) diff --git a/src/calibre/gui2/widgets.py b/src/calibre/gui2/widgets.py index 093fa3fc5c..52bd8eda9a 100644 --- a/src/calibre/gui2/widgets.py +++ b/src/calibre/gui2/widgets.py @@ -4,16 +4,18 @@ __copyright__ = '2008, Kovid Goyal <kovid at kovidgoyal.net>' Miscellaneous widgets used in the GUI ''' import re, os, traceback + from PyQt4.Qt import QListView, QIcon, QFont, QLabel, QListWidget, \ QListWidgetItem, QTextCharFormat, QApplication, \ QSyntaxHighlighter, QCursor, QColor, QWidget, \ - QPixmap, QPalette, QSplitterHandle, \ + QPixmap, QPalette, QSplitterHandle, QToolButton, \ QAbstractListModel, QVariant, Qt, SIGNAL, pyqtSignal, \ QRegExp, QSettings, QSize, QModelIndex, QSplitter, \ QAbstractButton, QPainter, QLineEdit, QComboBox, \ - QMenu, QStringListModel, QCompleter, QStringList + QMenu, QStringListModel, QCompleter, QStringList, \ + QTimer -from calibre.gui2 import NONE, error_dialog, pixmap_to_data, dynamic +from calibre.gui2 import NONE, error_dialog, pixmap_to_data, gprefs from calibre.gui2.filename_pattern_ui import Ui_Form from calibre import fit_image, human_readable @@ -927,6 +929,7 @@ class SplitterHandle(QSplitterHandle): self.double_clicked.connect(splitter.double_clicked, type=Qt.QueuedConnection) self.highlight = False + self.setToolTip(_('Drag to resize')+' '+splitter.label) def splitter_moved(self, *args): oh = self.highlight @@ -944,20 +947,62 @@ class SplitterHandle(QSplitterHandle): def mouseDoubleClickEvent(self, ev): self.double_clicked.emit(self) +class LayoutButton(QToolButton): + + def __init__(self, icon, text, splitter, parent=None): + QToolButton.__init__(self, parent) + self.label = text + self.setIcon(QIcon(icon)) + self.setCheckable(True) + + self.splitter = splitter + splitter.state_changed.connect(self.update_state) + + def set_state_to_show(self, *args): + self.setChecked(False) + label =_('Show') + self.setText(label + ' ' + self.label) + + def set_state_to_hide(self, *args): + self.setChecked(True) + label = _('Hide') + self.setText(label + ' ' + self.label) + + def update_state(self, *args): + if self.splitter.is_side_index_hidden: + self.set_state_to_show() + else: + self.set_state_to_hide() + class Splitter(QSplitter): state_changed = pyqtSignal(object) - def __init__(self, *args): - QSplitter.__init__(self, *args) + def __init__(self, name, label, icon, initial_show=True, + initial_side_size=120, connect_button=True, + orientation=Qt.Horizontal, side_index=0, parent=None): + QSplitter.__init__(self, parent) + self.resize_timer = QTimer(self) + self.resize_timer.setSingleShot(True) + self.desired_side_size = initial_side_size + self.desired_show = initial_show + self.resize_timer.setInterval(5) + self.resize_timer.timeout.connect(self.do_resize) + self.setOrientation(orientation) + self.side_index = side_index + self._name = name + self.label = label + self.initial_side_size = initial_side_size + self.initial_show = initial_show self.splitterMoved.connect(self.splitter_moved, type=Qt.QueuedConnection) + self.button = LayoutButton(icon, label, self) + if connect_button: + self.button.clicked.connect(self.double_clicked) def createHandle(self): return SplitterHandle(self.orientation(), self) - def initialize(self, name=None): - if name is not None: - self._name = name + def initialize(self): for i in range(self.count()): h = self.handle(i) if h is not None: @@ -965,40 +1010,115 @@ class Splitter(QSplitter): self.state_changed.emit(not self.is_side_index_hidden) def splitter_moved(self, *args): + self.desired_side_size = self.side_index_size self.state_changed.emit(not self.is_side_index_hidden) - @property - def side_index(self): - return 0 if self.orientation() == Qt.Horizontal else 1 - @property def is_side_index_hidden(self): sizes = list(self.sizes()) return sizes[self.side_index] == 0 - def toggle_side_index(self): - self.double_clicked(None) + @property + def save_name(self): + ori = 'horizontal' if self.orientation() == Qt.Horizontal \ + else 'vertical' + return self._name + '_' + ori - def double_clicked(self, handle): - visible = not self.is_side_index_hidden - sizes = list(self.sizes()) - if 0 in sizes: - idx = sizes.index(0) - sizes[idx] = 80 - else: - sizes[self.side_index] = 0 + def print_sizes(self): + if self.count() > 1: + print self.save_name, 'side:', self.side_index_size, 'other:', + print list(self.sizes())[self.other_index] - if visible: - dynamic.set(self._name + '_last_open_state', str(self.saveState())) + @dynamic_property + def side_index_size(self): + def fget(self): + if self.count() < 2: return 0 + return self.sizes()[self.side_index] + + def fset(self, val): + if self.count() < 2: return + if val == 0 and not self.is_side_index_hidden: + self.save_state() + sizes = list(self.sizes()) + for i in range(len(sizes)): + sizes[i] = val if i == self.side_index else 10 self.setSizes(sizes) + total = sum(self.sizes()) + sizes = list(self.sizes()) + for i in range(len(sizes)): + sizes[i] = val if i == self.side_index else total-val + self.setSizes(sizes) + self.initialize() + + return property(fget=fget, fset=fset) + + def do_resize(self, *args): + orig = self.desired_side_size + QSplitter.resizeEvent(self, self._resize_ev) + if orig > 20 and self.desired_show: + c = 0 + while abs(self.side_index_size - orig) > 10 and c < 5: + self.apply_state(self.get_state(), save_desired=False) + c += 1 + + def resizeEvent(self, ev): + if self.resize_timer.isActive(): + self.resize_timer.stop() + self._resize_ev = ev + self.resize_timer.start() + + def get_state(self): + if self.count() < 2: return (False, 200) + return (self.desired_show, self.desired_side_size) + + def apply_state(self, state, save_desired=True): + if state[0]: + self.side_index_size = state[1] + if save_desired: + self.desired_side_size = self.side_index_size else: - state = dynamic.get(self._name+ '_last_open_state', None) - if state is not None: - self.restoreState(state) - else: - self.setSizes(sizes) - self.initialize() + self.side_index_size = 0 + self.desired_show = state[0] + def default_state(self): + return (self.initial_show, self.initial_side_size) + # Public API {{{ + def save_state(self): + if self.count() > 1: + gprefs[self.save_name+'_state'] = self.get_state() + + @property + def other_index(self): + return (self.side_index+1)%2 + + def restore_state(self): + if self.count() > 1: + state = gprefs.get(self.save_name+'_state', + self.default_state()) + self.apply_state(state, save_desired=False) + self.desired_side_size = state[1] + + def toggle_side_pane(self, hide=None): + if hide is None: + action = 'show' if self.is_side_index_hidden else 'hide' + else: + action = 'hide' if hide else 'show' + getattr(self, action+'_side_pane')() + + def show_side_pane(self): + if self.count() < 2 or not self.is_side_index_hidden: + return + self.apply_state((True, self.desired_side_size)) + + def hide_side_pane(self): + if self.count() < 2 or self.is_side_index_hidden: + return + self.apply_state((False, self.desired_side_size)) + + def double_clicked(self, *args): + self.toggle_side_pane() + + # }}} diff --git a/src/calibre/gui2/wizard/__init__.py b/src/calibre/gui2/wizard/__init__.py index 1fc57e8f4e..b831201f2d 100644 --- a/src/calibre/gui2/wizard/__init__.py +++ b/src/calibre/gui2/wizard/__init__.py @@ -96,14 +96,14 @@ class Kobo(Device): class Booq(Device): name = 'Booq Reader' manufacturer = 'Booq' - output_profile = 'prs505' + output_profile = 'sony' output_format = 'EPUB' id = 'booq' class TheBook(Device): name = 'The Book' manufacturer = 'Augen' - output_profile = 'prs505' + output_profile = 'sony' output_format = 'EPUB' id = 'thebook' From e3168f8a8149d414c0bbd2685b774e3a099c805c Mon Sep 17 00:00:00 2001 From: Kovid Goyal <kovid@kovidgoyal.net> Date: Thu, 10 Jun 2010 21:06:17 -0600 Subject: [PATCH 078/112] Restore linkages between cover browser and book list --- src/calibre/gui2/cover_flow.py | 55 +++++++++++++++++++--------------- 1 file changed, 31 insertions(+), 24 deletions(-) diff --git a/src/calibre/gui2/cover_flow.py b/src/calibre/gui2/cover_flow.py index c2705e5d9b..f06d912a5d 100644 --- a/src/calibre/gui2/cover_flow.py +++ b/src/calibre/gui2/cover_flow.py @@ -128,6 +128,7 @@ class CoverFlowMixin(object): self.cb_splitter.insertWidget(self.cb_splitter.side_index, self.cover_flow) if CoverFlow is not None: self.cover_flow.stop.connect(self.cb_splitter.hide_side_pane) + self.cb_splitter.button.toggled.connect(self.cover_browser_toggled) def toggle_cover_browser(self): cbd = getattr(self, 'cb_dialog', None) @@ -136,7 +137,14 @@ class CoverFlowMixin(object): else: self.show_cover_browser() - def show_cover_browser(self): + def cover_browser_toggled(self, *args): + if self.cb_splitter.button.isChecked(): + self.cover_browser_shown() + else: + self.cover_browser_hidden() + + def cover_browser_shown(self): + self.cover_flow.setFocus(Qt.OtherFocusReason) if CoverFlow is not None: self.cover_flow.setCurrentSlide(self.library_view.currentIndex().row()) self.cover_flow_sync_timer.start(500) @@ -144,24 +152,7 @@ class CoverFlowMixin(object): self.library_view.currentIndex()) self.library_view.scroll_to_row(self.library_view.currentIndex().row()) - if config['separate_cover_flow']: - d = QDialog(self) - ah, aw = available_height(), available_width() - d.resize(int(aw/1.5), ah-60) - d._layout = QStackedLayout() - d.setLayout(d._layout) - d.setWindowTitle(_('Browse by covers')) - d.layout().addWidget(self.cover_flow) - self.cover_flow.setVisible(True) - self.cover_flow.setFocus(Qt.OtherFocusReason) - d.show() - self.cb_splitter.button.set_state_to_hide() - d.finished.connect(self.cb_splitter.button.set_state_to_show) - self.cb_dialog = d - else: - self.cover_flow.setFocus(Qt.OtherFocusReason) - - def hide_cover_browser(self): + def cover_browser_hidden(self): if CoverFlow is not None: self.cover_flow_sync_timer.stop() idx = self.library_view.model().index(self.cover_flow.currentSlide(), 0) @@ -171,11 +162,27 @@ class CoverFlowMixin(object): self.library_view.setCurrentIndex(idx) self.library_view.scroll_to_row(idx.row()) - if config['separate_cover_flow']: - cbd = getattr(self, 'cb_dialog', None) - if cbd is not None: - cbd.accept() - self.cb_dialog = None + + def show_cover_browser(self): + d = QDialog(self) + ah, aw = available_height(), available_width() + d.resize(int(aw/1.5), ah-60) + d._layout = QStackedLayout() + d.setLayout(d._layout) + d.setWindowTitle(_('Browse by covers')) + d.layout().addWidget(self.cover_flow) + self.cover_flow.setVisible(True) + self.cover_flow.setFocus(Qt.OtherFocusReason) + d.show() + self.cb_splitter.button.set_state_to_hide() + d.finished.connect(self.cb_splitter.button.set_state_to_show) + self.cb_dialog = d + + def hide_cover_browser(self): + cbd = getattr(self, 'cb_dialog', None) + if cbd is not None: + cbd.accept() + self.cb_dialog = None def sync_cf_to_listview(self, current, previous): if self.cover_flow_sync_flag and self.cover_flow.isVisible() and \ From 74a937f663263be47105ca5eb00073a5394e6afc Mon Sep 17 00:00:00 2001 From: Translators <> Date: Fri, 11 Jun 2010 04:41:26 +0100 Subject: [PATCH 079/112] Launchpad automatic translations update. --- src/calibre/translations/de.po | 2 +- src/calibre/translations/fo.po | 9513 +++++++++++++++++++++++++++++ src/calibre/translations/pt_BR.po | 202 +- src/calibre/translations/sl.po | 6 +- 4 files changed, 9636 insertions(+), 87 deletions(-) create mode 100644 src/calibre/translations/fo.po diff --git a/src/calibre/translations/de.po b/src/calibre/translations/de.po index ad8a898348..7e61589c11 100644 --- a/src/calibre/translations/de.po +++ b/src/calibre/translations/de.po @@ -14,7 +14,7 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2010-06-10 03:34+0000\n" +"X-Launchpad-Export-Date: 2010-06-11 03:41+0000\n" "X-Generator: Launchpad (build Unknown)\n" "Generated-By: pygettext.py 1.5\n" diff --git a/src/calibre/translations/fo.po b/src/calibre/translations/fo.po new file mode 100644 index 0000000000..36a749516f --- /dev/null +++ b/src/calibre/translations/fo.po @@ -0,0 +1,9513 @@ +# Faroese translation for calibre +# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 +# This file is distributed under the same license as the calibre package. +# FIRST AUTHOR <EMAIL@ADDRESS>, 2010. +# +msgid "" +msgstr "" +"Project-Id-Version: calibre\n" +"Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" +"POT-Creation-Date: 2010-06-06 21:03+0000\n" +"PO-Revision-Date: 2010-06-10 22:42+0000\n" +"Last-Translator: Gunleif Joensen <Unknown>\n" +"Language-Team: Faroese <fo@li.org>\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Launchpad-Export-Date: 2010-06-11 03:40+0000\n" +"X-Generator: Launchpad (build Unknown)\n" + +#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:43 +msgid "Does absolutely nothing" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:46 +#: /home/kovid/work/calibre/src/calibre/devices/jetbook/driver.py:72 +#: /home/kovid/work/calibre/src/calibre/devices/kindle/driver.py:54 +#: /home/kovid/work/calibre/src/calibre/devices/nook/driver.py:70 +#: /home/kovid/work/calibre/src/calibre/devices/nook/driver.py:71 +#: /home/kovid/work/calibre/src/calibre/devices/prs500/books.py:267 +#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:418 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:347 +#: /home/kovid/work/calibre/src/calibre/ebooks/chm/input.py:98 +#: /home/kovid/work/calibre/src/calibre/ebooks/chm/input.py:101 +#: /home/kovid/work/calibre/src/calibre/ebooks/chm/metadata.py:56 +#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:428 +#: /home/kovid/work/calibre/src/calibre/ebooks/fb2/input.py:67 +#: /home/kovid/work/calibre/src/calibre/ebooks/fb2/input.py:69 +#: /home/kovid/work/calibre/src/calibre/ebooks/html/input.py:329 +#: /home/kovid/work/calibre/src/calibre/ebooks/html/input.py:332 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1894 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1896 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/output.py:24 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:230 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:270 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:273 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:373 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:19 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:20 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/ereader.py:36 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/ereader.py:61 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/fb2.py:46 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:36 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:62 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:64 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:118 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:120 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:943 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:1055 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/pdb.py:39 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/pdf.py:28 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/pml.py:23 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/pml.py:49 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/txt.py:14 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:38 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:64 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:77 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:118 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:152 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:610 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:816 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:818 +#: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:49 +#: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:51 +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:908 +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:913 +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:979 +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/reader.py:137 +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/reader.py:139 +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/jacket.py:108 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdb/ereader/writer.py:173 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdb/ereader/writer.py:174 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdb/input.py:39 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdb/palmdoc/writer.py:29 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdb/ztxt/writer.py:27 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/crop.py:82 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/crop.py:83 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/decrypt.py:73 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/decrypt.py:74 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/encrypt.py:63 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/encrypt.py:64 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/info.py:52 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/merge.py:65 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/merge.py:66 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/reverse.py:63 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/reverse.py:64 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/rotate.py:62 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/rotate.py:63 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/split.py:81 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/split.py:82 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/writer.py:97 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/writer.py:98 +#: /home/kovid/work/calibre/src/calibre/ebooks/rtf/input.py:233 +#: /home/kovid/work/calibre/src/calibre/ebooks/rtf/input.py:235 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:273 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:280 +#: /home/kovid/work/calibre/src/calibre/gui2/add.py:170 +#: /home/kovid/work/calibre/src/calibre/gui2/add.py:177 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/__init__.py:21 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:107 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:132 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:134 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:657 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:666 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:946 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:949 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf.py:47 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:123 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:158 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:489 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:172 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:339 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:359 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:826 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:989 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1806 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1809 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:185 +#: /home/kovid/work/calibre/src/calibre/library/cli.py:213 +#: /home/kovid/work/calibre/src/calibre/library/database.py:913 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:302 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:314 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:876 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:913 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1392 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1394 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1516 +#: /home/kovid/work/calibre/src/calibre/library/server/mobile.py:268 +#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:131 +#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:134 +#: /home/kovid/work/calibre/src/calibre/library/server/xml.py:68 +#: /home/kovid/work/calibre/src/calibre/utils/localization.py:114 +#: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:45 +#: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:63 +#: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:77 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/collection.py:47 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/collection.py:50 +msgid "Unknown" +msgstr "Ókent" + +#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:64 +msgid "Base" +msgstr "Grund" + +#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:172 +msgid "File type" +msgstr "Fíluslag" + +#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:206 +msgid "Metadata reader" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:235 +msgid "Metadata writer" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:263 +msgid "Catalog generator" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:15 +msgid "" +"Follow all local links in an HTML file and create a ZIP file containing all " +"linked files. This plugin is run every time you add an HTML file to the " +"library." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:50 +msgid "" +"Character encoding for the input HTML files. Common choices include: cp1252, " +"latin1, iso-8859-1 and utf-8." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:57 +msgid "" +"Create a PMLZ archive containing the PML file and all images in the " +"directory pmlname_img or images. This plugin is run every time you add a PML " +"file to the library." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:89 +msgid "Extract cover from comic files" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:116 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:127 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:139 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:149 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:159 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:170 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:180 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:190 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:200 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:210 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:220 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:231 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:242 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:254 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:275 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:286 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:296 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:306 +msgid "Read metadata from %s files" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:265 +msgid "Read metadata from ebooks in RAR archives" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:317 +msgid "Read metadata from ebooks in ZIP archives" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:328 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:338 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:348 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:370 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:381 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:391 +msgid "Set metadata in %s files" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:359 +msgid "Set metadata from %s files" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/customize/conversion.py:102 +msgid "Conversion Input" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/customize/conversion.py:125 +msgid "" +"Specify the character encoding of the input document. If set this option " +"will override any encoding declared by the document itself. Particularly " +"useful for documents that do not declare an encoding or that have erroneous " +"encoding declarations." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/customize/conversion.py:241 +msgid "Conversion Output" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/customize/conversion.py:255 +msgid "" +"If specified, the output plugin will try to create output that is as human " +"readable as possible. May not have any effect for some output plugins." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:45 +msgid "Input profile" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:49 +msgid "" +"This profile tries to provide sane defaults and is useful if you know " +"nothing about the input document." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:57 +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:266 +msgid "" +"This profile is intended for the SONY PRS line. The 500/505/600/700 etc." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:69 +msgid "This profile is intended for the SONY PRS 300." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:78 +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:300 +msgid "This profile is intended for the SONY PRS-900." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:86 +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:330 +msgid "This profile is intended for the Microsoft Reader." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:97 +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:341 +msgid "This profile is intended for the Mobipocket books." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:110 +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:354 +msgid "This profile is intended for the Hanlin V3 and its clones." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:122 +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:366 +msgid "This profile is intended for the Hanlin V5 and its clones." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:132 +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:374 +msgid "This profile is intended for the Cybook G3." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:145 +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:387 +msgid "This profile is intended for the Cybook Opus." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:157 +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:398 +msgid "This profile is intended for the Amazon Kindle." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:169 +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:433 +msgid "This profile is intended for the Irex Illiad." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:181 +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:446 +msgid "This profile is intended for the IRex Digital Reader 1000." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:194 +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:460 +msgid "This profile is intended for the IRex Digital Reader 800." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:206 +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:474 +msgid "This profile is intended for the B&N Nook." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:226 +msgid "Output profile" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:230 +msgid "" +"This profile tries to provide sane defaults and is useful if you want to " +"produce a document intended to be read at a computer or on a range of " +"devices." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:254 +msgid "" +"Intended for the iPad and similar devices with a resolution of 768x1024" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:279 +msgid "This profile is intended for the Kobo Reader." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:291 +msgid "This profile is intended for the SONY PRS-300." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:309 +msgid "This profile is intended for the 5-inch JetBook." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:318 +msgid "" +"This profile is intended for the SONY PRS line. The 500/505/700 etc, in " +"landscape mode. Mainly useful for comics." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:416 +msgid "This profile is intended for the Amazon Kindle DX." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/customize/ui.py:31 +msgid "Installed plugins" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/customize/ui.py:32 +msgid "Mapping for filetype plugins" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/customize/ui.py:33 +msgid "Local plugin customization" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/customize/ui.py:34 +msgid "Disabled plugins" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/customize/ui.py:77 +msgid "No valid plugin found in " +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/customize/ui.py:278 +msgid "Initialization of plugin %s failed with traceback:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/customize/ui.py:433 +msgid "" +" %prog options\n" +"\n" +" Customize calibre by loading external plugins.\n" +" " +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/customize/ui.py:439 +msgid "Add a plugin by specifying the path to the zip file containing it." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/customize/ui.py:441 +msgid "Remove a custom plugin by name. Has no effect on builtin plugins" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/customize/ui.py:443 +msgid "" +"Customize plugin. Specify name of plugin and customization string separated " +"by a comma." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/customize/ui.py:445 +msgid "List all installed plugins" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/customize/ui.py:447 +msgid "Enable the named plugin" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/customize/ui.py:449 +msgid "Disable the named plugin" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:13 +msgid "Communicate with Android phones." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:39 +msgid "" +"Comma separated list of directories to send e-books to on the device. The " +"first one that exists will be used" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:68 +msgid "Communicate with S60 phones." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:46 +msgid "Communicate with iBooks through iTunes." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:52 +msgid "Apple device detected, launching iTunes, please wait ..." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:154 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:172 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:175 +msgid "Updating device metadata listing..." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:240 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:271 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:861 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1023 +msgid "%d of %d" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:277 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1028 +msgid "finished" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:452 +msgid "" +"Some books not found in iTunes database.\n" +"Delete using the iBooks app.\n" +"Click 'Show Details' for a list." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:647 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/deviceconfig.py:28 +msgid "settings for device drivers" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:649 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/deviceconfig.py:30 +msgid "Ordered list of formats the device will accept" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:762 +msgid "" +"Some cover art could not be converted.\n" +"Click 'Show Details' for a list." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/binatone/driver.py:17 +msgid "Communicate with the Binatone Readme eBook reader." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/blackberry/driver.py:13 +msgid "Communicate with the Blackberry smart phone." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/blackberry/driver.py:14 +#: /home/kovid/work/calibre/src/calibre/devices/nuut2/driver.py:18 +#: /home/kovid/work/calibre/src/calibre/devices/prs500/driver.py:90 +msgid "Kovid Goyal" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/cybook/driver.py:22 +msgid "Communicate with the Cybook Gen 3 / Opus eBook reader." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/eb600/driver.py:24 +msgid "Communicate with the EB600 eBook reader." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/edge/driver.py:17 +msgid "Entourage Edge" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/edge/driver.py:18 +msgid "Communicate with the Entourage Edge." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/eslick/driver.py:16 +msgid "Communicate with the ESlick eBook reader." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/folder_device/driver.py:16 +#: /home/kovid/work/calibre/src/calibre/devices/folder_device/driver.py:30 +msgid "Use an arbitrary folder as a device." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/folder_device/driver.py:26 +#: /home/kovid/work/calibre/src/calibre/devices/interface.py:23 +msgid "Device Interface" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/hanlin/driver.py:19 +msgid "Communicate with Hanlin V3 eBook readers." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/hanlin/driver.py:90 +msgid "Communicate with Hanlin V5 eBook readers." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/hanlin/driver.py:109 +msgid "Communicate with the BOOX eBook reader." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/hanvon/driver.py:18 +msgid "Communicate with the Hanvon N520 eBook reader." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/hanvon/driver.py:40 +msgid "Communicate with The Book reader." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/hanvon/driver.py:51 +msgid "Communicate with the SpringDesign Alex eBook reader." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/hanvon/driver.py:67 +msgid "Communicate with the Azbooka" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/hanvon/driver.py:80 +msgid "Communicate with the Elonex EB 511 eBook reader." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/iliad/driver.py:16 +msgid "Communicate with the IRex Iliad eBook reader." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/iliad/driver.py:17 +#: /home/kovid/work/calibre/src/calibre/devices/irexdr/driver.py:18 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:29 +msgid "John Schember" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/irexdr/driver.py:16 +msgid "Communicate with the IRex Digital Reader 1000 eBook reader." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/irexdr/driver.py:42 +msgid "Communicate with the IRex Digital Reader 800" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/iriver/driver.py:15 +msgid "Communicate with the Iriver Story reader." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/jetbook/driver.py:20 +msgid "Communicate with the JetBook eBook reader." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/kindle/driver.py:21 +msgid "Communicate with the Kindle eBook reader." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/kindle/driver.py:147 +msgid "Communicate with the Kindle 2 eBook reader." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/kindle/driver.py:157 +msgid "Communicate with the Kindle DX eBook reader." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:14 +msgid "Communicate with the Kobo Reader" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/misc.py:15 +msgid "Communicate with the Palm Pre" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/misc.py:35 +msgid "Communicate with the Booq Avant" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/nokia/driver.py:17 +msgid "Communicate with the Nokia 770 internet tablet." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/nokia/driver.py:40 +msgid "Communicate with the Nokia 810 internet tablet." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/nook/driver.py:20 +msgid "The Nook" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/nook/driver.py:21 +msgid "Communicate with the Nook eBook reader." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/nuut2/driver.py:17 +msgid "Communicate with the Nuut2 eBook reader." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/prs500/driver.py:89 +msgid "Communicate with the Sony PRS-500 eBook reader." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:22 +msgid "Communicate with all the Sony eBook readers." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:60 +msgid "" +"Comma separated list of metadata fields to turn into collections on the " +"device. Possibilities include: " +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:140 +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/structure.py:68 +msgid "Unnamed" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/sne/driver.py:17 +msgid "Communicate with the Samsung SNE eBook reader." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/teclast/driver.py:11 +msgid "Communicate with the Teclast K3 reader." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/teclast/driver.py:37 +msgid "Communicate with the Newsmy reader." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/teclast/driver.py:49 +msgid "Communicate with the iPapyrus reader." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:247 +msgid "Unable to detect the %s disk drive. Try rebooting." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:427 +msgid "Unable to detect the %s mount point. Try rebooting." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:492 +msgid "Unable to detect the %s disk drive." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:585 +msgid "Could not find mount helper: %s." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:597 +msgid "" +"Unable to detect the %s disk drive. Your kernel is probably exporting a " +"deprecated version of SYSFS." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:605 +msgid "Unable to mount main memory (Error code: %d)" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:742 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:744 +msgid "The reader has no storage card in this slot." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:746 +msgid "Selected slot: %s is not supported." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:779 +msgid "There is insufficient free space in main memory" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:781 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:783 +msgid "There is insufficient free space on the storage card" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:813 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:819 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:847 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:239 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:141 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:152 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1276 +#: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:120 +msgid "News" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/usbms/deviceconfig.py:12 +msgid "Configure Device" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/usbms/deviceconfig.py:32 +msgid "Place files in sub directories if the device supports them" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/usbms/deviceconfig.py:34 +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/configwidget_ui.py:78 +msgid "Read metadata from files on device" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/usbms/deviceconfig.py:36 +msgid "Template to control how books are saved" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/usbms/deviceconfig.py:39 +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/configwidget_ui.py:80 +msgid "Extra customization" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:28 +msgid "Communicate with an eBook reader." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:44 +msgid "Get device information..." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:53 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:56 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:59 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:119 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:126 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:149 +msgid "Getting list of books on device..." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:174 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:176 +msgid "Transferring books to device..." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:191 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:220 +msgid "Adding books to device metadata listing..." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:224 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:242 +msgid "Removing books from device..." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:246 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:251 +msgid "Removing books from device metadata listing..." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:269 +msgid "Sending metadata to device..." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/chm/reader.py:41 +msgid "%prog [options] mybook.chm" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/chm/reader.py:42 +msgid "Output directory. Defaults to current directory" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/chm/reader.py:45 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:589 +msgid "Set the book title" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/chm/reader.py:47 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:591 +msgid "Set sort key for the title" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/chm/reader.py:49 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:593 +msgid "Set the author" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/chm/reader.py:51 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:595 +msgid "Set sort key for the author" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/chm/reader.py:53 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:597 +msgid "The category this book belongs to. E.g.: History" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/chm/reader.py:56 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:600 +msgid "Path to a graphic that will be set as this files' thumbnail" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/chm/reader.py:59 +msgid "Path to a txt file containing a comment." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/chm/reader.py:62 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:607 +msgid "Extract thumbnail from LRF file" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/chm/reader.py:63 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:608 +msgid "Set the publisher" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/chm/reader.py:64 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:609 +msgid "Set the book classification" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/chm/reader.py:65 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:610 +msgid "Set the book creator" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/chm/reader.py:66 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:611 +msgid "Set the book producer" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/chm/reader.py:68 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:613 +msgid "" +"Extract cover from LRF file. Note that the LRF format has no defined cover, " +"so we use some heuristics to guess the cover." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/chm/reader.py:70 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:615 +msgid "Set book ID" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/chm/reader.py:72 +msgid "Set font delta" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:201 +msgid "Rendered %s" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:204 +msgid "Failed %s" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:261 +msgid "" +"Failed to process comic: \n" +"\n" +"%s" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:279 +msgid "" +"Number of colors for grayscale image conversion. Default: %default. Values " +"of less than 256 may result in blurred text on your device if you are " +"creating your comics in EPUB format." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:283 +msgid "" +"Disable normalize (improve contrast) color range for pictures. Default: False" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:286 +msgid "Maintain picture aspect ratio. Default is to fill the screen." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:288 +msgid "Disable sharpening." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:290 +msgid "" +"Disable trimming of comic pages. For some comics, trimming might remove " +"content as well as borders." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:293 +msgid "Don't split landscape images into two portrait images" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:295 +msgid "" +"Keep aspect ratio and scale image using screen height as image width for " +"viewing in landscape mode." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:298 +msgid "" +"Used for right-to-left publications like manga. Causes landscape pages to be " +"split into portrait pages from right to left." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:302 +msgid "" +"Enable Despeckle. Reduces speckle noise. May greatly increase processing " +"time." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:305 +msgid "" +"Don't sort the files found in the comic alphabetically by name. Instead use " +"the order they were added to the comic." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:309 +msgid "" +"The format that images in the created ebook are converted to. You can " +"experiment to see which format gives you optimal size and look on your " +"device." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:313 +msgid "Apply no processing to the image" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:315 +msgid "Do not convert the image to grayscale (black and white)" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:452 +#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:463 +msgid "Page" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/cli.py:19 +msgid "" +"input_file output_file [options]\n" +"\n" +"Convert an ebook from one format to another.\n" +"\n" +"input_file is the input and output_file is the output. Both must be " +"specified as the first two arguments to the command.\n" +"\n" +"The output ebook format is guessed from the file extension of output_file. " +"output_file can also be of the special format .EXT where EXT is the output " +"file extension. In this case, the name of the output file is derived the " +"name of the input file. Note that the filenames must not start with a " +"hyphen. Finally, if output_file has no extension, then it is treated as a " +"directory and an \"open ebook\" (OEB) consisting of HTML files is written to " +"that directory. These files are the files that would normally have been " +"passed to the output plugin.\n" +"\n" +"After specifying the input and output file you can customize the conversion " +"by specifying various options. The available options depend on the input and " +"output file types. To get help on them specify the input and output file and " +"then use the -h option.\n" +"\n" +"For full documentation of the conversion system see\n" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/cli.py:97 +msgid "INPUT OPTIONS" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/cli.py:98 +msgid "Options to control the processing of the input %s file" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/cli.py:104 +msgid "OUTPUT OPTIONS" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/cli.py:105 +msgid "Options to control the processing of the output %s" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/cli.py:119 +msgid "Options to control the look and feel of the output" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/cli.py:135 +msgid "Control auto-detection of document structure." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/cli.py:145 +msgid "" +"Control the automatic generation of a Table of Contents. By default, if the " +"source file has a Table of Contents, it will be used in preference to the " +"automatically generated one." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/cli.py:155 +msgid "Options to set metadata in the output" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/cli.py:158 +msgid "Options to help with debugging the conversion" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/cli.py:183 +msgid "List builtin recipes" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/cli.py:256 +msgid "Output saved to" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:95 +msgid "Level of verbosity. Specify multiple times for greater verbosity." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:102 +msgid "" +"Save the output from different stages of the conversion pipeline to the " +"specified directory. Useful if you are unsure at which stage of the " +"conversion process a bug is occurring." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:111 +msgid "" +"Specify the input profile. The input profile gives the conversion system " +"information on how to interpret various information in the input document. " +"For example resolution dependent lengths (i.e. lengths in pixels). Choices " +"are:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:122 +msgid "" +"Specify the output profile. The output profile tells the conversion system " +"how to optimize the created document for the specified device. In some " +"cases, an output profile is required to produce documents that will work on " +"a device. For example EPUB on the SONY reader. Choices are:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:133 +msgid "" +"The base font size in pts. All font sizes in the produced book will be " +"rescaled based on this size. By choosing a larger size you can make the " +"fonts in the output bigger and vice versa. By default, the base font size is " +"chosen based on the output profile you chose." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:143 +msgid "" +"Mapping from CSS font names to font sizes in pts. An example setting is " +"12,12,14,16,18,20,22,24. These are the mappings for the sizes xx-small to xx-" +"large, with the final size being for huge fonts. The font rescaling " +"algorithm uses these sizes to intelligently rescale fonts. The default is to " +"use a mapping based on the output profile you chose." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:155 +msgid "Disable all rescaling of font sizes." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:162 +msgid "" +"The line height in pts. Controls spacing between consecutive lines of text. " +"By default no line height manipulation is performed." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:170 +msgid "" +"Some badly designed documents use tables to control the layout of text on " +"the page. When converted these documents often have text that runs off the " +"page and other artifacts. This option will extract the content from the " +"tables and present it in a linear fashion." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:180 +msgid "" +"XPath expression that specifies all tags that should be added to the Table " +"of Contents at level one. If this is specified, it takes precedence over " +"other forms of auto-detection." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:189 +msgid "" +"XPath expression that specifies all tags that should be added to the Table " +"of Contents at level two. Each entry is added under the previous level one " +"entry." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:197 +msgid "" +"XPath expression that specifies all tags that should be added to the Table " +"of Contents at level three. Each entry is added under the previous level two " +"entry." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:205 +msgid "" +"Normally, if the source file already has a Table of Contents, it is used in " +"preference to the auto-generated one. With this option, the auto-generated " +"one is always used." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:213 +msgid "Don't add auto-detected chapters to the Table of Contents." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:220 +msgid "" +"If fewer than this number of chapters is detected, then links are added to " +"the Table of Contents. Default: %default" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:227 +msgid "" +"Maximum number of links to insert into the TOC. Set to 0 to disable. Default " +"is: %default. Links are only added to the TOC if less than the threshold " +"number of chapters were detected." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:235 +msgid "" +"Remove entries from the Table of Contents whose titles match the specified " +"regular expression. Matching entries and all their children are removed." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:246 +msgid "" +"An XPath expression to detect chapter titles. The default is to consider " +"<h1> or <h2> tags that contain the words \"chapter\",\"book\",\"section\" or " +"\"part\" as chapter titles as well as any tags that have class=\"chapter\". " +"The expression used must evaluate to a list of elements. To disable chapter " +"detection, use the expression \"/\". See the XPath Tutorial in the calibre " +"User Manual for further help on using this feature." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:260 +msgid "" +"Specify how to mark detected chapters. A value of \"pagebreak\" will insert " +"page breaks before chapters. A value of \"rule\" will insert a line before " +"chapters. A value of \"none\" will disable chapter marking and a value of " +"\"both\" will use both page breaks and lines to mark chapters." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:270 +msgid "" +"Either the path to a CSS stylesheet or raw CSS. This CSS will be appended to " +"the style rules from the source file, so it can be used to override those " +"rules." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:279 +msgid "" +"An XPath expression. Page breaks are inserted before the specified elements." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:285 +msgid "" +"Set the top margin in pts. Default is %default. Note: 72 pts equals 1 inch" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:290 +msgid "" +"Set the bottom margin in pts. Default is %default. Note: 72 pts equals 1 inch" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:295 +msgid "" +"Set the left margin in pts. Default is %default. Note: 72 pts equals 1 inch" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:300 +msgid "" +"Set the right margin in pts. Default is %default. Note: 72 pts equals 1 inch" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:306 +msgid "" +"Change text justification. A value of \"left\" converts all justified text " +"in the source to left aligned (i.e. unjustified) text. A value of " +"\"justify\" converts all unjustified text to justified. A value of " +"\"original\" (the default) does not change justification in the source file. " +"Note that only some output formats support justification." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:316 +msgid "" +"Remove spacing between paragraphs. Also sets an indent on paragraphs of " +"1.5em. Spacing removal will not work if the source file does not use " +"paragraphs (<p> or <div> tags)." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:323 +msgid "" +"When calibre removes inter paragraph spacing, it automatically sets a " +"paragraph indent, to ensure that paragraphs can be easily distinguished. " +"This option controls the width of that indent." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:330 +msgid "" +"Use the cover detected from the source file in preference to the specified " +"cover." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:336 +msgid "" +"Insert a blank line between paragraphs. Will not work if the source file " +"does not use paragraphs (<p> or <div> tags)." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:343 +msgid "" +"Remove the first image from the input ebook. Useful if the first image in " +"the source file is a cover and you are specifying an external cover." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:351 +msgid "" +"Insert the book metadata at the start of the book. This is useful if your " +"ebook reader does not support displaying/searching metadata directly." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:359 +msgid "" +"Attempt to detect and correct hard line breaks and other problems in the " +"source file. This may make things worse, so use with care." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:367 +msgid "Use a regular expression to try and remove the header." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:374 +msgid "The regular expression to use to remove the header." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:380 +msgid "Use a regular expression to try and remove the footer." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:387 +msgid "The regular expression to use to remove the footer." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:394 +msgid "" +"Read metadata from the specified OPF file. Metadata read from this file will " +"override any metadata in the source file." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:401 +msgid "" +"Transliterate unicode characters to an ASCII representation. Use with care " +"because this will replace unicode characters with ASCII. For instance it " +"will replace \"%s\" with \"Mikhail Gorbachiov\". Also, note that in cases " +"where there are multiple representations of a character (characters shared " +"by Chinese and Japanese for instance) the representation used by the largest " +"number of people will be used (Chinese in the previous example)." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:416 +msgid "" +"Preserve ligatures present in the input document. A ligature is a special " +"rendering of a pair of characters like ff, fi, fl et cetera. Most readers do " +"not have support for ligatures in their default fonts, so they are unlikely " +"to render correctly. By default, calibre will turn a ligature into the " +"corresponding pair of normal characters. This option will preserve them " +"instead." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:428 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:38 +msgid "Set the title." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:432 +msgid "Set the authors. Multiple authors should be separated by ampersands." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:437 +msgid "The version of the title to be used for sorting. " +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:441 +msgid "String to be used when sorting by author. " +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:445 +msgid "Set the cover to the specified file or URL" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:449 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:54 +msgid "Set the ebook description." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:453 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:56 +msgid "Set the ebook publisher." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:457 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:60 +msgid "Set the series this ebook belongs to." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:461 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:62 +msgid "Set the index of the book in this series." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:465 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:64 +msgid "Set the rating. Should be a number between 1 and 5." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:469 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:66 +msgid "Set the ISBN of the book." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:473 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:68 +msgid "Set the tags for the book. Should be a comma separated list." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:477 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:70 +msgid "Set the book producer." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:481 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:72 +msgid "Set the language." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:485 +msgid "Set the publication date." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:489 +msgid "Set the book timestamp (used by the date column in calibre)." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:589 +msgid "Could not find an ebook inside the archive" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:647 +msgid "Values of series index and rating must be numbers. Ignoring" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:654 +msgid "Failed to parse date/time" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:802 +msgid "Converting input to HTML..." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:829 +msgid "Running transforms on ebook..." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:916 +msgid "Creating" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/epub/output.py:56 +msgid "" +"Extract the contents of the generated EPUB file to the specified directory. " +"The contents of the directory are first deleted, so be careful." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/epub/output.py:62 +msgid "" +"Turn off splitting at page breaks. Normally, input files are automatically " +"split at every page break into two files. This gives an output ebook that " +"can be parsed faster and with less resources. However, splitting is slow and " +"if your source file contains a very large number of page breaks, you should " +"turn off splitting on page breaks." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/epub/output.py:73 +msgid "" +"Split all HTML files larger than this size (in KB). This is necessary as " +"most EPUB readers cannot handle large file sizes. The default of %defaultKB " +"is the size required for Adobe Digital Editions." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/epub/output.py:80 +msgid "" +"Normally, if the input file has no cover and you don't specify one, a " +"default cover is generated with the title, authors, etc. This option " +"disables the generation of this cover." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/epub/output.py:86 +msgid "" +"Do not use SVG for the book cover. Use this option if your EPUB is going to " +"be used ona device that does not support SVG, like the iPhone or the " +"JetBook Lite. Without this option, such devices will display the cover as a " +"blank page." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/epub/output.py:94 +msgid "" +"When using an SVG cover, this option will cause the cover to scale to cover " +"the available screen area, but still preserve its aspect ratio (ratio of " +"width to height). That means there may be white borders at the sides or top " +"and bottom of the image, but the image will never be distorted. Without this " +"option the image may be slightly distorted, but there will be no borders." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/epub/output.py:169 +msgid "Start" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/fb2/fb2ml.py:144 +#: /home/kovid/work/calibre/src/calibre/ebooks/rb/rbml.py:102 +#: /home/kovid/work/calibre/src/calibre/ebooks/txt/txtml.py:77 +msgid "Table of Contents:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/fb2/input.py:32 +msgid "Do not insert a Table of Contents at the beginning of the book." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/fb2/output.py:21 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdb/output.py:32 +#: /home/kovid/work/calibre/src/calibre/ebooks/pml/output.py:37 +#: /home/kovid/work/calibre/src/calibre/ebooks/rb/output.py:21 +#: /home/kovid/work/calibre/src/calibre/ebooks/txt/output.py:35 +msgid "Add Table of Contents to beginning of the book." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/html/input.py:243 +msgid "" +"Traverse links in HTML files breadth first. Normally, they are traversed " +"depth first." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/html/input.py:250 +msgid "" +"Maximum levels of recursion when following links in HTML files. Must be non-" +"negative. 0 implies that no links in the root HTML file are followed. " +"Default is %default." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/html/input.py:259 +msgid "" +"Normally this input plugin re-arranges all the input files into a standard " +"folder hierarchy. Only use this option if you know what you are doing as it " +"can result in various nasty side effects in the rest of of the conversion " +"pipeline." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/html/input.py:267 +msgid "" +"Average line length for line breaking if the HTML is from a previous partial " +"conversion of a PDF file. Default is %default which disables this." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lit/from_any.py:47 +msgid "Creating LIT file from EPUB..." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:320 +msgid "\tBook Designer file detected." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:322 +msgid "\tParsing HTML..." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:345 +msgid "\tBaen file detected. Re-parsing..." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:361 +msgid "Written preprocessed HTML to " +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:379 +msgid "Processing %s" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:393 +msgid "\tConverting to BBeB..." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:539 +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:552 +msgid "Could not parse file: %s" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:544 +msgid "%s is an empty file" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:564 +msgid "Failed to parse link %s %s" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:608 +msgid "Cannot add link %s to TOC" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:957 +msgid "Unable to process image %s. Error: %s" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1002 +msgid "Unable to process interlaced PNG %s" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1017 +msgid "" +"Could not process image: %s\n" +"%s" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1772 +msgid "" +"An error occurred while processing a table: %s. Ignoring table markup." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1774 +msgid "" +"Bad table:\n" +"%s" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1796 +msgid "Table has cell that is too large" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1862 +msgid "Could not read cover image: %s" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1865 +msgid "Cannot read from: %s" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1994 +msgid "Failed to process opf file" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/lrfparser.py:136 +msgid "" +"%prog book.lrf\n" +"Convert an LRF file into an LRS (XML UTF-8 encoded) file" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/lrfparser.py:137 +msgid "Output LRS file" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/lrfparser.py:139 +msgid "Do not save embedded image and font files to disk" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/lrfparser.py:158 +msgid "Parsing LRF..." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/lrfparser.py:161 +msgid "Creating XML..." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/lrfparser.py:163 +msgid "LRS written to " +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/lrs/convert_from.py:267 +msgid "Could not read from thumbnail file:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/lrs/convert_from.py:287 +msgid "" +"%prog [options] file.lrs\n" +"Compile an LRS file into an LRF file." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/lrs/convert_from.py:288 +msgid "Path to output file" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/lrs/convert_from.py:290 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/isbndb.py:113 +msgid "Verbose processing" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/lrs/convert_from.py:292 +msgid "Convert LRS to LRS, useful for debugging." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:457 +msgid "Invalid LRF file. Could not set metadata." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:582 +msgid "" +"%prog [options] mybook.lrf\n" +"\n" +"\n" +"Show/edit the metadata in an LRF file.\n" +"\n" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/meta.py:603 +msgid "" +"Path to a txt file containing the comment to be stored in the lrf file." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/output.py:90 +msgid "Enable autorotation of images that are wider than the screen width." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/output.py:94 +msgid "Set the space between words in pts. Default is %default" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/output.py:97 +msgid "Add a header to all the pages with title and author." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/output.py:100 +msgid "" +"Set the format of the header. %a is replaced by the author and %t by the " +"title. Default is %default" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/output.py:104 +msgid "Add extra spacing below the header. Default is %default pt." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/output.py:107 +msgid "" +"Minimum paragraph indent (the indent of the first line of a paragraph) in " +"pts. Default: %default" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/output.py:112 +msgid "" +"Render tables in the HTML as images (useful if the document has large or " +"complex tables)" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/output.py:117 +msgid "" +"Multiply the size of text in rendered tables by this factor. Default is " +"%default" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/output.py:121 +msgid "The serif family of fonts to embed" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/output.py:124 +msgid "The sans-serif family of fonts to embed" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/output.py:127 +msgid "The monospace family of fonts to embed" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/output.py:152 +msgid "Comic" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:372 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/info.py:45 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:97 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:98 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:61 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:46 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:336 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:831 +#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:536 +msgid "Title" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:373 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:62 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:48 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:341 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:832 +msgid "Author(s)" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:374 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:64 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:53 +msgid "Publisher" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:375 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/info.py:49 +msgid "Producer" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:376 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:184 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:99 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info_ui.py:67 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:297 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1008 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:107 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:149 +msgid "Comments" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:384 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories.py:46 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:54 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:286 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1004 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:106 +#: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:130 +msgid "Tags" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:386 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories.py:46 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:55 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:302 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1013 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:105 +#: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:82 +msgid "Series" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:387 +msgid "Language" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:389 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:996 +msgid "Timestamp" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:391 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:66 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:51 +msgid "Published" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:393 +msgid "Rights" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/amazon.py:85 +msgid "EDITORIAL REVIEW" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/archive.py:22 +msgid "" +"Extract common e-book formats from archives (zip/rar) files. Also try to " +"autodetect if they are actually cbz/cbr files." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:20 +msgid "options" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:21 +msgid "" +"\n" +"Read/Write metadata from/to ebook files.\n" +"\n" +"Supported formats for reading metadata: %s\n" +"\n" +"Supported formats for writing metadata: %s\n" +"\n" +"Different file types support different kinds of metadata. If you try to set\n" +"some metadata on a file type that does not support it, the metadata will be\n" +"silently ignored.\n" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:40 +msgid "" +"Set the authors. Multiple authors should be separated by the & character. " +"Author names should be in the order Firstname Lastname." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:44 +msgid "" +"The version of the title to be used for sorting. If unspecified, and the " +"title is specified, it will be auto-generated from the title." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:48 +msgid "" +"String to be used when sorting by author. If unspecified, and the author(s) " +"are specified, it will be auto-generated from the author(s)." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:52 +msgid "Set the cover to the specified file." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:58 +msgid "Set the book category." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:74 +msgid "Set the published date." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:77 +msgid "Get the cover from the ebook and save it at as the specified file." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:80 +msgid "" +"Specify the name of an OPF file. The metadata will be written to the OPF " +"file." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:83 +msgid "" +"Read metadata from the specified OPF file and use it to set metadata in the " +"ebook. Metadata specified on the command line will override metadata read " +"from the OPF file" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:88 +msgid "Set the BookID in LRF files" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:153 +msgid "No file specified" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:168 +msgid "Original metadata" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:185 +msgid "Changed metadata" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:197 +msgid "OPF created in" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:203 +msgid "Cover saved to" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:205 +msgid "No cover found" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/fetch.py:33 +msgid "Metadata download" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/fetch.py:110 +msgid "ratings" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/fetch.py:110 +msgid "tags" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/fetch.py:111 +msgid "description/reviews" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/fetch.py:112 +msgid "Download %s from %s" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/fetch.py:136 +msgid "Downloads metadata from Google Books" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/fetch.py:152 +msgid "Downloads metadata from isbndb.com" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/fetch.py:180 +msgid "" +"To use isbndb.com you must sign up for a %sfree account%s and enter your " +"access key below." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/fetch.py:188 +msgid "Downloads social metadata from amazon.com" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/isbndb.py:94 +msgid "" +"\n" +"%prog [options] key\n" +"\n" +"Fetch metadata for books from isndb.com. You can specify either the\n" +"books ISBN ID or its title and author. If you specify the title and author,\n" +"then more than one book may be returned.\n" +"\n" +"key is the account key you generate after signing up for a free account from " +"isbndb.com.\n" +"\n" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/isbndb.py:105 +msgid "The ISBN ID of the book you want metadata for." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/isbndb.py:107 +msgid "The author whose book to search for." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/isbndb.py:109 +msgid "The title of the book to search for." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/isbndb.py:111 +msgid "The publisher of the book to search for." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/library_thing.py:53 +msgid "LibraryThing.com timed out. Try again later." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/library_thing.py:60 +msgid "" +"Could not fetch cover as server is experiencing high load. Please try again " +"later." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/library_thing.py:61 +msgid " not found." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/library_thing.py:64 +msgid "LibraryThing.com server error. Try again later." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/library_thing.py:71 +msgid "" +"\n" +"%prog [options] ISBN\n" +"\n" +"Fetch a cover image for the book identified by ISBN from LibraryThing.com\n" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:1220 +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1371 +msgid "Cover" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/output.py:22 +msgid "Modify images to meet Palm device size limitations." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/output.py:26 +msgid "When present, use author sort field as author." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/output.py:30 +msgid "" +"Don't add Table of Contents to end of book. Useful if the book has its own " +"table of contents." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/output.py:33 +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/htmltoc.py:56 +msgid "Title for any generated in-line table of contents." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/output.py:37 +msgid "Disable compression of the file contents." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/output.py:40 +msgid "Tag marking book to be filed with Personal Docs" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/output.py:108 +msgid "All articles" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:258 +msgid "This is an Amazon Topaz book. It cannot be processed." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1372 +msgid "Title Page" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1373 +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/htmltoc.py:15 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:53 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:194 +msgid "Table of Contents" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1374 +msgid "Index" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1375 +msgid "Glossary" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1376 +msgid "Acknowledgements" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1377 +msgid "Bibliography" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1378 +msgid "Colophon" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1379 +msgid "Copyright" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1380 +msgid "Dedication" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1381 +msgid "Epigraph" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1382 +msgid "Foreword" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1383 +msgid "List of Illustrations" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1384 +msgid "List of Tables" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1385 +msgid "Notes" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1386 +msgid "Preface" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1387 +msgid "Main Text" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/iterator.py:41 +msgid "%s format books are not supported" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/htmltoc.py:54 +msgid "HTML TOC generation options." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/jacket.py:113 +msgid "Book Jacket" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/split.py:34 +msgid "" +"Could not find reasonable point at which to split: %s Sub-tree size: %d KB" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/writer.py:32 +msgid "OPF/NCX/etc. generation options." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/writer.py:35 +msgid "OPF version to generate. Default is %default." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/writer.py:37 +msgid "" +"Generate an Adobe \"page-map\" file if pagination information is available." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/pdb/ereader/reader132.py:128 +msgid "Footnotes" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/pdb/ereader/reader132.py:135 +msgid "Sidebar" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/pdb/input.py:22 +#: /home/kovid/work/calibre/src/calibre/ebooks/tcr/input.py:23 +#: /home/kovid/work/calibre/src/calibre/ebooks/txt/input.py:23 +msgid "" +"Normally calibre treats blank lines as paragraph markers. With this option " +"it will assume that every line represents a paragraph instead." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/pdb/input.py:26 +#: /home/kovid/work/calibre/src/calibre/ebooks/tcr/input.py:27 +#: /home/kovid/work/calibre/src/calibre/ebooks/txt/input.py:27 +msgid "" +"Normally calibre treats blank lines as paragraph markers. With this option " +"it will assume that every line starting with an indent (either a tab or 2+ " +"spaces) represents a paragraph. Paragraphs end when the next line that " +"starts with an indent is reached." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/pdb/output.py:23 +msgid "Format to use inside the pdb container. Choices are:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/pdb/output.py:27 +msgid "" +"Specify the character encoding of the output document. The default is " +"cp1252. Note: This option is not honored by all formats." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/input.py:24 +msgid "Do not extract images from the document" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/input.py:26 +msgid "" +"Scale used to determine the length at which a line should be unwrapped. " +"Valid values are a decimal between 0 and 1. The default is 0.5, this is the " +"median line length." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/input.py:30 +msgid "Use the new PDF conversion engine." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/cli.py:31 +msgid "" +"command ...\n" +"\n" +"command can be one of the following:\n" +"[%%commands]\n" +"\n" +"Use %prog command --help to get more information about a specific command\n" +"\n" +"Manipulate a PDF.\n" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/crop.py:29 +msgid "" +"[options] file.pdf\n" +"\n" +"Crop a PDF file.\n" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/crop.py:38 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/decrypt.py:32 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/encrypt.py:34 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/merge.py:36 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/reverse.py:34 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/rotate.py:33 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/split.py:41 +msgid "" +"Path to output file. By default a file is created in the current directory." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/crop.py:41 +msgid "Number of pixels to crop from the left most x (default is %s)" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/crop.py:44 +msgid "Number of pixels to crop from the left most y (default is %s)" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/crop.py:47 +msgid "Number of pixels to crop from the right most x (default is %s)" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/crop.py:50 +msgid "Number of pixels to crop from the right most y (default is %s)" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/crop.py:53 +msgid "" +"A file generated by ghostscript which allows each page to be individually " +"cropped `gs -dSAFER -dNOPAUSE -dBATCH -sDEVICE=bbox file.pdf 2> bounding`" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/crop.py:73 +msgid "Crop Options:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/crop.py:73 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/decrypt.py:60 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/encrypt.py:54 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/merge.py:56 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/reverse.py:54 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/rotate.py:53 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/split.py:61 +msgid "Options to control the transformation of pdf" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/decrypt.py:23 +msgid "" +"[options] file.pdf password\n" +"\n" +"Decrypt a PDF.\n" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/decrypt.py:60 +msgid "Decrypt Options:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/encrypt.py:25 +msgid "" +"[options] file.pdf password\n" +"\n" +"Encrypt a PDF.\n" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/encrypt.py:54 +msgid "Encrypt Options:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/info.py:21 +msgid "" +"file.pdf ...\n" +"\n" +"Get info about a PDF.\n" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/info.py:46 +msgid "Author" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/info.py:47 +msgid "Subject" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/info.py:48 +msgid "Creator" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/info.py:50 +msgid "Pages" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/info.py:51 +msgid "File Size" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/info.py:52 +msgid "PDF Version" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/merge.py:25 +msgid "" +"[options] file1.pdf file2.pdf ...\n" +"\n" +"Metadata will be used from the first PDF specified.\n" +"\n" +"Merges individual PDFs.\n" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/merge.py:56 +msgid "Merge Options:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/reverse.py:25 +msgid "" +"[options] file.pdf\n" +"\n" +"Reverse a PDF.\n" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/reverse.py:54 +msgid "Reverse Options:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/rotate.py:24 +msgid "" +"file.pdf degrees\n" +"\n" +"Rotate pages of a PDF clockwise.\n" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/rotate.py:53 +msgid "Rotate Options:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/split.py:25 +msgid "" +"\n" +"%prog %%name [options] file.pdf page_to_split_on ...\n" +"%prog %%name [options] file.pdf page_range_to_split_on ...\n" +"\t\n" +"Ex.\n" +"\t\n" +"%prog %%name file.pdf 6\n" +"%prog %%name file.pdf 6-12\n" +"%prog %%name file.pdf 6-12 8 10 9-20\n" +"\n" +"Split a PDF.\n" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/split.py:61 +msgid "Split Options:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/output.py:31 +msgid "" +"The unit of measure. Default is inch. Choices are %s Note: This does not " +"override the unit for margins!" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/output.py:36 +msgid "" +"The size of the paper. This size will be overridden when an output profile " +"is used. Default is letter. Choices are %s" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/output.py:40 +msgid "" +"Custom size of the document. Use the form widthxheight EG. `123x321` to " +"specify the width and height. This overrides any specified paper-size." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/output.py:45 +msgid "The orientation of the page. Default is portrait. Choices are %s" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/output.py:49 +msgid "" +"Preserve the aspect ratio of the cover, instead of stretching it to fill the " +"ull first page of the generated pdf." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/pdftohtml.py:55 +msgid "Could not find pdftohtml, check it is in your PATH" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/pml/output.py:33 +msgid "" +"Specify the character encoding of the output document. The default is cp1252." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/rtf/input.py:199 +msgid "" +"This RTF file has a feature calibre does not support. Convert it to HTML " +"first and then try it.\n" +"%s" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/tcr/output.py:23 +msgid "" +"Specify the character encoding of the output document. The default is utf-8." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/tcr/output.py:27 +msgid "" +"Specify the compression level to use. Scale 1 - 10. 1 being the lowest " +"compression but the fastest and 10 being the highest compression but the " +"slowest." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/txt/input.py:33 +msgid "" +"Normally extra spaces are condensed into a single space. With this option " +"all spaces will be displayed." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/txt/input.py:36 +msgid "" +"Run the text input through the markdown pre-processor. To learn more about " +"markdown see" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/txt/input.py:39 +msgid "Do not insert a Table of Contents into the output text." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/txt/output.py:24 +msgid "" +"Type of newline to use. Options are %s. Default is 'system'. Use 'old_mac' " +"for compatibility with Mac OS 9 and earlier. For Mac OS X use 'unix'. " +"'system' will default to the newline type used by this OS." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/txt/output.py:30 +msgid "" +"Specify the character encoding of the output document. The default is utf-8. " +"Note: This option is not honored by all formats." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/txt/output.py:38 +msgid "" +"The maximum number of characters per line. This splits on the first space " +"before the specified value. If no space is found the line will be broken at " +"the space after and will exceed the specified value. Also, there is a " +"minimum of 25 characters. Use 0 to disable line splitting." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/txt/output.py:45 +msgid "" +"Force splitting on the max-line-length value when no space is present. Also " +"allows max-line-length to be below the minimum" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:33 +msgid "Send file to storage card instead of main memory by default" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:35 +msgid "Confirm before deleting" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:37 +msgid "Toolbar icon size" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:39 +msgid "Show button labels in the toolbar" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:41 +msgid "Main window geometry" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:43 +msgid "Notify when a new version is available" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:45 +msgid "Use Roman numerals for series number" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:47 +msgid "Sort tags list by popularity" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:49 +msgid "Number of covers to show in the cover browsing mode" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:51 +msgid "Defaults for conversion to LRF" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:53 +msgid "Options for the LRF ebook viewer" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:56 +msgid "Formats that are viewed using the internal viewer" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:58 +msgid "Columns to be displayed in the book list" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:59 +msgid "Automatically launch content server on application startup" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:60 +msgid "Oldest news kept in database" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:61 +msgid "Show system tray icon" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:63 +msgid "Upload downloaded news to device" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:65 +msgid "Delete books from library after uploading to device" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:67 +msgid "" +"Show the cover flow in a separate window instead of in the main calibre " +"window" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:69 +msgid "Disable notifications from the system tray icon" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:71 +msgid "Default action to perform when send to device button is clicked" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:93 +msgid "Maximum number of waiting worker processes" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:95 +msgid "Download social metadata (tags/rating/etc.)" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:97 +msgid "Overwrite author and title with new metadata" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:99 +msgid "Limit max simultaneous jobs to number of CPUs" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:101 +msgid "tag browser categories not to display" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:138 +#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:476 +msgid "Copied" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:172 +msgid "Copy" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:172 +msgid "Copy to Clipboard" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:382 +msgid "Choose Files" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/add.py:54 +msgid "Searching in" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/add.py:229 +msgid "Adding..." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/add.py:242 +msgid "Searching in all sub-directories..." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/add.py:255 +msgid "Path error" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/add.py:256 +msgid "The specified directory could not be processed." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/add.py:260 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:599 +msgid "No books" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/add.py:261 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1938 +msgid "No books found" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/add.py:327 +msgid "Added" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/add.py:340 +msgid "Adding failed" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/add.py:341 +msgid "" +"The add books process seems to have hung. Try restarting calibre and adding " +"the books in smaller increments, until you find the problem book." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/add.py:353 +msgid "Duplicates found!" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/add.py:354 +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/add.py:357 +msgid "Adding duplicates..." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/add.py:423 +msgid "Saving..." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/add.py:476 +msgid "Saved" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/add_wizard/__init__.py:57 +msgid "Searching for sub-folders" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/add_wizard/__init__.py:62 +msgid "Searching for books" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/add_wizard/__init__.py:74 +msgid "Looking for duplicates based on file hash" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/add_wizard/__init__.py:109 +#: /home/kovid/work/calibre/src/calibre/gui2/add_wizard/welcome_ui.py:65 +msgid "Choose root folder" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/add_wizard/__init__.py:137 +msgid "Invalid root folder" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/add_wizard/__init__.py:138 +msgid "is not a valid root folder" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/add_wizard/__init__.py:148 +msgid "Add books to calibre" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/add_wizard/scan_ui.py:21 +#: /home/kovid/work/calibre/src/calibre/gui2/add_wizard/welcome_ui.py:57 +#: /home/kovid/work/calibre/src/calibre/gui2/wizard/finish_ui.py:45 +#: /home/kovid/work/calibre/src/calibre/gui2/wizard/kindle_ui.py:41 +#: /home/kovid/work/calibre/src/calibre/gui2/wizard/library_ui.py:49 +#: /home/kovid/work/calibre/src/calibre/gui2/wizard/stanza_ui.py:41 +msgid "WizardPage" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/add_wizard/scan_ui.py:22 +msgid "Scanning root folder for books" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/add_wizard/scan_ui.py:23 +msgid "This may take a few minutes" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/add_wizard/welcome_ui.py:58 +msgid "Choose the location to add books from" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/add_wizard/welcome_ui.py:59 +msgid "Select a folder on your hard disk" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/add_wizard/welcome_ui.py:60 +msgid "" +"<p>calibre can scan your computer for existing books automatically. These " +"books will then be <b>copied</b> into the calibre library. This wizard will " +"help you customize the scanning and import process for your existing book " +"collection.</p>\n" +"<p>Choose a root folder. Books will be searched for only inside this folder " +"and any sub-folders.</p>\n" +"<p>Make sure that the folder you chose for your calibre library <b>is " +"not</b> under the root folder you choose.</p>" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/add_wizard/welcome_ui.py:63 +msgid "&Root folder:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/add_wizard/welcome_ui.py:64 +msgid "" +"This folder and its sub-folders will be scanned for books to import into " +"calibre's library" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/add_wizard/welcome_ui.py:66 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/debug_ui.py:52 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/debug_ui.py:53 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:125 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:171 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/xexp_edit_ui.py:52 +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/configwidget_ui.py:76 +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/configwidget_ui.py:77 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:539 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:553 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:554 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:571 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:573 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:575 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:577 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:578 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:614 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:369 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:374 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:388 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:399 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:401 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:403 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:408 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:410 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/saved_search_editor_ui.py:87 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/saved_search_editor_ui.py:90 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories_ui.py:156 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories_ui.py:159 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories_ui.py:163 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories_ui.py:166 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_editor_ui.py:126 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_editor_ui.py:128 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_editor_ui.py:131 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_editor_ui.py:135 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor_ui.py:74 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor_ui.py:76 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:267 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:269 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:270 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:396 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:401 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:407 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:410 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:412 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:414 +#: /home/kovid/work/calibre/src/calibre/gui2/shortcuts_ui.py:75 +#: /home/kovid/work/calibre/src/calibre/gui2/shortcuts_ui.py:80 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:186 +msgid "..." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/add_wizard/welcome_ui.py:67 +msgid "Handle multiple files per book" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/add_wizard/welcome_ui.py:68 +msgid "" +"&One book per folder, assumes every ebook file in a folder is the same book " +"in a different format" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/add_wizard/welcome_ui.py:69 +msgid "" +"&Multiple books per folder, assumes every ebook file is a different book" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_csv_xml.py:16 +msgid "CSV/XML Options" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_csv_xml.py:17 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:18 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input.py:16 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/epub_output.py:16 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/fb2_input.py:13 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/fb2_output.py:15 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/lrf_output.py:20 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output.py:21 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdb_input.py:13 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdb_output.py:17 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdf_input.py:13 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdf_output.py:18 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/rb_output.py:15 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/txt_input.py:13 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/txt_output.py:17 +msgid "Options specific to" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_csv_xml.py:17 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:18 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/epub_output.py:16 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/fb2_output.py:15 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/lrf_output.py:20 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output.py:21 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdb_output.py:17 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdf_output.py:18 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/rb_output.py:15 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/txt_output.py:17 +msgid "output" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_csv_xml_ui.py:37 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:68 +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_tab_template_ui.py:27 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input_ui.py:88 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/debug_ui.py:49 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/epub_output_ui.py:48 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/fb2_input_ui.py:28 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/fb2_output_ui.py:28 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:119 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/lrf_output_ui.py:115 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:166 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output_ui.py:66 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/page_setup_ui.py:115 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdb_input_ui.py:31 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdb_output_ui.py:35 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdf_input_ui.py:38 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdf_output_ui.py:42 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/rb_output_ui.py:28 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/structure_detection_ui.py:59 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/toc_ui.py:62 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/txt_input_ui.py:45 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/txt_output_ui.py:45 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/xexp_edit_ui.py:49 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/xpath_wizard_ui.py:67 +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/configwidget_ui.py:74 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/save_template_ui.py:41 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_item_ui.py:35 +#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:106 +#: /home/kovid/work/calibre/src/calibre/gui2/wizard/send_email_ui.py:107 +msgid "Form" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_csv_xml_ui.py:38 +msgid "Fields to include in output:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:17 +msgid "E-book options" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:20 +#: /home/kovid/work/calibre/src/calibre/library/catalog.py:222 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1239 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1257 +msgid "Catalog" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:69 +msgid "'Don't include this book' tag:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:70 +msgid "'Mark this book as read' tag:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:71 +msgid "Additional note tag prefix:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:72 +msgid "Regex pattern describing tags to exclude as genres:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:73 +msgid "" +"Regex tips:\n" +"- The default regex - \\[[\\w ]*\\] - excludes genre tags of the form [tag], " +"e.g., [Amazon Freebie]\n" +"- A regex pattern of a single dot excludes all genre tags, generating no " +"Genre Section" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:76 +msgid "Include 'Titles' Section" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:77 +msgid "Include 'Recently Added' Section" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi_ui.py:78 +msgid "Sort numbers as text" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_tab_template_ui.py:28 +msgid "Tab template for catalog.ui" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/bulk.py:36 +msgid "" +"For settings that cannot be specified in this dialog, use the values saved " +"in a previous conversion (if they exist) instead of using the defaults " +"specified in the Preferences" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/bulk.py:67 +msgid "Bulk Convert" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/bulk.py:80 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/single.py:185 +msgid "Options specific to the output format." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input.py:15 +msgid "Comic Input" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input.py:16 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/fb2_input.py:13 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdb_input.py:13 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdf_input.py:13 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/txt_input.py:13 +msgid "input" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input_ui.py:89 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf_ui.py:94 +msgid "&Number of Colors:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input_ui.py:90 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf_ui.py:96 +msgid "Disable &normalize" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input_ui.py:91 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf_ui.py:97 +msgid "Keep &aspect ratio" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input_ui.py:92 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf_ui.py:98 +msgid "Disable &Sharpening" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input_ui.py:93 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf_ui.py:104 +msgid "Disable &Trimming" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input_ui.py:94 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf_ui.py:103 +msgid "&Wide" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input_ui.py:95 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf_ui.py:99 +msgid "&Landscape" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input_ui.py:96 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf_ui.py:101 +msgid "&Right to left" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input_ui.py:97 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf_ui.py:100 +msgid "Don't so&rt" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input_ui.py:98 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf_ui.py:102 +msgid "De&speckle" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input_ui.py:99 +msgid "&Disable comic processing" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input_ui.py:100 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/single_ui.py:111 +msgid "&Output format:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input_ui.py:101 +msgid "Disable conversion of images to &black and white" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/debug.py:19 +msgid "Debug" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/debug.py:21 +msgid "Debug the conversion process." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/debug.py:38 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/debug_ui.py:51 +msgid "Choose debug folder" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/debug.py:57 +msgid "Invalid debug directory" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/debug.py:58 +msgid "Failed to create debug directory" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/debug_ui.py:50 +msgid "" +"Choose a folder to put the debug output into. If you specify a folder, " +"calibre will place a lot of debug output into it. This will be useful in " +"understanding the conversion process and figuring out the correct values for " +"conversion parameters like Table of Contents and Chapter Detection." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/debug_ui.py:54 +msgid "" +"The debug process outputs the intermediate HTML generated at various stages " +"of the conversion process. This HTML can sometimes serve as a good starting " +"point for hand editing a conversion." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/epub_output.py:15 +msgid "EPUB Output" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/epub_output_ui.py:49 +msgid "Do not &split on page breaks" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/epub_output_ui.py:50 +msgid "No default &cover" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/epub_output_ui.py:51 +msgid "No &SVG cover" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/epub_output_ui.py:52 +msgid "Preserve cover &aspect ratio" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/epub_output_ui.py:53 +msgid "Split files &larger than:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/epub_output_ui.py:54 +msgid " KB" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/fb2_input.py:12 +msgid "FB2 Input" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/fb2_input_ui.py:29 +msgid "Do not insert a &Table of Contents at the beginning of the book." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/fb2_output.py:14 +msgid "FB2 Output" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/fb2_output_ui.py:29 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdb_output_ui.py:37 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/rb_output_ui.py:29 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/txt_output_ui.py:47 +msgid "&Inline TOC" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/font_key_ui.py:99 +msgid "Font rescaling wizard" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/font_key_ui.py:100 +msgid "" +"<p>This wizard will help you choose an appropriate font size key for your " +"needs. Just enter the base font size of the input document and then enter an " +"input font size. The wizard will display what font size it will be mapped " +"to, by the font rescaling algorithm. You can adjust the algorithm by " +"adjusting the output base font size and font key below. When you find values " +"suitable for you, click OK.</p>\n" +"<p>By default, if the output base font size is zero and/or no font size key " +"is specified, calibre will use the values from the current Output Profile. " +"</p>\n" +"<p>See the <a href=\"http://calibre-" +"ebook.com/user_manual/conversion.html#font-size-rescaling\">User Manual</a> " +"for a discussion of how font size rescaling works.</p>" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/font_key_ui.py:103 +msgid "&Output document" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/font_key_ui.py:104 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/font_key_ui.py:109 +msgid "&Base font size:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/font_key_ui.py:105 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:123 +msgid "Font size &key:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/font_key_ui.py:106 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/font_key_ui.py:110 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/font_key_ui.py:112 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:122 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:127 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/lrf_output_ui.py:118 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/lrf_output_ui.py:120 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/lrf_output_ui.py:125 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/page_setup_ui.py:121 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/page_setup_ui.py:123 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/page_setup_ui.py:125 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/page_setup_ui.py:127 +msgid " pt" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/font_key_ui.py:107 +msgid "Use &default values" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/font_key_ui.py:108 +msgid "&Input document" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/font_key_ui.py:111 +msgid "&Font size: " +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/font_key_ui.py:113 +msgid " will map to size: " +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/font_key_ui.py:114 +msgid "0.0 pt" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel.py:16 +msgid "Look & Feel" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel.py:18 +msgid "Control the look and feel of the output" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel.py:30 +msgid "Original" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel.py:31 +msgid "Left align" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel.py:32 +msgid "Justify text" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:120 +msgid "&Disable font size rescaling" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:121 +msgid "Base &font size:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:124 +msgid "Wizard to help you choose an appropriate font size key" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:126 +msgid "Line &height:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:128 +msgid "Input character &encoding:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:129 +msgid "Remove &spacing between paragraphs" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:130 +msgid "Indent size:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:131 +msgid "" +"<p>When calibre removes inter paragraph spacing, it automatically sets a " +"paragraph indent, to ensure that paragraphs can be easily distinguished. " +"This option controls the width of that indent." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:132 +msgid " em" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:133 +msgid "Text justification:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:134 +msgid "&Linearize tables" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:135 +msgid "Extra &CSS" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:136 +msgid "&Transliterate unicode characters to ASCII" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:137 +msgid "Insert &blank line" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:138 +msgid "Keep &ligatures" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/lrf_output.py:19 +msgid "LRF Output" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/lrf_output_ui.py:116 +msgid "Enable &autorotation of wide images" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/lrf_output_ui.py:117 +msgid "&Wordspace:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/lrf_output_ui.py:119 +msgid "Minimum para. &indent:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/lrf_output_ui.py:121 +msgid "Render &tables as images" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/lrf_output_ui.py:122 +msgid "Text size multiplier for text in rendered tables:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/lrf_output_ui.py:123 +msgid "Add &header" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/lrf_output_ui.py:124 +msgid "Header &separation:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/lrf_output_ui.py:126 +msgid "Header &format:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/lrf_output_ui.py:127 +msgid "&Embed fonts" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/lrf_output_ui.py:128 +msgid "&Serif font family:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/lrf_output_ui.py:129 +msgid "S&ans-serif font family:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/lrf_output_ui.py:130 +msgid "&Monospaced font family:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:41 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:114 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:195 +msgid "Metadata" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:43 +msgid "" +"Set the metadata. The output file will contain as much of this metadata as " +"possible." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:161 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:101 +msgid "Choose cover for " +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:168 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:108 +msgid "Cannot read" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:169 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:109 +msgid "You do not have permission to read the file: " +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:177 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:184 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:117 +msgid "Error reading file" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:178 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:118 +msgid "<p>There was an error reading from file: <br /><b>" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:185 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:126 +msgid " is not a valid picture" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:167 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:405 +msgid "Book Cover" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:168 +msgid "Use cover from &source file" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:169 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:406 +msgid "Change &cover image:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:170 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:407 +msgid "Browse for an image to use as the cover of this book." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:172 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:366 +msgid "&Title: " +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:173 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:367 +msgid "Change the title of this book" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:174 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:158 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:370 +msgid "&Author(s): " +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:175 +msgid "Author So&rt:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:176 +msgid "" +"Change the author(s) of this book. Multiple authors should be separated by a " +"comma" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:177 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:167 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:379 +msgid "&Publisher: " +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:178 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:380 +msgid "Ta&gs: " +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:179 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:169 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:381 +msgid "" +"Tags categorize the book. This is particularly useful while searching. " +"<br><br>They can be any words or phrases, separated by commas." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:180 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:174 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:384 +msgid "&Series:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:181 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:182 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:175 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:176 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:385 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:386 +msgid "List of known series. You can add new series." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:183 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:391 +msgid "Book " +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output.py:20 +msgid "MOBI Output" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output.py:42 +msgid "Default" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output_ui.py:67 +msgid "&Title for Table of Contents:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output_ui.py:68 +msgid "Rescale images for &Palm devices" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output_ui.py:69 +msgid "Use author &sort for author" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output_ui.py:70 +msgid "Disable compression of the file contents" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output_ui.py:71 +msgid "Do not add Table of Contents to book" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output_ui.py:72 +msgid "Kindle options" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output_ui.py:73 +msgid "Periodical masthead font:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output_ui.py:74 +msgid "Personal Doc tag:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/page_setup.py:35 +msgid "Page Setup" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/page_setup_ui.py:116 +msgid "&Output profile:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/page_setup_ui.py:117 +msgid "Profile description" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/page_setup_ui.py:118 +msgid "&Input profile:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/page_setup_ui.py:119 +msgid "Margins" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/page_setup_ui.py:120 +msgid "&Left:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/page_setup_ui.py:122 +msgid "&Top:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/page_setup_ui.py:124 +msgid "&Right:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/page_setup_ui.py:126 +msgid "&Bottom:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdb_input.py:12 +msgid "PDB Input" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdb_input_ui.py:32 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/txt_input_ui.py:46 +msgid "Treat each &line as a paragraph" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdb_input_ui.py:33 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/txt_input_ui.py:47 +msgid "Assume print formatting" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdb_output.py:16 +msgid "PDB Output" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdb_output_ui.py:36 +msgid "&Format:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdf_input.py:12 +msgid "PDF Input" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdf_input_ui.py:39 +msgid "Line &Un-Wrapping Factor:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdf_input_ui.py:40 +msgid "No &Images" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdf_output.py:17 +msgid "PDF Output" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdf_output_ui.py:43 +msgid "&Paper Size:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdf_output_ui.py:44 +msgid "&Orientation:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdf_output_ui.py:45 +msgid "Preserve &aspect ratio of cover" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/rb_output.py:14 +msgid "RB Output" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/regex_builder.py:76 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2183 +msgid "Choose the format to view" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/regex_builder.py:82 +msgid "Cannot build regex using the GUI builder without a book." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/regex_builder.py:82 +msgid "No formats available" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/regex_builder.py:100 +msgid "Open book" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/regex_builder_ui.py:52 +msgid "Regex Builder" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/regex_builder_ui.py:53 +msgid "Preview" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/regex_builder_ui.py:54 +msgid "Regex:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/regex_builder_ui.py:55 +#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:117 +msgid "Test" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/single.py:171 +msgid "Convert" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/single.py:196 +msgid "Options specific to the input format." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/single_ui.py:108 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info_ui.py:64 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf_ui.py:91 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/progress_ui.py:48 +msgid "Dialog" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/single_ui.py:109 +msgid "&Input format:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/single_ui.py:110 +msgid "Use &saved conversion settings for individual books" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/structure_detection.py:17 +msgid "" +"Structure\n" +"Detection" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/structure_detection.py:19 +msgid "" +"Fine tune the detection of chapter headings and other document structure." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/structure_detection.py:34 +msgid "Detect chapters at (XPath expression):" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/structure_detection.py:35 +msgid "Insert page breaks before (XPath expression):" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/structure_detection.py:37 +msgid "Header regular expression:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/structure_detection.py:40 +msgid "Footer regular expression:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/structure_detection.py:56 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:71 +msgid "Invalid regular expression" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/structure_detection.py:57 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:72 +msgid "Invalid regular expression: %s" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/structure_detection.py:62 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/toc.py:38 +msgid "Invalid XPath" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/structure_detection.py:63 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/toc.py:39 +msgid "The XPath expression %s is invalid." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/structure_detection_ui.py:60 +msgid "Chapter &mark:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/structure_detection_ui.py:61 +msgid "Remove first &image" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/structure_detection_ui.py:62 +msgid "Insert &metadata as page at start of book" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/structure_detection_ui.py:63 +msgid "&Preprocess input file to possibly improve structure detection" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/structure_detection_ui.py:64 +msgid "Remove F&ooter" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/structure_detection_ui.py:65 +msgid "Remove H&eader" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/toc.py:16 +msgid "" +"Table of\n" +"Contents" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/toc.py:18 +msgid "Control the creation/conversion of the Table of Contents." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/toc.py:29 +msgid "Level &1 TOC (XPath expression):" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/toc.py:30 +msgid "Level &2 TOC (XPath expression):" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/toc.py:31 +msgid "Level &3 TOC (XPath expression):" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/toc_ui.py:63 +msgid "Do not add &detected chapters to the Table of Contents" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/toc_ui.py:64 +msgid "Number of &links to add to Table of Contents" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/toc_ui.py:65 +msgid "Chapter &threshold" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/toc_ui.py:66 +msgid "&Force use of auto-generated Table of Contents" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/toc_ui.py:67 +msgid "TOC &Filter:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/txt_input.py:12 +msgid "TXT Input" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/txt_input_ui.py:48 +msgid "Process using markdown" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/txt_input_ui.py:49 +msgid "" +"<p>Markdown is a simple markup language for text files, that allows for " +"advanced formatting. To learn more visit <a " +"href=\"http://daringfireball.net/projects/markdown\">markdown</a>." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/txt_input_ui.py:50 +msgid "Do not insert Table of Contents into output text when using markdown" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/txt_input_ui.py:51 +msgid "Preserve &spaces" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/txt_output.py:16 +msgid "TXT Output" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/txt_output_ui.py:46 +msgid "&Line ending style:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/txt_output_ui.py:48 +msgid "&Maximum line length:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/txt_output_ui.py:49 +msgid "Force maximum line lenght" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/xexp_edit_ui.py:50 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info_ui.py:65 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info_ui.py:66 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_format_ui.py:41 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/confirm_delete_ui.py:49 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/password_ui.py:57 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/progress_ui.py:49 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/progress_ui.py:50 +msgid "TextLabel" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/xexp_edit_ui.py:51 +msgid "Use a wizard to help construct the XPath expression" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/xpath_wizard_ui.py:68 +msgid "Match HTML &tags with tag name:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/xpath_wizard_ui.py:69 +msgid "*" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/xpath_wizard_ui.py:70 +msgid "a" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/xpath_wizard_ui.py:71 +msgid "br" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/xpath_wizard_ui.py:72 +msgid "div" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/xpath_wizard_ui.py:73 +msgid "h1" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/xpath_wizard_ui.py:74 +msgid "h2" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/xpath_wizard_ui.py:75 +msgid "h3" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/xpath_wizard_ui.py:76 +msgid "h4" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/xpath_wizard_ui.py:77 +msgid "h5" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/xpath_wizard_ui.py:78 +msgid "h6" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/xpath_wizard_ui.py:79 +msgid "hr" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/xpath_wizard_ui.py:80 +msgid "span" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/xpath_wizard_ui.py:81 +msgid "Having the &attribute:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/xpath_wizard_ui.py:82 +msgid "With &value:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/xpath_wizard_ui.py:83 +msgid "(A regular expression)" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/convert/xpath_wizard_ui.py:84 +msgid "" +"<p>For example, to match all h2 tags that have class=\"chapter\", set tag to " +"<i>h2</i>, attribute to <i>class</i> and value to " +"<i>chapter</i>.</p><p>Leaving attribute blank will match any attribute and " +"leaving value blank will match any value. Setting tag to * will match any " +"tag.</p><p>To learn more advanced usage of XPath see the <a " +"href=\"http://calibre-ebook.com/user_manual/xpath.html\">XPath Tutorial</a>." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:52 +#: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:77 +#: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:101 +#: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:132 +#: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:143 +#: /home/kovid/work/calibre/src/calibre/gui2/library/delegates.py:110 +#: /home/kovid/work/calibre/src/calibre/gui2/library/delegates.py:130 +#: /home/kovid/work/calibre/src/calibre/gui2/library/delegates.py:205 +#: /home/kovid/work/calibre/src/calibre/gui2/library/delegates.py:238 +#: /home/kovid/work/calibre/src/calibre/gui2/library/delegates.py:242 +msgid "Undefined" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:52 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_ct_column_ui.py:131 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_ct_column_ui.py:133 +msgid "Yes" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:52 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_ct_column_ui.py:132 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_ct_column_ui.py:134 +msgid "No" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:110 +msgid "star(s)" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:111 +msgid "Unrated" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:352 +msgid "Remove all tags" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:373 +msgid "tags to add" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:378 +msgid "tags to remove" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:39 +#: /home/kovid/work/calibre/src/calibre/utils/ipc/job.py:135 +msgid "No details available." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:138 +msgid "Device no longer connected." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:243 +msgid "Get device information" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:269 +msgid "Get list of books on device" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:279 +msgid "Get annotations from device" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:288 +msgid "Send metadata to device" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:297 +msgid "Upload %d books to device" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:312 +msgid "Delete books from device" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:329 +msgid "Download books from device" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:339 +msgid "View book on device" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:373 +msgid "Set default send to device action" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:379 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:386 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:388 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:390 +msgid "Email to" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:401 +msgid "Send to main memory" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:403 +msgid "Send to storage card A" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:405 +msgid "Send to storage card B" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:410 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:419 +msgid "Main Memory" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:412 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:421 +msgid "Storage Card A" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:414 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:423 +msgid "Storage Card B" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:437 +msgid "Send and delete from library" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:438 +msgid "Send specific format" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:477 +msgid "Connect to folder" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:482 +msgid "Disconnect from folder" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:490 +msgid "Fetch annotations (experimental)" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:600 +msgid "selected to send" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:605 +msgid "Choose format to send to device" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:613 +msgid "No device" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:614 +msgid "Cannot send: No device is connected" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:617 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:621 +msgid "No card" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:618 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:622 +msgid "Cannot send: Device has no storage card" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:664 +msgid "E-book:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:667 +msgid "Attached, you will find the e-book" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:668 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:180 +msgid "by" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:669 +msgid "in the %s format." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:682 +msgid "Sending email to" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:712 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:719 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:811 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:871 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:990 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:997 +msgid "No suitable formats" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:713 +msgid "Auto convert the following books before sending via email?" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:720 +msgid "" +"Could not email the following books as no suitable formats were found:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:738 +msgid "Failed to email books" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:739 +msgid "Failed to email the following books:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:743 +msgid "Sent by email:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:770 +msgid "News:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:771 +msgid "Attached is the" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:782 +msgid "Sent news to" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:812 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:872 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:991 +msgid "Auto convert the following books before uploading to the device?" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:841 +msgid "Sending catalogs to device." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:902 +msgid "Sending news to device." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:957 +msgid "Sending books to device." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:998 +msgid "" +"Could not upload the following books to the device, as no suitable formats " +"were found. Convert the book(s) to a format supported by your device first." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1046 +msgid "No space on device" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1047 +msgid "" +"<p>Cannot upload books to device there is no more free space available " +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/configwidget_ui.py:75 +msgid "Select available formats and their order for this device" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/configwidget_ui.py:79 +msgid "Use sub directories" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/configwidget_ui.py:81 +msgid "Save &template:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:114 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:115 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:116 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:293 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:994 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:102 +msgid "Path" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:117 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:118 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:119 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:122 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:219 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:292 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:103 +#: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:91 +msgid "Formats" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info_ui.py:68 +msgid "Fit &cover to view" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info_ui.py:69 +msgid "&Previous" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info_ui.py:70 +msgid "&Next" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/catalog.py:38 +msgid "My Books" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/catalog_ui.py:69 +#: /home/kovid/work/calibre/src/calibre/gui2/tools.py:287 +msgid "Generate catalog" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/catalog_ui.py:70 +msgid "Generate catalog for {0} books" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/catalog_ui.py:71 +msgid "Catalog &format:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/catalog_ui.py:72 +msgid "" +"Catalog &title (existing catalog with the same title will be replaced):" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/catalog_ui.py:73 +msgid "&Send catalog to device automatically" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/catalog_ui.py:74 +msgid "Catalog options" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_format_ui.py:40 +msgid "Choose Format" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf.py:33 +msgid "Set defaults for conversion of comics (CBR/CBZ files)" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf.py:48 +msgid "Set options for converting %s" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf_ui.py:92 +msgid "&Title:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf_ui.py:93 +msgid "&Author(s):" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf_ui.py:95 +msgid "&Profile:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comments_dialog_ui.py:41 +msgid "Edit Comments" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:173 +msgid "%(plugin_type)s %(plugins)s" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:174 +msgid "plugins" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:183 +msgid "" +"\n" +"Customization: " +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:199 +msgid "Conversion" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:199 +msgid "General" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:199 +msgid "Interface" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:200 +msgid "Add/Save" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:200 +msgid "" +"Email\n" +"Delivery" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:201 +msgid "Advanced" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:201 +msgid "" +"Content\n" +"Server" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:201 +msgid "Plugins" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:219 +msgid "Auto send" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:219 +msgid "Email" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:224 +msgid "Formats to email. The first matching format will be sent." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:225 +msgid "" +"If checked, downloaded news will be automatically mailed <br>to this email " +"address (provided it is in one of the listed formats)." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:299 +msgid "new email address" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:490 +msgid "System port selected" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:491 +msgid "" +"The value <b>%d</b> you have chosen for the content server port is a system " +"port. Your operating system <b>may</b> not allow the server to run on this " +"port. To be safe choose a port number larger than 1024." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:510 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:933 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:190 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1650 +#: /home/kovid/work/calibre/src/calibre/utils/ipc/job.py:53 +msgid "Error" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:511 +msgid "Failed to install command line tools." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:514 +msgid "Command line tools installed" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:515 +msgid "Command line tools installed in" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:516 +msgid "" +"If you move calibre.app, you have to re-install the command line tools." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:567 +msgid "No valid plugin path" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:568 +msgid "%s is not a valid plugin path" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:571 +msgid "Choose plugin" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:583 +msgid "Plugin cannot be disabled" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:584 +msgid "The plugin: %s cannot be disabled" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:593 +msgid "Plugin not customizable" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:594 +msgid "Plugin: %s does not need customization" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:602 +msgid "Customize" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:640 +msgid "Cannot remove builtin plugin" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:641 +msgid " cannot be removed. It is a builtin plugin. Try disabling it instead." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:672 +msgid "You must select a column to delete it" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:677 +msgid "The selected column is not a custom column" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:678 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/confirm_delete_ui.py:48 +msgid "Are you sure?" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:679 +msgid "Do you really want to delete column %s and all its data?" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:746 +msgid "Error log:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:753 +msgid "Access log:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:781 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:761 +msgid "Failed to start content server" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:805 +#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:587 +msgid "Select location for books" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:812 +msgid "Invalid size" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:813 +msgid "The size %s is invalid. must be of the form widthxheight" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:868 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:873 +msgid "Invalid database location" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:869 +msgid "Invalid database location " +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:870 +msgid "<br>Must be a directory." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:874 +msgid "Invalid database location.<br>Cannot write to " +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:879 +msgid "Must restart" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:880 +msgid "" +"The changes you made require that Calibre be restarted. Please restart as " +"soon as practical." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:914 +msgid "Checking database integrity" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:934 +msgid "Failed to check database integrity" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:939 +msgid "Some inconsistencies found" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:940 +msgid "" +"The following books had formats listed in the database that are not actually " +"available. The entries for the formats have been removed. You should check " +"them manually. This can happen if you manipulate the files in the library " +"folder directly." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/add_save_ui.py:103 +msgid "TabWidget" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/add_save_ui.py:104 +msgid "" +"Here you can control how calibre will read metadata from the files you add " +"to it. calibre can either read metadata from the contents of the file, or " +"from the filename." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/add_save_ui.py:105 +msgid "Read metadata only from &file name" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/add_save_ui.py:106 +msgid "" +"Swap the firstname and lastname of the author. This affects only metadata " +"read from file names." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/add_save_ui.py:107 +msgid "&Swap author firstname and lastname" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/add_save_ui.py:108 +msgid "" +"If an existing book with a similar title and author is found that does not " +"have the format being added, the format is added \n" +"to the existing book, instead of creating a new entry. If the existing book " +"already has the format, then it is silently ignored.\n" +"\n" +"Title match ignores leading indefinite articles (\"the\", \"a\", \"an\"), " +"punctuation, case, etc. Author match is exact." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/add_save_ui.py:112 +msgid "" +"If books with similar titles and authors found, &merge the new files " +"automatically" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/add_save_ui.py:113 +msgid "&Configure metadata from file name" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/add_save_ui.py:114 +msgid "&Adding books" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/add_save_ui.py:115 +msgid "" +"Here you can control how calibre will save your books when you click the " +"Save to Disk button:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/add_save_ui.py:116 +msgid "Save &cover separately" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/add_save_ui.py:117 +msgid "Update &metadata in saved copies" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/add_save_ui.py:118 +msgid "Save metadata in &OPF file" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/add_save_ui.py:119 +msgid "Convert non-English characters to &English equivalents" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/add_save_ui.py:120 +msgid "Format &dates as:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/add_save_ui.py:121 +msgid "File &formats to save:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/add_save_ui.py:122 +msgid "Replace space with &underscores" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/add_save_ui.py:123 +msgid "Change paths to &lowercase" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/add_save_ui.py:124 +msgid "&Saving books" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/add_save_ui.py:125 +msgid "" +"Here you can control how calibre will save your books when you click the " +"Send to Device button. This setting can be overriden for individual devices " +"by customizing the device interface plugins in Preferences->Plugins" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/add_save_ui.py:126 +msgid "Sending to &device" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:536 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:444 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:201 +msgid "Preferences" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:537 +msgid "" +"&Location of ebooks (The ebooks are stored in folders sorted by author and " +"metadata is stored in the file metadata.db)" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:538 +msgid "Browse for the new database location" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:540 +msgid "Show notification when &new version is available" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:541 +msgid "Download &social metadata (tags/ratings/etc.) by default" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:542 +msgid "&Overwrite author and title by default when fetching metadata" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:543 +msgid "Default network &timeout:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:544 +msgid "" +"Set the default timeout for network fetches (i.e. anytime we go out to the " +"internet to get information)" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:545 +msgid " seconds" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:546 +msgid "Choose &language (requires restart):" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:547 +msgid "Normal" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:548 +msgid "High" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:549 +msgid "Low" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:550 +msgid "Job &priority:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:551 +msgid "Preferred &output format:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:552 +msgid "Preferred &input format order:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:555 +msgid "Use &Roman numerals for series number" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:556 +msgid "Enable system &tray icon (needs restart)" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:557 +msgid "Show ¬ifications in system tray" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:558 +msgid "Show &splash screen at startup" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:559 +msgid "Show cover &browser in a separate window (needs restart)" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:560 +msgid "Search as you type" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:561 +msgid "Automatically send downloaded &news to ebook reader" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:562 +msgid "&Delete news from library when it is automatically sent to reader" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:563 +msgid "&Number of covers to show in browse mode (needs restart):" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:564 +msgid "Toolbar" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:565 +msgid "Large" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:566 +msgid "Medium" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:567 +msgid "Small" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:568 +msgid "&Button size in toolbar" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:569 +msgid "Show &text in toolbar buttons" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:570 +msgid "Select visible &columns in library view" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:572 +msgid "Remove a user-defined column" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:574 +msgid "Add a user-defined column" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:576 +msgid "Edit settings of a user-defined column" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:579 +msgid "Use internal &viewer for:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:580 +msgid "Add an email address to which to send books" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:581 +msgid "&Add email" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:582 +msgid "Make &default" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:583 +msgid "&Remove email" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:584 +msgid "" +"calibre can send your books to you (or your reader) by email. Emails will be " +"automatically sent for downloaded news to all email addresses that have Auto-" +"send checked." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:585 +msgid "&Maximum number of waiting worker processes (needs restart):" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:586 +msgid "&Check database integrity" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:587 +msgid "&Install command line tools" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:588 +msgid "Open calibre &configuration directory" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:589 +msgid "Limit the max. simultaneous jobs to the available CPU &cores" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:590 +msgid "Debug &device detection" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:591 +msgid "" +"calibre contains a network server that allows you to access your book " +"collection using a browser from anywhere in the world. Any changes to the " +"settings will only take effect after a server restart." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:592 +msgid "Server &port:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:593 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/password_ui.py:58 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:212 +#: /home/kovid/work/calibre/src/calibre/gui2/wizard/send_email_ui.py:117 +msgid "&Username:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:594 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/password_ui.py:59 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:213 +#: /home/kovid/work/calibre/src/calibre/gui2/wizard/send_email_ui.py:119 +msgid "&Password:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:595 +msgid "" +"If you leave the password blank, anyone will be able to access your book " +"collection using the web interface." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:596 +msgid "" +"The maximum size (widthxheight) for displayed covers. Larger covers are " +"resized. " +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:597 +msgid "Max. &cover size:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:598 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/password_ui.py:60 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:214 +msgid "&Show password" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:599 +msgid "Max. &OPDS items per query:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:600 +msgid "Max. OPDS &ungrouped items:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:601 +msgid "&Start Server" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:602 +msgid "St&op Server" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:603 +msgid "&Test Server" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:604 +msgid "Run server &automatically on startup" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:605 +msgid "View &server logs" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:606 +#: /home/kovid/work/calibre/src/calibre/gui2/wizard/stanza_ui.py:46 +msgid "" +"<p>Remember to leave calibre running as the server only runs as long as " +"calibre is running.\n" +"<p>Stanza should see your calibre collection automatically. If not, try " +"adding the URL http://myhostname:8080 as a new catalog in the Stanza reader " +"on your iPhone. Here myhostname should be the fully qualified hostname or " +"the IP address of the computer calibre is running on." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:608 +msgid "" +"Here you can customize the behavior of Calibre by controlling what plugins " +"it uses." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:609 +msgid "Enable/&Disable plugin" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:610 +msgid "&Customize plugin" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:611 +msgid "&Remove plugin" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:612 +msgid "Add new plugin" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:613 +msgid "Plugin &file:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:615 +msgid "&Add" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_ct_column_ui.py:125 +msgid "Create Tag-based Column" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_ct_column_ui.py:126 +msgid "Lookup name" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_ct_column_ui.py:127 +msgid "Column heading" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_ct_column_ui.py:128 +msgid "Column type" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_ct_column_ui.py:129 +msgid "Use brackets" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_ct_column_ui.py:130 +msgid "Values can be edited" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_ct_column_ui.py:135 +msgid "Text" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_ct_column_ui.py:136 +msgid "Number" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_ct_column_ui.py:137 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column.py:27 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:50 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:833 +#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:535 +msgid "Date" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_ct_column_ui.py:138 +msgid "Tag on book" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_ct_column_ui.py:139 +msgid "Explanation text added in create_ct_column.py" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_ct_column_ui.py:140 +msgid "Create and edit tag-based columns" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column.py:18 +msgid "Text, column shown in the tag browser" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column.py:21 +msgid "Comma separated text, like tags, shown in the tag browser" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column.py:24 +msgid "Long text, like comments, not shown in the tag browser" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column.py:29 +msgid "Floating point numbers" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column.py:31 +msgid "Integers" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column.py:33 +msgid "Ratings, shown with stars" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column.py:36 +msgid "Yes/No" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column.py:60 +msgid "No column selected" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column.py:61 +msgid "No column has been selected" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column.py:65 +msgid "Selected column is not a user-defined column" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column.py:96 +msgid "No lookup name was provided" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column.py:98 +msgid "" +"The label must contain only letters and digits, and start with a letter" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column.py:107 +msgid "No column heading was provided" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column.py:113 +msgid "The lookup name %s is already used" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column.py:123 +msgid "The heading %s is already used" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column.py:125 +msgid "" +"The lookup name must be lower case and cannot contain \":\"s or spaces" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column_ui.py:101 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column_ui.py:117 +msgid "Create or edit custom columns" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column_ui.py:102 +msgid "&Lookup name" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column_ui.py:103 +msgid "Column &heading" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column_ui.py:104 +msgid "" +"Used for searching the column. Must contain only digits and lower case " +"letters." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column_ui.py:105 +msgid "" +"Column heading in the library view and category name in the tag browser" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column_ui.py:106 +msgid "Column &type" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column_ui.py:107 +msgid "What kind of information will be kept in the column." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column_ui.py:108 +msgid "" +"<p>Date format. Use 1-4 'd's for day, 1-4 'M's for month, and 2 or 4 'y's " +"for year.</p>\n" +"<p>For example:\n" +"<ul>\n" +"<li> ddd, d MMM yyyy gives Mon, 5 Jan 2010<li>\n" +"<li>dd MMMM yy gives 05 January 10</li>\n" +"</ul> " +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column_ui.py:114 +msgid "Use MMM yyyy for month + year, yyyy for year only" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column_ui.py:115 +msgid "Default: dd MMM yyyy." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column_ui.py:116 +msgid "Format for &dates" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/device_debug.py:21 +msgid "Getting debug information" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/device_debug.py:22 +msgid "Copy to &clipboard" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/device_debug.py:24 +msgid "Debug device detection" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/save_template.py:44 +msgid "Invalid template" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/save_template.py:45 +msgid "The template %s is invalid:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/save_template_ui.py:42 +msgid "Save &template" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/save_template_ui.py:43 +msgid "" +"By adjusting the template below, you can control what folders the files are " +"saved in and what filenames they are given. You can use the / character to " +"indicate sub-folders. Available metadata variables are described below. If a " +"particular book does not have some metadata, the variable will be replaced " +"by the empty string." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/save_template_ui.py:44 +msgid "Available variables:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/social.py:34 +msgid "Downloading social metadata, please wait..." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/confirm_delete_ui.py:50 +msgid "&Show this warning again" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/conversion_error_ui.py:42 +msgid "ERROR" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:63 +msgid "Author Sort" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:65 +msgid "ISBN" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:165 +msgid "Finding metadata..." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:179 +msgid "Could not find metadata" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:180 +msgid "The metadata download seems to have stalled. Try again later." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:189 +msgid "Warning" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:190 +msgid "Could not fetch metadata from:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:194 +msgid "No metadata found" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:195 +msgid "" +"No metadata found, try adjusting the title and author or the ISBN key." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata_ui.py:85 +msgid "Fetch metadata" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata_ui.py:86 +msgid "" +"<p>calibre can find metadata for your books from two locations: <b>Google " +"Books</b> and <b>isbndb.com</b>. <p>To use isbndb.com you must sign up for a " +"<a href=\"http://www.isbndb.com\">free account</a> and enter your access key " +"below." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata_ui.py:87 +msgid "&Access Key:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata_ui.py:88 +msgid "Fetch" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata_ui.py:89 +msgid "Matches" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata_ui.py:90 +msgid "" +"Select the book that most closely matches your copy from the list below" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata_ui.py:91 +msgid "Download &social metadata (tags/rating/etc.) for the selected book" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata_ui.py:92 +msgid "Overwrite author and title with author and title of selected book" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/job_view_ui.py:37 +msgid "Details of job" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/jobs_ui.py:44 +msgid "Active Jobs" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/jobs_ui.py:45 +msgid "&Stop selected job" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/jobs_ui.py:46 +msgid "Show job &details" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/jobs_ui.py:47 +msgid "Stop &all jobs" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:24 +msgid "Editing meta information for <b>%d books</b>" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:157 +msgid "Edit Meta information" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:159 +msgid "A&utomatically set author sort" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:160 +msgid "Author s&ort: " +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:161 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:372 +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:162 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:375 +msgid "&Rating:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:163 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:164 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:376 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:377 +msgid "Rating of this book. 0-5 stars" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:165 +msgid "No change" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:166 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:378 +msgid " stars" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:168 +msgid "Add ta&gs: " +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:170 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:171 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:382 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:383 +msgid "Open Tag Editor" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:172 +msgid "&Remove tags:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:173 +msgid "Comma separated list of tags to remove from the books. " +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:177 +msgid "Remove &format:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:178 +msgid "&Swap title and author" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:179 +msgid "" +"Selected books will be automatically numbered,\n" +"in the order you selected them.\n" +"So if you selected Book A and then Book B,\n" +"Book A will have series number 1 and Book B series number 2." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:183 +msgid "Automatically number books in this series" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:184 +msgid "" +"Remove stored conversion settings for the selected books.\n" +"\n" +"Future conversion of these books will use the default settings." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:187 +msgid "Remove &stored conversion settings for the selected books" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:188 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:412 +msgid "&Basic metadata" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:189 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:413 +msgid "&Custom metadata" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:125 +msgid "Not a valid picture" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:138 +msgid "Choose formats for " +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:139 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1391 +msgid "Books" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:167 +msgid "No permission" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:168 +msgid "You do not have permission to read the following files:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:195 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:196 +msgid "No format selected" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:207 +msgid "Could not read metadata" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:208 +msgid "Could not read metadata from %s format" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:256 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:262 +msgid "Could not read cover" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:257 +msgid "Could not read cover from %s format" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:263 +msgid "The cover in the %s format is invalid" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:300 +msgid "Abort the editing of all remaining books" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:442 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:447 +msgid "This ISBN number is valid" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:450 +msgid "This ISBN number is invalid" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:546 +msgid "Downloading cover..." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:558 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:563 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:569 +msgid "Cannot fetch cover" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:559 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:570 +msgid "<b>Could not fetch cover.</b><br/>" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:560 +msgid "The download timed out." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:564 +msgid "Could not find cover for this book. Try specifying the ISBN first." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:576 +msgid "Bad cover" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:577 +msgid "The cover is not a valid picture" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:610 +msgid "There were errors" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:611 +msgid "There were errors downloading social metadata" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:640 +msgid "Cannot fetch metadata" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:641 +msgid "You must specify at least one of ISBN, Title, Authors or Publisher" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:712 +msgid "Permission denied" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:713 +msgid "Could not open %s. Is it being used by another program?" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:364 +msgid "Edit Meta Information" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:365 +msgid "Meta information" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:368 +msgid "Swap the author and title" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:371 +msgid "Author S&ort: " +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:373 +msgid "" +"Automatically create the author sort entry based on the current author entry" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:387 +msgid "Remove unused series (Series that have no books)" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:389 +msgid "IS&BN:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:390 +msgid "Publishe&d:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:393 +msgid "dd MMM yyyy" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:394 +msgid "&Date:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:395 +msgid "&Comments" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:396 +msgid "&Fetch metadata from server" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:397 +msgid "Available Formats" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:398 +msgid "Add a new format for this book to the database" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:400 +msgid "Remove the selected formats for this book from the database." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:402 +msgid "Set the cover for the book from the selected format" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:404 +msgid "Update metadata from the metadata in the selected format" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:409 +msgid "Reset cover to default" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:411 +msgid "Download &cover" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/password_ui.py:56 +msgid "Password needed" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/progress.py:52 +msgid "Aborting..." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/saved_search_editor.py:54 +msgid "" +"The current saved search will be <b>permanently deleted</b>. Are you sure?" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/saved_search_editor_ui.py:83 +msgid "Saved Search Editor" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/saved_search_editor_ui.py:84 +msgid "Saved Search: " +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/saved_search_editor_ui.py:85 +msgid "Select a saved search to edit" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/saved_search_editor_ui.py:86 +msgid "Delete this selected saved search" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/saved_search_editor_ui.py:88 +msgid "Enter a new saved search name." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/saved_search_editor_ui.py:89 +msgid "Add the new saved search" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/saved_search_editor_ui.py:91 +msgid "Change the contents of the saved search" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:119 +msgid "Need username and password" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:120 +msgid "You must provide a username and/or password to use this news source." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:171 +msgid "Created by: " +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:178 +msgid "Last downloaded: never" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:193 +msgid "%d days, %d hours and %d minutes ago" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:195 +msgid "Last downloaded" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:216 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:192 +msgid "Schedule news download" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:219 +msgid "Add a custom news source" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:224 +msgid "Download all scheduled new sources" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:321 +msgid "No internet connection" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:322 +msgid "Cannot download news as no internet connection is active" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:193 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:278 +msgid "Recipes" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:194 +msgid "Download all scheduled recipes at once" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:195 +msgid "Download &all scheduled" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:196 +msgid "blurb" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:197 +msgid "&Schedule for download:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:198 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:208 +msgid "Every " +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:199 +msgid "day" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:200 +msgid "Monday" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:201 +msgid "Tuesday" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:202 +msgid "Wednesday" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:203 +msgid "Thursday" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:204 +msgid "Friday" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:205 +msgid "Saturday" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:206 +msgid "Sunday" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:207 +msgid "at" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:209 +msgid "" +"Interval at which to download this recipe. A value of zero means that the " +"recipe will be downloaded every hour." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:210 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:222 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:263 +msgid " days" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:211 +msgid "&Account" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:215 +msgid "For the scheduling to work, you must leave calibre running." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:216 +msgid "&Schedule" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:217 +msgid "Add &title as tag" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:218 +msgid "&Extra tags:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:219 +msgid "&Advanced" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:220 +msgid "&Download now" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:221 +msgid "" +"Delete downloaded news older than the specified number of days. Set to zero " +"to disable." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:223 +msgid "Delete downloaded news older than " +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_item_ui.py:36 +msgid "contains" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_item_ui.py:37 +msgid "The text to search for. It is interpreted as a regular expression." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_item_ui.py:38 +msgid "" +"<p>Negate this match. That is, only return results that <b>do not</b> match " +"this query." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_item_ui.py:39 +msgid "Negate" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_ui.py:113 +msgid "Advanced Search" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_ui.py:114 +msgid "Find entries that have..." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_ui.py:115 +msgid "&All these words:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_ui.py:116 +msgid "This exact &phrase:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_ui.py:117 +msgid "&One or more of these words:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_ui.py:118 +msgid "But dont show entries that have..." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_ui.py:119 +msgid "Any of these &unwanted words:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_ui.py:120 +msgid "What kind of match to use:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_ui.py:121 +msgid "Contains: the word or phrase matches anywhere in the metadata" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_ui.py:122 +msgid "Equals: the word or phrase must match an entire metadata field" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_ui.py:123 +msgid "" +"Regular expression: the expression must match anywhere in the metadata" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_ui.py:124 +msgid " " +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_ui.py:125 +msgid "" +"See the <a href=\"http://calibre-ebook.com/user_manual/gui.html#the-search-" +"interface\">User Manual</a> for more help" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/select_formats.py:45 +msgid "Choose formats" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories.py:46 +#: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:72 +msgid "Authors" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories.py:46 +#: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:101 +msgid "Publishers" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories.py:110 +msgid " (not on any book)" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories.py:162 +msgid "" +"The current tag category will be <b>permanently deleted</b>. Are you sure?" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories_ui.py:153 +msgid "User Categories Editor" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories_ui.py:154 +msgid "A&vailable items" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories_ui.py:155 +msgid "Apply tags to current tag category" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories_ui.py:157 +msgid "A&pplied items" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories_ui.py:158 +msgid "Unapply (remove) tag from current tag category" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories_ui.py:160 +msgid "Category name: " +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories_ui.py:161 +msgid "Select a category to edit" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories_ui.py:162 +msgid "Delete this selected tag category" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories_ui.py:164 +msgid "Enter a new category name. Select the kind before adding it." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories_ui.py:165 +msgid "Add the new category" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories_ui.py:167 +msgid "Category filter: " +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories_ui.py:168 +msgid "Select the content kind of the new category" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_editor.py:68 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor.py:93 +msgid "Are your sure?" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_editor.py:69 +msgid "" +"The following tags are used by one or more books. Are you certain you want " +"to delete them?" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_editor_ui.py:123 +msgid "Tag Editor" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_editor_ui.py:124 +msgid "A&vailable tags" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_editor_ui.py:125 +msgid "" +"Delete tag from database. This will unapply the tag from all books and then " +"remove it from the database." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_editor_ui.py:127 +msgid "Apply tag to current book" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_editor_ui.py:129 +msgid "A&pplied tags" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_editor_ui.py:130 +msgid "Unapply (remove) tag from current book" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_editor_ui.py:132 +msgid "&Add tag:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_editor_ui.py:133 +msgid "" +"If the tag you want is not in the available list, you can add it here. " +"Accepts a comma separated list of tags." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_editor_ui.py:134 +msgid "Add tag to available tags and apply it to current book" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor.py:60 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:410 +msgid "Item is blank" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor.py:61 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:411 +msgid "An item cannot be set to nothing. Delete it instead." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor.py:66 +msgid "Item already used" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor.py:67 +msgid "The item %s is already used." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor.py:79 +msgid "No item selected" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor.py:80 +msgid "You must select one item from the list of Available items." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor.py:89 +msgid "No items selected" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor.py:90 +msgid "You must select at least one items from the list." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor.py:94 +msgid "Are you certain you want to delete the following items?" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor_ui.py:71 +msgid "Category Editor" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor_ui.py:72 +msgid "Items in use" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor_ui.py:73 +msgid "" +"Delete item from database. This will unapply the item from all books and " +"then remove it from the database." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor_ui.py:75 +msgid "Rename the item in every book where it is used." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor_ui.py:77 +msgid "Ctrl+S" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/test_email_ui.py:51 +msgid "Test email settings" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/test_email_ui.py:52 +msgid "Send test mail from %s to:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/test_email_ui.py:53 +#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:115 +msgid "&Test" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:127 +msgid "No recipe selected" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:132 +msgid "The attached file: %s is a recipe to download %s." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:133 +msgid "Recipe for " +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:150 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:161 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:255 +msgid "Switch to Advanced mode" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:156 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:164 +msgid "Switch to Basic mode" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:174 +msgid "Feed must have a title" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:175 +msgid "The feed must have a title" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:179 +msgid "Feed must have a URL" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:180 +msgid "The feed %s must have a URL" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:185 +msgid "Already exists" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:186 +msgid "This feed has already been added to the recipe" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:227 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:236 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:286 +msgid "Invalid input" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:228 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:237 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:287 +msgid "<p>Could not create recipe. Error:<br>%s" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:241 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:263 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:290 +msgid "Replace recipe?" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:242 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:264 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:291 +msgid "A custom recipe named %s already exists. Do you want to replace it?" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:257 +msgid "Pick recipe" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:257 +msgid "Pick the recipe to customize" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:277 +msgid "Choose a recipe file" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:248 +msgid "Add custom news source" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:249 +msgid "Available user recipes" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:250 +msgid "Add/Update &recipe" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:251 +msgid "&Remove recipe" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:252 +msgid "&Share recipe" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:253 +msgid "Customize &builtin recipe" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:254 +msgid "&Load recipe from file" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:256 +msgid "" +"<html><head><meta name=\"qrichtext\" content=\"1\" /><style " +"type=\"text/css\">\n" +"p, li { white-space: pre-wrap; }\n" +"</style></head><body style=\" font-family:'DejaVu Sans'; font-size:10pt; " +"font-weight:400; font-style:normal;\">\n" +"<p style=\" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-" +"right:0px; -qt-block-indent:0; text-indent:0px;\">Create a basic news " +"recipe, by adding RSS feeds to it. <br />For most feeds, you will have to " +"use the \"Advanced mode\" to further customize the fetch " +"process.</p></body></html>" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:260 +msgid "Recipe &title:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:261 +msgid "&Oldest article:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:262 +msgid "The oldest article to download" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:264 +msgid "&Max. number of articles per feed:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:265 +msgid "Maximum number of articles to download per feed." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:266 +msgid "Feeds in recipe" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:268 +msgid "Remove feed from recipe" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:271 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:274 +msgid "Add feed to recipe" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:272 +msgid "&Feed title:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:273 +msgid "Feed &URL:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:275 +msgid "&Add feed" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:276 +msgid "" +"For help with writing advanced news recipes, please visit <a " +"href=\"http://calibre.kovidgoyal.net/user_manual/news.html\">User Recipes</a>" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:277 +msgid "Recipe source code (python)" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:107 +msgid "" +"<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" " +"\"http://www.w3.org/TR/REC-html40/strict.dtd\">\n" +"<html><head><meta name=\"qrichtext\" content=\"1\" /><style " +"type=\"text/css\">\n" +"p, li { white-space: pre-wrap; }\n" +"</style></head><body style=\" font-family:'Candara'; font-size:10pt; font-" +"weight:400; font-style:normal;\">\n" +"<p style=\" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-" +"right:0px; -qt-block-indent:0; text-indent:0px;\">Set a regular expression " +"pattern to use when trying to guess ebook metadata from filenames. </p>\n" +"<p style=\" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-" +"right:0px; -qt-block-indent:0; text-indent:0px;\">A <a " +"href=\"http://docs.python.org/lib/re-syntax.html\"><span style=\" text-" +"decoration: underline; color:#0000ff;\">reference</span></a> on the syntax " +"of regular expressions is available.</p>\n" +"<p style=\" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-" +"right:0px; -qt-block-indent:0; text-indent:0px;\">Use the <span style=\" " +"font-weight:600;\">Test</span> functionality below to test your regular " +"expression on a few sample filenames. The group names for the various " +"metadata entries are documented in tooltips.</p></body></html>" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:114 +msgid "Regular &expression" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:116 +msgid "File &name:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:118 +msgid "Title:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:119 +msgid "Regular expression (?P<title>)" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:120 +#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:123 +#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:126 +#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:129 +#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:132 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:78 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:82 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:87 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:92 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:94 +msgid "No match" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:121 +msgid "Authors:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:122 +msgid "Regular expression (?P<author>)" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:124 +msgid "Series:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:125 +msgid "Regular expression (?P<series>)" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:127 +msgid "Series index:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:128 +msgid "Regular expression (?P<series_index>)" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:130 +msgid "ISBN:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:131 +msgid "Regular expression (?P<isbn>)" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:54 +msgid "Job" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:55 +msgid "Status" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:56 +msgid "Progress" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:57 +msgid "Running time" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:69 +msgid "There are %d running jobs:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:73 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:80 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:95 +msgid "Unknown job" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:76 +msgid "There are %d waiting jobs:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:212 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:215 +msgid "Cannot kill job" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:213 +msgid "Cannot kill jobs that communicate with the device" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:216 +msgid "Job has already run" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:244 +msgid "Unavailable" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:280 +msgid " - Jobs" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/library/delegates.py:284 +msgid "N" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/library/delegates.py:284 +msgid "Y" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:47 +msgid "On Device" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:49 +msgid "Size (MB)" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:52 +msgid "Rating" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:285 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:291 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:296 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1003 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1007 +#: /home/kovid/work/calibre/src/calibre/gui2/shortcuts.py:47 +#: /home/kovid/work/calibre/src/calibre/gui2/shortcuts_ui.py:73 +#: /home/kovid/work/calibre/src/calibre/gui2/shortcuts_ui.py:78 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:414 +msgid "None" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:302 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1013 +msgid "Book <font face=\"serif\">%s</font> of %s." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:639 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1071 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:337 +msgid "The lookup/search name is \"{0}\"" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:830 +msgid "In Library" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:834 +msgid "Size" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:835 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:997 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:104 +msgid "Collections" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:993 +msgid "Format" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1053 +msgid "Marked for deletion" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1056 +msgid "Double click to <b>edit</b> me<br><br>" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:101 +msgid "Hide column %s" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:106 +msgid "Sort on %s" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:107 +msgid "Ascending" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:110 +msgid "Descending" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:122 +msgid "Change text alignment for %s" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:124 +msgid "Left" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:124 +msgid "Right" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:125 +msgid "Center" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:144 +msgid "Show column" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:156 +msgid "Restore default layout" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:475 +msgid "Not allowed" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:476 +msgid "" +"Dropping onto a device is not supported. First add the book to the calibre " +"library." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/config_ui.py:47 +msgid "Configure Viewer" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/config_ui.py:48 +msgid "Use white background" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/config_ui.py:49 +msgid "Hyphenate" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/config_ui.py:50 +msgid "<b>Changes will only take effect after a restart.</b>" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main.py:70 +msgid " - LRF Viewer" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main.py:160 +msgid "<b>No matches</b> for the search phrase <i>%s</i> were found." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main.py:160 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:440 +msgid "No matches found" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main_ui.py:128 +msgid "LRF Viewer" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main_ui.py:129 +msgid "Parsing LRF file" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main_ui.py:130 +msgid "LRF Viewer toolbar" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main_ui.py:131 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:476 +msgid "Next Page" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main_ui.py:132 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:477 +msgid "Previous Page" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main_ui.py:133 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:188 +msgid "Back" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main_ui.py:134 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:189 +msgid "Forward" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main_ui.py:135 +msgid "Next match" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main_ui.py:136 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:196 +msgid "Open ebook" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main_ui.py:137 +msgid "Configure" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:30 +msgid "Use the library located at the specified path." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:32 +msgid "Start minimized to system tray." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:34 +msgid "Log debugging information to console" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:36 +msgid "Do not check for updates" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:67 +msgid "Choose a location for your calibre e-book library" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:76 +msgid "Failed to create library" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:77 +msgid "Failed to create calibre library at: %r. Aborting." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:132 +msgid "Initializing user interface..." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:157 +msgid "Repairing failed" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:158 +msgid "The database repair failed. Starting with a new empty library." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:162 +#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:595 +msgid "Calibre Library" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:175 +msgid "Choose a location for your new calibre e-book library" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:185 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:218 +msgid "Bad database location" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:186 +msgid "Bad database location %r. calibre will now quit." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:199 +msgid "Corrupted database" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:200 +msgid "" +"Your calibre database appears to be corrupted. Do you want calibre to try " +"and repair it automatically? If you say No, a new empty calibre library will " +"be created." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:206 +msgid "" +"Repairing database. This can take a very long time for a large collection" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:219 +msgid "" +"Bad database location %r. Will start with a new, empty calibre library" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:230 +msgid "Starting %s: Loading books..." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:275 +msgid "If you are sure it is not running" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:277 +msgid "Cannot Start " +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:278 +msgid "%s is already running." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:281 +msgid "may be running in the system tray, in the" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:283 +msgid "upper right region of the screen." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:285 +msgid "lower right region of the screen." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:288 +msgid "try rebooting your computer." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:290 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:302 +msgid "try deleting the file" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:395 +msgid "calibre" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:397 +msgid "&Restrict to:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:398 +msgid "" +"Books display will be restricted to those matching the selected saved search" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:399 +msgid "set in ui.py" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:400 +msgid "Advanced search" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:402 +msgid "Alt+S" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:403 +msgid "&Search:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:404 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:405 +msgid "" +"<p>Search the list of books by title, author, publisher, tags, comments, " +"etc.<br><br>Words separated by spaces are ANDed" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:406 +msgid "Reset Quick Search" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:408 +msgid "Choose saved search or enter name for new saved search" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:409 +msgid "Copy current search text (instead of search name)" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:411 +msgid "Save current search under the name shown in the box" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:413 +msgid "Delete current saved search" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:415 +msgid "Sort by &popularity" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:416 +msgid "Match any" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:417 +msgid "Match all" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:418 +msgid "Create, edit, and delete user categories" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:419 +msgid "Manage &user categories" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:420 +msgid "Add books" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:421 +msgid "A" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:422 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:423 +msgid "Remove books" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:424 +msgid "Del" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:425 +msgid "Edit meta information" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:426 +msgid "E" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:427 +msgid "Merge book records" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:428 +msgid "M" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:429 +msgid "Send to device" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:430 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:355 +msgid "Save to disk" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:431 +msgid "S" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:432 +msgid "Fetch news" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:433 +msgid "F" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:434 +msgid "Convert E-books" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:435 +msgid "C" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:436 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:369 +msgid "View" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:437 +msgid "V" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:438 +msgid "Open containing folder" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:439 +msgid "Show book details" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:440 +msgid "Books by same author" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:441 +msgid "Books in this series" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:442 +msgid "Books by this publisher" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:443 +msgid "Books with the same tags" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:445 +msgid "Configure calibre" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:446 +msgid "Ctrl+P" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main_window.py:20 +msgid "" +"Redirect console output to a dialog window (both stdout and stderr). Useful " +"on windows where GUI apps do not have a output streams." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main_window.py:61 +msgid "&Preferences" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main_window.py:62 +msgid "&Quit" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main_window.py:90 +msgid "ERROR: Unhandled exception" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/metadata.py:89 +msgid "Book has neither title nor ISBN" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/metadata.py:115 +msgid "No matches found for this book" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/search_box.py:83 +#: /home/kovid/work/calibre/src/calibre/gui2/search_box.py:243 +msgid "Search" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/search_box.py:297 +msgid "The selected search will be <b>permanently deleted</b>. Are you sure?" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/shortcuts.py:58 +msgid "Press a key..." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/shortcuts.py:79 +msgid "Already assigned" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/shortcuts.py:81 +msgid "already assigned to" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/shortcuts.py:131 +#: /home/kovid/work/calibre/src/calibre/gui2/shortcuts.py:223 +msgid " or " +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/shortcuts.py:133 +#: /home/kovid/work/calibre/src/calibre/gui2/shortcuts_ui.py:69 +msgid "&Default" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/shortcuts.py:135 +msgid "Customize shortcuts for" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/shortcuts.py:223 +msgid "Keys" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/shortcuts.py:225 +msgid "Double click to change" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/shortcuts_ui.py:68 +msgid "Frame" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/shortcuts_ui.py:70 +msgid "&Custom" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/shortcuts_ui.py:71 +msgid "&Shortcut:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/shortcuts_ui.py:72 +#: /home/kovid/work/calibre/src/calibre/gui2/shortcuts_ui.py:77 +msgid "Click to change" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/shortcuts_ui.py:74 +#: /home/kovid/work/calibre/src/calibre/gui2/shortcuts_ui.py:79 +msgid "Clear" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/shortcuts_ui.py:76 +msgid "&Alternate shortcut:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/sidebar.py:24 +msgid "Jobs:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/sidebar.py:32 +msgid "Click to see list of active jobs." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/sidebar.py:83 +msgid "Hide Book Details" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/sidebar.py:83 +msgid "Show Book Details" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/sidebar.py:84 +msgid "Hide Tag Browser" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/sidebar.py:84 +msgid "Show Tag Browser" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/sidebar.py:85 +msgid "Hide Cover Browser" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/sidebar.py:85 +msgid "Show Cover Browser" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/sidebar.py:95 +msgid "Side bar" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/sidebar.py:135 +msgid "Cover browser could not be loaded: " +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:142 +msgid "Rename" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:147 +msgid "Hide category %s" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:150 +msgid "Show category" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:154 +msgid "Show all categories" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:161 +msgid "Manage " +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:165 +msgid "Manage Saved Searches" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:172 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:176 +msgid "Manage User Categories" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:329 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:238 +msgid "Searches" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:420 +msgid "The name %s is already used." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/tools.py:63 +#: /home/kovid/work/calibre/src/calibre/gui2/tools.py:182 +msgid "Convert book %d of %d (%s)" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/tools.py:90 +#: /home/kovid/work/calibre/src/calibre/gui2/tools.py:202 +msgid "Could not convert some books" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/tools.py:91 +#: /home/kovid/work/calibre/src/calibre/gui2/tools.py:203 +msgid "" +"Could not convert %d of %d books, because no suitable source format was " +"found." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/tools.py:120 +msgid "Queueing books for bulk conversion" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/tools.py:181 +msgid "Queueing " +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/tools.py:237 +msgid "Fetch news from " +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/tools.py:299 +msgid "Convert existing" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/tools.py:300 +msgid "" +"The following books have already been converted to %s format. Do you wish to " +"reconvert them?" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:70 +msgid "Save single format to disk..." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:162 +msgid "Search (For Advanced Search click the button to the left)" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:168 +msgid "Saved Searches" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:191 +msgid "Error communicating with device" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:208 +msgid "&Restore" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:210 +msgid "&Donate to support calibre" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:213 +msgid "&Eject connected device" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:218 +msgid "&Restart" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:258 +msgid "<p>For help see the: <a href=\"%s\">User Manual</a><br>" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:264 +msgid "<b>%s</b>: %s by <b>Kovid Goyal %%(version)s</b><br>%%(device)s</p>" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:281 +msgid "Edit metadata individually" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:283 +msgid "Edit metadata in bulk" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:285 +msgid "Download metadata and covers" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:286 +msgid "Download only metadata" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:287 +msgid "Download only covers" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:288 +msgid "Download only social metadata" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:292 +msgid "Merge into first selected book - delete others" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:294 +msgid "Merge into first selected book - keep others" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:301 +msgid "Add books from a single directory" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:302 +msgid "" +"Add books from directories, including sub-directories (One book per " +"directory, assumes every ebook file is the same book in a different format)" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:305 +msgid "" +"Add books from directories, including sub directories (Multiple books per " +"directory, assumes every ebook file is a different book)" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:308 +msgid "Add Empty book. (Book entry with no formats)" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:356 +msgid "Save to disk in a single directory" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:357 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2299 +msgid "Save only %s format to disk" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:360 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2302 +msgid "Save only %s format to disk in a single directory" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:370 +msgid "View specific format" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:375 +msgid "Remove selected books" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:377 +msgid "Remove files of a specific format from selected books.." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:379 +msgid "Remove all formats from selected books, except..." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:381 +msgid "Remove covers from selected books" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:420 +msgid "Convert individually" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:421 +msgid "Bulk convert" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:424 +msgid "Create catalog of books in your calibre library" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:440 +msgid "Run welcome wizard" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:480 +msgid "Similar books..." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:564 +msgid "Calibre Quick Start Guide" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:689 +msgid "Select folder to open as device" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:800 +msgid "Browse by covers" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:870 +msgid "({0} of {1})" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:875 +msgid "(all books)" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:877 +msgid "({0} of all)" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1000 +msgid "Device: " +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1002 +msgid " detected." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1034 +msgid "Connected " +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1046 +msgid "Device database corrupted" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1047 +msgid "" +"\n" +" <p>The database of books on the reader is corrupted. Try the " +"following:\n" +" <ol>\n" +" <li>Unplug the reader. Wait for it to finish regenerating " +"the database (i.e. wait till it is ready to be used). Plug it back in. Now " +"it should work with %(app)s. If not try the next step.</li>\n" +" <li>Quit %(app)s. Find the file media.xml in the reader's " +"main memory. Delete it. Unplug the reader. Wait for it to regenerate the " +"file. Re-connect it and start %(app)s.</li>\n" +" </ol>\n" +" " +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1110 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1287 +msgid "Use library only" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1111 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1288 +msgid "User annotations generated from main library only" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1118 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1604 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1661 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1699 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1720 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1850 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1915 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2033 +msgid "No books selected" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1119 +msgid "No books selected to fetch annotations from" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1144 +msgid "Merging user annotations into database" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1172 +msgid "%s<br />Last Page Read: %d (%d%%)" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1178 +msgid "%s<br />Last Page Read: Location %d (%d%%)" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1197 +msgid "<b>Location %d • %s</b><br />%s<br />" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1206 +msgid "<b>Page %d • %s</b><br />" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1211 +msgid "<b>Location %d • %s</b><br />" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1331 +msgid "How many empty books?" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1332 +msgid "How many empty books should be added?" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1380 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1431 +msgid "Uploading books to device." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1392 +msgid "EPUB Books" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1393 +msgid "LRF Books" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1394 +msgid "HTML Books" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1395 +msgid "LIT Books" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1396 +msgid "MOBI Books" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1397 +msgid "Topaz books" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1398 +msgid "Text books" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1399 +msgid "PDF Books" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1400 +msgid "Comics" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1401 +msgid "Archives" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1405 +msgid "Supported books" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1440 +msgid "Merged some books" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1441 +msgid "" +"Some duplicates were found and merged into the following existing books:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1450 +msgid "Failed to read metadata" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1451 +msgid "Failed to read metadata from the following" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1471 +msgid "Cannot delete" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1474 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2177 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2202 +msgid "No book selected" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1484 +msgid "Choose formats to be deleted" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1502 +msgid "Choose formats <b>not</b> to be deleted" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1540 +msgid "" +"The selected books will be <b>permanently deleted</b> and the files removed " +"from your computer. Are you sure?" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1557 +msgid "" +"The selected books will be <b>permanently deleted</b> from your device. Are " +"you sure?" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1572 +msgid "Deleting books from device." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1603 +msgid "Cannot download metadata" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1619 +msgid "social metadata" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1621 +msgid "covers" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1621 +msgid "metadata" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1623 +msgid "Downloading %s for %d book(s)" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1645 +msgid "Failed to download some metadata" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1646 +msgid "Failed to download metadata for the following:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1649 +msgid "Failed to download metadata:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1660 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1698 +msgid "Cannot edit metadata" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1719 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1722 +msgid "Cannot merge books" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1723 +msgid "At least two books must be selected for merging" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1727 +msgid "" +"All book formats and metadata from the selected books will be added to the " +"<b>first selected book.</b><br><br> The second and subsequently selected " +"books will not be deleted or changed.<br><br>Please confirm you want to " +"proceed." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1738 +msgid "" +"All book formats and metadata from the selected books will be merged into " +"the <b>first selected book</b>.<br><br>After merger the second and " +"subsequently selected books will be <b>deleted</b>. <br><br>All book formats " +"of the first selected book will be kept and any duplicate formats in the " +"second and subsequently selected books will be permanently <b>deleted</b> " +"from your computer.<br><br> Are you <b>sure</b> you want to proceed?" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1750 +msgid "" +"You are about to merge more than 5 books. Are you <b>sure</b> you want to " +"proceed?" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1849 +msgid "Cannot save to disk" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1852 +msgid "Choose destination directory" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1885 +msgid "Error while saving" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1886 +msgid "There was an error while saving." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1893 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1894 +msgid "Could not save some books" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1895 +msgid "Click the show details button to see which ones." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1916 +msgid "No books selected to generate catalog for" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1933 +msgid "Generating %s catalog..." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1939 +msgid "" +"No books to catalog\n" +"Check exclude tags" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1949 +msgid "Catalog generated." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1952 +msgid "Export Catalog Directory" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1953 +msgid "Select destination for %s.%s" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1967 +msgid "Fetching news from " +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1981 +msgid " fetched." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2032 +msgid "Cannot convert" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2061 +msgid "Starting conversion of %d book(s)" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2177 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2235 +msgid "Cannot view" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2191 +msgid "Multiple Books Selected" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2192 +msgid "" +"You are attempting to open %d books. Opening too many books at once can be " +"slow and have a negative effect on the responsiveness of your computer. Once " +"started the process cannot be stopped until complete. Do you wish to " +"continue?" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2201 +msgid "Cannot open folder" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2236 +msgid "%s has no available formats." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2277 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2282 +msgid "Cannot configure" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2278 +msgid "Cannot configure while there are running jobs." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2283 +msgid "Cannot configure before calibre is restarted." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2334 +msgid "No detailed info available" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2335 +msgid "No detailed information is available for books on the device." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2385 +msgid "Failed" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2391 +msgid "Error talking to device" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2392 +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/ui.py:2415 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2443 +msgid "Conversion Error" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2416 +msgid "" +"<p>Could not convert: %s<p>It is a <a href=\"%s\">DRM</a>ed book. You must " +"first remove the DRM using third party tools." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2429 +msgid "Recipe Disabled" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2444 +msgid "<b>Failed</b>" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2491 +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/ui.py:2516 +msgid "There are active jobs. Are you sure you want to quit?" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2519 +msgid "" +" is communicating with the device!<br>\n" +" Quitting may cause corruption on the device.<br>\n" +" Are you sure you want to quit?" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2523 +msgid "WARNING: Active jobs" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2575 +msgid "" +"will keep running in the system tray. To close it, choose <b>Quit</b> in the " +"context menu of the system tray." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2594 +msgid "" +"<span style=\"color:red; font-weight:bold\">Latest version: <a " +"href=\"%s\">%s</a></span>" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2602 +msgid "Update available" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2603 +msgid "" +"%s has been updated to version %s. See the <a href=\"http://calibre-" +"ebook.com/whats-new\">new features</a>. Visit the download page?" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/bookmarkmanager.py:43 +msgid "Edit bookmark" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/bookmarkmanager.py:43 +msgid "New title for bookmark:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/bookmarkmanager.py:52 +msgid "Export Bookmarks" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/bookmarkmanager.py:54 +msgid "Saved Bookmarks (*.pickle)" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/bookmarkmanager.py:62 +msgid "Import Bookmarks" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/bookmarkmanager.py:62 +msgid "Pickled Bookmarks (*.pickle)" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/bookmarkmanager.py:89 +msgid "Name" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/bookmarkmanager_ui.py:56 +msgid "Bookmark Manager" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/bookmarkmanager_ui.py:57 +msgid "Actions" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/bookmarkmanager_ui.py:58 +msgid "Edit" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/bookmarkmanager_ui.py:59 +msgid "Delete" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/bookmarkmanager_ui.py:60 +msgid "Reset" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/bookmarkmanager_ui.py:61 +msgid "Export" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/bookmarkmanager_ui.py:62 +msgid "Import" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:154 +msgid "Configure Ebook viewer" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:155 +msgid "&Font options" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:156 +msgid "Se&rif family:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:157 +msgid "&Sans family:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:158 +msgid "&Monospace family:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:159 +msgid "&Default font size:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:160 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:162 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:168 +msgid " px" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:161 +msgid "Monospace &font size:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:163 +msgid "S&tandard font:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:164 +msgid "Serif" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:165 +msgid "Sans-serif" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:166 +msgid "Monospace" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:167 +msgid "Remember last used &window size" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:169 +msgid "Maximum &view width:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:170 +msgid "H&yphenate (break line in the middle of large words)" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:171 +msgid "" +"The default language to use for hyphenation rules. If the book does not " +"specify a language, this will be used." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:172 +msgid "Default &language for hyphenation:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:173 +msgid "&Resize images larger than the viewer window (needs restart)" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:174 +msgid "&User stylesheet" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:175 +msgid "&General" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:176 +msgid "Double click to change a keyboard shortcut" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:177 +msgid "&Keyboard shortcuts" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/dictionary.py:53 +msgid "No results found for:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:35 +msgid "Options to customize the ebook viewer" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:42 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:675 +msgid "Remember last used window size" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:44 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:81 +msgid "" +"Set the user CSS stylesheet. This can be used to customize the look of all " +"books." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:46 +msgid "Maximum width of the viewer window, in pixels." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:48 +msgid "Resize images larger than the viewer window to fit inside it" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:49 +msgid "Hyphenate text" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:51 +msgid "Default language for hyphenation rules" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:53 +msgid "Font options" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:55 +msgid "The serif font family" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:57 +msgid "The sans-serif font family" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:59 +msgid "The monospaced font family" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:60 +msgid "The standard font size in px" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:61 +msgid "The monospaced font size in px" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:62 +msgid "The standard font type" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:452 +msgid "&Lookup in dictionary" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:455 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:138 +msgid "Go to..." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:467 +msgid "Next Section" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:468 +msgid "Previous Section" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:470 +msgid "Document Start" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:471 +msgid "Document End" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:473 +msgid "Section Start" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:474 +msgid "Section End" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/keys.py:12 +msgid "Scroll to the next page" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/keys.py:15 +msgid "Scroll to the previous page" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/keys.py:18 +msgid "Scroll to the next section" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/keys.py:21 +msgid "Scroll to the previous section" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/keys.py:24 +msgid "Scroll to the bottom of the section" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/keys.py:27 +msgid "Scroll to the top of the section" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/keys.py:30 +msgid "Scroll to the end of the document" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/keys.py:33 +msgid "Scroll to the start of the document" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/keys.py:36 +msgid "Scroll down" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/keys.py:39 +msgid "Scroll up" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/keys.py:42 +msgid "Scroll left" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/keys.py:45 +msgid "Scroll right" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:115 +msgid "Book format" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:184 +msgid "Position in book" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:191 +msgid "Go to a reference. To get reference numbers, use the reference mode." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:199 +msgid "Search for text in book" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:268 +msgid "Print Preview" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:299 +msgid "Connecting to dict.org to lookup: <b>%s</b>…" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:398 +msgid "Choose ebook" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:399 +msgid "Ebooks" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:418 +msgid "Add bookmark" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:418 +msgid "Enter title for bookmark:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:441 +msgid "No matches found for: %s" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:478 +msgid "Loading flow..." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:514 +msgid "Laying out %s" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:543 +msgid "Manage Bookmarks" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:578 +msgid "Loading ebook..." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:586 +msgid "DRM Error" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:587 +msgid "<p>This book is protected by <a href=\"%s\">DRM</a>" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:591 +msgid "Could not open ebook" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:665 +msgid "Options to control the ebook viewer" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:672 +msgid "" +"If specified, viewer window will try to come to the front when started." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:677 +msgid "Print javascript alert and console messages to the console" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:683 +msgid "" +"%prog [options] file\n" +"\n" +"View an ebook.\n" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:184 +msgid "E-book Viewer" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:185 +msgid "Close dictionary" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:187 +msgid "toolBar" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:190 +msgid "Next page" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:191 +msgid "Previous page" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:192 +msgid "Font size larger" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:193 +msgid "Font size smaller" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:197 +msgid "Find next" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:198 +msgid "Find next occurrence" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:199 +msgid "F3" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:200 +msgid "Copy to clipboard" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:202 +msgid "Reference Mode" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:203 +msgid "Bookmark" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:204 +msgid "Toggle full screen" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:205 +msgid "Print" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:206 +msgid "Find previous" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:207 +msgid "Find previous occurrence" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:208 +msgid "Shift+F3" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/printing.py:114 +msgid "Print eBook" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:196 +msgid "Copy Image" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:197 +msgid "Paste Image" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:226 +msgid "" +"Library\n" +"%d\n" +"books" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:227 +msgid "" +"Reader\n" +"%s\n" +"available" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:228 +msgid "" +"Card A\n" +"%s\n" +"available" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:229 +msgid "" +"Card B\n" +"%s\n" +"available" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:233 +msgid "Click to see the books available on your computer" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:236 +msgid "Click to see the books in the main memory of your reader" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:237 +msgid "Click to see the books on storage card A in your reader" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:238 +msgid "Click to see the books on storage card B in your reader" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:246 +msgid "Books located at" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:504 +msgid "Change Case" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:505 +msgid "Upper Case" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:506 +msgid "Lower Case" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:507 +msgid "Swap Case" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:508 +msgid "Title Case" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:367 +msgid "" +"If you use the WordPlayer e-book app on your Android phone, you can access " +"your calibre book collection directly on the device. To do this you have to " +"turn on the content server." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:371 +msgid "" +"Remember to leave calibre running as the server only runs as long as calibre " +"is running." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:373 +msgid "" +"You have to add the URL http://myhostname:8080 as your calibre library in " +"WordPlayer. Here myhostname should be the fully qualified hostname or the IP " +"address of the computer calibre is running on." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:450 +msgid "Moving library..." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:466 +#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:467 +msgid "Failed to move library" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:521 +msgid "Invalid database" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:522 +msgid "" +"<p>An invalid library already exists at %s, delete it before trying to move " +"the existing library.<br>Error: %s" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:533 +msgid "Could not move library" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:662 +msgid "welcome wizard" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/wizard/device_ui.py:48 +#: /home/kovid/work/calibre/src/calibre/gui2/wizard/device_ui.py:49 +#: /home/kovid/work/calibre/src/calibre/gui2/wizard/finish_ui.py:46 +#: /home/kovid/work/calibre/src/calibre/gui2/wizard/kindle_ui.py:42 +#: /home/kovid/work/calibre/src/calibre/gui2/wizard/library_ui.py:50 +#: /home/kovid/work/calibre/src/calibre/gui2/wizard/stanza_ui.py:42 +msgid "Welcome to calibre" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/wizard/device_ui.py:50 +#: /home/kovid/work/calibre/src/calibre/gui2/wizard/finish_ui.py:47 +#: /home/kovid/work/calibre/src/calibre/gui2/wizard/kindle_ui.py:43 +#: /home/kovid/work/calibre/src/calibre/gui2/wizard/library_ui.py:51 +#: /home/kovid/work/calibre/src/calibre/gui2/wizard/stanza_ui.py:43 +msgid "The one stop solution to all your e-book needs." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/wizard/device_ui.py:51 +msgid "" +"Choose your book reader. This will set the conversion options to produce " +"books optimized for your device." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/wizard/device_ui.py:52 +msgid "&Manufacturers" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/wizard/device_ui.py:53 +msgid "&Devices" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/wizard/finish_ui.py:48 +msgid "" +"<h2>Congratulations!</h2> You have successfully setup calibre. Press the %s " +"button to apply your settings." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/wizard/finish_ui.py:49 +msgid "" +"<h2>Demo videos</h2>Videos demonstrating the various features of calibre are " +"available <a href=\"http://calibre-ebook.com/demo\">online</a>." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/wizard/finish_ui.py:50 +msgid "" +"<h2>User Manual</h2>A User Manual is also available <a href=\"http://calibre-" +"ebook.com/user_manual\">online</a>." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/wizard/kindle_ui.py:44 +msgid "" +"<p>calibre can automatically send books by email to your Kindle. To do that " +"you have to setup email delivery below. The easiest way is to setup a free " +"<a href=\"http://gmail.com\">gmail account</a> and click the Use gmail " +"button below. You will also have to register your gmail address in your " +"Amazon account." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/wizard/kindle_ui.py:45 +msgid "&Kindle email:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/wizard/library_ui.py:52 +msgid "Choose your &language:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/wizard/library_ui.py:53 +msgid "" +"Choose a location for your books. When you add books to calibre, they will " +"be copied here:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/wizard/library_ui.py:54 +msgid "&Change" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/wizard/library_ui.py:55 +msgid "" +"If you have an existing calibre library, it will be copied to the new " +"location. If a calibre library already exists at the new location, calibre " +"will switch to using it." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/wizard/send_email.py:32 +msgid "Using: %s:%s@%s:%s and %s encryption" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/wizard/send_email.py:37 +msgid "Sending..." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/wizard/send_email.py:42 +msgid "Mail successfully sent" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/wizard/send_email.py:114 +msgid "Finish gmail setup" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/wizard/send_email.py:115 +msgid "" +"Dont forget to enter your gmail username and password. You can sign up for a " +"free gmail account at http://gmail.com" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/wizard/send_email.py:123 +#: /home/kovid/work/calibre/src/calibre/gui2/wizard/send_email.py:130 +msgid "Bad configuration" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/wizard/send_email.py:124 +msgid "You must set the From email address" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/wizard/send_email.py:131 +msgid "You must set the username and password for the mail server." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/wizard/send_email_ui.py:108 +msgid "Send email &from:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/wizard/send_email_ui.py:109 +msgid "" +"<p>This is what will be present in the From: field of emails sent by " +"calibre.<br> Set it to your email address" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/wizard/send_email_ui.py:110 +msgid "" +"<p>A mail server is useful if the service you are sending mail to only " +"accepts email from well know mail services." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/wizard/send_email_ui.py:111 +msgid "Mail &Server" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/wizard/send_email_ui.py:112 +msgid "calibre can <b>optionally</b> use a server to send mail" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/wizard/send_email_ui.py:113 +msgid "&Hostname:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/wizard/send_email_ui.py:114 +msgid "The hostname of your mail server. For e.g. smtp.gmail.com" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/wizard/send_email_ui.py:115 +msgid "&Port:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/wizard/send_email_ui.py:116 +msgid "" +"The port your mail server listens for connections on. The default is 25" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/wizard/send_email_ui.py:118 +msgid "Your username on the mail server" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/wizard/send_email_ui.py:120 +msgid "Your password on the mail server" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/wizard/send_email_ui.py:121 +msgid "&Show" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/wizard/send_email_ui.py:122 +msgid "&Encryption:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/wizard/send_email_ui.py:123 +msgid "" +"Use TLS encryption when connecting to the mail server. This is the most " +"common." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/wizard/send_email_ui.py:124 +msgid "&TLS" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/wizard/send_email_ui.py:125 +msgid "Use SSL encryption when connecting to the mail server." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/wizard/send_email_ui.py:126 +msgid "&SSL" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/wizard/send_email_ui.py:127 +msgid "Use Gmail" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/wizard/send_email_ui.py:128 +msgid "&Test email" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/wizard/stanza_ui.py:44 +msgid "" +"<p>If you use the <a href=\"http://www.lexcycle.com/download\">Stanza</a> e-" +"book app on your iPhone/iTouch, you can access your calibre book collection " +"directly on the device. To do this you have to turn on the calibre content " +"server." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/wizard/stanza_ui.py:45 +msgid "Turn on the &content server" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/caches.py:270 +msgid "today" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/caches.py:273 +msgid "yesterday" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/caches.py:276 +msgid "thismonth" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/caches.py:279 +#: /home/kovid/work/calibre/src/calibre/library/caches.py:280 +msgid "daysago" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/caches.py:430 +#: /home/kovid/work/calibre/src/calibre/library/caches.py:440 +msgid "no" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/caches.py:430 +#: /home/kovid/work/calibre/src/calibre/library/caches.py:440 +msgid "unchecked" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/caches.py:433 +#: /home/kovid/work/calibre/src/calibre/library/caches.py:443 +msgid "checked" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/caches.py:433 +#: /home/kovid/work/calibre/src/calibre/library/caches.py:443 +msgid "yes" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/caches.py:437 +msgid "blank" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/caches.py:437 +msgid "empty" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/catalog.py:41 +msgid "" +"The fields to output when cataloging books in the database. Should be a " +"comma-separated list of fields.\n" +"Available fields: %s.\n" +"Default: '%%default'\n" +"Applies to: CSV, XML output formats" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/catalog.py:51 +msgid "" +"Output field to sort on.\n" +"Available fields: author_sort, id, rating, size, timestamp, title.\n" +"Default: '%default'\n" +"Applies to: CSV, XML output formats" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/catalog.py:202 +msgid "" +"Title of generated catalog used as title in metadata.\n" +"Default: '%default'\n" +"Applies to: ePub, MOBI output formats" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/catalog.py:209 +msgid "" +"Save the output from different stages of the conversion pipeline to the " +"specified directory. Useful if you are unsure at which stage of the " +"conversion process a bug is occurring.\n" +"Default: '%default'None\n" +"Applies to: ePub, MOBI output formats" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/catalog.py:219 +msgid "" +"Regex describing tags to exclude as genres.\n" +"Default: '%default' excludes bracketed tags, e.g. '[<tag>]'\n" +"Applies to: ePub, MOBI output formats" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/catalog.py:225 +msgid "" +"Comma-separated list of tag words indicating book should be excluded from " +"output. Case-insensitive.\n" +"--exclude-tags=skip will match 'skip this book' and 'Skip will like this'.\n" +"Default: '%default'\n" +"Applies to: ePub, MOBI output formats" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/catalog.py:233 +msgid "" +"Include 'Titles' section in catalog.\n" +"Default: '%default'\n" +"Applies to: ePub, MOBI output formats" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/catalog.py:240 +msgid "" +"Include 'Recently Added' section in catalog.\n" +"Default: '%default'\n" +"Applies to: ePub, MOBI output formats" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/catalog.py:247 +msgid "" +"Tag prefix for user notes, e.g. '*Jeff might enjoy reading this'.\n" +"Default: '%default'\n" +"Applies to: ePub, MOBI output formats" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/catalog.py:254 +msgid "" +"Sort titles with leading numbers as text, e.g.,\n" +"'2001: A Space Odyssey' sorts as \n" +"'Two Thousand One: A Space Odyssey'.\n" +"Default: '%default'\n" +"Applies to: ePub, MOBI output formats" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/catalog.py:261 +msgid "" +"Specifies the output profile. In some cases, an output profile is required " +"to optimize the catalog for the device. For example, 'kindle' or " +"'kindle_dx' creates a structured Table of Contents with Sections and " +"Articles.\n" +"Default: '%default'\n" +"Applies to: ePub, MOBI output formats" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/catalog.py:268 +msgid "" +"Tag indicating book has been read.\n" +"Default: '%default'\n" +"Applies to: ePub, MOBI output formats" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:41 +msgid "" +"Path to the calibre library. Default is to use the path stored in the " +"settings." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:120 +msgid "" +"%prog list [options]\n" +"\n" +"List the books available in the calibre database.\n" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:128 +msgid "" +"The fields to display when listing books in the database. Should be a comma " +"separated list of fields.\n" +"Available fields: %s\n" +"Default: %%default. The special field \"all\" can be used to select all " +"fields. Only has effect in the text output format." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:135 +msgid "" +"The field by which to sort the results.\n" +"Available fields: %s\n" +"Default: %%default" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:137 +msgid "Sort results in ascending order" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:139 +msgid "" +"Filter the results by the search query. For the format of the search query, " +"please see the search related documentation in the User Manual. Default is " +"to do no filtering." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:141 +msgid "" +"The maximum width of a single line in the output. Defaults to detecting " +"screen size." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:142 +msgid "The string used to separate fields. Default is a space." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:143 +msgid "" +"The prefix for all file paths. Default is the absolute path to the library " +"folder." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:165 +msgid "Invalid fields. Available fields:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:172 +msgid "Invalid sort field. Available fields:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:244 +msgid "" +"The following books were not added as they already exist in the database " +"(see --duplicates option):" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:267 +msgid "" +"%prog add [options] file1 file2 file3 ...\n" +"\n" +"Add the specified files as books to the database. You can also specify " +"directories, see\n" +"the directory related options below.\n" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:276 +msgid "" +"Assume that each directory has only a single logical book and that all files " +"in it are different e-book formats of that book" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:278 +msgid "Process directories recursively" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:280 +msgid "" +"Add books to database even if they already exist. Comparison is done based " +"on book titles." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:282 +msgid "Add an empty book (a book with no formats)" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:284 +msgid "Set the title of the added empty book" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:286 +msgid "Set the authors of the added empty book" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:288 +msgid "Set the ISBN of the added empty book" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:313 +msgid "You must specify at least one file to add" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:329 +msgid "" +"%prog remove ids\n" +"\n" +"Remove the books identified by ids from the database. ids should be a comma " +"separated list of id numbers (you can get id numbers by using the list " +"command). For example, 23,34,57-85\n" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:344 +msgid "You must specify at least one book to remove" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:363 +msgid "" +"%prog add_format [options] id ebook_file\n" +"\n" +"Add the ebook in ebook_file to the available formats for the logical book " +"identified by id. You can get id by using the list command. If the format " +"already exists, it is replaced.\n" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:378 +msgid "You must specify an id and an ebook file" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:383 +msgid "ebook file must have an extension" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:391 +msgid "" +"\n" +"%prog remove_format [options] id fmt\n" +"\n" +"Remove the format fmt from the logical book identified by id. You can get id " +"by using the list command. fmt should be a file extension like LRF or TXT or " +"EPUB. If the logical book does not have fmt available, do nothing.\n" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:408 +msgid "You must specify an id and a format" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:426 +msgid "" +"\n" +"%prog show_metadata [options] id\n" +"\n" +"Show the metadata stored in the calibre database for the book identified by " +"id.\n" +"id is an id number from the list command.\n" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:434 +msgid "Print metadata in OPF form (XML)" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:443 +msgid "You must specify an id" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:456 +msgid "" +"\n" +"%prog set_metadata [options] id /path/to/metadata.opf\n" +"\n" +"Set the metadata stored in the calibre database for the book identified by " +"id\n" +"from the OPF file metadata.opf. id is an id number from the list command. " +"You\n" +"can get a quick feel for the OPF format by using the --as-opf switch to the\n" +"show_metadata command.\n" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:472 +msgid "You must specify an id and a metadata file" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:492 +msgid "" +"%prog export [options] ids\n" +"\n" +"Export the books specified by ids (a comma separated list) to the " +"filesystem.\n" +"The export operation saves all formats of the book, its cover and metadata " +"(in\n" +"an opf file). You can get id numbers from the list command.\n" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:500 +msgid "Export all books in database, ignoring the list of ids." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:502 +msgid "Export books to the specified directory. Default is" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:504 +msgid "Export all books into a single directory" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:511 +msgid "Specifying this switch will turn this behavior off." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:534 +msgid "You must specify some ids or the %s option" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:547 +msgid "" +"%prog add_custom_column [options] label name datatype\n" +"\n" +"Create a custom column. label is the machine friendly name of the column. " +"Should\n" +"not contain spaces or colons. name is the human friendly name of the " +"column.\n" +"datatype is one of: {0}\n" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:556 +msgid "" +"This column stores tag like data (i.e. multiple comma separated values). " +"Only applies if datatype is text." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:560 +msgid "" +"A dictionary of options to customize how the data in this column will be " +"interpreted." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:573 +msgid "You must specify label, name and datatype" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:631 +msgid "" +"\n" +" %prog catalog /path/to/destination.(csv|epub|mobi|xml ...) [options]\n" +"\n" +" Export a catalog in format specified by path/to/destination extension.\n" +" Options control how entries are displayed in the generated catalog " +"ouput.\n" +" " +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:645 +msgid "" +"Comma-separated list of database IDs to catalog.\n" +"If declared, --search is ignored.\n" +"Default: all" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:649 +msgid "" +"Filter the results by the search query. For the format of the search query, " +"please see the search-related documentation in the User Manual.\n" +"Default: no filtering" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:655 +#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:503 +msgid "Show detailed output information. Useful for debugging" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:668 +msgid "Error: You must specify a catalog output file" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:688 +msgid "" +"\n" +" %prog set_custom [options] column id value\n" +"\n" +" Set the value of a custom column for the book identified by id.\n" +" You can get a list of ids using the list command.\n" +" You can get a list of custom column names using the custom_columns\n" +" command.\n" +" " +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:699 +msgid "" +"If the column stores multiple values, append the specified values to the " +"existing ones, instead of replacing them." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:710 +msgid "Error: You must specify a field name, id and value" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:729 +msgid "" +"\n" +" %prog custom_columns [options]\n" +"\n" +" List available custom columns. Shows column labels and ids.\n" +" " +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:736 +msgid "Show details for each column." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:748 +msgid "You will lose all data in the column: %r. Are you sure (y/n)? " +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:750 +msgid "y" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:756 +msgid "" +"\n" +" %prog remove_custom_column [options] label\n" +"\n" +" Remove the custom column identified by label. You can see available\n" +" columns with the custom_columns command.\n" +" " +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:764 +msgid "Do not ask for confirmation" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:774 +msgid "Error: You must specify a column label" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/cli.py:787 +msgid "" +"%%prog command [options] [arguments]\n" +"\n" +"%%prog is the command line interface to the calibre books database.\n" +"\n" +"command is one of:\n" +" %s\n" +"\n" +"For help on an individual command: %%prog command --help\n" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/database2.py:487 +msgid "Main" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/database2.py:489 +msgid "Card A" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/database2.py:491 +msgid "Card B" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1542 +msgid "<p>Migrating old database to ebook library in %s<br><center>" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1571 +msgid "Copying <b>%s</b>" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1588 +msgid "Compacting database" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1681 +msgid "Checking SQL integrity..." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1720 +msgid "Checking for missing files." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1742 +msgid "Checked id" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:111 +msgid "Ratings" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:24 +msgid "The title" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:25 +msgid "The authors" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:26 +msgid "" +"The author sort string. To use only the first letter of the name use " +"{author_sort[0]}" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:28 +msgid "The tags" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:29 +msgid "The series" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:30 +msgid "" +"The series number. To get leading zeros use {series_index:0>3s} or " +"{series_index:>3s} for leading spaces" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:33 +msgid "The rating" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:34 +msgid "The ISBN" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:35 +msgid "The publisher" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:36 +msgid "The date" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:37 +msgid "The published date" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:38 +msgid "The calibre internal id" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:48 +msgid "Options to control saving to disk" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:54 +msgid "" +"Normally, calibre will update the metadata in the saved files from what is " +"in the calibre library. Makes saving to disk slower." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:57 +msgid "" +"Normally, calibre will write the metadata into a separate OPF file along " +"with the actual e-book files." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:60 +msgid "" +"Normally, calibre will save the cover in a separate file along with the " +"actual e-book file(s)." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:63 +msgid "" +"Comma separated list of formats to save for each book. By default all " +"available books are saved." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:66 +msgid "" +"The template to control the filename and directory structure of the saved " +"files. Default is \"%s\" which will save books into a per-author " +"subdirectory with filenames containing title and author. Available controls " +"are: {%s}" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:71 +msgid "" +"The template to control the filename and directory structure of files sent " +"to the device. Default is \"%s\" which will save books into a per-author " +"directory with filenames containing title and author. Available controls " +"are: {%s}" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:78 +msgid "" +"Normally, calibre will convert all non English characters into English " +"equivalents for the file names. WARNING: If you turn this off, you may " +"experience errors when saving, depending on how well the filesystem you are " +"saving to supports unicode." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:84 +msgid "" +"The format in which to display dates. %d - day, %b - month, %Y - year. " +"Default is: %b, %Y" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:87 +msgid "Convert paths to lowercase." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:89 +msgid "Replace whitespace with underscores." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:258 +msgid "Requested formats not available" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/server/__init__.py:21 +msgid "Settings to control the calibre content server" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/server/__init__.py:25 +msgid "The port on which to listen. Default is %default" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/server/__init__.py:27 +msgid "The server timeout in seconds. Default is %default" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/server/__init__.py:29 +msgid "The max number of worker threads to use. Default is %default" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/server/__init__.py:31 +msgid "Set a password to restrict access. By default access is unrestricted." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/server/__init__.py:33 +msgid "Username for access. By default, it is: %default" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/server/__init__.py:37 +msgid "The maximum size for displayed covers. Default is %default." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/server/__init__.py:39 +msgid "" +"The maximum number of matches to return per OPDS query. This affects Stanza, " +"WordPlayer, etc. integration." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/server/__init__.py:43 +msgid "" +"Group items in categories such as author/tags by first letter when there are " +"more than this number of items. Default: %default. Set to a large number to " +"disable grouping." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/server/base.py:93 +msgid "Password to access your calibre library. Username is " +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/server/main.py:28 +msgid "" +"[options]\n" +"\n" +"Start the calibre content server." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/server/main.py:30 +msgid "Path to the library folder to serve with the content server" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/server/main.py:32 +msgid "Write process PID to the specified file" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:112 +msgid "%d books" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:124 +msgid "%d items" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:141 +msgid "RATING: %s<br />" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:144 +msgid "TAGS: %s<br />" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:148 +msgid "SERIES: %s [%s]<br />" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:189 +msgid "Library" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:228 +msgid "Books in your library" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:234 +msgid "By " +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:235 +msgid "Books sorted by " +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:535 +msgid "Newest" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/utils/config.py:48 +msgid "%sUsage%s: %s\n" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/utils/config.py:92 +msgid "Created by " +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/utils/config.py:93 +msgid "" +"Whenever you pass arguments to %prog that have spaces in them, enclose the " +"arguments in quotation marks." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/utils/config.py:670 +msgid "Path to the database in which books are stored" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/utils/config.py:672 +msgid "Pattern to guess metadata from filenames" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/utils/config.py:674 +msgid "Access key for isbndb.com" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/utils/config.py:676 +msgid "Default timeout for network operations (seconds)" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/utils/config.py:678 +msgid "Path to directory in which your library of books is stored" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/utils/config.py:680 +msgid "The language in which to display the user interface" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/utils/config.py:682 +msgid "The default output format for ebook conversions." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/utils/config.py:686 +msgid "Ordered list of formats to prefer for input." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/utils/config.py:688 +msgid "Read metadata from files" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/utils/config.py:690 +msgid "The priority of worker processes" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/utils/config.py:692 +msgid "Swap author first and last names when reading metadata" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/utils/config.py:694 +msgid "Add new formats to existing book records" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/utils/config.py:699 +msgid "List of named saved searches" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/utils/config.py:700 +msgid "User-created tag browser categories" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/utils/ipc/job.py:43 +msgid "Waiting..." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/utils/ipc/job.py:51 +msgid "Stopped" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/utils/ipc/job.py:53 +msgid "Finished" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/utils/ipc/job.py:75 +msgid "Working..." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/utils/localization.py:93 +msgid "Brazilian Portuguese" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/utils/localization.py:94 +msgid "English (UK)" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/utils/localization.py:95 +msgid "Simplified Chinese" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/utils/localization.py:96 +msgid "Chinese (HK)" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/utils/localization.py:97 +msgid "Traditional Chinese" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/utils/localization.py:98 +msgid "English" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/utils/localization.py:99 +msgid "English (Australia)" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/utils/localization.py:100 +msgid "English (New Zealand)" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/utils/localization.py:101 +msgid "English (Canada)" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/utils/localization.py:102 +msgid "English (India)" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/utils/localization.py:103 +msgid "English (Thailand)" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/utils/localization.py:104 +msgid "English (Cyprus)" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/utils/localization.py:105 +msgid "English (Pakistan)" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/utils/localization.py:106 +msgid "English (Singapore)" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/utils/localization.py:107 +msgid "English (Yemen)" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/utils/localization.py:108 +msgid "English (Ireland)" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/utils/localization.py:109 +msgid "English (China)" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/utils/localization.py:110 +msgid "Spanish (Paraguay)" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/utils/localization.py:111 +msgid "German (AT)" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/utils/localization.py:112 +msgid "Dutch (NL)" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/utils/localization.py:113 +msgid "Dutch (BE)" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/utils/sftp.py:53 +msgid "URL must have the scheme sftp" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/utils/sftp.py:57 +msgid "host must be of the form user@hostname" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/utils/sftp.py:68 +msgid "Failed to negotiate SSH session: " +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/utils/sftp.py:71 +msgid "Failed to authenticate with server: %s" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/utils/smtp.py:234 +msgid "Control email delivery" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:118 +#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:140 +msgid "Unknown feed" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:158 +#: /home/kovid/work/calibre/src/calibre/web/feeds/__init__.py:183 +msgid "Untitled article" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/web/feeds/input.py:21 +msgid "Download periodical content from the internet" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/web/feeds/input.py:36 +msgid "" +"Useful for recipe development. Forces max_articles_per_feed to 2 and " +"downloads at most 2 feeds." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/web/feeds/input.py:39 +msgid "Username for sites that require a login to access content." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/web/feeds/input.py:42 +msgid "Password for sites that require a login to access content." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/web/feeds/input.py:46 +msgid "" +"Do not download latest version of builtin recipes from the calibre server" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:43 +msgid "Unknown News Source" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:595 +msgid "The \"%s\" recipe needs a username and password." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:692 +msgid "Download finished" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:694 +msgid "Failed to download the following articles:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:700 +msgid "Failed to download parts of the following articles:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:702 +msgid " from " +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:704 +msgid "\tFailed links:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:821 +msgid "Could not fetch article. Run with -vv to see the reason" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:842 +msgid "Fetching feeds..." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:847 +msgid "Got feeds from index page" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:853 +msgid "Trying to download cover..." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:855 +msgid "Generating masthead..." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:936 +msgid "Starting download [%d thread(s)]..." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:952 +msgid "Feeds downloaded to %s" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:962 +msgid "Could not download cover: %s" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:974 +msgid "Downloading cover from %s" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:1009 +msgid "Masthead image downloaded" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:1205 +msgid "Untitled Article" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:1276 +msgid "Article downloaded: %s" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:1287 +msgid "Article download failed: %s" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:1304 +msgid "Fetching feed" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:1451 +msgid "" +"Failed to log in, check your username and password for the calibre " +"Periodicals service." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:1467 +msgid "" +"You do not have permission to download this issue. Either your subscription " +"has expired or you have exceeded the maximum allowed downloads for today." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/collection.py:47 +msgid "You" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/model.py:73 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/model.py:82 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/model.py:181 +msgid "Scheduled" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/model.py:84 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/model.py:182 +msgid "Custom" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:480 +msgid "" +"%prog URL\n" +"\n" +"Where URL is for example http://google.com" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:483 +msgid "Base directory into which URL is saved. Default is %default" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:486 +msgid "" +"Timeout in seconds to wait for a response from the server. Default: %default " +"s" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:489 +msgid "" +"Maximum number of levels to recurse i.e. depth of links to follow. Default " +"%default" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:492 +msgid "" +"The maximum number of files to download. This only applies to files from <a " +"href> tags. Default is %default" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:494 +msgid "" +"Minimum interval in seconds between consecutive fetches. Default is %default " +"s" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:496 +msgid "" +"The character encoding for the websites you are trying to download. The " +"default is to try and guess the encoding." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:498 +msgid "" +"Only links that match this regular expression will be followed. This option " +"can be specified multiple times, in which case as long as a link matches any " +"one regexp, it will be followed. By default all links are followed." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:500 +msgid "" +"Any link that matches this regular expression will be ignored. This option " +"can be specified multiple times, in which case as long as any regexp matches " +"a link, it will be ignored.By default, no links are ignored. If both --" +"filter-regexp and --match-regexp are specified, then --filter-regexp is " +"applied first." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/web/fetch/simple.py:502 +msgid "Do not download CSS stylesheets." +msgstr "" diff --git a/src/calibre/translations/pt_BR.po b/src/calibre/translations/pt_BR.po index c913a6227e..290e18866a 100644 --- a/src/calibre/translations/pt_BR.po +++ b/src/calibre/translations/pt_BR.po @@ -8,13 +8,13 @@ msgstr "" "Project-Id-Version: calibre\n" "Report-Msgid-Bugs-To: FULL NAME <EMAIL@ADDRESS>\n" "POT-Creation-Date: 2010-06-06 21:03+0000\n" -"PO-Revision-Date: 2010-06-10 02:23+0000\n" +"PO-Revision-Date: 2010-06-11 00:14+0000\n" "Last-Translator: Thomaz Rodrigues Botelho <Unknown>\n" "Language-Team: Brazilian Portuguese <pt_BR@li.org>\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2010-06-10 03:35+0000\n" +"X-Launchpad-Export-Date: 2010-06-11 03:41+0000\n" "X-Generator: Launchpad (build Unknown)\n" #: /home/kovid/work/calibre/src/calibre/customize/__init__.py:43 @@ -1110,8 +1110,8 @@ msgid "" "source file has a Table of Contents, it will be used in preference to the " "automatically generated one." msgstr "" -"Controlar a geração automática de índice. Por padrão, se o arquivo fonte tem " -"um índice, ele será usado no lugar do que seria gerado automaticamente." +"Controlar a geração automática do Sumário. Por padrão, se o arquivo fonte " +"tem um índice, ele será usado no lugar do que seria gerado automaticamente." #: /home/kovid/work/calibre/src/calibre/ebooks/conversion/cli.py:155 msgid "Options to set metadata in the output" @@ -1229,7 +1229,7 @@ msgid "" "other forms of auto-detection." msgstr "" "Expressão XPath que especifica todas as etiquetas que devem ser adicionadas " -"ao Índice no nível um. Se esta for especificada, ela tem prioridade sobre " +"ao Sumário no nível um. Se esta for especificada, ela tem prioridade sobre " "outras formas de auto-detecção." #: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:189 @@ -1238,6 +1238,9 @@ msgid "" "of Contents at level two. Each entry is added under the previous level one " "entry." msgstr "" +"Expressão XPath que especifica todas as etiquetas que devem ser adicionadas " +"ao Sumário no nível dois. Cada entrada é adicionada abaixo da entrada de " +"nível um anterior." #: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:197 msgid "" @@ -1246,7 +1249,7 @@ msgid "" "entry." msgstr "" "Expressão XPath que especifica todas as etiquetas que devem ser adicionadas " -"ao Índice no nível três. Cada entrada é adicionada abaixo da entrada de " +"ao Sumário no nível três. Cada entrada é adicionada abaixo da entrada de " "nível dois anterior." #: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:205 @@ -1255,13 +1258,13 @@ msgid "" "preference to the auto-generated one. With this option, the auto-generated " "one is always used." msgstr "" -"Normalmente, se o arquivo fonte já tem um índice, ele é usado em preferencia " -"ao que é gerado automaticamente. Com esta opção, o que é gerado " +"Normalmente, se o arquivo fonte já tem um Sumário, ele é usado em " +"preferência ao que é gerado automaticamente. Com esta opção, o que é gerado " "automaticamente sempre será usado." #: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:213 msgid "Don't add auto-detected chapters to the Table of Contents." -msgstr "Não adicionar ao índice os capítulos detectados automaticamente." +msgstr "Não adicionar ao sumário os capítulos detectados automaticamente." #: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:220 msgid "" @@ -1269,7 +1272,7 @@ msgid "" "the Table of Contents. Default: %default" msgstr "" "Se um número de capítulos menor do que esse for detectado, links a eles " -"serão adicionados à Tabela de Conteúdos. Padrão: %default." +"serão adicionados ao Sumário. Padrão: %default." #: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:227 msgid "" @@ -1277,16 +1280,16 @@ msgid "" "is: %default. Links are only added to the TOC if less than the threshold " "number of chapters were detected." msgstr "" -"Número máximo de links para inserir no Índice. Defina como 0 para desativar. " -"O padrão é: %default. Links só são adicionados ao índice se forem detectados " -"menos capítulos do que o limite definido." +"Número máximo de links para inserir no Sumário. Defina como 0 para " +"desativar. O padrão é: %default. Links só são adicionados ao índice se forem " +"detectados menos capítulos do que o limite definido." #: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:235 msgid "" "Remove entries from the Table of Contents whose titles match the specified " "regular expression. Matching entries and all their children are removed." msgstr "" -"Remover os itens do Índice cujos títulos correspondem à expressão regular " +"Remover os itens do Sumário cujos títulos correspondem à expressão regular " "especificada. Os itens correspondentes e sub-itens serão removidos." #: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:246 @@ -1325,7 +1328,7 @@ msgid "" "the style rules from the source file, so it can be used to override those " "rules." msgstr "" -"O caminho para uma folha de estilho CSS ou CSS puro. Este CSS será " +"O caminho para uma folha de estilo CSS ou CSS puro. Este CSS será " "acrescentado às regras de estilo do arquivo de origem, de modo a " "sobrescrever aquelas regras." @@ -1471,6 +1474,12 @@ msgid "" "by Chinese and Japanese for instance) the representation used by the largest " "number of people will be used (Chinese in the previous example)." msgstr "" +"Transformar caracteres unicode para uma representação ASCII. Use com cuidado " +"pois isto irá substituir caracteres unicode por ASCII. Por exemplo ele irá " +"substituir \"%s\" por \"Mikhail Gorbachiov\". Também, note que em alguns " +"casos onde existem múltiplas representações de um caractere (caracteres " +"compartilhados pelo Chinês e Japonês) a representação usada pela maioria das " +"pessoas será usada (Chinês no exemplo anterior)." #: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:416 msgid "" @@ -1481,6 +1490,12 @@ msgid "" "corresponding pair of normal characters. This option will preserve them " "instead." msgstr "" +"Preserva as ligaduras presentes no documento de entrada. Uma ligadura é um " +"formato especial para mostrar um par de caracteres como ff, fi, fl, etc. A " +"maioria dos leitores não tem suporte para ligaduras em suas fontes padrões, " +"então eles não conseguem mostrá-las corretamente. Por padrão, o calibe irá " +"transformar uma ligadura em seu par correspondente de caracteres normais. " +"Esta opção irá preservar as ligaduras." #: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:428 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:38 @@ -1661,11 +1676,11 @@ msgstr "Iniciar" #: /home/kovid/work/calibre/src/calibre/ebooks/rb/rbml.py:102 #: /home/kovid/work/calibre/src/calibre/ebooks/txt/txtml.py:77 msgid "Table of Contents:" -msgstr "Tabela de conteúdos:" +msgstr "Sumário:" #: /home/kovid/work/calibre/src/calibre/ebooks/fb2/input.py:32 msgid "Do not insert a Table of Contents at the beginning of the book." -msgstr "Não insira uma Tabela de Conteúdos no início do livro." +msgstr "Não insira um Sumário no início do livro." #: /home/kovid/work/calibre/src/calibre/ebooks/fb2/output.py:21 #: /home/kovid/work/calibre/src/calibre/ebooks/pdb/output.py:32 @@ -1673,7 +1688,7 @@ msgstr "Não insira uma Tabela de Conteúdos no início do livro." #: /home/kovid/work/calibre/src/calibre/ebooks/rb/output.py:21 #: /home/kovid/work/calibre/src/calibre/ebooks/txt/output.py:35 msgid "Add Table of Contents to beginning of the book." -msgstr "Adicione uma Tabela de Conteúdo no início do livro." +msgstr "Adicione um Sumário no início do livro." #: /home/kovid/work/calibre/src/calibre/ebooks/html/input.py:243 msgid "" @@ -1755,7 +1770,7 @@ msgstr "Falhou em decompor o link %s %s" #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:608 msgid "Cannot add link %s to TOC" -msgstr "Não foi possivel adicionar o link %s a Tabela de Conteúdos" +msgstr "Não foi possivel adicionar o link %s ao sumário" #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:957 msgid "Unable to process image %s. Error: %s" @@ -2273,8 +2288,8 @@ msgid "" "Don't add Table of Contents to end of book. Useful if the book has its own " "table of contents." msgstr "" -"Não adicione Tabela de Conteúdos no fim do livro. Útil se o livro tem sua " -"própria tabela de conteúdos." +"Não adicione o Sumário no fim do livro. Útil se o livro tem sua própria " +"tabela de conteúdos." #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/output.py:33 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/htmltoc.py:56 @@ -2370,7 +2385,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/htmltoc.py:54 msgid "HTML TOC generation options." -msgstr "Opções de geração de Tabela de Conteúdo HTML." +msgstr "Opções de geração de Sumário HTML." #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/jacket.py:113 msgid "Book Jacket" @@ -2712,7 +2727,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/txt/input.py:39 msgid "Do not insert a Table of Contents into the output text." -msgstr "" +msgstr "Não insira um Sumário no texto de saída" #: /home/kovid/work/calibre/src/calibre/ebooks/txt/output.py:24 msgid "" @@ -3285,7 +3300,7 @@ msgstr "&Desativar processamento de HQs" #: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input_ui.py:100 #: /home/kovid/work/calibre/src/calibre/gui2/convert/single_ui.py:111 msgid "&Output format:" -msgstr "" +msgstr "F&ormato de saída:" #: /home/kovid/work/calibre/src/calibre/gui2/convert/comic_input_ui.py:101 msgid "Disable conversion of images to &black and white" @@ -3319,6 +3334,11 @@ msgid "" "understanding the conversion process and figuring out the correct values for " "conversion parameters like Table of Contents and Chapter Detection." msgstr "" +"Escolha um diretório para colocar a saída do depurador. Se você especifica " +"um diretório, o calibre irá colocar um monte de saída de depuração nele. " +"Isto será util para compreender os processos de conversão e descobrir os " +"valores corretos para parâmetros de conversão como Sumário e Detecção de " +"Capítulos." #: /home/kovid/work/calibre/src/calibre/gui2/convert/debug_ui.py:54 msgid "" @@ -3329,11 +3349,11 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/convert/epub_output.py:15 msgid "EPUB Output" -msgstr "" +msgstr "Saída EPUB" #: /home/kovid/work/calibre/src/calibre/gui2/convert/epub_output_ui.py:49 msgid "Do not &split on page breaks" -msgstr "" +msgstr "Não &dividir nas quebras de página" #: /home/kovid/work/calibre/src/calibre/gui2/convert/epub_output_ui.py:50 msgid "No default &cover" @@ -3361,7 +3381,7 @@ msgstr "FB2 Entrada" #: /home/kovid/work/calibre/src/calibre/gui2/convert/fb2_input_ui.py:29 msgid "Do not insert a &Table of Contents at the beginning of the book." -msgstr "" +msgstr "Não insira um &Sumário no início do livro." #: /home/kovid/work/calibre/src/calibre/gui2/convert/fb2_output.py:14 msgid "FB2 Output" @@ -3396,7 +3416,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/convert/font_key_ui.py:103 msgid "&Output document" -msgstr "" +msgstr "D&ocumento de saída" #: /home/kovid/work/calibre/src/calibre/gui2/convert/font_key_ui.py:104 #: /home/kovid/work/calibre/src/calibre/gui2/convert/font_key_ui.py:109 @@ -3429,7 +3449,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/convert/font_key_ui.py:108 msgid "&Input document" -msgstr "" +msgstr "documento de &entrada" #: /home/kovid/work/calibre/src/calibre/gui2/convert/font_key_ui.py:111 msgid "&Font size: " @@ -3445,11 +3465,11 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel.py:16 msgid "Look & Feel" -msgstr "" +msgstr "Aparência e Comportamento" #: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel.py:18 msgid "Control the look and feel of the output" -msgstr "" +msgstr "Controla a aparência e comportamento da saída" #: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel.py:30 msgid "Original" @@ -3457,19 +3477,19 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel.py:31 msgid "Left align" -msgstr "" +msgstr "Alinhar à esquerda" #: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel.py:32 msgid "Justify text" -msgstr "" +msgstr "Justificar texto" #: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:120 msgid "&Disable font size rescaling" -msgstr "" +msgstr "&Desativar redimensionamento do tamanho das fontes" #: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:121 msgid "Base &font size:" -msgstr "" +msgstr "Tamanho base para &fontes:" #: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:124 msgid "Wizard to help you choose an appropriate font size key" @@ -3477,15 +3497,15 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:126 msgid "Line &height:" -msgstr "" +msgstr "&Altura da Linha:" #: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:128 msgid "Input character &encoding:" -msgstr "" +msgstr "&Codificação de caracteres de entrada" #: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:129 msgid "Remove &spacing between paragraphs" -msgstr "" +msgstr "Remover e&spaçamento entre parágrafos" #: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:130 msgid "Indent size:" @@ -3504,27 +3524,27 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:133 msgid "Text justification:" -msgstr "" +msgstr "Justificação de texto:" #: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:134 msgid "&Linearize tables" -msgstr "" +msgstr "&Linearizar tabelas" #: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:135 msgid "Extra &CSS" -msgstr "" +msgstr "&CSS extra" #: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:136 msgid "&Transliterate unicode characters to ASCII" -msgstr "" +msgstr "&Transformar caracteres unicode em ASCII" #: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:137 msgid "Insert &blank line" -msgstr "" +msgstr "Inserir linha em &branco" #: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:138 msgid "Keep &ligatures" -msgstr "" +msgstr "Manter &ligaduras" #: /home/kovid/work/calibre/src/calibre/gui2/convert/lrf_output.py:19 msgid "LRF Output" @@ -3603,7 +3623,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:169 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:109 msgid "You do not have permission to read the file: " -msgstr "" +msgstr "Você não tem permissão para ler o arquivo: " #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:177 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:184 @@ -3718,7 +3738,7 @@ msgstr "Padrão" #: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output_ui.py:67 msgid "&Title for Table of Contents:" -msgstr "" +msgstr "&Título para o Sumário:" #: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output_ui.py:68 msgid "Rescale images for &Palm devices" @@ -3734,7 +3754,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output_ui.py:71 msgid "Do not add Table of Contents to book" -msgstr "" +msgstr "Não adicione Sumário no livro" #: /home/kovid/work/calibre/src/calibre/gui2/convert/mobi_output_ui.py:72 msgid "Kindle options" @@ -3750,19 +3770,19 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/convert/page_setup.py:35 msgid "Page Setup" -msgstr "" +msgstr "Configurações de Página" #: /home/kovid/work/calibre/src/calibre/gui2/convert/page_setup_ui.py:116 msgid "&Output profile:" -msgstr "" +msgstr "Perfil de &Saída:" #: /home/kovid/work/calibre/src/calibre/gui2/convert/page_setup_ui.py:117 msgid "Profile description" -msgstr "" +msgstr "Descrição do perfil" #: /home/kovid/work/calibre/src/calibre/gui2/convert/page_setup_ui.py:118 msgid "&Input profile:" -msgstr "" +msgstr "Perfil de &Entrada:" #: /home/kovid/work/calibre/src/calibre/gui2/convert/page_setup_ui.py:119 msgid "Margins" @@ -3889,38 +3909,42 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/convert/single_ui.py:109 msgid "&Input format:" -msgstr "" +msgstr "Formato de &Entrada:" #: /home/kovid/work/calibre/src/calibre/gui2/convert/single_ui.py:110 msgid "Use &saved conversion settings for individual books" -msgstr "" +msgstr "Use configuração de conversão &salvas para livros individuais" #: /home/kovid/work/calibre/src/calibre/gui2/convert/structure_detection.py:17 msgid "" "Structure\n" "Detection" msgstr "" +"Detecção da\n" +"Estrutura" #: /home/kovid/work/calibre/src/calibre/gui2/convert/structure_detection.py:19 msgid "" "Fine tune the detection of chapter headings and other document structure." msgstr "" +"Refina a detecção de cabeçalhos de capítulos e outras estruturas do " +"documento." #: /home/kovid/work/calibre/src/calibre/gui2/convert/structure_detection.py:34 msgid "Detect chapters at (XPath expression):" -msgstr "" +msgstr "Detectar capítulos com (expressão XPath):" #: /home/kovid/work/calibre/src/calibre/gui2/convert/structure_detection.py:35 msgid "Insert page breaks before (XPath expression):" -msgstr "" +msgstr "Inserir quebras de páginas antes de (expressão XPath):" #: /home/kovid/work/calibre/src/calibre/gui2/convert/structure_detection.py:37 msgid "Header regular expression:" -msgstr "" +msgstr "Expressão regular para o Cabeçalho:" #: /home/kovid/work/calibre/src/calibre/gui2/convert/structure_detection.py:40 msgid "Footer regular expression:" -msgstr "" +msgstr "Expressão regular para o Rodapé:" #: /home/kovid/work/calibre/src/calibre/gui2/convert/structure_detection.py:56 #: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:71 @@ -3944,11 +3968,11 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/convert/structure_detection_ui.py:60 msgid "Chapter &mark:" -msgstr "" +msgstr "&marcação de capítulo:" #: /home/kovid/work/calibre/src/calibre/gui2/convert/structure_detection_ui.py:61 msgid "Remove first &image" -msgstr "" +msgstr "Remover primeira &imagem" #: /home/kovid/work/calibre/src/calibre/gui2/convert/structure_detection_ui.py:62 msgid "Insert &metadata as page at start of book" @@ -3957,20 +3981,22 @@ msgstr "Inserir &metadados como uma página no início do livro" #: /home/kovid/work/calibre/src/calibre/gui2/convert/structure_detection_ui.py:63 msgid "&Preprocess input file to possibly improve structure detection" msgstr "" +"&Preprocessa o arquivo de entrada para possivelmente melhorar a detecção da " +"estrutura" #: /home/kovid/work/calibre/src/calibre/gui2/convert/structure_detection_ui.py:64 msgid "Remove F&ooter" -msgstr "" +msgstr "Remover R&odapé" #: /home/kovid/work/calibre/src/calibre/gui2/convert/structure_detection_ui.py:65 msgid "Remove H&eader" -msgstr "" +msgstr "Remover Cab&eçalho" #: /home/kovid/work/calibre/src/calibre/gui2/convert/toc.py:16 msgid "" "Table of\n" "Contents" -msgstr "" +msgstr "Sumário" #: /home/kovid/work/calibre/src/calibre/gui2/convert/toc.py:18 msgid "Control the creation/conversion of the Table of Contents." @@ -3978,23 +4004,23 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/convert/toc.py:29 msgid "Level &1 TOC (XPath expression):" -msgstr "" +msgstr "Sumário nível &1 (expressão XPath):" #: /home/kovid/work/calibre/src/calibre/gui2/convert/toc.py:30 msgid "Level &2 TOC (XPath expression):" -msgstr "" +msgstr "Sumário nível &2 (expressão XPath):" #: /home/kovid/work/calibre/src/calibre/gui2/convert/toc.py:31 msgid "Level &3 TOC (XPath expression):" -msgstr "" +msgstr "Sumário nível &3 (expressão XPath):" #: /home/kovid/work/calibre/src/calibre/gui2/convert/toc_ui.py:63 msgid "Do not add &detected chapters to the Table of Contents" -msgstr "" +msgstr "Não adicione os capítulos &detectados no Sumário" #: /home/kovid/work/calibre/src/calibre/gui2/convert/toc_ui.py:64 msgid "Number of &links to add to Table of Contents" -msgstr "" +msgstr "Número de &Links para adicionar no Sumário" #: /home/kovid/work/calibre/src/calibre/gui2/convert/toc_ui.py:65 msgid "Chapter &threshold" @@ -4002,11 +4028,11 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/convert/toc_ui.py:66 msgid "&Force use of auto-generated Table of Contents" -msgstr "" +msgstr "&Forçar uso do Sumário auto-gerado" #: /home/kovid/work/calibre/src/calibre/gui2/convert/toc_ui.py:67 msgid "TOC &Filter:" -msgstr "" +msgstr "&Filtro de Sumário:" #: /home/kovid/work/calibre/src/calibre/gui2/convert/txt_input.py:12 msgid "TXT Input" @@ -4025,7 +4051,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/convert/txt_input_ui.py:50 msgid "Do not insert Table of Contents into output text when using markdown" -msgstr "" +msgstr "Não insira o Sumário no texto de saída quando usando markdown" #: /home/kovid/work/calibre/src/calibre/gui2/convert/txt_input_ui.py:51 msgid "Preserve &spaces" @@ -4060,7 +4086,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/convert/xexp_edit_ui.py:51 msgid "Use a wizard to help construct the XPath expression" -msgstr "" +msgstr "Use um assistente para ajudar a construir a expressão XPath" #: /home/kovid/work/calibre/src/calibre/gui2/convert/xpath_wizard_ui.py:68 msgid "Match HTML &tags with tag name:" @@ -4918,11 +4944,11 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:551 msgid "Preferred &output format:" -msgstr "" +msgstr "F&ormato de Saída Preferido:" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:552 msgid "Preferred &input format order:" -msgstr "" +msgstr "ordem preferida dos formatos de &entrada:" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:555 msgid "Use &Roman numerals for series number" @@ -5052,7 +5078,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:590 msgid "Debug &device detection" -msgstr "" +msgstr "Depurar a detecção de &dispositivo" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:591 msgid "" @@ -5264,7 +5290,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column.py:96 msgid "No lookup name was provided" -msgstr "" +msgstr "Inglês" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column.py:98 msgid "" @@ -5353,7 +5379,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/device_debug.py:24 msgid "Debug device detection" -msgstr "" +msgstr "Depurar a detecção de dispositivo" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/save_template.py:44 msgid "Invalid template" @@ -5619,7 +5645,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:168 msgid "You do not have permission to read the following files:" -msgstr "" +msgstr "Você não tem permissão para ler os seguintes arquivos:" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:195 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:196 @@ -6006,6 +6032,8 @@ msgid "" "<p>Negate this match. That is, only return results that <b>do not</b> match " "this query." msgstr "" +"<p>Negar esta correspondência. Ou seja, só retorna resultados que <b>não</b> " +"correspondem a está consulta." #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_item_ui.py:39 msgid "Negate" @@ -6684,7 +6712,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:156 msgid "Restore default layout" -msgstr "" +msgstr "Restaurar o layout padrão" #: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:475 msgid "Not allowed" @@ -6784,7 +6812,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/main.py:36 msgid "Do not check for updates" -msgstr "" +msgstr "Não verificar updates" #: /home/kovid/work/calibre/src/calibre/gui2/main.py:67 msgid "Choose a location for your calibre e-book library" @@ -7070,6 +7098,8 @@ msgid "" "Redirect console output to a dialog window (both stdout and stderr). Useful " "on windows where GUI apps do not have a output streams." msgstr "" +"Redirecionar a saída do console para uma janela (ambos stdout e stderr). " +"Útil em windows onde os aplicativos GUI não tem um console de saída." #: /home/kovid/work/calibre/src/calibre/gui2/main_window.py:61 msgid "&Preferences" @@ -8031,6 +8061,8 @@ msgid "" "The default language to use for hyphenation rules. If the book does not " "specify a language, this will be used." msgstr "" +"A linguagem padrão para usar nas regras do emprego do hífen. Se o livro não " +"especificar uma linguagem, esta será usada." #: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:172 msgid "Default &language for hyphenation:" @@ -8075,6 +8107,8 @@ msgid "" "Set the user CSS stylesheet. This can be used to customize the look of all " "books." msgstr "" +"Configura a folha de estilo CSS. Isto pode ser usado para personalizar a " +"aparência de todos os livros." #: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:46 msgid "Maximum width of the viewer window, in pixels." @@ -8090,7 +8124,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:51 msgid "Default language for hyphenation rules" -msgstr "" +msgstr "Linguagem padrão para regras de hifenização" #: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:53 msgid "Font options" @@ -8122,7 +8156,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:452 msgid "&Lookup in dictionary" -msgstr "" +msgstr "&Procurar no dicionário" #: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:455 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:138 @@ -8870,7 +8904,7 @@ msgid "" msgstr "" "Especifica o perfil de saída. Em alguns casos, um perfil de saída é " "necessário para otimizar o catálogo para o dispositivo. Por exemplo, " -"'kindle' ou 'kindle_dx'\n" +"'kindle' ou 'kindle_dx' cria um Sumário estruturado com Seções e Artigos.\n" "Padrão: '%default'\n" "Aplica-se para: arquivos de saída ePub, MOBI" @@ -8928,6 +8962,8 @@ msgid "" "The maximum width of a single line in the output. Defaults to detecting " "screen size." msgstr "" +"A largura máxima de uma única linha na saída. O padrão é detectar o tamanho " +"da tela." #: /home/kovid/work/calibre/src/calibre/library/cli.py:142 msgid "The string used to separate fields. Default is a space." @@ -9229,7 +9265,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/library/cli.py:764 msgid "Do not ask for confirmation" -msgstr "" +msgstr "Não perguntar por confirmação" #: /home/kovid/work/calibre/src/calibre/library/cli.py:774 msgid "Error: You must specify a column label" diff --git a/src/calibre/translations/sl.po b/src/calibre/translations/sl.po index e2df22a3ce..0fedb11438 100644 --- a/src/calibre/translations/sl.po +++ b/src/calibre/translations/sl.po @@ -7,13 +7,13 @@ msgstr "" "Project-Id-Version: calibre 0.4.17\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2010-06-06 21:03+0000\n" -"PO-Revision-Date: 2010-06-09 07:34+0000\n" +"PO-Revision-Date: 2010-06-10 06:33+0000\n" "Last-Translator: Janko Slatenšek <Unknown>\n" "Language-Team: sl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2010-06-10 03:34+0000\n" +"X-Launchpad-Export-Date: 2010-06-11 03:41+0000\n" "X-Generator: Launchpad (build Unknown)\n" "Generated-By: pygettext.py 1.5\n" @@ -165,7 +165,7 @@ msgstr "Pisalnik meta podatkov" #: /home/kovid/work/calibre/src/calibre/customize/__init__.py:263 msgid "Catalog generator" -msgstr "" +msgstr "Generator katalogov" #: /home/kovid/work/calibre/src/calibre/customize/builtins.py:15 msgid "" From 3d2811a24be2f245ff637dab6e6dfe640bb01ce2 Mon Sep 17 00:00:00 2001 From: Kovid Goyal <kovid@kovidgoyal.net> Date: Thu, 10 Jun 2010 22:19:02 -0600 Subject: [PATCH 080/112] Fix Email to sub menu in send to device menu --- src/calibre/gui2/device.py | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/calibre/gui2/device.py b/src/calibre/gui2/device.py index 6926c751b2..d806890807 100644 --- a/src/calibre/gui2/device.py +++ b/src/calibre/gui2/device.py @@ -391,16 +391,14 @@ class DeviceMenu(QMenu): # {{{ default_account = (dest, False, False, I('mail.svg'), _('Email to')+' '+account) action1 = DeviceAction(dest, False, False, I('mail.svg'), - _('Email to')+' '+account, self) + _('Email to')+' '+account) action2 = DeviceAction(dest, True, False, I('mail.svg'), - _('Email to')+' '+account, self) + _('Email to')+' '+account+ _(' and delete from library')) map(self.email_to_menu.addAction, (action1, action2)) map(self._memory.append, (action1, action2)) self.email_to_menu.addSeparator() - self.connect(action1, SIGNAL('a_s(QAction)'), - self.action_triggered) - self.connect(action2, SIGNAL('a_s(QAction)'), - self.action_triggered) + action1.a_s.connect(self.action_triggered) + action2.a_s.connect(self.action_triggered) basic_actions = [ ('main:', False, False, I('reader.svg'), From efe64efe2559897aea789fa0b1974472b0a54b3d Mon Sep 17 00:00:00 2001 From: Kovid Goyal <kovid@kovidgoyal.net> Date: Thu, 10 Jun 2010 22:44:08 -0600 Subject: [PATCH 081/112] Fix #5779 (Check database integrity is broken in 0.7 w/custom fields) --- src/calibre/gui2/tag_view.py | 3 ++- src/calibre/library/database2.py | 2 ++ src/calibre/library/field_metadata.py | 11 +++++++++++ 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/calibre/gui2/tag_view.py b/src/calibre/gui2/tag_view.py index fe7f4348f8..bc698a3502 100644 --- a/src/calibre/gui2/tag_view.py +++ b/src/calibre/gui2/tag_view.py @@ -609,7 +609,8 @@ class TagBrowserMixin(object): # {{{ self.tags_view.saved_search_edit.connect(self.do_saved_search_edit) self.tags_view.tag_item_renamed.connect(self.do_tag_item_renamed) self.tags_view.search_item_renamed.connect(self.saved_search.clear_to_help) - self.edit_categories.clicked.connect(self.do_user_categories_edit) + self.edit_categories.clicked.connect(lambda x: + self.do_user_categories_edit()) def do_user_categories_edit(self, on_category=None): d = TagCategories(self, self.library_view.model().db, on_category) diff --git a/src/calibre/library/database2.py b/src/calibre/library/database2.py index 0168737fca..7b98dc4537 100644 --- a/src/calibre/library/database2.py +++ b/src/calibre/library/database2.py @@ -1842,6 +1842,8 @@ books_series_link feeds os.remove(self.dbpath) shutil.copyfile(dest, self.dbpath) self.connect() + self.field_metadata.remove_dynamic_categories() + self.field_metadata.remove_custom_fields() self.initialize_dynamic() self.refresh() if os.path.exists(dest): diff --git a/src/calibre/library/field_metadata.py b/src/calibre/library/field_metadata.py index 243e3646da..82e4edfdf2 100644 --- a/src/calibre/library/field_metadata.py +++ b/src/calibre/library/field_metadata.py @@ -379,6 +379,17 @@ class FieldMetadata(dict): self._add_search_terms_to_map(key, [key]) self.custom_label_to_key_map[label] = key + def remove_custom_fields(self): + for key in self.get_custom_fields(): + del self._tb_cats[key] + + def remove_dynamic_categories(self): + for key in list(self._tb_cats.keys()): + val = self._tb_cats[key] + if val['is_category'] and val['kind'] in ('user', 'search'): + del self._tb_cats[key] + + def add_user_category(self, label, name): if label in self._tb_cats: raise ValueError('Duplicate user field [%s]'%(label)) From 0ed7568ae17f99bace5eda387ebd10f5b4656905 Mon Sep 17 00:00:00 2001 From: Kovid Goyal <kovid@kovidgoyal.net> Date: Thu, 10 Jun 2010 23:09:10 -0600 Subject: [PATCH 082/112] Updated Economist recipe for new website layout --- resources/recipes/economist.recipe | 7 ++++--- resources/recipes/economist_free.recipe | 16 +++++++++------- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/resources/recipes/economist.recipe b/resources/recipes/economist.recipe index 4ae0bb8b05..a6d0e08eea 100644 --- a/resources/recipes/economist.recipe +++ b/resources/recipes/economist.recipe @@ -24,9 +24,10 @@ class Economist(BasicNewsRecipe): oldest_article = 7.0 cover_url = 'http://www.economist.com/images/covers/currentcoverus_large.jpg' remove_tags = [dict(name=['script', 'noscript', 'title', 'iframe', 'cf_floatingcontent']), - dict(attrs={'class':['dblClkTrk']})] - remove_tags_before = dict(name=lambda tag: tag.name=='title' and tag.parent.name=='body') + dict(attrs={'class':['dblClkTrk', 'ec-article-info']})] + keep_only_tags = [dict(id='ec-article-body')] needs_subscription = True + no_stylesheets = True preprocess_regexps = [(re.compile('</html>.*', re.DOTALL), lambda x:'</html>')] @@ -87,7 +88,7 @@ class Economist(BasicNewsRecipe): continue a = tag.find('a', href=True) if a is not None: - url=a['href'].replace('displaystory', 'PrinterFriendly').strip() + url=a['href'].split('?')[0]+'/print' if url.startswith('Printer'): url = '/'+url if url.startswith('/'): diff --git a/resources/recipes/economist_free.recipe b/resources/recipes/economist_free.recipe index cdcd457501..1a783521f6 100644 --- a/resources/recipes/economist_free.recipe +++ b/resources/recipes/economist_free.recipe @@ -17,8 +17,9 @@ class Economist(BasicNewsRecipe): oldest_article = 7.0 cover_url = 'http://www.economist.com/images/covers/currentcoverus_large.jpg' remove_tags = [dict(name=['script', 'noscript', 'title', 'iframe', 'cf_floatingcontent']), - dict(attrs={'class':['dblClkTrk']})] - remove_tags_before = dict(name=lambda tag: tag.name=='title' and tag.parent.name=='body') + dict(attrs={'class':['dblClkTrk', 'ec-article-info']})] + keep_only_tags = [dict(id='ec-article-body')] + no_stylesheets = True preprocess_regexps = [(re.compile('</html>.*', re.DOTALL), lambda x:'</html>')] @@ -88,19 +89,20 @@ class Economist(BasicNewsRecipe): br = browser() ret = br.open(url) raw = ret.read() - url = br.geturl().replace('displaystory', 'PrinterFriendly').strip() + url = br.geturl().split('?')[0]+'/print' root = html.fromstring(raw) - matches = root.xpath('//*[@class = "article-section"]') + matches = root.xpath('//*[@class = "ec-article-info"]') feedtitle = 'Miscellaneous' if matches: - feedtitle = string.capwords(html.tostring(matches[0], method='text', - encoding=unicode)) + feedtitle = string.capwords(html.tostring(matches[-1], method='text', + encoding=unicode).split('|')[-1].strip()) return (i, feedtitle, url, title, description, author, published) def eco_article_found(self, req, result): from calibre.web.feeds import Article i, feedtitle, link, title, description, author, published = result - self.log('Found print version for article:', title) + self.log('Found print version for article:', title, 'in', feedtitle, + 'at', link) a = Article(i, title, link, author, description, published, '') From 1dafae3c4a5a8cb6645ab97b6a5a9b3d0fa4ac89 Mon Sep 17 00:00:00 2001 From: Kovid Goyal <kovid@kovidgoyal.net> Date: Thu, 10 Jun 2010 23:16:21 -0600 Subject: [PATCH 083/112] News download: Restore article downloaded by calibre footer --- src/calibre/web/feeds/templates.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/calibre/web/feeds/templates.py b/src/calibre/web/feeds/templates.py index e98edd0e95..b64795b816 100644 --- a/src/calibre/web/feeds/templates.py +++ b/src/calibre/web/feeds/templates.py @@ -65,6 +65,7 @@ class NavBarTemplate(Template): text = 'This article was downloaded by ' p = PT(text, STRONG(__appname__), A(url, href=url), style='text-align:left') p[0].tail = ' from ' + navbar.append(p) navbar.append(BR()) navbar.append(BR()) else: @@ -111,6 +112,7 @@ class TouchscreenNavBarTemplate(Template): text = 'This article was downloaded by ' p = PT(text, STRONG(__appname__), A(url, href=url), style='text-align:left') p[0].tail = ' from ' + navbar.append(p) navbar.append(BR()) navbar.append(BR()) else: From c75c533175fa8b0cef3f3144e1c4f949daade48f Mon Sep 17 00:00:00 2001 From: Charles Haley <> Date: Fri, 11 Jun 2010 09:56:28 +0100 Subject: [PATCH 084/112] Fix bug #5788: float truncated to int and changing series changes publisher --- src/calibre/gui2/custom_column_widgets.py | 5 +++++ src/calibre/library/database2.py | 6 ------ 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/src/calibre/gui2/custom_column_widgets.py b/src/calibre/gui2/custom_column_widgets.py index de9d839684..90ac7dbbaf 100644 --- a/src/calibre/gui2/custom_column_widgets.py +++ b/src/calibre/gui2/custom_column_widgets.py @@ -101,6 +101,11 @@ class Float(Int): w.setSpecialValueText(_('Undefined')) w.setSingleStep(1) + def setter(self, val): + if val is None: + val = self.widgets[1].minimum() + self.widgets[1].setValue(val) + class Rating(Int): def setup_ui(self, parent): diff --git a/src/calibre/library/database2.py b/src/calibre/library/database2.py index 7b98dc4537..31e9b43f86 100644 --- a/src/calibre/library/database2.py +++ b/src/calibre/library/database2.py @@ -1304,12 +1304,6 @@ class LibraryDatabase2(LibraryDatabase, SchemaUpgrade, CustomColumns): aid = self.conn.execute('INSERT INTO series(name) VALUES (?)', (series,)).lastrowid self.conn.execute('INSERT INTO books_series_link(book, series) VALUES (?,?)', (id, aid)) self.conn.commit() - try: - row = self.row(id) - if row is not None: - self.data.set(row, 9, series) - except ValueError: - pass self.data.set(id, self.FIELD_MAP['series'], series, row_is_id=True) if notify: self.notify('metadata', [id]) From 5cf08b6b526d5c2d0d483d5b61ea96ec4b75dc9b Mon Sep 17 00:00:00 2001 From: GRiker <griker@hotmail.com> Date: Fri, 11 Jun 2010 04:26:57 -0600 Subject: [PATCH 085/112] GwR revisions wip --- src/calibre/devices/apple/driver.py | 104 +++++++++++++++++++--------- 1 file changed, 73 insertions(+), 31 deletions(-) diff --git a/src/calibre/devices/apple/driver.py b/src/calibre/devices/apple/driver.py index 1bff7b9779..c97549043d 100644 --- a/src/calibre/devices/apple/driver.py +++ b/src/calibre/devices/apple/driver.py @@ -35,10 +35,39 @@ if iswindows: class ITUNES(DevicePlugin): ''' - try: - pythoncom.CoInitialize() - finally: - pythoncom.CoUninitialize() + Calling sequences: + Initialization: + can_handle() or can_handle_windows() + reset() + open() + card_prefix() + can_handle() + set_progress_reporter() + get_device_information() + card_prefix() + free_space() + (Job 1 Get device information finishes) + can_handle() + set_progress_reporter() + books() (once for each storage point) + settings() + settings() + can_handle() (~1x per second OSX while idle) + Delete: + delete_books() + remove_books_from_metadata() + sync_booklists() + card_prefix() + free_space() + Upload: + settings() + set_progress_reporter() + upload_books() + add_books_to_metadata() + set_progress_reporter() + sync_booklists() + card_prefix() + free_space() ''' name = 'Apple device interface' @@ -1778,17 +1807,27 @@ class ITUNES(DevicePlugin): def _get_sources(self): ''' Return a dict of sources + Check for >1 iPod device connected to iTunes ''' if isosx: names = [s.name() for s in self.iTunes.sources()] kinds = [str(s.kind()).rpartition('.')[2] for s in self.iTunes.sources()] - return dict(zip(kinds,names)) elif iswindows: # Assumes a pythoncom wrapper it_sources = ['Unknown','Library','iPod','AudioCD','MP3CD','Device','RadioTuner','SharedLibrary'] names = [s.name for s in self.iTunes.sources] kinds = [it_sources[s.kind] for s in self.iTunes.sources] - return dict(zip(kinds,names)) + + # If more than one connected iDevice, remove all from list to prevent driver initialization + if kinds.count('iPod') > 1: + if DEBUG: + self.log.error(" %d connected iPod devices detected, calibre supports a single connected iDevice" % kinds.count('iPod')) + while kinds.count('iPod'): + index = kinds.index('iPod') + kinds.pop(index) + names.pop(index) + + return dict(zip(kinds,names)) def _is_alpha(self,char): ''' @@ -1931,34 +1970,37 @@ class ITUNES(DevicePlugin): self.log.info(" ITUNES._remove_from_iTunes():") if isosx: - storage_path = os.path.split(cached_book['lib_book'].location().path) - if cached_book['lib_book'].location().path.startswith(self.iTunes_media): - title_storage_path = storage_path[0] - if DEBUG: - self.log.info(" removing title_storage_path: %s" % title_storage_path) - try: - shutil.rmtree(title_storage_path) - except: - self.log.info(" '%s' not empty" % title_storage_path) - - # Clean up title/author directories - author_storage_path = os.path.split(title_storage_path)[0] - self.log.info(" author_storage_path: %s" % author_storage_path) - author_files = os.listdir(author_storage_path) - if '.DS_Store' in author_files: - author_files.pop(author_files.index('.DS_Store')) - if not author_files: - shutil.rmtree(author_storage_path) + try: + storage_path = os.path.split(cached_book['lib_book'].location().path) + if cached_book['lib_book'].location().path.startswith(self.iTunes_media): + title_storage_path = storage_path[0] if DEBUG: - self.log.info(" removing empty author_storage_path") + self.log.info(" removing title_storage_path: %s" % title_storage_path) + try: + shutil.rmtree(title_storage_path) + except: + self.log.info(" '%s' not empty" % title_storage_path) + + # Clean up title/author directories + author_storage_path = os.path.split(title_storage_path)[0] + self.log.info(" author_storage_path: %s" % author_storage_path) + author_files = os.listdir(author_storage_path) + if '.DS_Store' in author_files: + author_files.pop(author_files.index('.DS_Store')) + if not author_files: + shutil.rmtree(author_storage_path) + if DEBUG: + self.log.info(" removing empty author_storage_path") + else: + if DEBUG: + self.log.info(" author_storage_path not empty (%d objects):" % len(author_files)) + self.log.info(" %s" % '\n'.join(author_files)) else: - if DEBUG: - self.log.info(" author_storage_path not empty (%d objects):" % len(author_files)) - self.log.info(" %s" % '\n'.join(author_files)) - else: - self.log.info(" '%s' stored external to iTunes, no files deleted" % cached_book['title']) + self.log.info(" '%s' stored external to iTunes, no files deleted" % cached_book['title']) - self.iTunes.delete(cached_book['lib_book']) + self.iTunes.delete(cached_book['lib_book']) + except: + self.log.warning(" error removing %s from iTunes" % cached_book['title']) elif iswindows: ''' From 781858ca150993a0606135b91f00b69dab6b23e6 Mon Sep 17 00:00:00 2001 From: GRiker <griker@hotmail.com> Date: Fri, 11 Jun 2010 06:24:59 -0600 Subject: [PATCH 086/112] GwR fix to output empty catalogs when no search results --- src/calibre/library/catalog.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/calibre/library/catalog.py b/src/calibre/library/catalog.py index 53a93deac4..21aa863031 100644 --- a/src/calibre/library/catalog.py +++ b/src/calibre/library/catalog.py @@ -83,7 +83,7 @@ class CSV_XML(CatalogPlugin): if not len(data): log.error("\nNo matching database entries for search criteria '%s'" % opts.search_text) - raise SystemExit(1) + #raise SystemExit(1) # Get the requested output fields as a list fields = self.get_output_fields(opts) From 531b17171f05a535e1d83755a5164535a5c66f51 Mon Sep 17 00:00:00 2001 From: GRiker <griker@hotmail.com> Date: Fri, 11 Jun 2010 07:10:30 -0600 Subject: [PATCH 087/112] GwR revisions iDevice driver --- src/calibre/devices/apple/driver.py | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/src/calibre/devices/apple/driver.py b/src/calibre/devices/apple/driver.py index c97549043d..721c2dda05 100644 --- a/src/calibre/devices/apple/driver.py +++ b/src/calibre/devices/apple/driver.py @@ -1712,9 +1712,9 @@ class ITUNES(DevicePlugin): if str(book.description()).startswith(self.description_prefix): if book.location() == appscript.k.missing_value: if DEBUG: - self.log.info(" deleting calibre orphan '%s' from Library|Books" % book.name()) - book.delete() - continue + self.log.info(" found calibre orphan '%s' in Library|Books" % book.name()) + #book.delete() + #continue path = self.path_template % (book.name(), book.artist()) library_books[path] = book @@ -1768,9 +1768,9 @@ class ITUNES(DevicePlugin): if book.Description.startswith(self.description_prefix): if not book.Location: if DEBUG: - self.log.info(" deleting calibre orphan '%s' from Library|Books" % book.Name) - book.Delete() - continue + self.log.info(" found calibre orphan '%s' in Library|Books" % book.Name) + #book.Delete() + #continue path = self.path_template % (book.Name, book.Artist) library_books[path] = book @@ -1998,9 +1998,11 @@ class ITUNES(DevicePlugin): else: self.log.info(" '%s' stored external to iTunes, no files deleted" % cached_book['title']) - self.iTunes.delete(cached_book['lib_book']) except: - self.log.warning(" error removing %s from iTunes" % cached_book['title']) + # We get here if there was an error with .location().path + self.log.info(" removing orphan '%s' from iTunes" % cached_book['title']) + + self.iTunes.delete(cached_book['lib_book']) elif iswindows: ''' From b3b67411563acc342533c66df792966e8ec0d346 Mon Sep 17 00:00:00 2001 From: Charles Haley <> Date: Fri, 11 Jun 2010 14:56:14 +0100 Subject: [PATCH 088/112] Fix regression in book equality test in usbms --- src/calibre/devices/usbms/books.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/calibre/devices/usbms/books.py b/src/calibre/devices/usbms/books.py index d065d0f47a..be154f35c1 100644 --- a/src/calibre/devices/usbms/books.py +++ b/src/calibre/devices/usbms/books.py @@ -47,7 +47,7 @@ class Book(MetaInformation): def __eq__(self, other): # use lpath because the prefix can change, changing path - return self.path == getattr(other, 'lpath', None) + return self.lpath == getattr(other, 'lpath', None) @dynamic_property def db_id(self): From d1a47c22811e960a6bed7544593b0fcff3ee3e61 Mon Sep 17 00:00:00 2001 From: Kovid Goyal <kovid@kovidgoyal.net> Date: Fri, 11 Jun 2010 10:06:52 -0600 Subject: [PATCH 089/112] ... --- src/calibre/gui2/viewer/main.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/calibre/gui2/viewer/main.py b/src/calibre/gui2/viewer/main.py index 0964ed47c3..fca3586f9d 100644 --- a/src/calibre/gui2/viewer/main.py +++ b/src/calibre/gui2/viewer/main.py @@ -229,9 +229,9 @@ class EbookViewer(MainWindow, Ui_EbookViewer): self.connect(self.action_previous_page, SIGNAL('triggered(bool)'), lambda x:self.view.previous_page()) self.connect(self.action_find_next, SIGNAL('triggered(bool)'), - lambda x:self.find(self.search.smart_text, True, repeat=True)) + lambda x:self.find(self.search.smart_text, repeat=True)) self.connect(self.action_find_previous, SIGNAL('triggered(bool)'), - lambda x:self.find(self.search.smart_text, True, + lambda x:self.find(self.search.smart_text, repeat=True, backwards=True)) self.connect(self.action_full_screen, SIGNAL('triggered(bool)'), From 2773b4a7e6325e02bf269d38e50d605d3fd4f648 Mon Sep 17 00:00:00 2001 From: GRiker <griker@hotmail.com> Date: Fri, 11 Jun 2010 10:28:07 -0600 Subject: [PATCH 090/112] GwR revisions wip 0.5.0 --- src/calibre/devices/apple/driver.py | 63 ++++++++++++++++++++++++----- 1 file changed, 54 insertions(+), 9 deletions(-) diff --git a/src/calibre/devices/apple/driver.py b/src/calibre/devices/apple/driver.py index 721c2dda05..bc9234ffb0 100644 --- a/src/calibre/devices/apple/driver.py +++ b/src/calibre/devices/apple/driver.py @@ -147,6 +147,7 @@ class ITUNES(DevicePlugin): ejected = False iTunes= None iTunes_media = None + library_orphans = None log = Log() manual_sync_mode = False path_template = 'iTunes/%s - %s.epub' @@ -281,6 +282,7 @@ class ITUNES(DevicePlugin): if self.report_progress is not None: self.report_progress(i+1/book_count, _('%d of %d') % (i+1, book_count)) + self._purge_orphans(cached_books) elif iswindows: try: @@ -1676,6 +1678,7 @@ class ITUNES(DevicePlugin): self.log.info("\n ITUNES._get_library_books()") library_books = {} + library_orphans = {} lib = None if isosx: @@ -1708,15 +1711,14 @@ class ITUNES(DevicePlugin): if DEBUG: self.log.info(" ignoring '%s' of type '%s'" % (book.name(), book.kind())) else: - # Remove calibre orphans + # Collect calibre orphans - remnants of recipe uploads + path = self.path_template % (book.name(), book.artist()) if str(book.description()).startswith(self.description_prefix): if book.location() == appscript.k.missing_value: + library_orphans[path] = book if DEBUG: self.log.info(" found calibre orphan '%s' in Library|Books" % book.name()) - #book.delete() - #continue - path = self.path_template % (book.name(), book.artist()) library_books[path] = book if DEBUG: self.log.info(" adding %-30.30s [%s]" % (book.name(), book.kind())) @@ -1764,15 +1766,15 @@ class ITUNES(DevicePlugin): if DEBUG: self.log.info(" ignoring %-30.30s of type '%s'" % (book.Name, book.KindAsString)) else: - # Remove calibre orphans + path = self.path_template % (book.Name, book.Artist) + + # Collect calibre orphans if book.Description.startswith(self.description_prefix): if not book.Location: + library_orphans[path] = book if DEBUG: self.log.info(" found calibre orphan '%s' in Library|Books" % book.Name) - #book.Delete() - #continue - path = self.path_template % (book.Name, book.Artist) library_books[path] = book if DEBUG: self.log.info(" adding %-30.30s [%s]" % (book.Name, book.KindAsString)) @@ -1781,7 +1783,7 @@ class ITUNES(DevicePlugin): self.log.info(" no books in library") finally: pythoncom.CoUninitialize() - + self.library_orphans = library_orphans return library_books def _get_purchased_book_ids(self): @@ -1904,6 +1906,49 @@ class ITUNES(DevicePlugin): self.version[0],self.version[1],self.version[2])) self.log.info(" iTunes_media: %s" % self.iTunes_media) + def _purge_orphans(self,cached_books): + ''' + Scan self.library_orphans for any paths not on device + Remove any true orphans from iTunes + This occurs when recipes are uploaded in a previous session + and the book has since been deleted on the device + ''' + if DEBUG: + self.log.info(" ITUNES._purge_orphans") + orphan_paths = {} + if DEBUG: + self.log.info(" cached_books:\n %s" % "\n ".join(cached_books.keys())) + + if isosx: + for orphan in self.library_orphans: + path = self.path_template % (self.library_orphans[orphan].name(), + self.library_orphans[orphan].artist()) + orphan_paths[path] = self.library_orphans[orphan] + if DEBUG: + self.log.info(" orphan_paths:\n %s" % "\n ".join(orphan_paths.keys())) + + # Scan orphan_paths for paths not found in cached_books + for orphan in orphan_paths.keys(): + if orphan not in cached_books: + if DEBUG: + self.log.info(" '%s' not found in cached_books, removing from iTunes" % orphan) + self.iTunes.delete(orphan_paths[orphan]) + + elif iswindows: + for orphan in self.library_orphans: + path = self.path_template % (self.library_orphans[orphan].Name, + self.library_orphans[orphan].Artist) + orphan_paths[path] = self.library_orphans[orphan] + if DEBUG: + self.log.info(" orphan_paths:\n %s" % "\n ".join(orphan_paths.keys())) + + # Scan orphan_paths for paths not found in cached_books + for orphan in orphan_paths.keys(): + if orphan not in cached_books: + if DEBUG: + self.log.info(" '%s' not found in cached_books, removing from iTunes" % orphan) + orphan_paths[orphan].Delete() + def _remove_existing_copies(self,path,file,metadata): ''' ''' From ab9acc2b95e2feb240346d27fd07d2380dd0c06b Mon Sep 17 00:00:00 2001 From: Kovid Goyal <kovid@kovidgoyal.net> Date: Fri, 11 Jun 2010 10:39:20 -0600 Subject: [PATCH 091/112] Fix another regression in the search box --- src/calibre/gui2/search_box.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/calibre/gui2/search_box.py b/src/calibre/gui2/search_box.py index 17a815c4ce..e4de18a132 100644 --- a/src/calibre/gui2/search_box.py +++ b/src/calibre/gui2/search_box.py @@ -100,7 +100,6 @@ class SearchBox2(QComboBox): self.help_state = False def clear_to_help(self): - self.search.emit('') self._in_a_search = False self.setEditText(self.help_text) if self.timer is not None: # Turn off any timers that got started in setEditText @@ -112,6 +111,7 @@ class SearchBox2(QComboBox): 'QLineEdit { color: gray; background-color: %s; }' % self.normal_background) self.emit(SIGNAL('cleared()')) + self.search.emit('') def text(self): return self.currentText() From 92801d1b6489b41979c7b6a21f83eed9151408e6 Mon Sep 17 00:00:00 2001 From: Charles Haley <> Date: Fri, 11 Jun 2010 17:51:01 +0100 Subject: [PATCH 092/112] Fix search box regression --- src/calibre/gui2/search_box.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/calibre/gui2/search_box.py b/src/calibre/gui2/search_box.py index 17a815c4ce..f8d046b0b4 100644 --- a/src/calibre/gui2/search_box.py +++ b/src/calibre/gui2/search_box.py @@ -100,6 +100,9 @@ class SearchBox2(QComboBox): self.help_state = False def clear_to_help(self): + if self.help_state: + return + self.help_state = True self.search.emit('') self._in_a_search = False self.setEditText(self.help_text) @@ -107,7 +110,6 @@ class SearchBox2(QComboBox): self.killTimer(self.timer) self.timer = None self.line_edit.home(False) - self.help_state = True self.line_edit.setStyleSheet( 'QLineEdit { color: gray; background-color: %s; }' % self.normal_background) From 6b12237e7fb58cbae05d3d2bb1698d9069cb02d0 Mon Sep 17 00:00:00 2001 From: Kovid Goyal <kovid@kovidgoyal.net> Date: Fri, 11 Jun 2010 10:53:29 -0600 Subject: [PATCH 093/112] Fix widescreen detection --- src/calibre/gui2/__init__.py | 14 ++++++++++---- src/calibre/gui2/init.py | 5 +++-- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/src/calibre/gui2/__init__.py b/src/calibre/gui2/__init__.py index cbe9449f1f..3063ef252d 100644 --- a/src/calibre/gui2/__init__.py +++ b/src/calibre/gui2/__init__.py @@ -127,10 +127,16 @@ def available_width(): desktop = QCoreApplication.instance().desktop() return desktop.availableGeometry().width() -try: - is_widescreen = float(available_width())/available_height() > 1.4 -except: - is_widescreen = True +_is_widescreen = None + +def is_widescreen(): + global _is_widescreen + if _is_widescreen is None: + try: + _is_widescreen = float(available_width())/available_height() > 1.4 + except: + _is_widescreen = False + return _is_widescreen def extension(path): return os.path.splitext(path)[1][1:].lower() diff --git a/src/calibre/gui2/init.py b/src/calibre/gui2/init.py index 93f3a7c623..5a039e7bc1 100644 --- a/src/calibre/gui2/init.py +++ b/src/calibre/gui2/init.py @@ -290,14 +290,15 @@ class LibraryWidget(Splitter): # {{{ def __init__(self, parent): orientation = Qt.Vertical if config['gui_layout'] == 'narrow' and \ - not is_widescreen else Qt.Horizontal + not is_widescreen() else Qt.Horizontal #orientation = Qt.Vertical idx = 0 if orientation == Qt.Vertical else 1 + size = 300 if orientation == Qt.Vertical else 550 Splitter.__init__(self, 'cover_browser_splitter', _('Cover Browser'), I('cover_flow.svg'), orientation=orientation, parent=parent, connect_button=not config['separate_cover_flow'], - side_index=idx, initial_side_size=400, initial_show=False) + side_index=idx, initial_side_size=size, initial_show=False) parent.library_view = BooksView(parent) parent.library_view.setObjectName('library_view') self.addWidget(parent.library_view) From 01c13519db2e8b032d705d7f0ac15fd84bc82fcf Mon Sep 17 00:00:00 2001 From: Charles Haley <> Date: Fri, 11 Jun 2010 18:10:26 +0100 Subject: [PATCH 094/112] Finish fixing regressing in search box --- src/calibre/gui2/search_box.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/calibre/gui2/search_box.py b/src/calibre/gui2/search_box.py index f8d046b0b4..d35f5e0725 100644 --- a/src/calibre/gui2/search_box.py +++ b/src/calibre/gui2/search_box.py @@ -73,7 +73,7 @@ class SearchBox2(QComboBox): self.connect(self.line_edit, SIGNAL('mouse_released(PyQt_PyObject)'), self.mouse_released, Qt.DirectConnection) self.setEditable(True) - self.help_state = True + self.help_state = False self.as_you_type = True self.prev_search = '' self.timer = None From 4e136e7d4b31d76de5669b03ac8cb99c635196e2 Mon Sep 17 00:00:00 2001 From: Kovid Goyal <kovid@kovidgoyal.net> Date: Fri, 11 Jun 2010 11:38:09 -0600 Subject: [PATCH 095/112] Fix #5787 (Calibre doesn't start if "volume" absent) --- src/calibre/gui2/main.py | 46 +++++++++++++++++++++++----------------- 1 file changed, 26 insertions(+), 20 deletions(-) diff --git a/src/calibre/gui2/main.py b/src/calibre/gui2/main.py index ba40c0c92b..bd24af1619 100644 --- a/src/calibre/gui2/main.py +++ b/src/calibre/gui2/main.py @@ -53,7 +53,24 @@ def init_qt(args): app.setWindowIcon(QIcon(I('library.png'))) return app, opts, args, actions -def get_library_path(): + +def get_default_library_path(): + fname = _('Calibre Library') + if isinstance(fname, unicode): + try: + fname = fname.encode(filesystem_encoding) + except: + fname = 'Calibre Library' + x = os.path.expanduser('~'+os.sep+fname) + if not os.path.exists(x): + try: + os.makedirs(x) + except: + x = os.path.expanduser('~') + return x + + +def get_library_path(parent=None): library_path = prefs['library_path'] if library_path is None: # Need to migrate to new database layout base = os.path.expanduser('~') @@ -73,10 +90,12 @@ def get_library_path(): try: os.makedirs(library_path) except: - error_dialog(None, _('Failed to create library'), - _('Failed to create calibre library at: %r. Aborting.')%library_path, + error_dialog(parent, _('Failed to create library'), + _('Failed to create calibre library at: %r.')%library_path, det_msg=traceback.format_exc(), show=True) - library_path = None + library_path = choose_dir(parent, 'choose calibre library', + _('Choose a location for your new calibre e-book library'), + default_dir=get_default_library_path()) return library_path class DBRepair(QThread): @@ -159,22 +178,9 @@ class GuiRunner(QObject): 'a new empty library.'), det_msg=tb, show=True) if db is None: - fname = _('Calibre Library') - if isinstance(fname, unicode): - try: - fname = fname.encode(filesystem_encoding) - except: - fname = 'Calibre Library' - x = os.path.expanduser('~'+os.sep+fname) - if not os.path.exists(x): - try: - os.makedirs(x) - except: - x = os.path.expanduser('~') candidate = choose_dir(self.splash_screen, 'choose calibre library', _('Choose a location for your new calibre e-book library'), - default_dir=x) - + default_dir=get_default_library_path()) if not candidate: self.initialization_failed() @@ -236,8 +242,8 @@ class GuiRunner(QObject): if gprefs.get('show_splash_screen', True): self.show_splash_screen() - self.library_path = get_library_path() - if self.library_path is None: + self.library_path = get_library_path(parent=self.splash_screen) + if not self.library_path: self.initialization_failed() self.initialize_db() From 397ce8f023d115673d25047a5ccd90759eca3650 Mon Sep 17 00:00:00 2001 From: Kovid Goyal <kovid@kovidgoyal.net> Date: Fri, 11 Jun 2010 12:02:42 -0600 Subject: [PATCH 096/112] Fix #5792 (Problem with Economist (printedition) recipe) --- resources/recipes/economist.recipe | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/resources/recipes/economist.recipe b/resources/recipes/economist.recipe index a6d0e08eea..01ee8e0baf 100644 --- a/resources/recipes/economist.recipe +++ b/resources/recipes/economist.recipe @@ -88,7 +88,9 @@ class Economist(BasicNewsRecipe): continue a = tag.find('a', href=True) if a is not None: - url=a['href'].split('?')[0]+'/print' + url=a['href'] + id_ = re.search(r'story_id=(\d+)', url).group(1) + url = 'http://www.economist.com/node/%s/print'%id_ if url.startswith('Printer'): url = '/'+url if url.startswith('/'): From 1aa754e22f61f0f736f3b06346931e92a09a5bbc Mon Sep 17 00:00:00 2001 From: Kovid Goyal <kovid@kovidgoyal.net> Date: Fri, 11 Jun 2010 12:24:55 -0600 Subject: [PATCH 097/112] ... --- resources/recipes/lemonde_dip.recipe | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/resources/recipes/lemonde_dip.recipe b/resources/recipes/lemonde_dip.recipe index a5fa97c22e..9845c207fc 100644 --- a/resources/recipes/lemonde_dip.recipe +++ b/resources/recipes/lemonde_dip.recipe @@ -51,6 +51,7 @@ class LeMondeDiplomatiqueEn(BasicNewsRecipe): , dict(name='div',attrs={'class':'notes surlignable'}) ] remove_tags = [dict(name=['object','link','script','iframe','base'])] + remove_attributes = ['height','width'] def parse_index(self): articles = [] @@ -72,5 +73,5 @@ class LeMondeDiplomatiqueEn(BasicNewsRecipe): ,'url' :url ,'description':description }) - return [(soup.head.title.string, articles)] + return [(self.title, articles)] From 605dbf0fab6542d43f9f3bc5abcfdecd2c2a8be8 Mon Sep 17 00:00:00 2001 From: Kovid Goyal <kovid@kovidgoyal.net> Date: Fri, 11 Jun 2010 12:44:29 -0600 Subject: [PATCH 098/112] SONY driver: Fix generated timestamp in linux --- src/calibre/devices/prs505/sony_cache.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/calibre/devices/prs505/sony_cache.py b/src/calibre/devices/prs505/sony_cache.py index 413d6959a6..fa4dd74b6d 100644 --- a/src/calibre/devices/prs505/sony_cache.py +++ b/src/calibre/devices/prs505/sony_cache.py @@ -12,7 +12,7 @@ from uuid import uuid4 from lxml import etree -from calibre import prints, guess_type, iswindows +from calibre import prints, guess_type, iswindows, islinux from calibre.devices.errors import DeviceError from calibre.devices.usbms.driver import debug_print from calibre.constants import DEBUG @@ -47,7 +47,10 @@ def strptime(src): src[2] = str(MONTH_MAP[src[2]]) return time.strptime(' '.join(src), '%w, %d %m %Y %H:%M:%S %Z') -def strftime(epoch, zone=time.gmtime): +def strftime(epoch, zone=None): + zone = time.gmtime + if islinux: + zone = time.localtime src = time.strftime("%w, %d %m %Y %H:%M:%S GMT", zone(epoch)).split() src[0] = INVERSE_DAY_MAP[int(src[0][:-1])]+',' src[2] = INVERSE_MONTH_MAP[int(src[2])] From 12adf2e0f48baff98d63652d43628799f22d8cd7 Mon Sep 17 00:00:00 2001 From: Kovid Goyal <kovid@kovidgoyal.net> Date: Fri, 11 Jun 2010 12:58:37 -0600 Subject: [PATCH 099/112] Fix #5796 (New recipe for Honolulu Star Advertiser) --- .../{starbulletin.png => staradvertiser.png} | Bin 983 -> 983 bytes resources/recipes/honoluluadvertiser.recipe | 96 ------------------ resources/recipes/staradvertiser.recipe | 47 +++++++++ resources/recipes/starbulletin.recipe | 60 ----------- 4 files changed, 47 insertions(+), 156 deletions(-) rename resources/images/news/{starbulletin.png => staradvertiser.png} (84%) delete mode 100644 resources/recipes/honoluluadvertiser.recipe create mode 100644 resources/recipes/staradvertiser.recipe delete mode 100644 resources/recipes/starbulletin.recipe diff --git a/resources/images/news/starbulletin.png b/resources/images/news/staradvertiser.png similarity index 84% rename from resources/images/news/starbulletin.png rename to resources/images/news/staradvertiser.png index bb3afd636a2e2d0b5a515702cfdabba4c64abdf4..1458d6f912d93eb52628ac89be223b3a53268f51 100644 GIT binary patch delta 110 zcmcc4ew}?oA#++vVo9o1a#1RfVlXl=G|)9L(={{<F*LF=HL)@^0&=Yk4AM`2ZD(L$ sP%UwdC;@B8%}>cpt3=UYYGq<-WoQD?u*mR8EKmc3r>mdKI;Vst02^N)N&o-= delta 110 zcmcc4ew}?oA#+-CQEFmIs%{F9U@$T;u+%j$(lsy-F|@EUF|jf>(Kax!GB8;9@<JyA s1A}UbYeY$IeoAIqC8h>5D`QhDQzM9m^dB#Hff^V*UHx3vIVCg!04$#$&;S4c diff --git a/resources/recipes/honoluluadvertiser.recipe b/resources/recipes/honoluluadvertiser.recipe deleted file mode 100644 index bc7f8cc874..0000000000 --- a/resources/recipes/honoluluadvertiser.recipe +++ /dev/null @@ -1,96 +0,0 @@ -#!/usr/bin/env python -# -*- coding: cp1252 -*- - -__license__ = 'GPL v3' -__copyright__ = '2009, Darko Miletic <darko.miletic at gmail.com>' -''' -honoluluadvertiser.com -''' - -from calibre.web.feeds.news import BasicNewsRecipe - -class Honoluluadvertiser(BasicNewsRecipe): - title = 'Honolulu Advertiser' - __author__ = 'Darko Miletic and Sujata Raman' - description = "Latest national and local Hawaii sports news from The Honolulu Advertiser." - publisher = 'Honolulu Advertiser' - category = 'news, Honolulu, Hawaii' - oldest_article = 2 - language = 'en' - - max_articles_per_feed = 100 - no_stylesheets = True - use_embedded_content = False - encoding = 'cp1252' - remove_javascript = True - cover_url = 'http://www.honoluluadvertiser.com/graphics/frontpage/frontpage.jpg' - - html2lrf_options = [ - '--comment' , description - , '--category' , category - , '--publisher' , publisher - ] - - html2epub_options = 'publisher="' + publisher + '"\ncomments="' + description + '"\ntags="' + category + '"' - - keep_only_tags = [dict(name='div', attrs={'class':["hon_article_top","article-bodytext","hon_article_photo","storyphoto","article"]}), - dict(name='div', attrs={'id':["storycontentleft","article"]}) - ] - - remove_tags = [dict(name=['object','link','embed']), - dict(name='div', attrs={'class':["article-tools","titleBar","invisiblespacer","articleflex-container","hon_newslist","categoryheader","columnframe","subHeadline","poster-container"]}), - dict(name='div', attrs={'align':["right"]}), - dict(name='div', attrs={'id':["pluckcomments"]}), - dict(name='td', attrs={'class':["prepsfacts"]}), - dict(name='img', attrs={'height':["1"]}), - dict(name='img', attrs={'alt':["Advertisement"]}), - dict(name='img', attrs={'src':["/gcicommonfiles/sr/graphics/common/adlabel_horz.gif","/gcicommonfiles/sr/graphics/common/icon_whatsthis.gif",]}), - ] - - extra_css = ''' - h1{font-family:Arial,Helvetica,sans-serif; font-size:large; color:#000000; } - .hon_article_timestamp{font-family:Arial,Helvetica,sans-serif; font-size:70%; } - .postedStoryDate{font-family:Arial,Helvetica,sans-serif; font-size:30%; } - .postedDate{font-family:Arial,Helvetica,sans-serif; font-size:30%; } - .credit{font-family:Arial,Helvetica,sans-serif; font-size:30%; } - .hon_article_top{font-family:Arial,Helvetica,sans-serif; color:#666666; font-size:30%; font-weight:bold;} - .grayBackground{font-family:Arial,Helvetica,sans-serif; color:#666666; font-size:30%;} - .hon_photocaption{font-family:Arial,Helvetica,sans-serif; font-size:30%; } - .photoCaption{font-family:Arial,Helvetica,sans-serif; font-size:30%; } - .hon_photocredit{font-family:Arial,Helvetica,sans-serif; font-size:30%; color:#666666;} - .storyphoto{font-family:Arial,Helvetica,sans-serif; font-size:30%; color:#666666;} - .article-bodytext{font-family:Arial,Helvetica,sans-serif; font-size:xx-small; } - .storycontentleft{font-family:Arial,Helvetica,sans-serif; font-size:xx-small; } - #article{font-family:Arial,Helvetica,sans-serif; font-size:xx-small; } - .contentarea{font-family:Arial,Helvetica,sans-serif; font-size:xx-small; } - .storytext{font-family:Verdana,Arial,Helvetica,sans-serif; font-size:xx-small;} - .storyHeadline{font-family:Arial,Helvetica,sans-serif; font-size:large; color:#000000; font-weight:bold;} - .source{font-family:Arial,Helvetica,sans-serif; color:#333333; font-style: italic; font-weight:bold; } - ''' - - feeds = [ - (u'Breaking news', u'http://www.honoluluadvertiser.com/apps/pbcs.dll/section?Category=RSS01&MIME=XML' ) - ,(u'Local news', u'http://www.honoluluadvertiser.com/apps/pbcs.dll/section?Category=RSS02&MIME=XML' ) - ,(u'Sports', u'http://www.honoluluadvertiser.com/apps/pbcs.dll/section?Category=RSS03&MIME=XML' ) - ,(u'Island life', u'http://www.honoluluadvertiser.com/apps/pbcs.dll/section?Category=RSS05&MIME=XML' ) - ,(u'Entertainment', u'http://www.honoluluadvertiser.com/apps/pbcs.dll/section?Category=RSS06&MIME=XML' ) - ,(u'Business', u'http://www.honoluluadvertiser.com/apps/pbcs.dll/section?Category=RSS04&MIME=XML' ) - ] - - def preprocess_html(self, soup): - for item in soup.findAll(style=True): - del item['style'] - mtag = '\n<meta http-equiv="Content-Language" content="en"/>\n' - soup.head.insert(0,mtag) - - for tag in soup.findAll(name=['span','table','font']): - tag.name = 'div' - - return soup - - - # def print_version(self, url): - # ubody, sep, rest = url.rpartition('/-1/') - # root, sep2, article_id = ubody.partition('/article/') - # return u'http://www.honoluluadvertiser.com/apps/pbcs.dll/article?AID=/' + article_id + '&template=printart' - diff --git a/resources/recipes/staradvertiser.recipe b/resources/recipes/staradvertiser.recipe new file mode 100644 index 0000000000..af806f4a87 --- /dev/null +++ b/resources/recipes/staradvertiser.recipe @@ -0,0 +1,47 @@ +__license__ = 'GPL v3' +__copyright__ = '2009-2010, Darko Miletic <darko.miletic at gmail.com>' +''' +staradvertiser.com +''' + +from calibre.web.feeds.news import BasicNewsRecipe + +class Starbulletin(BasicNewsRecipe): + title = 'Honolulu Star Advertiser' + __author__ = 'Darko Miletic' + description = "Latest national and local Hawaii sports news" + publisher = 'Honolulu Star-Advertiser' + category = 'news, Honolulu, Hawaii' + oldest_article = 2 + max_articles_per_feed = 100 + language = 'en' + no_stylesheets = True + use_embedded_content = False + encoding = 'utf8' + publication_type = 'newspaper' + extra_css = ' body{font-family: Verdana,Arial,Helvetica,sans-serif} h1,.brown,.postCredit{color: #663300} .storyDeck{font-size: 1.2em; font-weight: bold} ' + + conversion_options = { + 'comment' : description + , 'tags' : category + , 'publisher' : publisher + , 'language' : language + , 'linearize_tables' : True + } + + remove_tags_before = dict(attrs={'id':'storyTitle'}) + remove_tags_after = dict(name='div', attrs={'class':'storytext'}) + remove_tags = [ + dict(name=['object','link']) + ,dict(attrs={'class':'insideStoryImage'}) + ] + + feeds = [ + (u'Headlines' , u'http://www.staradvertiser.com/staradvertiser_headlines.rss' ) + ,(u'News' , u'http://www.staradvertiser.com/news/index.rss' ) + ,(u'Sports' , u'http://www.staradvertiser.com/sports/index.rss' ) + ,(u'Features' , u'http://www.staradvertiser.com/features/index.rss' ) + ,(u'Editorials', u'http://www.staradvertiser.com/editorials/index.rss' ) + ,(u'Business' , u'http://www.staradvertiser.com/business/index.rss' ) + ,(u'Travel' , u'http://www.staradvertiser.com/travel/index.rss' ) + ] diff --git a/resources/recipes/starbulletin.recipe b/resources/recipes/starbulletin.recipe deleted file mode 100644 index fd9e25c2cd..0000000000 --- a/resources/recipes/starbulletin.recipe +++ /dev/null @@ -1,60 +0,0 @@ -#!/usr/bin/env python - -__license__ = 'GPL v3' -__copyright__ = '2009, Darko Miletic <darko.miletic at gmail.com>' -''' -starbulletin.com -''' - -from calibre.web.feeds.news import BasicNewsRecipe - -class Starbulletin(BasicNewsRecipe): - title = 'Honolulu Star-Bulletin' - __author__ = 'Darko Miletic' - description = "Latest national and local Hawaii sports news" - publisher = 'Honolulu Star-Bulletin' - category = 'news, Honolulu, Hawaii' - oldest_article = 2 - max_articles_per_feed = 100 - language = 'en' - - no_stylesheets = True - use_embedded_content = False - encoding = 'utf8' - remove_javascript = True - cover_url = 'http://media.starbulletin.com/designimages/spacer.gif' - - html2lrf_options = [ - '--comment' , description - , '--category' , category - , '--publisher' , publisher - ] - - html2epub_options = 'publisher="' + publisher + '"\ncomments="' + description + '"\ntags="' + category + '"' - - keep_only_tags = [ dict(name='div', attrs={'id':'storyColoumn'}) ] - - remove_tags = [ - dict(name=['object','link']) - ,dict(name='span', attrs={'id':'printdesc'}) - ,dict(name='div' , attrs={'class':'lightGreyBox storyTools clearAll'}) - ,dict(name='div' , attrs={'id':'breadcrumbs'}) - ] - - feeds = [ - (u'Headlines', u'http://www.starbulletin.com/starbulletin_headlines.rss' ) - ,(u'News', u'http://www.starbulletin.com/news/index.rss' ) - ,(u'Sports', u'http://www.starbulletin.com/sports/index.rss' ) - ,(u'Features', u'http://www.starbulletin.com/features/index.rss' ) - ,(u'Editorials', u'http://www.starbulletin.com/editorials/index.rss' ) - ,(u'Business', u'http://www.starbulletin.com/business/index.rss' ) - ,(u'Travel', u'http://www.starbulletin.com/travel/index.rss' ) - ] - - def preprocess_html(self, soup): - for item in soup.findAll(style=True): - del item['style'] - mtag = '\n<meta http-equiv="Content-Language" content="en"/>\n' - soup.head.insert(0,mtag) - return soup - From 6b933e5872b99767341dacf88acbe28f718bef31 Mon Sep 17 00:00:00 2001 From: Kovid Goyal <kovid@kovidgoyal.net> Date: Fri, 11 Jun 2010 13:13:24 -0600 Subject: [PATCH 100/112] Fix #5797 (Updated recipe for Boston globe) --- resources/recipes/boston.com.recipe | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/resources/recipes/boston.com.recipe b/resources/recipes/boston.com.recipe index b398d7cc1b..48add6112c 100644 --- a/resources/recipes/boston.com.recipe +++ b/resources/recipes/boston.com.recipe @@ -1,5 +1,5 @@ __license__ = 'GPL v3' -__copyright__ = '2009, Darko Miletic <darko.miletic at gmail.com>' +__copyright__ = '2009-2010, Darko Miletic <darko.miletic at gmail.com>' ''' www.boston.com ''' @@ -7,10 +7,10 @@ www.boston.com from calibre.web.feeds.recipes import BasicNewsRecipe class BusinessStandard(BasicNewsRecipe): - title = 'Boston' + title = 'The Boston Globe' __author__ = 'Darko Miletic' description = 'News from Boston' - oldest_article = 7 + oldest_article = 2 max_articles_per_feed = 100 no_stylesheets = True delay = 1 @@ -19,6 +19,9 @@ class BusinessStandard(BasicNewsRecipe): publisher = 'Boston' category = 'news, boston, usa, world' language = 'en' + publication_type = 'newspaper' + masthead_url = 'http://cache.boston.com/images/globe/grslider/the_boston_globe.gif' + extra_css = ' body{font-family: Georgia, serif} div#articleBodyTop{display:block} ' conversion_options = { 'comments' : description @@ -27,8 +30,11 @@ class BusinessStandard(BasicNewsRecipe): ,'publisher' : publisher } - keep_only_tags = [dict(name='div', attrs={'class':'story'})] - remove_tags = [dict(name=['object','link','script','iframe'])] + keep_only_tags = [dict(attrs={'id':['INDblogEntry','blogEntry','articleHeader','articleGraphs','galleryShell']})] + remove_tags = [ + dict(name=['object','link','script','iframe']) + ,dict(attrs={'id':['blogheadTools','bdc_emailWidget','tools','relatedContent']}) + ] feeds = [ (u'Top Stories' , u'http://feeds.boston.com/boston/topstories' ) @@ -38,12 +44,9 @@ class BusinessStandard(BasicNewsRecipe): ] def print_version(self, url): - return url + '?mode=PF' + return url + '?page=full' def get_article_url(self, article): - rawarticle = article.get('pheedo_origlink', None) - artls, sep, rsep = rawarticle.rpartition('/?') - if artls == '': - artls = rawarticle.rpartition('?')[0] - return artls + rawarticle = article.get('guid', None) + return rawarticle.rpartition('?')[0] From 70b2ab02938df8f7c71a635510c73919fd4e8ead Mon Sep 17 00:00:00 2001 From: Kovid Goyal <kovid@kovidgoyal.net> Date: Sat, 12 Jun 2010 01:45:11 +0530 Subject: [PATCH 101/112] SONY driver: Correct fix for timestamp handling (I hope) --- src/calibre/devices/prs505/sony_cache.py | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/src/calibre/devices/prs505/sony_cache.py b/src/calibre/devices/prs505/sony_cache.py index fa4dd74b6d..727bdf68b2 100644 --- a/src/calibre/devices/prs505/sony_cache.py +++ b/src/calibre/devices/prs505/sony_cache.py @@ -12,7 +12,7 @@ from uuid import uuid4 from lxml import etree -from calibre import prints, guess_type, iswindows, islinux +from calibre import prints, guess_type from calibre.devices.errors import DeviceError from calibre.devices.usbms.driver import debug_print from calibre.constants import DEBUG @@ -47,10 +47,7 @@ def strptime(src): src[2] = str(MONTH_MAP[src[2]]) return time.strptime(' '.join(src), '%w, %d %m %Y %H:%M:%S %Z') -def strftime(epoch, zone=None): - zone = time.gmtime - if islinux: - zone = time.localtime +def strftime(epoch, zone=time.localtime): src = time.strftime("%w, %d %m %Y %H:%M:%S GMT", zone(epoch)).split() src[0] = INVERSE_DAY_MAP[int(src[0][:-1])]+',' src[2] = INVERSE_MONTH_MAP[int(src[2])] @@ -427,9 +424,6 @@ class XMLCache(object): def update_text_record(self, record, book, path, bl_index): timestamp = os.path.getmtime(path) - # Correct for MS DST time 'adjustment' - if iswindows and time.daylight: - timestamp -= time.altzone - time.timezone date = strftime(timestamp) if date != record.get('date', None): record.set('date', date) From 47303223b2664a716e2960853ff407e49caa5631 Mon Sep 17 00:00:00 2001 From: Kovid Goyal <kovid@kovidgoyal.net> Date: Sat, 12 Jun 2010 02:28:40 +0530 Subject: [PATCH 102/112] Fix #5769 (The Sun Feed) --- resources/recipes/the_sun.recipe | 30 +++++++++++++++++------------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/resources/recipes/the_sun.recipe b/resources/recipes/the_sun.recipe index f9905a61dc..5699ec106c 100644 --- a/resources/recipes/the_sun.recipe +++ b/resources/recipes/the_sun.recipe @@ -1,5 +1,6 @@ import re from calibre.web.feeds.news import BasicNewsRecipe +from calibre.ebooks.BeautifulSoup import Tag class AdvancedUserRecipe1268409464(BasicNewsRecipe): title = u'The Sun' @@ -14,24 +15,27 @@ class AdvancedUserRecipe1268409464(BasicNewsRecipe): remove_javascript = True keep_only_tags = [ - dict(name='div', attrs={'class':'medium-centered'}) - ,dict(name='div', attrs={'class':'article'}) - ,dict(name='div', attrs={'class':'clear-left'}) - ,dict(name='div', attrs={'class':'text-center'}) + dict(id='column-print') ] remove_tags = [ - dict(name='div', attrs={'class':'slideshow'}) - ,dict(name='div', attrs={'class':'float-left'}) - ,dict(name='div', attrs={'class':'ltbx-slideshow ltbx-btn-ss'}) - ,dict(name='a', attrs={'class':'add_a_comment'}) - ,dict(name='div', attrs={'id':'vxFlashPlayerContent'}) - ,dict(name='div', attrs={'id':'k1006094r1c1t5w380h529'}) - ,dict(name='div', attrs={'id':'tum_login_form_container'}) - ,dict(name='div', attrs={'class':'discHeader'}) - ,dict(name='div', attrs={'class':'margin-bottom-neg-2'}) + dict(name='div', attrs={'class':[ + 'clear text-center small padding-left-right-5 text-999 padding-top-5 padding-bottom-10 grey-solid-line', + 'clear width-625 bg-fff padding-top-10' + ]}), + dict(name='video'), ] + def preprocess_html(self, soup): + h1 = soup.find('h1') + if h1 is not None: + text = self.tag_to_string(h1) + nh = Tag(soup, 'h1') + nh.insert(0, text) + h1.replaceWith(nh) + + return soup + feeds = [(u'News', u'http://www.thesun.co.uk/sol/homepage/feeds/rss/article312900.ece') ,(u'Sport', u'http://www.thesun.co.uk/sol/homepage/feeds/rss/article247732.ece') From 6417e7597f00968a55842bcd06010e9923602994 Mon Sep 17 00:00:00 2001 From: Kovid Goyal <kovid@kovidgoyal.net> Date: Sat, 12 Jun 2010 02:53:27 +0530 Subject: [PATCH 103/112] version 0.7.2 --- Changelog.yaml | 59 +++++++++++++++++++++++++++++ src/calibre/devices/apple/driver.py | 7 +--- 2 files changed, 61 insertions(+), 5 deletions(-) diff --git a/Changelog.yaml b/Changelog.yaml index 9673832a81..4997cca255 100644 --- a/Changelog.yaml +++ b/Changelog.yaml @@ -4,6 +4,65 @@ # for important features/bug fixes. # Also, each release can have new and improved recipes. +- version: 0.7.2 + date: 2010-06-11 + + new features: + - title: "The Cover Browser can now be freely resized." + description: > + "You can now resize the Cover Browser just like the other areas of the user interface by dragging the edge. The Cover Browser now + also emphasizes the cetral book cover, making it larger than the others. Also on widescreen monitors the cover browser is now automatically placed + to the side of the book list instead of below it." + + - title: "Added tweak to control how titles and series names are sorted" + + - title: "Clicking on row numbers no longer open the viewer. Instead you have to double click" + + bug fixes: + - title: "SONY driver: The regression causing slow perfomance has been corrected. Various bug fixes to deal with corner cases" + + - title: "iPad driver: Various bugfixes, should now work much more seamlessly." + + - title: "Fix regression causing calibre to not start if the library path is invalid, because say a drive has been removed" + tickets: [5787] + + - title: "Fix regression in 0.7.1 that broke searching in the e-book viewers and for news sources" + + - title: "Fix regressions that caused the Publisher to change when updating Series and floating point custom columns to be rounded to integers." + tickets: [5788] + + - title: "Fix regression that broke check database integrity in the presence of custom coulmns or user categories" + tickets: [5779] + + - title: "Fix regresison that broke the Email to submenu in the send to device menu" + + - title: "Fix Tag browser re-opening closed tree after editing metadata" + tickets: [5744] + + - title: "Conversion pipeline: Handle missing/obsolete input/output profiles gracefully" + + - title: "Fix Adding/Deleting Search does not refresh Left Pane Correctly" + tickets: [5751] + + - title: "Content server: Fix serving of CBZ/CBR files to stanza" + + new recipes: + - title: Repantes, Haaretz + author: Darko Miletic + + - title: CBC Canada + author: rty + + + improved recipes: + - The Sun + - The Economist + - Boston Globe + - Honolulu Star Advertiser + - SMH + - Sueddeutsche + - Our Daily Bread + - version: 0.7.1 date: 2010-06-04 diff --git a/src/calibre/devices/apple/driver.py b/src/calibre/devices/apple/driver.py index 8d9d8f3a9a..3e16eccbbc 100644 --- a/src/calibre/devices/apple/driver.py +++ b/src/calibre/devices/apple/driver.py @@ -14,7 +14,6 @@ from calibre.devices.interface import DevicePlugin from calibre.ebooks.BeautifulSoup import BeautifulSoup from calibre.ebooks.metadata import MetaInformation from calibre.library.server.utils import strftime -from calibre.ptempfile import PersistentTemporaryFile from calibre.utils.config import Config, config_dir from calibre.utils.date import parse_date from calibre.utils.logging import Log @@ -988,7 +987,6 @@ class ITUNES(DevicePlugin): connected_device = self.sources['iPod'] device = self.iTunes.sources.ItemByName(connected_device) - dev_books = None added = None for pl in device.Playlists: if pl.Kind == self.PlaylistKind.index('User') and \ @@ -1641,7 +1639,6 @@ class ITUNES(DevicePlugin): connected_device = self.sources['iPod'] device = self.iTunes.sources.ItemByName(connected_device) - dev_books = None for pl in device.Playlists: if pl.Kind == self.PlaylistKind.index('User') and \ pl.SpecialKind == self.PlaylistSpecialKind.index('Books'): @@ -1988,7 +1985,7 @@ class ITUNES(DevicePlugin): if isosx: if DEBUG: self.log.info(" deleting %s" % cached_book['dev_book']) - result = cached_book['dev_book'].delete() + cached_book['dev_book'].delete() elif iswindows: dev_pl = self._get_device_books_playlist() @@ -2000,7 +1997,7 @@ class ITUNES(DevicePlugin): if hit.Name == cached_book['title']: if DEBUG: self.log.info(" deleting '%s' by %s" % (hit.Name, hit.Artist)) - results = hit.Delete() + hit.Delete() break def _remove_from_iTunes(self, cached_book): From 9851a05f243370fba25ce477eed2e98acdeb1f35 Mon Sep 17 00:00:00 2001 From: Kovid Goyal <kovid@kovidgoyal.net> Date: Fri, 11 Jun 2010 16:42:16 -0600 Subject: [PATCH 104/112] IGN:Tag release --- src/calibre/constants.py | 2 +- src/calibre/translations/calibre.pot | 1513 +++++++++++++------------- 2 files changed, 762 insertions(+), 753 deletions(-) diff --git a/src/calibre/constants.py b/src/calibre/constants.py index 69bad99723..4f9e1f3904 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.7.1' +__version__ = '0.7.2' __author__ = "Kovid Goyal <kovid@kovidgoyal.net>" import re diff --git a/src/calibre/translations/calibre.pot b/src/calibre/translations/calibre.pot index ae8499282a..3e1ee35289 100644 --- a/src/calibre/translations/calibre.pot +++ b/src/calibre/translations/calibre.pot @@ -4,9 +4,9 @@ # msgid "" msgstr "" -"Project-Id-Version: calibre 0.7.1\n" -"POT-Creation-Date: 2010-06-06 14:20+MDT\n" -"PO-Revision-Date: 2010-06-06 14:20+MDT\n" +"Project-Id-Version: calibre 0.7.2\n" +"POT-Creation-Date: 2010-06-11 16:03+MDT\n" +"PO-Revision-Date: 2010-06-11 16:03+MDT\n" "Last-Translator: Automatically generated\n" "Language-Team: LANGUAGE\n" "MIME-Version: 1.0\n" @@ -25,8 +25,8 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/nook/driver.py:70 #: /home/kovid/work/calibre/src/calibre/devices/nook/driver.py:71 #: /home/kovid/work/calibre/src/calibre/devices/prs500/books.py:267 -#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:418 -#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:347 +#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:431 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:385 #: /home/kovid/work/calibre/src/calibre/ebooks/chm/input.py:98 #: /home/kovid/work/calibre/src/calibre/ebooks/chm/input.py:101 #: /home/kovid/work/calibre/src/calibre/ebooks/chm/metadata.py:56 @@ -48,10 +48,10 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/ereader.py:61 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/fb2.py:46 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:36 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:62 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:64 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:118 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:120 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:66 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:123 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:125 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:943 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:1055 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/pdb.py:39 @@ -99,39 +99,39 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/pdf/writer.py:98 #: /home/kovid/work/calibre/src/calibre/ebooks/rtf/input.py:233 #: /home/kovid/work/calibre/src/calibre/ebooks/rtf/input.py:235 -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:273 -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:280 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:286 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:293 #: /home/kovid/work/calibre/src/calibre/gui2/add.py:170 #: /home/kovid/work/calibre/src/calibre/gui2/add.py:177 #: /home/kovid/work/calibre/src/calibre/gui2/convert/__init__.py:21 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:107 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:132 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:134 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:657 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:666 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:946 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:949 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:665 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:674 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:955 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:958 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf.py:47 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:123 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:158 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:489 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:491 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:172 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:339 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:359 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:826 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:989 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1806 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1809 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:348 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:368 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:843 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1015 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1300 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1303 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:185 #: /home/kovid/work/calibre/src/calibre/library/cli.py:213 #: /home/kovid/work/calibre/src/calibre/library/database.py:913 #: /home/kovid/work/calibre/src/calibre/library/database2.py:302 #: /home/kovid/work/calibre/src/calibre/library/database2.py:314 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:876 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:913 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1392 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1394 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1516 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:880 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:917 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1515 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1517 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1639 #: /home/kovid/work/calibre/src/calibre/library/server/mobile.py:268 #: /home/kovid/work/calibre/src/calibre/library/server/opds.py:131 #: /home/kovid/work/calibre/src/calibre/library/server/opds.py:134 @@ -416,50 +416,50 @@ msgstr "" msgid "Communicate with S60 phones." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:46 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:75 msgid "Communicate with iBooks through iTunes." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:52 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:81 msgid "Apple device detected, launching iTunes, please wait ..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:154 -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:172 -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:175 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:196 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:214 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:217 msgid "Updating device metadata listing..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:240 -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:271 -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:861 -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1023 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:282 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:318 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:921 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:947 msgid "%d of %d" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:277 -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1028 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:325 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:952 msgid "finished" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:452 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:499 msgid "" "Some books not found in iTunes database.\n" "Delete using the iBooks app.\n" "Click 'Show Details' for a list." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:647 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:703 #: /home/kovid/work/calibre/src/calibre/devices/usbms/deviceconfig.py:28 msgid "settings for device drivers" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:649 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:705 #: /home/kovid/work/calibre/src/calibre/devices/usbms/deviceconfig.py:30 msgid "Ordered list of formats the device will accept" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:762 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:776 msgid "" "Some cover art could not be converted.\n" "Click 'Show Details' for a list." @@ -547,7 +547,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/iliad/driver.py:17 #: /home/kovid/work/calibre/src/calibre/devices/irexdr/driver.py:18 -#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:29 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:38 msgid "John Schember" msgstr "" @@ -623,7 +623,7 @@ msgstr "" msgid "Comma separated list of metadata fields to turn into collections on the device. Possibilities include: " msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:140 +#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:142 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/structure.py:68 msgid "Unnamed" msgstr "" @@ -677,22 +677,22 @@ msgstr "" msgid "Selected slot: %s is not supported." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:779 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:775 msgid "There is insufficient free space in main memory" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:781 -#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:783 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:777 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:779 msgid "There is insufficient free space on the storage card" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:813 -#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:819 -#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:847 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:809 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:815 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:843 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:239 #: /home/kovid/work/calibre/src/calibre/library/database2.py:141 #: /home/kovid/work/calibre/src/calibre/library/database2.py:152 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1276 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1399 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:120 msgid "News" msgstr "" @@ -719,44 +719,44 @@ msgstr "" msgid "Extra customization" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:28 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:37 msgid "Communicate with an eBook reader." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:44 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:53 msgid "Get device information..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:53 -#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:56 -#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:59 -#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:119 -#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:126 -#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:149 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:64 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:67 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:70 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:130 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:137 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:160 msgid "Getting list of books on device..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:174 -#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:176 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:188 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:190 msgid "Transferring books to device..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:191 -#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:220 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:208 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:237 msgid "Adding books to device metadata listing..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:224 -#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:242 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:243 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:261 msgid "Removing books from device..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:246 -#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:251 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:268 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:273 msgid "Removing books from device metadata listing..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:269 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:294 msgid "Sending metadata to device..." msgstr "" @@ -1218,15 +1218,15 @@ msgstr "" msgid "Failed to parse date/time" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:802 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:809 msgid "Converting input to HTML..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:829 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:836 msgid "Running transforms on ebook..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:916 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:923 msgid "Creating" msgstr "" @@ -1496,24 +1496,24 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:97 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:98 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:61 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:46 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:336 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:831 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:55 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:345 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:848 #: /home/kovid/work/calibre/src/calibre/library/server/opds.py:536 msgid "Title" msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:373 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:62 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:48 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:341 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:832 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:57 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:350 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:849 msgid "Author(s)" msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:374 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:64 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:53 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:62 msgid "Publisher" msgstr "" @@ -1526,29 +1526,29 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:184 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:99 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info_ui.py:67 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:297 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1008 -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:107 -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:149 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:306 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1034 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:104 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:146 msgid "Comments" msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:384 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories.py:46 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:54 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:286 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1004 -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:106 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:63 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:295 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1030 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:103 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:130 msgid "Tags" msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:386 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories.py:46 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:55 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:302 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1013 -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:105 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:64 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:311 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1039 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:102 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:82 msgid "Series" msgstr "" @@ -1558,13 +1558,13 @@ msgid "Language" msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:389 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:996 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1022 msgid "Timestamp" msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:391 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:66 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:51 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:60 msgid "Published" msgstr "" @@ -2268,20 +2268,24 @@ msgstr "" msgid "tag browser categories not to display" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:138 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:103 +msgid "The layout of the user interface" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:151 #: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:476 msgid "Copied" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:172 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:185 msgid "Copy" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:172 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:185 msgid "Copy to Clipboard" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:382 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:395 msgid "Choose Files" msgstr "" @@ -2306,12 +2310,12 @@ msgid "The specified directory could not be processed." msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/add.py:260 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:599 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:608 msgid "No books" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/add.py:261 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1938 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1432 msgid "No books found" msgstr "" @@ -2456,12 +2460,12 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:267 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:269 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:270 -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:396 -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:401 -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:407 -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:410 -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:412 -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:414 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:254 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:259 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:265 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:268 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:270 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:272 #: /home/kovid/work/calibre/src/calibre/gui2/shortcuts_ui.py:75 #: /home/kovid/work/calibre/src/calibre/gui2/shortcuts_ui.py:80 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:186 @@ -2557,8 +2561,8 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:20 #: /home/kovid/work/calibre/src/calibre/library/catalog.py:222 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1239 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1257 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1362 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1380 msgid "Catalog" msgstr "" @@ -3218,7 +3222,7 @@ msgid "RB Output" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/convert/regex_builder.py:76 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2183 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1677 msgid "Choose the format to view" msgstr "" @@ -3301,12 +3305,12 @@ msgid "Footer regular expression:" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/convert/structure_detection.py:56 -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:71 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:73 msgid "Invalid regular expression" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/convert/structure_detection.py:57 -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:72 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:74 msgid "Invalid regular expression: %s" msgstr "" @@ -3511,11 +3515,19 @@ msgstr "" msgid "<p>For example, to match all h2 tags that have class=\"chapter\", set tag to <i>h2</i>, attribute to <i>class</i> and value to <i>chapter</i>.</p><p>Leaving attribute blank will match any attribute and leaving value blank will match any value. Setting tag to * will match any tag.</p><p>To learn more advanced usage of XPath see the <a href=\"http://calibre-ebook.com/user_manual/xpath.html\">XPath Tutorial</a>." msgstr "" +#: /home/kovid/work/calibre/src/calibre/gui2/cover_flow.py:120 +msgid "Cover browser could not be loaded" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/cover_flow.py:172 +msgid "Browse by covers" +msgstr "" + #: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:52 #: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:77 #: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:101 -#: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:132 -#: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:143 +#: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:137 +#: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:148 #: /home/kovid/work/calibre/src/calibre/gui2/library/delegates.py:110 #: /home/kovid/work/calibre/src/calibre/gui2/library/delegates.py:130 #: /home/kovid/work/calibre/src/calibre/gui2/library/delegates.py:205 @@ -3536,240 +3548,244 @@ msgstr "" msgid "No" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:110 +#: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:115 msgid "star(s)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:111 +#: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:116 msgid "Unrated" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:352 +#: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:357 msgid "Remove all tags" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:373 +#: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:378 msgid "tags to add" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:378 +#: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:383 msgid "tags to remove" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:39 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:43 #: /home/kovid/work/calibre/src/calibre/utils/ipc/job.py:135 msgid "No details available." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:138 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:143 msgid "Device no longer connected." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:243 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:248 msgid "Get device information" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:269 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:274 msgid "Get list of books on device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:279 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:284 msgid "Get annotations from device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:288 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:293 msgid "Send metadata to device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:297 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:302 msgid "Upload %d books to device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:312 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:317 msgid "Delete books from device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:329 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:334 msgid "Download books from device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:339 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:344 msgid "View book on device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:373 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:379 msgid "Set default send to device action" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:379 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:386 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:388 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:390 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:385 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:392 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:394 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:396 msgid "Email to" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:401 -msgid "Send to main memory" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:403 -msgid "Send to storage card A" +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:396 +msgid " and delete from library" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/device.py:405 +msgid "Send to main memory" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:407 +msgid "Send to storage card A" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:409 msgid "Send to storage card B" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:410 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:419 -msgid "Main Memory" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:412 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:421 -msgid "Storage Card A" -msgstr "" - #: /home/kovid/work/calibre/src/calibre/gui2/device.py:414 #: /home/kovid/work/calibre/src/calibre/gui2/device.py:423 +msgid "Main Memory" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:416 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:425 +msgid "Storage Card A" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:418 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:427 msgid "Storage Card B" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:437 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:441 msgid "Send and delete from library" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:438 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:442 msgid "Send specific format" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:477 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:481 msgid "Connect to folder" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:482 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:486 msgid "Disconnect from folder" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:490 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:494 msgid "Fetch annotations (experimental)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:600 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:609 msgid "selected to send" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:605 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:614 msgid "Choose format to send to device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:613 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:622 msgid "No device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:614 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:623 msgid "Cannot send: No device is connected" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:617 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:621 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:626 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:630 msgid "No card" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:618 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:622 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:627 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:631 msgid "Cannot send: Device has no storage card" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:664 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:672 msgid "E-book:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:667 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:675 msgid "Attached, you will find the e-book" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:668 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:676 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:180 msgid "by" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:669 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:677 msgid "in the %s format." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:682 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:690 msgid "Sending email to" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:712 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:719 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:811 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:871 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:990 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:997 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:720 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:727 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:819 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:880 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:999 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1006 msgid "No suitable formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:713 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:721 msgid "Auto convert the following books before sending via email?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:720 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:728 msgid "Could not email the following books as no suitable formats were found:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:738 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:746 msgid "Failed to email books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:739 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:747 msgid "Failed to email the following books:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:743 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:751 msgid "Sent by email:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:770 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:778 msgid "News:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:771 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:779 msgid "Attached is the" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:782 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:790 msgid "Sent news to" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:812 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:872 -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:991 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:820 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:881 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1000 msgid "Auto convert the following books before uploading to the device?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:841 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:849 msgid "Sending catalogs to device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:902 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:912 msgid "Sending news to device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:957 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:966 msgid "Sending books to device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:998 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1007 msgid "Could not upload the following books to the device, as no suitable formats were found. Convert the book(s) to a format supported by your device first." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1046 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1055 msgid "No space on device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1047 +#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1056 msgid "<p>Cannot upload books to device there is no more free space available " msgstr "" @@ -3791,9 +3807,9 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:114 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:115 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:116 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:293 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:994 -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:102 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:302 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1020 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:99 msgid "Path" msgstr "" @@ -3802,8 +3818,8 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:119 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:122 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:219 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:292 -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:103 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:301 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:100 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:91 msgid "Formats" msgstr "" @@ -3957,8 +3973,8 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:510 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:933 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:190 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1650 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:171 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1144 #: /home/kovid/work/calibre/src/calibre/utils/ipc/job.py:53 msgid "Error" msgstr "" @@ -4045,7 +4061,7 @@ msgid "Access log:" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:781 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:761 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:419 msgid "Failed to start content server" msgstr "" @@ -4192,7 +4208,7 @@ msgid "Sending to &device" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:536 -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:444 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:297 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:201 msgid "Preferences" msgstr "" @@ -4526,9 +4542,9 @@ msgstr "" #: #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_ct_column_ui.py:137 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column.py:27 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:50 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:833 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column.py:28 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:59 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:850 #: /home/kovid/work/calibre/src/calibre/library/server/opds.py:535 msgid "Date" msgstr "" @@ -4549,82 +4565,82 @@ msgid "Create and edit tag-based columns" msgstr "" #: -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column.py:18 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column.py:19 msgid "Text, column shown in the tag browser" msgstr "" #: -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column.py:21 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column.py:22 msgid "Comma separated text, like tags, shown in the tag browser" msgstr "" #: -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column.py:24 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column.py:25 msgid "Long text, like comments, not shown in the tag browser" msgstr "" #: -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column.py:29 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column.py:30 msgid "Floating point numbers" msgstr "" #: -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column.py:31 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column.py:32 msgid "Integers" msgstr "" #: -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column.py:33 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column.py:34 msgid "Ratings, shown with stars" msgstr "" #: -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column.py:36 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column.py:37 msgid "Yes/No" msgstr "" #: -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column.py:60 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column.py:61 msgid "No column selected" msgstr "" #: -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column.py:61 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column.py:62 msgid "No column has been selected" msgstr "" #: -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column.py:65 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column.py:66 msgid "Selected column is not a user-defined column" msgstr "" #: -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column.py:96 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column.py:97 msgid "No lookup name was provided" msgstr "" #: -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column.py:98 -msgid "The label must contain only letters and digits, and start with a letter" +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column.py:99 +msgid "The label must contain only letters, digits and underscores, and start with a letter" msgstr "" #: -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column.py:107 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column.py:108 msgid "No column heading was provided" msgstr "" #: -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column.py:113 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column.py:114 msgid "The lookup name %s is already used" msgstr "" #: -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column.py:123 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column.py:124 msgid "The heading %s is already used" msgstr "" #: -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column.py:125 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/create_custom_column.py:126 msgid "The lookup name must be lower case and cannot contain \":\"s or spaces" msgstr "" @@ -4938,7 +4954,7 @@ msgid "Choose formats for " msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:139 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1391 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:876 msgid "Books" msgstr "" @@ -4980,67 +4996,67 @@ msgstr "" msgid "Abort the editing of all remaining books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:442 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:447 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:444 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:449 msgid "This ISBN number is valid" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:450 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:452 msgid "This ISBN number is invalid" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:546 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:548 msgid "Downloading cover..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:558 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:563 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:569 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:560 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:565 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:571 msgid "Cannot fetch cover" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:559 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:570 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:561 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:572 msgid "<b>Could not fetch cover.</b><br/>" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:560 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:562 msgid "The download timed out." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:564 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:566 msgid "Could not find cover for this book. Try specifying the ISBN first." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:576 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:578 msgid "Bad cover" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:577 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:579 msgid "The cover is not a valid picture" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:610 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:612 msgid "There were errors" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:611 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:613 msgid "There were errors downloading social metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:640 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:642 msgid "Cannot fetch metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:641 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:643 msgid "You must specify at least one of ISBN, Title, Authors or Publisher" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:712 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:714 msgid "Permission denied" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:713 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:715 msgid "Could not open %s. Is it being used by another program?" msgstr "" @@ -5504,12 +5520,12 @@ msgid "Add tag to available tags and apply it to current book" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor.py:60 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:410 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:441 msgid "Item is blank" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor.py:61 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:411 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:442 msgid "An item cannot be set to nothing. Delete it instead." msgstr "" @@ -5778,11 +5794,11 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:126 #: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:129 #: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:132 -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:78 -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:82 -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:87 -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:92 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:80 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:84 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:89 #: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:94 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:96 msgid "No match" msgstr "" @@ -5818,54 +5834,194 @@ msgstr "" msgid "Regular expression (?P<isbn>)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:54 +#: /home/kovid/work/calibre/src/calibre/gui2/init.py:33 +msgid "Save single format to disk..." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/init.py:49 +msgid "Edit metadata individually" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/init.py:52 +msgid "Edit metadata in bulk" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/init.py:55 +msgid "Download metadata and covers" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/init.py:57 +msgid "Download only metadata" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/init.py:59 +msgid "Download only covers" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/init.py:62 +msgid "Download only social metadata" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/init.py:68 +msgid "Merge into first selected book - delete others" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/init.py:71 +msgid "Merge into first selected book - keep others" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/init.py:79 +msgid "Add books from a single directory" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/init.py:81 +msgid "Add books from directories, including sub-directories (One book per directory, assumes every ebook file is the same book in a different format)" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/init.py:85 +msgid "Add books from directories, including sub directories (Multiple books per directory, assumes every ebook file is a different book)" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/init.py:88 +msgid "Add Empty book. (Book entry with no formats)" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/init.py:98 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:283 +msgid "Save to disk" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/init.py:100 +msgid "Save to disk in a single directory" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/init.py:102 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1782 +msgid "Save only %s format to disk" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/init.py:106 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1785 +msgid "Save only %s format to disk in a single directory" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/init.py:115 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:289 +msgid "View" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/init.py:116 +msgid "View specific format" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/init.py:122 +msgid "Remove selected books" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/init.py:124 +msgid "Remove files of a specific format from selected books.." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/init.py:127 +msgid "Remove all formats from selected books, except..." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/init.py:130 +msgid "Remove covers from selected books" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/init.py:145 +msgid "Convert individually" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/init.py:147 +msgid "Bulk convert" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/init.py:151 +msgid "Create catalog of books in your calibre library" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/init.py:160 +msgid "Run welcome wizard" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/init.py:192 +msgid "Similar books..." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/init.py:297 +msgid "Cover Browser" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/init.py:315 +msgid "Tag Browser" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/init.py:336 +msgid "Side bar" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/init.py:366 +msgid "Book Details" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:60 msgid "Job" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:55 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:61 msgid "Status" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:56 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:62 msgid "Progress" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:57 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:63 msgid "Running time" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:69 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:75 msgid "There are %d running jobs:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:73 -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:80 -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:95 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:79 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:86 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:101 msgid "Unknown job" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:76 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:82 msgid "There are %d waiting jobs:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:212 -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:215 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:216 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:219 msgid "Cannot kill job" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:213 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:217 msgid "Cannot kill jobs that communicate with the device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:216 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:220 msgid "Job has already run" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:244 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:248 msgid "Unavailable" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:280 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:278 +msgid "Jobs:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:294 +msgid "Click to see list of active jobs." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:354 msgid " - Jobs" msgstr "" @@ -5877,112 +6033,112 @@ msgstr "" msgid "Y" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:47 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:56 msgid "On Device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:49 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:58 msgid "Size (MB)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:52 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:61 msgid "Rating" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:285 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:291 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:296 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1003 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1007 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:294 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:300 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:305 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1029 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1033 #: /home/kovid/work/calibre/src/calibre/gui2/shortcuts.py:47 #: /home/kovid/work/calibre/src/calibre/gui2/shortcuts_ui.py:73 #: /home/kovid/work/calibre/src/calibre/gui2/shortcuts_ui.py:78 -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:414 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:416 msgid "None" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:302 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1013 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:311 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1039 msgid "Book <font face=\"serif\">%s</font> of %s." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:639 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1071 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:337 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:656 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1097 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:350 msgid "The lookup/search name is \"{0}\"" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:830 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:847 msgid "In Library" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:834 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:851 msgid "Size" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:835 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:997 -#: /home/kovid/work/calibre/src/calibre/gui2/status.py:104 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:852 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1023 +#: /home/kovid/work/calibre/src/calibre/gui2/status.py:101 msgid "Collections" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:993 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1019 msgid "Format" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1053 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1079 msgid "Marked for deletion" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1056 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1082 msgid "Double click to <b>edit</b> me<br><br>" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:101 +#: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:110 msgid "Hide column %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:106 +#: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:115 msgid "Sort on %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:107 +#: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:116 msgid "Ascending" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:110 +#: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:119 msgid "Descending" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:122 +#: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:131 msgid "Change text alignment for %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:124 +#: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:133 msgid "Left" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:124 +#: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:133 msgid "Right" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:125 +#: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:134 msgid "Center" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:144 +#: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:153 msgid "Show column" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:156 +#: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:165 msgid "Restore default layout" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:475 +#: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:504 msgid "Not allowed" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:476 +#: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:505 msgid "Dropping onto a device is not supported. First add the book to the calibre library." msgstr "" @@ -6076,274 +6232,245 @@ msgstr "" msgid "Do not check for updates" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:67 -msgid "Choose a location for your calibre e-book library" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:76 -msgid "Failed to create library" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:77 -msgid "Failed to create calibre library at: %r. Aborting." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:132 -msgid "Initializing user interface..." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:157 -msgid "Repairing failed" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:158 -msgid "The database repair failed. Starting with a new empty library." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:162 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:58 #: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:595 msgid "Calibre Library" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:175 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:84 +msgid "Choose a location for your calibre e-book library" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:93 +msgid "Failed to create library" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:94 +msgid "Failed to create calibre library at: %r." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:97 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:182 msgid "Choose a location for your new calibre e-book library" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:185 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:218 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:151 +msgid "Initializing user interface..." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:176 +msgid "Repairing failed" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:177 +msgid "The database repair failed. Starting with a new empty library." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:191 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:224 msgid "Bad database location" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:186 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:192 msgid "Bad database location %r. calibre will now quit." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:199 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:205 msgid "Corrupted database" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:200 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:206 msgid "Your calibre database appears to be corrupted. Do you want calibre to try and repair it automatically? If you say No, a new empty calibre library will be created." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:206 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:212 msgid "Repairing database. This can take a very long time for a large collection" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:219 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:225 msgid "Bad database location %r. Will start with a new, empty calibre library" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:230 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:236 msgid "Starting %s: Loading books..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:275 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:281 msgid "If you are sure it is not running" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:277 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:283 msgid "Cannot Start " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:278 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:284 msgid "%s is already running." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:281 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:287 msgid "may be running in the system tray, in the" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:283 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:289 msgid "upper right region of the screen." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:285 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:291 msgid "lower right region of the screen." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:288 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:294 msgid "try rebooting your computer." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:290 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:302 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:296 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:308 msgid "try deleting the file" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:395 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:253 msgid "calibre" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:397 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:255 msgid "&Restrict to:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:398 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:256 msgid "Books display will be restricted to those matching the selected saved search" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:399 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:257 msgid "set in ui.py" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:400 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:258 msgid "Advanced search" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:402 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:260 msgid "Alt+S" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:403 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:261 msgid "&Search:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:404 -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:405 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:262 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:263 msgid "<p>Search the list of books by title, author, publisher, tags, comments, etc.<br><br>Words separated by spaces are ANDed" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:406 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:264 msgid "Reset Quick Search" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:408 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:266 msgid "Choose saved search or enter name for new saved search" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:409 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:267 msgid "Copy current search text (instead of search name)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:411 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:269 msgid "Save current search under the name shown in the box" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:413 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:271 msgid "Delete current saved search" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:415 -msgid "Sort by &popularity" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:416 -msgid "Match any" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:417 -msgid "Match all" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:418 -msgid "Create, edit, and delete user categories" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:419 -msgid "Manage &user categories" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:420 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:273 msgid "Add books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:421 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:274 msgid "A" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:422 -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:423 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:275 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:276 msgid "Remove books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:424 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:277 msgid "Del" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:425 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:278 msgid "Edit meta information" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:426 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:279 msgid "E" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:427 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:280 msgid "Merge book records" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:428 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:281 msgid "M" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:429 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:282 msgid "Send to device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:430 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:355 -msgid "Save to disk" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:431 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:284 msgid "S" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:432 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:285 msgid "Fetch news" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:433 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:286 msgid "F" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:434 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:287 msgid "Convert E-books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:435 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:288 msgid "C" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:436 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:369 -msgid "View" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:437 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:290 msgid "V" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:438 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:291 msgid "Open containing folder" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:439 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:292 msgid "Show book details" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:440 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:293 msgid "Books by same author" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:441 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:294 msgid "Books in this series" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:442 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:295 msgid "Books by this publisher" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:443 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:296 msgid "Books with the same tags" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:445 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:298 msgid "Configure calibre" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:446 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:299 msgid "Ctrl+P" msgstr "" @@ -6371,15 +6498,35 @@ msgstr "" msgid "No matches found for this book" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/search_box.py:83 -#: /home/kovid/work/calibre/src/calibre/gui2/search_box.py:243 +#: /home/kovid/work/calibre/src/calibre/gui2/search_box.py:86 +#: /home/kovid/work/calibre/src/calibre/gui2/search_box.py:249 msgid "Search" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/search_box.py:297 +#: /home/kovid/work/calibre/src/calibre/gui2/search_box.py:302 msgid "The selected search will be <b>permanently deleted</b>. Are you sure?" msgstr "" +#: /home/kovid/work/calibre/src/calibre/gui2/search_box.py:344 +msgid "Search (For Advanced Search click the button to the left)" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/search_box.py:371 +msgid "Saved Searches" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/search_restriction_mixin.py:46 +msgid "({0} of {1})" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/search_restriction_mixin.py:52 +msgid "(all books)" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/search_restriction_mixin.py:54 +msgid "({0} of all)" +msgstr "" + #: /home/kovid/work/calibre/src/calibre/gui2/shortcuts.py:58 msgid "Press a key..." msgstr "" @@ -6440,82 +6587,62 @@ msgstr "" msgid "&Alternate shortcut:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/sidebar.py:24 -msgid "Jobs:" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/sidebar.py:32 -msgid "Click to see list of active jobs." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/sidebar.py:83 -msgid "Hide Book Details" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/sidebar.py:83 -msgid "Show Book Details" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/sidebar.py:84 -msgid "Hide Tag Browser" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/sidebar.py:84 -msgid "Show Tag Browser" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/sidebar.py:85 -msgid "Hide Cover Browser" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/sidebar.py:85 -msgid "Show Cover Browser" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/sidebar.py:95 -msgid "Side bar" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/sidebar.py:135 -msgid "Cover browser could not be loaded: " -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:142 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:150 msgid "Rename" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:147 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:155 msgid "Hide category %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:150 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:158 msgid "Show category" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:154 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:162 msgid "Show all categories" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:161 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:169 msgid "Manage " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:165 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:173 msgid "Manage Saved Searches" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:172 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:176 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:180 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:184 msgid "Manage User Categories" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:329 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:377 #: /home/kovid/work/calibre/src/calibre/library/database2.py:238 msgid "Searches" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:420 -msgid "The name %s is already used." +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:451 +msgid "Duplicate search name" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:452 +msgid "The saved search name %s is already used." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:652 +msgid "Sort by &popularity" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:656 +msgid "Match all" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:656 +msgid "Match any" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:661 +msgid "Manage &user categories" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/tools.py:63 @@ -6553,189 +6680,59 @@ msgstr "" msgid "The following books have already been converted to %s format. Do you wish to reconvert them?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:70 -msgid "Save single format to disk..." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:162 -msgid "Search (For Advanced Search click the button to the left)" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:168 -msgid "Saved Searches" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:191 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:172 msgid "Error communicating with device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:208 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:189 msgid "&Restore" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:210 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:191 msgid "&Donate to support calibre" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:213 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:194 msgid "&Eject connected device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:218 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:199 msgid "&Restart" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:258 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:240 msgid "<p>For help see the: <a href=\"%s\">User Manual</a><br>" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:264 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:246 msgid "<b>%s</b>: %s by <b>Kovid Goyal %%(version)s</b><br>%%(device)s</p>" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:281 -msgid "Edit metadata individually" -msgstr "" - #: /home/kovid/work/calibre/src/calibre/gui2/ui.py:283 -msgid "Edit metadata in bulk" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:285 -msgid "Download metadata and covers" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:286 -msgid "Download only metadata" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:287 -msgid "Download only covers" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:288 -msgid "Download only social metadata" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:292 -msgid "Merge into first selected book - delete others" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:294 -msgid "Merge into first selected book - keep others" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:301 -msgid "Add books from a single directory" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:302 -msgid "Add books from directories, including sub-directories (One book per directory, assumes every ebook file is the same book in a different format)" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:305 -msgid "Add books from directories, including sub directories (Multiple books per directory, assumes every ebook file is a different book)" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:308 -msgid "Add Empty book. (Book entry with no formats)" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:356 -msgid "Save to disk in a single directory" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:357 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2299 -msgid "Save only %s format to disk" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:360 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2302 -msgid "Save only %s format to disk in a single directory" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:370 -msgid "View specific format" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:375 -msgid "Remove selected books" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:377 -msgid "Remove files of a specific format from selected books.." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:379 -msgid "Remove all formats from selected books, except..." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:381 -msgid "Remove covers from selected books" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:420 -msgid "Convert individually" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:421 -msgid "Bulk convert" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:424 -msgid "Create catalog of books in your calibre library" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:440 -msgid "Run welcome wizard" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:480 -msgid "Similar books..." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:564 msgid "Calibre Quick Start Guide" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:689 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:347 msgid "Select folder to open as device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:800 -msgid "Browse by covers" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:870 -msgid "({0} of {1})" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:875 -msgid "(all books)" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:877 -msgid "({0} of all)" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1000 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:485 msgid "Device: " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1002 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:487 msgid " detected." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1034 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:519 msgid "Connected " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1046 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:531 msgid "Device database corrupted" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1047 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:532 msgid "" "\n" " <p>The database of books on the reader is corrupted. Try the following:\n" @@ -6746,386 +6743,386 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1110 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1287 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:595 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:772 msgid "Use library only" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1111 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1288 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:596 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:773 msgid "User annotations generated from main library only" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1118 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1604 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1661 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1699 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1720 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1850 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1915 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2033 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:603 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1098 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1155 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1193 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1214 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1344 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1409 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1527 msgid "No books selected" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1119 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:604 msgid "No books selected to fetch annotations from" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1144 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:629 msgid "Merging user annotations into database" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1172 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:657 msgid "%s<br />Last Page Read: %d (%d%%)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1178 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:663 msgid "%s<br />Last Page Read: Location %d (%d%%)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1197 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:682 msgid "<b>Location %d • %s</b><br />%s<br />" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1206 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:691 msgid "<b>Page %d • %s</b><br />" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1211 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:696 msgid "<b>Location %d • %s</b><br />" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1331 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:816 msgid "How many empty books?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1332 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:817 msgid "How many empty books should be added?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1380 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1431 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:865 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:916 msgid "Uploading books to device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1392 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:877 msgid "EPUB Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1393 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:878 msgid "LRF Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1394 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:879 msgid "HTML Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1395 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:880 msgid "LIT Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1396 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:881 msgid "MOBI Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1397 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:882 msgid "Topaz books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1398 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:883 msgid "Text books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1399 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:884 msgid "PDF Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1400 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:885 msgid "Comics" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1401 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:886 msgid "Archives" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1405 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:890 msgid "Supported books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1440 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:925 msgid "Merged some books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1441 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:926 msgid "Some duplicates were found and merged into the following existing books:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1450 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:935 msgid "Failed to read metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1451 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:936 msgid "Failed to read metadata from the following" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1471 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:956 msgid "Cannot delete" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1474 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2177 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2202 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:959 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1671 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1696 msgid "No book selected" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1484 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:969 msgid "Choose formats to be deleted" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1502 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:987 msgid "Choose formats <b>not</b> to be deleted" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1540 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1025 msgid "The selected books will be <b>permanently deleted</b> and the files removed from your computer. Are you sure?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1557 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1046 msgid "The selected books will be <b>permanently deleted</b> from your device. Are you sure?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1572 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1061 msgid "Deleting books from device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1603 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1097 msgid "Cannot download metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1619 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1113 msgid "social metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1621 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1115 msgid "covers" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1621 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1115 msgid "metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1623 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1117 msgid "Downloading %s for %d book(s)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1645 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1139 msgid "Failed to download some metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1646 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1140 msgid "Failed to download metadata for the following:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1649 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1143 msgid "Failed to download metadata:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1660 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1698 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1154 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1192 msgid "Cannot edit metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1719 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1722 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1213 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1216 msgid "Cannot merge books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1723 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1217 msgid "At least two books must be selected for merging" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1727 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1221 msgid "All book formats and metadata from the selected books will be added to the <b>first selected book.</b><br><br> The second and subsequently selected books will not be deleted or changed.<br><br>Please confirm you want to proceed." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1738 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1232 msgid "All book formats and metadata from the selected books will be merged into the <b>first selected book</b>.<br><br>After merger the second and subsequently selected books will be <b>deleted</b>. <br><br>All book formats of the first selected book will be kept and any duplicate formats in the second and subsequently selected books will be permanently <b>deleted</b> from your computer.<br><br> Are you <b>sure</b> you want to proceed?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1750 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1244 msgid "You are about to merge more than 5 books. Are you <b>sure</b> you want to proceed?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1849 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1343 msgid "Cannot save to disk" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1852 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1346 msgid "Choose destination directory" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1885 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1379 msgid "Error while saving" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1886 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1380 msgid "There was an error while saving." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1893 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1894 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1387 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1388 msgid "Could not save some books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1895 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1389 msgid "Click the show details button to see which ones." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1916 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1410 msgid "No books selected to generate catalog for" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1933 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1427 msgid "Generating %s catalog..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1939 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1433 msgid "" "No books to catalog\n" "Check exclude tags" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1949 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1443 msgid "Catalog generated." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1952 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1446 msgid "Export Catalog Directory" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1953 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1447 msgid "Select destination for %s.%s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1967 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1461 msgid "Fetching news from " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1981 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1475 msgid " fetched." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2032 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1526 msgid "Cannot convert" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2061 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1555 msgid "Starting conversion of %d book(s)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2177 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2235 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1671 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1729 msgid "Cannot view" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2191 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1685 msgid "Multiple Books Selected" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2192 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1686 msgid "You are attempting to open %d books. Opening too many books at once can be slow and have a negative effect on the responsiveness of your computer. Once started the process cannot be stopped until complete. Do you wish to continue?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2201 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1695 msgid "Cannot open folder" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2236 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1730 msgid "%s has no available formats." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2277 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2282 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1764 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1769 msgid "Cannot configure" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2278 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1765 msgid "Cannot configure while there are running jobs." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2283 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1770 msgid "Cannot configure before calibre is restarted." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2334 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1817 msgid "No detailed info available" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2335 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1818 msgid "No detailed information is available for books on the device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2385 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1870 msgid "Failed" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2391 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1876 msgid "Error talking to device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2392 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1877 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/ui.py:2415 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2443 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1900 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1928 msgid "Conversion Error" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2416 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1901 msgid "<p>Could not convert: %s<p>It is a <a href=\"%s\">DRM</a>ed book. You must first remove the DRM using third party tools." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2429 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1914 msgid "Recipe Disabled" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2444 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1929 msgid "<b>Failed</b>" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2491 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1969 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/ui.py:2516 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1994 msgid "There are active jobs. Are you sure you want to quit?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2519 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1997 msgid "" " is communicating with the device!<br>\n" " Quitting may cause corruption on the device.<br>\n" " Are you sure you want to quit?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2523 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2001 msgid "WARNING: Active jobs" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2575 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2053 msgid "will keep running in the system tray. To close it, choose <b>Quit</b> in the context menu of the system tray." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2594 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2072 msgid "<span style=\"color:red; font-weight:bold\">Latest version: <a href=\"%s\">%s</a></span>" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2602 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2080 msgid "Update available" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2603 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:2081 msgid "%s has been updated to version %s. See the <a href=\"http://calibre-ebook.com/whats-new\">new features</a>. Visit the download page?" msgstr "" @@ -7585,82 +7582,94 @@ msgstr "" msgid "Print eBook" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:196 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:198 msgid "Copy Image" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:197 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:199 msgid "Paste Image" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:226 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:228 msgid "" "Library\n" "%d\n" "books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:227 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:229 msgid "" "Reader\n" "%s\n" "available" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:228 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:230 msgid "" "Card A\n" "%s\n" "available" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:229 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:231 msgid "" "Card B\n" "%s\n" "available" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:233 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:235 msgid "Click to see the books available on your computer" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:236 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:238 msgid "Click to see the books in the main memory of your reader" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:237 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:239 msgid "Click to see the books on storage card A in your reader" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:238 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:240 msgid "Click to see the books on storage card B in your reader" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:246 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:248 msgid "Books located at" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:504 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:506 msgid "Change Case" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:505 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:507 msgid "Upper Case" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:506 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:508 msgid "Lower Case" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:507 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:509 msgid "Swap Case" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:508 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:510 msgid "Title Case" msgstr "" +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:932 +msgid "Drag to resize" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:963 +msgid "Show" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:968 +msgid "Hide" +msgstr "" + #: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:367 msgid "If you use the WordPlayer e-book app on your Android phone, you can access your calibre book collection directly on the device. To do this you have to turn on the content server." msgstr "" @@ -8346,27 +8355,27 @@ msgstr "" msgid "Card B" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1542 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1665 msgid "<p>Migrating old database to ebook library in %s<br><center>" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1571 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1694 msgid "Copying <b>%s</b>" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1588 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1711 msgid "Compacting database" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1681 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1804 msgid "Checking SQL integrity..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1720 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1845 msgid "Checking for missing files." msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1742 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1867 msgid "Checked id" msgstr "" @@ -8784,95 +8793,95 @@ msgstr "" msgid "Do not download latest version of builtin recipes from the calibre server" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:43 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:44 msgid "Unknown News Source" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:595 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:605 msgid "The \"%s\" recipe needs a username and password." msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:692 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:702 msgid "Download finished" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:694 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:704 msgid "Failed to download the following articles:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:700 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:710 msgid "Failed to download parts of the following articles:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:702 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:712 msgid " from " msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:704 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:714 msgid "\tFailed links:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:821 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:831 msgid "Could not fetch article. Run with -vv to see the reason" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:842 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:852 msgid "Fetching feeds..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:847 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:857 msgid "Got feeds from index page" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:853 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:863 msgid "Trying to download cover..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:855 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:865 msgid "Generating masthead..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:936 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:946 msgid "Starting download [%d thread(s)]..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:952 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:962 msgid "Feeds downloaded to %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:962 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:972 msgid "Could not download cover: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:974 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:984 msgid "Downloading cover from %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:1009 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:1024 msgid "Masthead image downloaded" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:1205 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:1220 msgid "Untitled Article" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:1276 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:1291 msgid "Article downloaded: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:1287 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:1302 msgid "Article download failed: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:1304 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:1319 msgid "Fetching feed" msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:1451 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:1466 msgid "Failed to log in, check your username and password for the calibre Periodicals service." msgstr "" -#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:1467 +#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:1482 msgid "You do not have permission to download this issue. Either your subscription has expired or you have exceeded the maximum allowed downloads for today." msgstr "" From b94a1252c2a33df35ed69d1c660386ffbde1a88f Mon Sep 17 00:00:00 2001 From: Kovid Goyal <kovid@kovidgoyal.net> Date: Fri, 11 Jun 2010 17:58:39 -0600 Subject: [PATCH 105/112] Refactoring --- src/calibre/gui2/device.py | 12 +++++----- src/calibre/gui2/dialogs/book_info.py | 4 ++-- src/calibre/gui2/status.py | 32 +++++++++++++++------------ src/calibre/gui2/ui.py | 22 +++++++++--------- 4 files changed, 37 insertions(+), 33 deletions(-) diff --git a/src/calibre/gui2/device.py b/src/calibre/gui2/device.py index d806890807..9d7cf86dac 100644 --- a/src/calibre/gui2/device.py +++ b/src/calibre/gui2/device.py @@ -687,7 +687,7 @@ class DeviceMixin(object): self.emailer.send_mails(jobnames, Dispatcher(partial(self.emails_sent, remove=remove)), attachments, to_s, subjects, texts, attachment_names) - self.status_bar.showMessage(_('Sending email to')+' '+to, 3000) + self.status_bar.show_message(_('Sending email to')+' '+to, 3000) auto = [] if _auto_ids != []: @@ -748,7 +748,7 @@ class DeviceMixin(object): '%s'%errors, show=True ) else: - self.status_bar.showMessage(_('Sent by email:') + ', '.join(good), + self.status_bar.show_message(_('Sent by email:') + ', '.join(good), 5000) def cover_to_thumbnail(self, data): @@ -787,7 +787,7 @@ class DeviceMixin(object): attachments, to_s, subjects, texts, attachment_names) sent_mails.append(to_s[0]) if sent_mails: - self.status_bar.showMessage(_('Sent news to')+' '+\ + self.status_bar.show_message(_('Sent news to')+' '+\ ', '.join(sent_mails), 3000) def sync_catalogs(self, send_ids=None, do_auto_convert=True): @@ -846,7 +846,7 @@ class DeviceMixin(object): self.upload_books(files, names, metadata, on_card=on_card, memory=[files, remove]) - self.status_bar.showMessage(_('Sending catalogs to device.'), 5000) + self.status_bar.show_message(_('Sending catalogs to device.'), 5000) @@ -909,7 +909,7 @@ class DeviceMixin(object): self.upload_books(files, names, metadata, on_card=on_card, memory=[files, remove]) - self.status_bar.showMessage(_('Sending news to device.'), 5000) + self.status_bar.show_message(_('Sending news to device.'), 5000) def sync_to_device(self, on_card, delete_from_library, @@ -963,7 +963,7 @@ class DeviceMixin(object): names.append('%s_%d%s'%(prefix, id, os.path.splitext(f)[1])) remove = remove_ids if delete_from_library else [] self.upload_books(gf, names, good, on_card, memory=(_files, remove)) - self.status_bar.showMessage(_('Sending books to device.'), 5000) + self.status_bar.show_message(_('Sending books to device.'), 5000) auto = [] if _auto_ids != []: diff --git a/src/calibre/gui2/dialogs/book_info.py b/src/calibre/gui2/dialogs/book_info.py index 05841d9178..0cd7c1d419 100644 --- a/src/calibre/gui2/dialogs/book_info.py +++ b/src/calibre/gui2/dialogs/book_info.py @@ -49,12 +49,12 @@ class BookInfo(QDialog, Ui_BookInfo): def open_book_path(self, path): if os.sep in unicode(path): - QDesktopServices.openUrl(QUrl('file:'+path)) + QDesktopServices.openUrl(QUrl.fromLocalFile(path)) else: format = unicode(path) path = self.view.model().db.format_abspath(self.current_row, format) if path is not None: - QDesktopServices.openUrl(QUrl('file:'+path)) + QDesktopServices.openUrl(QUrl.fromLocalFile(path)) def next(self): diff --git a/src/calibre/gui2/status.py b/src/calibre/gui2/status.py index 14c6131fb8..fa8a249ae8 100644 --- a/src/calibre/gui2/status.py +++ b/src/calibre/gui2/status.py @@ -162,16 +162,31 @@ class BookInfoDisplay(QWidget): self.updateGeometry() self.setVisible(True) +class StatusBarInterface(object): -class StatusBar(QStatusBar): + def initialize(self, systray=None): + self.systray = systray + self.notifier = get_notifier(systray) + + def show_message(self, msg, timeout=0): + QStatusBar.showMessage(self, msg, timeout) + if self.notifier is not None and not config['disable_tray_notification']: + if isosx and isinstance(msg, unicode): + try: + msg = msg.encode(preferred_encoding) + except UnicodeEncodeError: + msg = msg.encode('utf-8') + self.notifier(msg) + + +class StatusBar(QStatusBar, StatusBarInterface): resized = pyqtSignal(object) files_dropped = pyqtSignal(object, object) show_book_info = pyqtSignal() def initialize(self, systray=None): - self.systray = systray - self.notifier = get_notifier(systray) + StatusBarInterface.initialize(self, systray=systray) self.book_info = BookInfoDisplay(self.clearMessage) self.book_info.setAcceptDrops(True) self.scroll_area = QScrollArea() @@ -192,15 +207,4 @@ class StatusBar(QStatusBar): def reset_info(self): self.book_info.show_data({}) - def showMessage(self, msg, timeout=0): - ret = QStatusBar.showMessage(self, msg, timeout) - if self.notifier is not None and not config['disable_tray_notification']: - if isosx and isinstance(msg, unicode): - try: - msg = msg.encode(preferred_encoding) - except UnicodeEncodeError: - msg = msg.encode('utf-8') - self.notifier(msg) - return ret - diff --git a/src/calibre/gui2/ui.py b/src/calibre/gui2/ui.py index 6c9d0b3d52..1d268235a9 100644 --- a/src/calibre/gui2/ui.py +++ b/src/calibre/gui2/ui.py @@ -223,7 +223,7 @@ class Main(MainWindow, Ui_MainWindow, DeviceMixin, ToolbarMixin, ####################### Setup device detection ######################## self.device_manager = DeviceManager(Dispatcher(self.device_detected), - self.job_manager, Dispatcher(self.status_bar.showMessage)) + self.job_manager, Dispatcher(self.status_bar.show_message)) self.device_manager.start() @@ -482,7 +482,7 @@ class Main(MainWindow, Ui_MainWindow, DeviceMixin, ToolbarMixin, Dispatcher(self.info_read)) self.set_default_thumbnail(\ self.device_manager.device.THUMBNAIL_HEIGHT) - self.status_bar.showMessage(_('Device: ')+\ + self.status_bar.show_message(_('Device: ')+\ self.device_manager.device.__class__.get_gui_name()+\ _(' detected.'), 3000) self.device_connected = 'device' if not is_folder_device else 'folder' @@ -861,7 +861,7 @@ class Main(MainWindow, Ui_MainWindow, DeviceMixin, ToolbarMixin, to_device = allow_device and self.stack.currentIndex() != 0 self._add_books(books, to_device) if to_device: - self.status_bar.showMessage(\ + self.status_bar.show_message(\ _('Uploading books to device.'), 2000) @@ -912,7 +912,7 @@ class Main(MainWindow, Ui_MainWindow, DeviceMixin, ToolbarMixin, self.upload_books(paths, list(map(ascii_filename, names)), infos, on_card=on_card) - self.status_bar.showMessage( + self.status_bar.show_message( _('Uploading books to device.'), 2000) if getattr(self._adder, 'number_of_books_added', 0) > 0: self.library_view.model().books_added(self._adder.number_of_books_added) @@ -1058,7 +1058,7 @@ class Main(MainWindow, Ui_MainWindow, DeviceMixin, ToolbarMixin, job = self.remove_paths(paths) self.delete_memory[job] = (paths, view.model()) view.model().mark_for_deletion(job, rows) - self.status_bar.showMessage(_('Deleting books from device.'), 1000) + self.status_bar.show_message(_('Deleting books from device.'), 1000) def remove_paths(self, paths): return self.device_manager.delete_books(\ @@ -1424,7 +1424,7 @@ class Main(MainWindow, Ui_MainWindow, DeviceMixin, ToolbarMixin, job.catalog_file_path = out job.fmt = fmt job.catalog_sync, job.catalog_title = sync, title - self.status_bar.showMessage(_('Generating %s catalog...')%fmt) + self.status_bar.show_message(_('Generating %s catalog...')%fmt) def catalog_generated(self, job): if job.result: @@ -1440,7 +1440,7 @@ class Main(MainWindow, Ui_MainWindow, DeviceMixin, ToolbarMixin, sync = dynamic.get('catalogs_to_be_synced', set([])) sync.add(id) dynamic.set('catalogs_to_be_synced', sync) - self.status_bar.showMessage(_('Catalog generated.'), 3000) + self.status_bar.show_message(_('Catalog generated.'), 3000) self.sync_catalogs() if job.fmt not in ['EPUB','MOBI']: export_dir = choose_dir(self, _('Export Catalog Directory'), @@ -1458,7 +1458,7 @@ class Main(MainWindow, Ui_MainWindow, DeviceMixin, ToolbarMixin, Dispatcher(self.scheduled_recipe_fetched), func, args=args, description=desc) self.conversion_jobs[job] = (temp_files, fmt, arg) - self.status_bar.showMessage(_('Fetching news from ')+arg['title'], 2000) + self.status_bar.show_message(_('Fetching news from ')+arg['title'], 2000) def scheduled_recipe_fetched(self, job): temp_files, fmt, arg = self.conversion_jobs.pop(job) @@ -1472,7 +1472,7 @@ class Main(MainWindow, Ui_MainWindow, DeviceMixin, ToolbarMixin, sync.add(id) dynamic.set('news_to_be_synced', sync) self.scheduler.recipe_downloaded(arg) - self.status_bar.showMessage(arg['title'] + _(' fetched.'), 3000) + self.status_bar.show_message(arg['title'] + _(' fetched.'), 3000) self.email_news(id) self.sync_news() @@ -1552,7 +1552,7 @@ class Main(MainWindow, Ui_MainWindow, DeviceMixin, ToolbarMixin, num = len(jobs) if num > 0: - self.status_bar.showMessage(_('Starting conversion of %d book(s)') % + self.status_bar.show_message(_('Starting conversion of %d book(s)') % num, 2000) def queue_convert_jobs(self, jobs, changed, bad, rows, previous, @@ -1599,7 +1599,7 @@ class Main(MainWindow, Ui_MainWindow, DeviceMixin, ToolbarMixin, self.library_view.model().db.add_format(book_id, \ fmt, data, index_is_id=True) data.close() - self.status_bar.showMessage(job.description + \ + self.status_bar.show_message(job.description + \ (' completed'), 2000) finally: for f in temp_files: From f0d571df33cfcd0a047b81c762ca2efe95301862 Mon Sep 17 00:00:00 2001 From: Kovid Goyal <kovid@kovidgoyal.net> Date: Fri, 11 Jun 2010 18:22:31 -0600 Subject: [PATCH 106/112] Refactoring to make the status bar and book details pane logically separate --- src/calibre/gui2/init.py | 4 ++-- src/calibre/gui2/status.py | 24 +++++++++++++++++++++--- src/calibre/gui2/ui.py | 12 ++++++------ 3 files changed, 29 insertions(+), 11 deletions(-) diff --git a/src/calibre/gui2/init.py b/src/calibre/gui2/init.py index 5a039e7bc1..f59d228ce6 100644 --- a/src/calibre/gui2/init.py +++ b/src/calibre/gui2/init.py @@ -231,7 +231,7 @@ class LibraryViewMixin(object): # {{{ ('connect_to_search_box', (self.search, self.search_done)), ('connect_to_book_display', - (self.status_bar.book_info.show_data,)), + (self.book_details.show_data,)), ]: for view in (self.library_view, self.memory_view, self.card_a_view, self.card_b_view): getattr(view, func)(*args) @@ -360,7 +360,7 @@ class LayoutMixin(object): # {{{ if config['gui_layout'] == 'narrow': from calibre.gui2.status import StatusBar - self.status_bar = StatusBar(self) + self.status_bar = self.book_details = StatusBar(self) self.stack = Stack(self) self.bd_splitter = Splitter('book_details_splitter', _('Book Details'), I('book.svg'), diff --git a/src/calibre/gui2/status.py b/src/calibre/gui2/status.py index fa8a249ae8..7c78d6f3e1 100644 --- a/src/calibre/gui2/status.py +++ b/src/calibre/gui2/status.py @@ -178,16 +178,32 @@ class StatusBarInterface(object): msg = msg.encode('utf-8') self.notifier(msg) + def clear_message(self): + QStatusBar.clearMessage(self) -class StatusBar(QStatusBar, StatusBarInterface): +class BookDetailsInterface(object): + + # These signals must be defined in the class implementing this interface + files_dropped = None + show_book_info = None + + def reset_info(self): + raise NotImplementedError() + + def show_data(self, data): + raise NotImplementedError() + +class StatusBar(QStatusBar, StatusBarInterface, BookDetailsInterface): - resized = pyqtSignal(object) files_dropped = pyqtSignal(object, object) show_book_info = pyqtSignal() + + resized = pyqtSignal(object) + def initialize(self, systray=None): StatusBarInterface.initialize(self, systray=systray) - self.book_info = BookInfoDisplay(self.clearMessage) + self.book_info = BookInfoDisplay(self.clear_message) self.book_info.setAcceptDrops(True) self.scroll_area = QScrollArea() self.scroll_area.setWidget(self.book_info) @@ -207,4 +223,6 @@ class StatusBar(QStatusBar, StatusBarInterface): def reset_info(self): self.book_info.show_data({}) + def show_data(self, data): + self.book_info.show_data(data) diff --git a/src/calibre/gui2/ui.py b/src/calibre/gui2/ui.py index 1d268235a9..5824171213 100644 --- a/src/calibre/gui2/ui.py +++ b/src/calibre/gui2/ui.py @@ -256,8 +256,8 @@ class Main(MainWindow, Ui_MainWindow, DeviceMixin, ToolbarMixin, ####################### Status Bar ##################### self.status_bar.initialize(self.system_tray_icon) - self.status_bar.show_book_info.connect(self.show_book_info) - self.status_bar.files_dropped.connect(self.files_dropped_on_book) + self.book_details.show_book_info.connect(self.show_book_info) + self.book_details.files_dropped.connect(self.files_dropped_on_book) ####################### Setup Toolbar ##################### ToolbarMixin.__init__(self) @@ -503,7 +503,7 @@ class Main(MainWindow, Ui_MainWindow, DeviceMixin, ToolbarMixin, dict(version=self.latest_version, device=' ')) self.device_info = ' ' if self.current_view() != self.library_view: - self.status_bar.reset_info() + self.book_details.reset_info() self.location_view.setCurrentIndex(self.location_view.model().index(0)) self.eject_action.setEnabled(False) self.refresh_ondevice_info (device_connected = False) @@ -1802,9 +1802,9 @@ class Main(MainWindow, Ui_MainWindow, DeviceMixin, ToolbarMixin, self.library_view.set_database(db) self.tags_view.set_database(db, self.tag_match, self.popularity) self.library_view.model().set_book_on_device_func(self.book_on_device) - self.status_bar.clearMessage() + self.status_bar.clear_message() self.search.clear_to_help() - self.status_bar.reset_info() + self.book_details.reset_info() self.library_view.model().count_changed() prefs['library_path'] = self.library_path @@ -1831,7 +1831,7 @@ class Main(MainWindow, Ui_MainWindow, DeviceMixin, ToolbarMixin, ''' page = 0 if location == 'library' else 1 if location == 'main' else 2 if location == 'carda' else 3 self.stack.setCurrentIndex(page) - self.status_bar.reset_info() + self.book_details.reset_info() for x in ('tb', 'cb'): splitter = getattr(self, x+'_splitter') splitter.button.setEnabled(location == 'library') From a10091170bc0dd6487158c253096595fefbee8cd Mon Sep 17 00:00:00 2001 From: Kovid Goyal <kovid@kovidgoyal.net> Date: Fri, 11 Jun 2010 18:34:01 -0600 Subject: [PATCH 107/112] On startup do not focus the search bar. Instead you can acces the search bar easily by pressing the / key or the standard search keyboard shortcut for your operating system --- src/calibre/gui2/search_box.py | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/calibre/gui2/search_box.py b/src/calibre/gui2/search_box.py index d35f5e0725..f34c52d221 100644 --- a/src/calibre/gui2/search_box.py +++ b/src/calibre/gui2/search_box.py @@ -7,8 +7,8 @@ __copyright__ = '2009, Kovid Goyal <kovid@kovidgoyal.net>' __docformat__ = 'restructuredtext en' from PyQt4.Qt import QComboBox, Qt, QLineEdit, QStringList, pyqtSlot, \ - pyqtSignal, SIGNAL, QObject, QDialog -from PyQt4.QtGui import QCompleter + pyqtSignal, SIGNAL, QObject, QDialog, QCompleter, \ + QAction, QKeySequence from calibre.gui2 import config from calibre.gui2.dialogs.confirm_delete import confirm @@ -348,8 +348,14 @@ class SearchBoxMixin(object): self.do_advanced_search) self.search.clear() - self.search.setFocus(Qt.OtherFocusReason) self.search.setMaximumWidth(self.width()-150) + self.action_focus_search = QAction(self) + shortcuts = QKeySequence.keyBindings(QKeySequence.Find) + shortcuts = list(shortcuts) + [QKeySequence('/')] + self.action_focus_search.setShortcuts(shortcuts) + self.action_focus_search.triggered.connect(lambda x: + self.search.setFocus(Qt.OtherFocusReason)) + self.addAction(self.action_focus_search) def search_box_cleared(self): self.tags_view.clear() From fa5b55b0844964c8ae4effbbe6f84a2fcda97d9a Mon Sep 17 00:00:00 2001 From: Kovid Goyal <kovid@kovidgoyal.net> Date: Fri, 11 Jun 2010 22:13:19 -0600 Subject: [PATCH 108/112] Fix #5732 (python function terminated unexpectedly redefinition of group name 'w' as group 4; was group 3) --- src/calibre/utils/date.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/calibre/utils/date.py b/src/calibre/utils/date.py index 50b98b39b8..c5fba13f57 100644 --- a/src/calibre/utils/date.py +++ b/src/calibre/utils/date.py @@ -31,7 +31,7 @@ class SafeLocalTimeZone(tzlocal): def compute_locale_info_for_parse_date(): try: dt = datetime.strptime('1/5/2000', "%x") - except ValueError: + except: try: dt = datetime.strptime('1/5/01', '%x') except: From 78e4e41b7e0358c45655fc3b372878394777f0c7 Mon Sep 17 00:00:00 2001 From: Kovid Goyal <kovid@kovidgoyal.net> Date: Fri, 11 Jun 2010 22:20:35 -0600 Subject: [PATCH 109/112] Fix regression that broke the open containing folder action --- src/calibre/gui2/init.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/calibre/gui2/init.py b/src/calibre/gui2/init.py index f59d228ce6..5f42636dad 100644 --- a/src/calibre/gui2/init.py +++ b/src/calibre/gui2/init.py @@ -132,6 +132,7 @@ class ToolbarMixin(object): # {{{ self.action_open_containing_folder.setShortcut(Qt.Key_O) self.addAction(self.action_open_containing_folder) + self.action_open_containing_folder.triggered.connect(self.view_folder) self.action_sync.setShortcut(Qt.Key_D) self.action_sync.setEnabled(True) self.create_device_menu() From 129cd022927d2f134dddf225a22d330c5bf61efe Mon Sep 17 00:00:00 2001 From: Kovid Goyal <kovid@kovidgoyal.net> Date: Fri, 11 Jun 2010 22:30:58 -0600 Subject: [PATCH 110/112] Book list: Do not let the default layout have any column wider than 350 pixels --- src/calibre/gui2/library/views.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/calibre/gui2/library/views.py b/src/calibre/gui2/library/views.py index 6d8efd68fa..ad26e50b0e 100644 --- a/src/calibre/gui2/library/views.py +++ b/src/calibre/gui2/library/views.py @@ -292,7 +292,8 @@ class BooksView(QTableView): # {{{ old_state['column_positions'][name] = i if name != 'ondevice': old_state['column_sizes'][name] = \ - max(self.sizeHintForColumn(i), h.sectionSizeHint(i)) + min(350, max(self.sizeHintForColumn(i), + h.sectionSizeHint(i))) if name == 'timestamp': old_state['column_sizes'][name] += 12 return old_state From a3219557b190ae5b78eb804a69128f675c845eca Mon Sep 17 00:00:00 2001 From: Kovid Goyal <kovid@kovidgoyal.net> Date: Fri, 11 Jun 2010 22:38:51 -0600 Subject: [PATCH 111/112] Fix #5801 (Cover in book info pane is cut off) --- src/calibre/gui2/status.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/calibre/gui2/status.py b/src/calibre/gui2/status.py index 7c78d6f3e1..50a256ef2d 100644 --- a/src/calibre/gui2/status.py +++ b/src/calibre/gui2/status.py @@ -61,7 +61,7 @@ class BookInfoDisplay(QWidget): pixmap = self.pixmap() pwidth, pheight = pixmap.width(), pixmap.height() width, height = fit_image(pwidth, pheight, - pwidth, self.statusbar_height-12)[1:] + pwidth, self.statusbar_height-20)[1:] self.setMaximumHeight(height) try: aspect_ratio = pwidth/float(pheight) From 730157160bcd4833a201abb22cad59a7de03727a Mon Sep 17 00:00:00 2001 From: Kovid Goyal <kovid@kovidgoyal.net> Date: Sat, 12 Jun 2010 00:41:20 -0600 Subject: [PATCH 112/112] Support for the Sigmatek EBK52 --- src/calibre/customize/builtins.py | 3 ++- src/calibre/devices/eslick/driver.py | 25 +++++++++++++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/src/calibre/customize/builtins.py b/src/calibre/customize/builtins.py index afeba785d8..ca93990420 100644 --- a/src/calibre/customize/builtins.py +++ b/src/calibre/customize/builtins.py @@ -445,7 +445,7 @@ from calibre.devices.nook.driver import NOOK from calibre.devices.prs505.driver import PRS505 from calibre.devices.android.driver import ANDROID, S60 from calibre.devices.nokia.driver import N770, N810, E71X -from calibre.devices.eslick.driver import ESLICK +from calibre.devices.eslick.driver import ESLICK, EBK52 from calibre.devices.nuut2.driver import NUUT2 from calibre.devices.iriver.driver import IRIVER_STORY from calibre.devices.binatone.driver import README @@ -519,6 +519,7 @@ plugins += [ N810, COOL_ER, ESLICK, + EBK52, NUUT2, IRIVER_STORY, GER2, diff --git a/src/calibre/devices/eslick/driver.py b/src/calibre/devices/eslick/driver.py index a38f742ecf..9f2ba7d252 100644 --- a/src/calibre/devices/eslick/driver.py +++ b/src/calibre/devices/eslick/driver.py @@ -36,4 +36,29 @@ class ESLICK(USBMS): SUPPORTS_SUB_DIRS = True + @classmethod + def can_handle(cls, dev, debug=False): + return (dev[3], dev[4]) != ('philips', 'Philips d') + + + +class EBK52(ESLICK): + + name = 'EBK-52 Device Interface' + gui_name = 'Sigmatek EBK' + description = _('Communicate with the Sigmatek eBook reader.') + + FORMATS = ['epub', 'fb2', 'pdf', 'txt'] + + VENDOR_NAME = '' + WINDOWS_MAIN_MEM = WINDOWS_CARD_A_MEM = 'EBOOK_READER' + + MAIN_MEMORY_VOLUME_LABEL = 'Sigmatek Main Memory' + STORAGE_CARD_VOLUME_LABEL = 'Sigmatek Storage Card' + + + @classmethod + def can_handle(cls, dev, debug=False): + return (dev[3], dev[4]) == ('philips', 'Philips d') +