diff --git a/Changelog.yaml b/Changelog.yaml index 35365d2c13..68149e6a21 100644 --- a/Changelog.yaml +++ b/Changelog.yaml @@ -19,6 +19,65 @@ # new recipes: # - title: +- version: 0.8.23 + date: 2011-10-21 + + new features: + - title: "Drivers for T-Mobile Move, new Pandigital Novel, New Onyx Boox and Freescale MX 515" + + - title: "SONY T1 driver: Support for periodicals and better timezone detection" + + - title: "Add a remove cover entry to the right click menu of the cover display in the right panel" + tickets: [874689] + + bug fixes: + - title: "Amazon metadata download: Fix for change in Amazon website that broke downloading metadata." + tickets: [878395] + + - title: "MOBI metadata: When reading titles from MOBI files only use the title in the PDB header if there is no long title in the EXTH header" + tickets: [ 875243 ] + + - title: "Fix regression that broke use of complex custom columns in save to disk templates." + tickets: [877366] + + - title: "Fix regression that broke reading metadata from CHM files" + + - title: "Fix a bug that broke conversion of some zipped up HTML files with non ascii filenames on certain windows installs." + tickets: [873288] + + - title: "RTF Input: Fix bug in handling of paragraph separators." + tickets: [863735] + + - title: "Fix a regression that broke downloading certain periodicals for the Kindle." + tickets: [875595] + + - title: "Fix regression that broke updating of covers inside ebook files when saving to disk" + + - title: "Fix regression breaking editing the 'show in tag browser' checkbox in custom column setup editing" + + - title: "Fix typo that broke stopping selected jobs in 0.8.22" + + improved recipes: + - Columbus Dispatch + - Ming Pao + - La Republica + - Korea Times + - USA Today + - CNN + - Liberation + - El Pais + - Helsingin Sanomat + + new recipes: + - title: Kyugyhang, Hankyoreh and Hankyoreh21 + author: Seongkyoun Yoo. + + - title: English Katherimini + author: Thomas Scholl + + - title: Various French news sources + author: Aurelien Chabot. + - version: 0.8.22 date: 2011-10-14 diff --git a/src/calibre/constants.py b/src/calibre/constants.py index d4a0e3550c..b20e466873 100644 --- a/src/calibre/constants.py +++ b/src/calibre/constants.py @@ -4,7 +4,7 @@ __license__ = 'GPL v3' __copyright__ = '2008, Kovid Goyal kovid@kovidgoyal.net' __docformat__ = 'restructuredtext en' __appname__ = u'calibre' -numeric_version = (0, 8, 22) +numeric_version = (0, 8, 23) __version__ = u'.'.join(map(unicode, numeric_version)) __author__ = u"Kovid Goyal " diff --git a/src/calibre/translations/calibre.pot b/src/calibre/translations/calibre.pot index eaf5b5e753..b982e4ae88 100644 --- a/src/calibre/translations/calibre.pot +++ b/src/calibre/translations/calibre.pot @@ -4,9 +4,9 @@ # msgid "" msgstr "" -"Project-Id-Version: calibre 0.8.22\n" -"POT-Creation-Date: 2011-10-13 17:51+MDT\n" -"PO-Revision-Date: 2011-10-13 17:51+MDT\n" +"Project-Id-Version: calibre 0.8.23\n" +"POT-Creation-Date: 2011-10-20 22:00+IST\n" +"PO-Revision-Date: 2011-10-20 22:00+IST\n" "Last-Translator: Automatically generated\n" "Language-Team: LANGUAGE\n" "MIME-Version: 1.0\n" @@ -24,20 +24,20 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/db/cache.py:104 #: /home/kovid/work/calibre/src/calibre/db/cache.py:107 #: /home/kovid/work/calibre/src/calibre/db/cache.py:118 -#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:248 -#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:249 +#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:258 +#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:259 #: /home/kovid/work/calibre/src/calibre/devices/hanvon/driver.py:99 #: /home/kovid/work/calibre/src/calibre/devices/hanvon/driver.py:100 #: /home/kovid/work/calibre/src/calibre/devices/jetbook/driver.py:74 -#: /home/kovid/work/calibre/src/calibre/devices/kindle/driver.py:77 +#: /home/kovid/work/calibre/src/calibre/devices/kindle/driver.py:79 #: /home/kovid/work/calibre/src/calibre/devices/kobo/books.py:24 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:575 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:581 #: /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:660 -#: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:272 -#: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:273 +#: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:308 +#: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:309 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:485 #: /home/kovid/work/calibre/src/calibre/ebooks/chm/input.py:106 #: /home/kovid/work/calibre/src/calibre/ebooks/chm/input.py:109 @@ -80,7 +80,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/rtf.py:101 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/snb.py:16 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/base.py:49 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/base.py:300 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/base.py:301 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/covers.py:79 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/covers.py:81 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/douban.py:80 @@ -92,14 +92,13 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/ozon.py:124 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/txt.py:18 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:43 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:69 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:82 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:125 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:166 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:745 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:999 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:1001 -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:1003 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:85 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:128 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:169 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:748 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:1002 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:1004 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:1006 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/utils.py:299 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/writer2/indexer.py:496 #: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:138 @@ -134,8 +133,8 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/split.py:82 #: /home/kovid/work/calibre/src/calibre/ebooks/pdf/writer.py:102 #: /home/kovid/work/calibre/src/calibre/ebooks/pdf/writer.py:103 -#: /home/kovid/work/calibre/src/calibre/ebooks/rtf/input.py:318 #: /home/kovid/work/calibre/src/calibre/ebooks/rtf/input.py:320 +#: /home/kovid/work/calibre/src/calibre/ebooks/rtf/input.py:322 #: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:385 #: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:393 #: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:158 @@ -143,7 +142,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:380 #: /home/kovid/work/calibre/src/calibre/gui2/add.py:161 #: /home/kovid/work/calibre/src/calibre/gui2/add.py:168 -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:564 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:576 #: /home/kovid/work/calibre/src/calibre/gui2/convert/__init__.py:42 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:122 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:151 @@ -163,7 +162,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1206 #: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1209 #: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1212 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1297 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1300 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:84 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:233 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:252 @@ -176,14 +175,14 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:200 #: /home/kovid/work/calibre/src/calibre/library/cli.py:220 #: /home/kovid/work/calibre/src/calibre/library/database.py:914 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:542 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:550 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:561 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:2038 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:2188 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:3243 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:3245 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:3378 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:543 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:551 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:562 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:2039 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:2191 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:3246 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:3248 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:3381 #: /home/kovid/work/calibre/src/calibre/library/server/content.py:227 #: /home/kovid/work/calibre/src/calibre/library/server/content.py:228 #: /home/kovid/work/calibre/src/calibre/library/server/mobile.py:243 @@ -853,26 +852,26 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:647 #: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:66 #: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:563 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:988 -#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:817 -#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:829 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:989 +#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:820 +#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:832 msgid "Yes" msgstr "" #: /home/kovid/work/calibre/src/calibre/db/fields.py:163 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1102 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1103 msgid "Main" msgstr "" #: /home/kovid/work/calibre/src/calibre/db/fields.py:165 #: /home/kovid/work/calibre/src/calibre/gui2/layout.py:72 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1104 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1105 msgid "Card A" msgstr "" #: /home/kovid/work/calibre/src/calibre/db/fields.py:167 #: /home/kovid/work/calibre/src/calibre/gui2/layout.py:74 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1106 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1107 msgid "Card B" msgstr "" @@ -884,15 +883,15 @@ msgstr "" msgid "Communicate with Android phones." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:134 +#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:143 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:188 +#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:198 msgid "Communicate with S60 phones." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:207 +#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:217 msgid "Communicate with WebOS tablets." msgstr "" @@ -988,16 +987,18 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/nook/driver.py:102 #: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:447 #: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:470 -#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:1078 +#: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:526 +#: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:545 #: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:1084 -#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:1119 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:1090 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:1125 #: /home/kovid/work/calibre/src/calibre/gui2/actions/fetch_news.py:73 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:453 #: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1148 #: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1150 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:335 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:348 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:3104 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:336 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:349 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:3107 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:187 msgid "News" msgstr "" @@ -1005,8 +1006,8 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2685 #: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:65 #: /home/kovid/work/calibre/src/calibre/library/catalog.py:662 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:3063 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:3081 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:3066 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:3084 msgid "Catalog" msgstr "" @@ -1046,11 +1047,11 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:218 #: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:234 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:85 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:88 #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:91 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:299 -#: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:139 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:94 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:97 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:305 +#: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:150 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:140 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:143 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:146 @@ -1070,8 +1071,8 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:330 #: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:344 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:433 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:468 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:439 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:474 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:297 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:328 msgid "Adding books to device metadata listing..." @@ -1081,8 +1082,8 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:354 #: /home/kovid/work/calibre/src/calibre/devices/hanvon/driver.py:114 #: /home/kovid/work/calibre/src/calibre/devices/hanvon/driver.py:125 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:385 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:417 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:391 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:423 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:334 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:352 msgid "Removing books from device..." @@ -1090,8 +1091,8 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:369 #: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:374 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:421 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:428 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:427 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:434 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:359 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:364 msgid "Removing books from device metadata listing..." @@ -1274,64 +1275,89 @@ msgstr "" msgid "Could not generate page mapping." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kindle/driver.py:44 +#: /home/kovid/work/calibre/src/calibre/devices/kindle/driver.py:46 msgid "Communicate with the Kindle eBook reader." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kindle/driver.py:171 +#: /home/kovid/work/calibre/src/calibre/devices/kindle/driver.py:186 +#, python-format +msgid "%(time)s
Last Page Read: %(loc)d (%(pr)d%%)" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/kindle/driver.py:192 +#, python-format +msgid "%(time)s
Last Page Read: Location %(loc)d (%(pr)d%%)" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/kindle/driver.py:211 +#, python-format +msgid "Location %(dl)d • %(typ)s
%(text)s
" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/kindle/driver.py:220 +#, python-format +msgid "Page %(dl)d • %(typ)s
" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/kindle/driver.py:225 +#, python-format +msgid "Location %(dl)d • %(typ)s
" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/kindle/driver.py:288 msgid "Communicate with the Kindle 2/3 eBook reader." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kindle/driver.py:180 +#: /home/kovid/work/calibre/src/calibre/devices/kindle/driver.py:297 msgid "Send page number information when sending books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kindle/driver.py:182 +#: /home/kovid/work/calibre/src/calibre/devices/kindle/driver.py:299 msgid "The Kindle 3 and newer versions can use page number information in MOBI files. With this option, calibre will calculate and send this information to the Kindle when uploading MOBI files by USB. Note that the page numbers do not correspond to any paper book." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kindle/driver.py:187 +#: /home/kovid/work/calibre/src/calibre/devices/kindle/driver.py:304 msgid "Use slower but more accurate page number generation" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kindle/driver.py:189 +#: /home/kovid/work/calibre/src/calibre/devices/kindle/driver.py:306 msgid "There are two ways to generate the page number information. Using the more accurate generator will produce pages that correspond better to a printed book. However, this method is slower and will slow down sending files to the Kindle." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kindle/driver.py:257 +#: /home/kovid/work/calibre/src/calibre/devices/kindle/driver.py:374 msgid "Communicate with the Kindle DX eBook reader." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:24 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:25 msgid "Communicate with the Kobo Reader" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:53 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:54 msgid "The Kobo supports several collections including " msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:55 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:56 msgid "Create tags for automatic management" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:56 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:57 msgid "Upload covers for books (newer readers)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:57 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:58 msgid "Normally, the KOBO readers get the cover image from the ebook file itself. With this option, calibre will send a separate cover image to the reader, useful if you have modified the cover." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:61 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:62 msgid "Upload Black and White Covers" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:555 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:561 #: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:390 msgid "Not Implemented" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:556 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:562 msgid "\".kobo\" files do not exist on the device as books instead, they are rows in the sqlite database. Currently they cannot be exported or viewed." msgstr "" @@ -1445,7 +1471,7 @@ msgid "All by author" msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:70 -#: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:66 +#: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:67 msgid "Comma separated list of metadata fields to turn into collections on the device. Possibilities include: " msgstr "" @@ -1467,17 +1493,17 @@ msgid "Refresh separate covers when using automatic management (newer readers)" msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:86 -#: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:76 +#: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:77 msgid "Set this option to have separate book covers uploaded every time you connect your device. Unset this option if you have so many books on the reader that performance is unacceptable." msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:90 -#: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:80 +#: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:81 msgid "Preserve cover aspect ratio when building thumbnails" msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:92 -#: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:82 +#: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:83 msgid "Set this option if you want the cover thumbnails to have the same aspect ratio (width to height) as the cover. Unset it if you want the thumbnail to be the maximum size, ignoring aspect ratio." msgstr "" @@ -1494,22 +1520,30 @@ msgstr "" msgid "Unnamed" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:35 +#: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:36 msgid "Communicate with the PRST1 and newer SONY eBook readers" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:69 +#: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:70 msgid "Upload separate cover thumbnails for books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:70 +#: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:71 msgid "Normally, the SONY readers get the cover image from the ebook file itself. With this option, calibre will send a separate cover image to the reader, useful if you are sending DRMed books in which you cannot change the cover." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:74 +#: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:75 msgid "Refresh separate covers when using automatic management" msgstr "" +#: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:87 +msgid "Use SONY Author Format (First Author Only)" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:89 +msgid "Set this option if you want the author on the Sony to appear the same way the T1 sets it. This means it will only show the first author for books with multiple authors. Leave this disabled if you use Metadata Plugboards." +msgstr "" + #: /home/kovid/work/calibre/src/calibre/devices/sne/driver.py:17 msgid "Communicate with the Samsung SNE eBook reader." msgstr "" @@ -2188,27 +2222,27 @@ msgstr "" msgid "Replacement to replace the text found with sr3-search." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:717 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:719 msgid "Could not find an ebook inside the archive" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:775 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:777 msgid "Values of series index and rating must be numbers. Ignoring" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:782 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:784 msgid "Failed to parse date/time" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:941 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:943 msgid "Converting input to HTML..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:968 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:970 msgid "Running transforms on ebook..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:1072 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:1074 msgid "Creating" msgstr "" @@ -2854,47 +2888,47 @@ msgstr "" msgid "Cover" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/amazon.py:429 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/amazon.py:436 msgid "Downloads metadata and covers from Amazon" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/amazon.py:439 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/amazon.py:446 msgid "US" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/amazon.py:440 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/amazon.py:447 msgid "France" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/amazon.py:441 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/amazon.py:448 msgid "Germany" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/amazon.py:442 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/amazon.py:449 msgid "UK" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/amazon.py:443 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/amazon.py:450 msgid "Italy" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/amazon.py:444 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/amazon.py:451 msgid "Japan" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/amazon.py:445 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/amazon.py:452 msgid "Spain" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/amazon.py:449 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/amazon.py:456 msgid "Amazon website to use:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/amazon.py:450 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/amazon.py:457 msgid "Metadata from Amazon will be fetched using this country's Amazon website." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/amazon.py:603 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/amazon.py:610 msgid "Amazon timed out. Try again later." msgstr "" @@ -2991,7 +3025,7 @@ msgstr "" msgid "Enable sharing of book content via Facebook etc. on the Kindle. WARNING: Using this feature means that the book will not auto sync its last read position on multiple devices. Complain to Amazon." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:281 +#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:284 msgid "This is an Amazon Topaz book. It cannot be processed." msgstr "" @@ -3368,16 +3402,6 @@ msgid "" "%s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/rtf2xml/ParseRtf.py:379 -msgid "File could be older RTF...\n" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/rtf2xml/ParseRtf.py:383 -msgid "" -"File also has newer RTF.\n" -"Will do the best to convert.\n" -msgstr "" - #: /home/kovid/work/calibre/src/calibre/ebooks/snb/output.py:25 #: /home/kovid/work/calibre/src/calibre/ebooks/tcr/output.py:23 #: /home/kovid/work/calibre/src/calibre/ebooks/txt/output.py:36 @@ -3703,7 +3727,7 @@ msgid "Shift+A" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:87 -#: /home/kovid/work/calibre/src/calibre/gui2/actions/annotate.py:69 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/annotate.py:120 #: /home/kovid/work/calibre/src/calibre/gui2/actions/catalog.py:37 #: /home/kovid/work/calibre/src/calibre/gui2/actions/convert.py:89 #: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:171 @@ -3802,60 +3826,43 @@ msgstr "" msgid "Add books to your calibre library from the connected device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/annotate.py:20 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/annotate.py:26 +msgid "Merging user annotations into database" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/actions/annotate.py:63 #: /home/kovid/work/calibre/src/calibre/gui2/device.py:595 msgid "Fetch annotations (experimental)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/annotate.py:56 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/annotate.py:107 msgid "Not supported" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/annotate.py:57 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/annotate.py:108 msgid "Fetching annotations is not supported for this device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/annotate.py:61 -#: /home/kovid/work/calibre/src/calibre/gui2/actions/annotate.py:245 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/annotate.py:112 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/annotate.py:136 msgid "Use library only" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/annotate.py:62 -#: /home/kovid/work/calibre/src/calibre/gui2/actions/annotate.py:246 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/annotate.py:113 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/annotate.py:137 msgid "User annotations generated from main library only" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/annotate.py:70 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/annotate.py:121 msgid "No books selected to fetch annotations from" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/annotate.py:95 -msgid "Merging user annotations into database" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/actions/annotate.py:123 -#, python-format -msgid "%(time)s
Last Page Read: %(loc)d (%(pr)d%%)" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/actions/annotate.py:129 -#, python-format -msgid "%(time)s
Last Page Read: Location %(loc)d (%(pr)d%%)" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/actions/annotate.py:148 -#, python-format -msgid "Location %(dl)d • %(typ)s
%(text)s
" +#: /home/kovid/work/calibre/src/calibre/gui2/actions/annotate.py:156 +msgid "Some errors" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/annotate.py:157 -#, python-format -msgid "Page %(dl)d • %(typ)s
" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/actions/annotate.py:162 -#, python-format -msgid "Location %(dl)d • %(typ)s
" +msgid "Could not fetch annotations for some books. Click show details to see which ones." msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/catalog.py:20 @@ -4186,8 +4193,8 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/restore_library.py:93 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor.py:216 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:371 -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:505 -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:515 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:506 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:516 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/columns.py:102 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:93 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/plugins.py:282 @@ -5145,27 +5152,31 @@ msgstr "" msgid "Collections" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:290 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:291 #: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:256 msgid "Paste Cover" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:291 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:292 #: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:257 msgid "Copy Cover" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:557 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:293 +msgid "Remove Cover" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:569 msgid "Double-click to open Book Details window" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:558 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:570 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/delete_matching_from_device.py:76 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:295 msgid "Path" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:559 +#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:571 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:109 #, python-format msgid "Cover size: %(width)d x %(height)d" @@ -9846,21 +9857,21 @@ msgstr "" msgid " - Jobs" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:503 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:504 msgid "No job" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:504 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:505 msgid "No job selected" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:506 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:507 msgid "Do you really want to stop the selected job?" msgid_plural "Do you really want to stop all the selected jobs?" msgstr[0] "" msgstr[1] "" -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:516 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:517 msgid "Do you really want to stop all non-device jobs?" msgstr "" @@ -10026,13 +10037,13 @@ msgid "Modified" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:771 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1333 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1336 #: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:312 msgid "The lookup/search name is \"{0}\"" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:777 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1335 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1338 msgid "This book's UUID is \"{0}\"" msgstr "" @@ -10045,11 +10056,11 @@ msgstr "" msgid "Size" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1315 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1318 msgid "Marked for deletion" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1318 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1321 msgid "Double click to edit me

" msgstr "" @@ -13272,7 +13283,7 @@ msgid "Changing the metadata for that many books can take a while. Are you sure? msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:823 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:456 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:457 msgid "Searches" msgstr "" @@ -14516,7 +14527,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/library/caches.py:569 #: /home/kovid/work/calibre/src/calibre/library/caches.py:583 #: /home/kovid/work/calibre/src/calibre/library/caches.py:593 -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:238 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:222 msgid "yes" msgstr "" @@ -14524,7 +14535,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/library/caches.py:568 #: /home/kovid/work/calibre/src/calibre/library/caches.py:580 #: /home/kovid/work/calibre/src/calibre/library/caches.py:590 -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:238 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:222 msgid "no" msgstr "" @@ -15354,17 +15365,17 @@ msgstr "" msgid "%(tt)sAverage rating is %(rating)3.1f" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:3404 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:3407 #, python-format msgid "

Migrating old database to ebook library in %s

" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:3433 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:3436 #, python-format msgid "Copying %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:3450 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:3453 msgid "Compacting database" msgstr "" @@ -15496,20 +15507,20 @@ msgstr "" msgid "Save into a single directory, ignoring the template directory structure" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:319 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:303 #, python-format msgid "" "Failed to calculate path for save to disk. Template: %(templ)s\n" "Error: %(err)s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:325 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:309 #, python-format msgid "Template evaluation resulted in no path components. Template: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:419 -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:452 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:405 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:438 msgid "Requested formats not available" msgstr "" @@ -15895,259 +15906,259 @@ msgstr "" msgid "No such variable " msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:72 +#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:75 msgid "No documentation provided" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:105 +#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:108 msgid "strcmp(x, y, lt, eq, gt) -- does a case-insensitive comparison of x and y as strings. Returns lt if x < y. Returns eq if x == y. Otherwise returns gt." msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:121 +#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:124 msgid "cmp(x, y, lt, eq, gt) -- compares x and y after converting both to numbers. Returns lt if x < y. Returns eq if x == y. Otherwise returns gt." msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:137 +#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:140 msgid "strcat(a, b, ...) -- can take any number of arguments. Returns a string formed by concatenating all the arguments" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:151 +#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:154 msgid "strlen(a) -- Returns the length of the string passed as the argument" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:164 +#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:167 msgid "add(x, y) -- returns x + y. Throws an exception if either x or y are not numbers." msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:175 +#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:178 msgid "subtract(x, y) -- returns x - y. Throws an exception if either x or y are not numbers." msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:186 +#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:189 msgid "multiply(x, y) -- returns x * y. Throws an exception if either x or y are not numbers." msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:197 +#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:200 msgid "divide(x, y) -- returns x / y. Throws an exception if either x or y are not numbers." msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:209 +#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:212 msgid "template(x) -- evaluates x as a template. The evaluation is done in its own context, meaning that variables are not shared between the caller and the template evaluation. Because the { and } characters are special, you must use [[ for the { character and ]] for the } character; they are converted automatically. For example, template('[[title_sort]]') will evaluate the template {title_sort} and return its value." msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:225 +#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:228 msgid "eval(template) -- evaluates the template, passing the local variables (those 'assign'ed to) instead of the book metadata. This permits using the template processor to construct complex results from local variables." msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:239 +#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:242 msgid "assign(id, val) -- assigns val to id, then returns val. id must be an identifier, not an expression" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:250 +#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:253 msgid "print(a, b, ...) -- prints the arguments to standard output. Unless you start calibre from the command line (calibre-debug -g), the output will go to a black hole." msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:262 +#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:265 msgid "field(name) -- returns the metadata field named by name" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:271 +#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:274 msgid "raw_field(name) -- returns the metadata field named by name without applying any formatting." msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:281 +#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:284 msgid "substr(str, start, end) -- returns the start'th through the end'th characters of str. The first character in str is the zero'th character. If end is negative, then it indicates that many characters counting from the right. If end is zero, then it indicates the last character. For example, substr('12345', 1, 0) returns '2345', and substr('12345', 1, -1) returns '234'." msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:295 +#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:298 msgid "lookup(val, pattern, field, pattern, field, ..., else_field) -- like switch, except the arguments are field (metadata) names, not text. The value of the appropriate field will be fetched and used. Note that because composite columns are fields, you can use this function in one composite field to use the value of some other composite field. This is extremely useful when constructing variable save paths" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:310 +#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:313 msgid "lookup requires either 2 or an odd number of arguments" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:323 +#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:326 msgid "test(val, text if not empty, text if empty) -- return `text if not empty` if the field is not empty, otherwise return `text if empty`" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:336 +#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:339 msgid "contains(val, pattern, text if match, text if not match) -- checks if field contains matches for the regular expression `pattern`. Returns `text if match` if matches are found, otherwise it returns `text if no match`" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:352 +#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:355 msgid "switch(val, pattern, value, pattern, value, ..., else_value) -- for each `pattern, value` pair, checks if the field matches the regular expression `pattern` and if so, returns that `value`. If no pattern matches, then else_value is returned. You can have as many `pattern, value` pairs as you want" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:360 +#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:363 msgid "switch requires an odd number of arguments" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:373 +#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:376 msgid "strcat_max(max, string1, prefix2, string2, ...) -- Returns a string formed by concatenating the arguments. The returned value is initialized to string1. `Prefix, string` pairs are added to the end of the value as long as the resulting string length is less than `max`. String1 is returned even if string1 is longer than max. You can pass as many `prefix, string` pairs as you wish." msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:383 +#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:386 msgid "strcat_max requires 2 or more arguments" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:385 +#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:388 msgid "strcat_max requires an even number of arguments" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:389 +#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:392 msgid "first argument to strcat_max must be an integer" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:407 +#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:410 msgid "in_list(val, separator, pattern, found_val, not_found_val) -- treat val as a list of items separated by separator, comparing the pattern against each value in the list. If the pattern matches a value, return found_val, otherwise return not_found_val." msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:425 +#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:428 msgid "str_in_list(val, separator, string, found_val, not_found_val) -- treat val as a list of items separated by separator, comparing the string against each value in the list. If the string matches a value, return found_val, otherwise return not_found_val. If the string contains separators, then it is also treated as a list and each value is checked." msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:446 +#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:449 msgid "identifier_in_list(val, id, found_val, not_found_val) -- treat val as a list of identifiers separated by commas, comparing the string against each value in the list. An identifier has the format \"identifier:value\". The id parameter should be either \"id\" or \"id:regexp\". The first case matches if there is any identifier with that id. The second case matches if the regexp matches the identifier's value. If there is a match, return found_val, otherwise return not_found_val." msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:472 +#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:475 msgid "re(val, pattern, replacement) -- return the field after applying the regular expression. All instances of `pattern` are replaced with `replacement`. As in all of calibre, these are python-compatible regular expressions" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:484 +#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:487 msgid "swap_around_comma(val) -- given a value of the form \"B, A\", return \"A B\". This is most useful for converting names in LN, FN format to FN LN. If there is no comma, the function returns val unchanged" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:496 +#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:499 msgid "ifempty(val, text if empty) -- return val if val is not empty, otherwise return `text if empty`" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:509 +#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:512 msgid "shorten(val, left chars, middle text, right chars) -- Return a shortened version of the field, consisting of `left chars` characters from the beginning of the field, followed by `middle text`, followed by `right chars` characters from the end of the string. `Left chars` and `right chars` must be integers. For example, assume the title of the book is `Ancient English Laws in the Times of Ivanhoe`, and you want it to fit in a space of at most 15 characters. If you use {title:shorten(9,-,5)}, the result will be `Ancient E-nhoe`. If the field's length is less than left chars + right chars + the length of `middle text`, then the field will be used intact. For example, the title `The Dome` would not be changed." msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:535 +#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:538 msgid "count(val, separator) -- interprets the value as a list of items separated by `separator`, returning the number of items in the list. Most lists use a comma as the separator, but authors uses an ampersand. Examples: {tags:count(,)}, {authors:count(&)}" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:547 +#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:550 msgid "list_item(val, index, separator) -- interpret the value as a list of items separated by `separator`, returning the `index`th item. The first item is number zero. The last item can be returned using `list_item(-1,separator)`. If the item is not in the list, then the empty value is returned. The separator has the same meaning as in the count function." msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:568 +#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:571 msgid "select(val, key) -- interpret the value as a comma-separated list of items, with the items being \"id:value\". Find the pair with the id equal to key, and return the corresponding value." msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:586 +#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:589 msgid "formats_modtimes(date_format) -- return a comma-separated list of colon_separated items representing modification times for the formats of a book. The date_format parameter specifies how the date is to be formatted. See the date_format function for details. You can use the select function to get the mod time for a specific format. Note that format names are always uppercase, as in EPUB." msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:605 +#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:608 msgid "formats_sizes() -- return a comma-separated list of colon_separated items representing sizes in bytes of the formats of a book. You can use the select function to get the size for a specific format. Note that format names are always uppercase, as in EPUB." msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:621 +#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:624 msgid "human_readable(v) -- return a string representing the number v in KB, MB, GB, etc." msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:635 +#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:638 msgid "format_number(v, template) -- format the number v using a python formatting template such as \"{0:5.2f}\" or \"{0:,d}\" or \"${0:5,.2f}\". The field_name part of the template must be a 0 (zero) (the \"{0:\" in the above examples). See the template language and python documentation for more examples. Returns the empty string if formatting fails." msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:660 +#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:663 msgid "sublist(val, start_index, end_index, separator) -- interpret the value as a list of items separated by `separator`, returning a new list made from the `start_index` to the `end_index` item. The first item is number zero. If an index is negative, then it counts from the end of the list. As a special case, an end_index of zero is assumed to be the length of the list. Examples using basic template mode and assuming that the tags column (which is comma-separated) contains \"A, B, C\": {tags:sublist(0,1,\\,)} returns \"A\". {tags:sublist(-1,0,\\,)} returns \"C\". {tags:sublist(0,-1,\\,)} returns \"A, B\"." msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:695 +#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:698 msgid "subitems(val, start_index, end_index) -- This function is used to break apart lists of items such as genres. It interprets the value as a comma-separated list of items, where each item is a period-separated list. Returns a new list made by first finding all the period-separated items, then for each such item extracting the start_index` to the `end_index` components, then combining the results back together. The first component in a period-separated list has an index of zero. If an index is negative, then it counts from the end of the list. As a special case, an end_index of zero is assumed to be the length of the list. Example using basic template mode and assuming a #genre value of \"A.B.C\": {#genre:subitems(0,1)} returns \"A\". {#genre:subitems(0,2)} returns \"A.B\". {#genre:subitems(1,0)} returns \"B.C\". Assuming a #genre value of \"A.B.C, D.E.F\", {#genre:subitems(0,1)} returns \"A, D\". {#genre:subitems(0,2)} returns \"A.B, D.E\"" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:733 +#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:736 msgid "format_date(val, format_string) -- format the value, which must be a date, using the format_string, returning a string. The formatting codes are: d : the day as number without a leading zero (1 to 31) dd : the day as number with a leading zero (01 to 31) ddd : the abbreviated localized day name (e.g. \"Mon\" to \"Sun\"). dddd : the long localized day name (e.g. \"Monday\" to \"Sunday\"). M : the month as number without a leading zero (1 to 12). MM : the month as number with a leading zero (01 to 12) MMM : the abbreviated localized month name (e.g. \"Jan\" to \"Dec\"). MMMM : the long localized month name (e.g. \"January\" to \"December\"). yy : the year as two digit number (00 to 99). yyyy : the year as four digit number. iso : the date with time and timezone. Must be the only format present" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:762 +#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:765 msgid "uppercase(val) -- return value of the field in upper case" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:771 +#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:774 msgid "lowercase(val) -- return value of the field in lower case" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:780 +#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:783 msgid "titlecase(val) -- return value of the field in title case" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:789 +#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:792 msgid "capitalize(val) -- return value of the field capitalized" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:798 +#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:801 msgid "booksize() -- return value of the size field" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:812 +#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:815 msgid "ondevice() -- return Yes if ondevice is set, otherwise return the empty string" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:824 +#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:827 msgid "has_cover() -- return Yes if the book has a cover, otherwise return the empty string" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:836 +#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:839 msgid "first_non_empty(value, value, ...) -- returns the first value that is not empty. If all values are empty, then the empty value is returned.You can have as many values as you want." msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:853 +#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:856 msgid "and(value, value, ...) -- returns the string \"1\" if all values are not empty, otherwise returns the empty string. This function works well with test or first_non_empty. You can have as many values as you want." msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:870 +#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:873 msgid "or(value, value, ...) -- returns the string \"1\" if any value is not empty, otherwise returns the empty string. This function works well with test or first_non_empty. You can have as many values as you want." msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:887 +#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:890 msgid "not(value) -- returns the string \"1\" if the value is empty, otherwise returns the empty string. This function works well with test or first_non_empty. You can have as many values as you want." msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:899 +#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:902 msgid "list_union(list1, list2, separator) -- return a list made by merging the items in list1 and list2, removing duplicate items using a case-insensitive compare. If items differ in case, the one in list1 is used. The items in list1 and list2 are separated by separator, as are the items in the returned list." msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:926 +#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:927 msgid "list_difference(list1, list2, separator) -- return a list made by removing from list1 any item found in list2, using a case-insensitive compare. The items in list1 and list2 are separated by separator, as are the items in the returned list." msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:947 +#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:948 msgid "list_intersection(list1, list2, separator) -- return a list made by removing from list1 any item not found in list2, using a case-insensitive compare. The items in list1 and list2 are separated by separator, as are the items in the returned list." msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:968 +#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:969 msgid "list_sort(list, direction, separator) -- return list sorted using a case-insensitive sort. If direction is zero, the list is sorted ascending, otherwise descending. The list items are separated by separator, as are the items in the returned list." msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:983 +#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:984 msgid "list_equals(list1, sep1, list2, sep2, yes_val, no_val) -- return yes_val if list1 and list2 contain the same items, otherwise return no_val. The items are determined by splitting each list using the appropriate separator character (sep1 or sep2). The order of items in the lists is not relevant. The compare is case insensitive." msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:1001 +#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:1002 msgid "list_re(src_list, separator, search_re, opt_replace) -- Construct a list by first separating src_list into items using the separator character. For each item in the list, check if it matches search_re. If it does, then add it to the list to be returned. If opt_replace is not the empty string, then apply the replacement before adding the item to the returned list." msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:1024 +#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:1026 msgid "today() -- return a date string for today. This value is designed for use in format_date or days_between, but can be manipulated like any other string. The date is in ISO format." msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:1035 +#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:1037 msgid "days_between(date1, date2) -- return the number of days between date1 and date2. The number is positive if date1 is greater than date2, otherwise negative. If either date1 or date2 are not dates, the function returns the empty string." msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:1057 +#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:1059 msgid "language_strings(lang_codes, localize) -- return the strings for the language codes passed in lang_codes. If localize is zero, return the strings in English. If localize is not zero, return the strings in the language of the current locale. Lang_codes is a comma-separated list." msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:1077 +#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:1079 msgid "language_codes(lang_strings) -- return the language codes for the strings passed in lang_strings. The strings must be in the language of the current locale. Lang_strings is a comma-separated list." msgstr ""