From 1035de793d7feb398966aa2c83c5e42b11a260c4 Mon Sep 17 00:00:00 2001
From: Kovid Goyal
Date: Sun, 29 May 2011 15:04:37 -0600
Subject: [PATCH 1/2] ...
---
src/calibre/translations/calibre.pot | 945 ++++++++++++++++-----------
1 file changed, 547 insertions(+), 398 deletions(-)
diff --git a/src/calibre/translations/calibre.pot b/src/calibre/translations/calibre.pot
index a8273ccac2..50576b12ae 100644
--- a/src/calibre/translations/calibre.pot
+++ b/src/calibre/translations/calibre.pot
@@ -5,8 +5,8 @@
msgid ""
msgstr ""
"Project-Id-Version: calibre 0.8.3\n"
-"POT-Creation-Date: 2011-05-27 10:15+MDT\n"
-"PO-Revision-Date: 2011-05-27 10:15+MDT\n"
+"POT-Creation-Date: 2011-05-29 15:03+MDT\n"
+"PO-Revision-Date: 2011-05-29 15:03+MDT\n"
"Last-Translator: Automatically generated\n"
"Language-Team: LANGUAGE\n"
"MIME-Version: 1.0\n"
@@ -46,10 +46,10 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:253
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:34
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:35
-#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:89
-#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:455
-#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:460
-#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:724
+#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:88
+#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:454
+#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:459
+#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:729
#: /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/extz.py:23
@@ -123,8 +123,8 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/writer.py:102
#: /home/kovid/work/calibre/src/calibre/ebooks/rtf/input.py:313
#: /home/kovid/work/calibre/src/calibre/ebooks/rtf/input.py:315
-#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:347
-#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:355
+#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:348
+#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:356
#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:156
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:364
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:367
@@ -145,11 +145,11 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/email.py:152
#: /home/kovid/work/calibre/src/calibre/gui2/email.py:167
#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:401
-#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1012
-#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1188
-#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1191
+#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1018
#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1194
-#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1279
+#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1197
+#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1200
+#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1285
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:82
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:212
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:231
@@ -158,23 +158,23 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:160
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:164
#: /home/kovid/work/calibre/src/calibre/gui2/store/google_books_plugin.py:90
-#: /home/kovid/work/calibre/src/calibre/gui2/store/search/models.py:156
+#: /home/kovid/work/calibre/src/calibre/gui2/store/search/models.py:163
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:199
#: /home/kovid/work/calibre/src/calibre/library/cli.py:217
#: /home/kovid/work/calibre/src/calibre/library/database.py:914
#: /home/kovid/work/calibre/src/calibre/library/database2.py:506
#: /home/kovid/work/calibre/src/calibre/library/database2.py:514
#: /home/kovid/work/calibre/src/calibre/library/database2.py:525
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:1804
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:1941
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:2948
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:2950
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:3083
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:1805
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:1942
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:2949
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:2951
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3084
#: /home/kovid/work/calibre/src/calibre/library/server/mobile.py:233
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:156
#: /home/kovid/work/calibre/src/calibre/library/server/opds.py:159
#: /home/kovid/work/calibre/src/calibre/library/server/xml.py:79
-#: /home/kovid/work/calibre/src/calibre/utils/localization.py:131
+#: /home/kovid/work/calibre/src/calibre/utils/localization.py:134
#: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:46
#: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:64
#: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:78
@@ -328,7 +328,7 @@ msgid "Change the way calibre behaves"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:906
-#: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:220
+#: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:221
msgid "Add your own columns"
msgstr ""
@@ -801,7 +801,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:445
#: /home/kovid/work/calibre/src/calibre/library/database2.py:302
#: /home/kovid/work/calibre/src/calibre/library/database2.py:315
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:2812
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:2813
#: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:159
msgid "News"
msgstr ""
@@ -809,8 +809,8 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2669
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:65
#: /home/kovid/work/calibre/src/calibre/library/catalog.py:643
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:2772
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:2790
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:2773
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:2791
msgid "Catalog"
msgstr ""
@@ -2304,27 +2304,32 @@ msgstr ""
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/book/base.py:145
+#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:51
+msgid "Value: unknown field "
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:144
msgid "TEMPLATE ERROR"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:628
+#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:627
#: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:63
#: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:563
msgid "No"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:628
+#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:627
#: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:63
#: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:563
+#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:601
msgid "Yes"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:723
+#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:728
#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/info.py:45
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/delete_matching_from_device.py:75
#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:64
-#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1017
+#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1023
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:132
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:152
#: /home/kovid/work/calibre/src/calibre/gui2/store/mobileread/models.py:23
@@ -2334,32 +2339,32 @@ msgstr ""
msgid "Title"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:724
+#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:729
#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:66
-#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1018
+#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1024
#: /home/kovid/work/calibre/src/calibre/gui2/store/mobileread/models.py:23
msgid "Author(s)"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:725
+#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:730
#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:71
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:149
msgid "Publisher"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:726
+#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:731
#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/info.py:49
msgid "Producer"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:727
+#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:732
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:871
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:147
#: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:211
msgid "Comments"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:729
+#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:734
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/jacket.py:170
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories.py:60
#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:72
@@ -2370,7 +2375,7 @@ msgstr ""
msgid "Tags"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:731
+#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:736
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/jacket.py:168
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories.py:60
#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:73
@@ -2380,16 +2385,16 @@ msgstr ""
msgid "Series"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:732
+#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:737
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:154
msgid "Language"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:734
+#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:739
msgid "Timestamp"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:736
+#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:741
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/jacket.py:167
#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:69
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:132
@@ -2397,7 +2402,7 @@ msgstr ""
msgid "Published"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:738
+#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:743
msgid "Rights"
msgstr ""
@@ -3086,131 +3091,131 @@ msgstr ""
msgid "Do not remove font color from output. This is only useful when txt-output-formatting is set to textile. Textile is the only formatting that supports setting font color. If this option is not specified font color will not be set and default to the color displayed by the reader (generally this is black)."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:103
+#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:104
msgid "Send file to storage card instead of main memory by default"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:105
+#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:106
msgid "Confirm before deleting"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:107
+#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:108
msgid "Main window geometry"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:109
+#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:110
msgid "Notify when a new version is available"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:111
+#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:112
msgid "Use Roman numerals for series number"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:113
+#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:114
msgid "Sort tags list by name, popularity, or rating"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:115
+#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:116
msgid "Match tags by any or all."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:117
+#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:118
msgid "Number of covers to show in the cover browsing mode"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:119
+#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:120
msgid "Defaults for conversion to LRF"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:121
+#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:122
msgid "Options for the LRF ebook viewer"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:124
+#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:125
msgid "Formats that are viewed using the internal viewer"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:126
+#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:127
msgid "Columns to be displayed in the book list"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:127
+#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:128
msgid "Automatically launch content server on application startup"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:128
+#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:129
msgid "Oldest news kept in database"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:129
+#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:130
msgid "Show system tray icon"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:131
+#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:132
msgid "Upload downloaded news to device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:133
+#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:134
msgid "Delete books from library after uploading to device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:135
+#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:136
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:137
+#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:138
msgid "Disable notifications from the system tray icon"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:139
+#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:140
msgid "Default action to perform when send to device button is clicked"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:144
+#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:145
msgid "Start searching as you type. If this is disabled then search will only take place when the Enter or Return key is pressed."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:147
+#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:148
msgid "When searching, show all books with search results highlighted instead of showing only the matches. You can use the N or F3 keys to go to the next match."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:165
+#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:166
msgid "Maximum number of simultaneous conversion/news download jobs. This number is twice the actual value for historical reasons."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:169
+#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:170
msgid "Download social metadata (tags/rating/etc.)"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:171
+#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:172
msgid "Overwrite author and title with new metadata"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:173
+#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:174
msgid "Automatically download the cover, if available"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:175
+#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:176
msgid "Limit max simultaneous jobs to number of CPUs"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:177
+#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:178
msgid "The layout of the user interface"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:179
+#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:180
msgid "Show the average rating per item indication in the tag browser"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:181
+#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:182
msgid "Disable UI animations"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:186
+#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:187
msgid "tag browser categories not to display"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:461
+#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:462
msgid "Choose Files"
msgstr ""
@@ -3340,11 +3345,11 @@ msgstr ""
msgid "Select books"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:328
+#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:329
msgid "Merged some books"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:329
+#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:330
msgid "The following duplicate books were found and incoming book formats were processed and merged into your Calibre database according to your automerge settings:"
msgstr ""
@@ -3364,9 +3369,9 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:376
#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:127
-#: /home/kovid/work/calibre/src/calibre/gui2/actions/store.py:78
-#: /home/kovid/work/calibre/src/calibre/gui2/actions/store.py:97
-#: /home/kovid/work/calibre/src/calibre/gui2/actions/store.py:106
+#: /home/kovid/work/calibre/src/calibre/gui2/actions/store.py:83
+#: /home/kovid/work/calibre/src/calibre/gui2/actions/store.py:102
+#: /home/kovid/work/calibre/src/calibre/gui2/actions/store.py:111
#: /home/kovid/work/calibre/src/calibre/gui2/actions/tweak_epub.py:28
#: /home/kovid/work/calibre/src/calibre/gui2/actions/view.py:139
#: /home/kovid/work/calibre/src/calibre/gui2/actions/view.py:185
@@ -3644,7 +3649,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/choose_library.py:405
#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:167
#: /home/kovid/work/calibre/src/calibre/gui2/actions/save_to_disk.py:101
-#: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:854
+#: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:857
msgid "Not allowed"
msgstr ""
@@ -4071,7 +4076,7 @@ msgid "Move to next highlighted match"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/next_match.py:13
-#: /home/kovid/work/calibre/src/calibre/gui2/library/delegates.py:373
+#: /home/kovid/work/calibre/src/calibre/gui2/library/delegates.py:388
msgid "N"
msgstr ""
@@ -4274,35 +4279,35 @@ msgstr ""
msgid "Stores"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/actions/store.py:38
+#: /home/kovid/work/calibre/src/calibre/gui2/actions/store.py:43
#: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/chooser_dialog.py:18
-#: /home/kovid/work/calibre/src/calibre/gui2/store/search/search.py:261
+#: /home/kovid/work/calibre/src/calibre/gui2/store/search/search.py:270
msgid "Choose stores"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/actions/store.py:78
-#: /home/kovid/work/calibre/src/calibre/gui2/actions/store.py:97
-#: /home/kovid/work/calibre/src/calibre/gui2/actions/store.py:106
+#: /home/kovid/work/calibre/src/calibre/gui2/actions/store.py:83
+#: /home/kovid/work/calibre/src/calibre/gui2/actions/store.py:102
+#: /home/kovid/work/calibre/src/calibre/gui2/actions/store.py:111
msgid "Cannot search"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/actions/store.py:125
+#: /home/kovid/work/calibre/src/calibre/gui2/actions/store.py:130
msgid "Calibre helps you find the ebooks you want by searching the websites of various commercial and public domain book sources for you."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/actions/store.py:129
+#: /home/kovid/work/calibre/src/calibre/gui2/actions/store.py:134
msgid "Using the integrated search you can easily find which store has the book you are looking for, at the best price. You also get DRM status and other useful information."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/actions/store.py:133
+#: /home/kovid/work/calibre/src/calibre/gui2/actions/store.py:138
msgid "All transactions (paid or otherwise) are handled between you and the book seller. Calibre is not part of this process and any issues related to a purchase should be directed to the website you are buying from. Be sure to double check that any books you get will work with your e-book reader, especially if the book you are buying has DRM."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/actions/store.py:143
+#: /home/kovid/work/calibre/src/calibre/gui2/actions/store.py:148
msgid "Show this message again"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/actions/store.py:144
+#: /home/kovid/work/calibre/src/calibre/gui2/actions/store.py:149
msgid "About Get Books"
msgstr ""
@@ -4569,7 +4574,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/toolbar_ui.py:110
#: /home/kovid/work/calibre/src/calibre/gui2/shortcuts_ui.py:80
#: /home/kovid/work/calibre/src/calibre/gui2/shortcuts_ui.py:85
-#: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/chooser_widget_ui.py:57
+#: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/chooser_widget_ui.py:79
#: /home/kovid/work/calibre/src/calibre/gui2/store/mobileread/store_dialog_ui.py:75
#: /home/kovid/work/calibre/src/calibre/gui2/store/search/search_ui.py:133
#: /home/kovid/work/calibre/src/calibre/gui2/store/search/search_ui.py:139
@@ -4606,7 +4611,7 @@ msgid "Book %s of %s"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:144
-#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1021
+#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1027
msgid "Collections"
msgstr ""
@@ -4732,7 +4737,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/toolbar_ui.py:98
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/tweaks_ui.py:87
#: /home/kovid/work/calibre/src/calibre/gui2/store/basic_config_widget_ui.py:37
-#: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/chooser_widget_ui.py:55
+#: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/chooser_widget_ui.py:77
#: /home/kovid/work/calibre/src/calibre/gui2/store/config/search/search_widget_ui.py:98
#: /home/kovid/work/calibre/src/calibre/gui2/store/config/search_widget_ui.py:98
#: /home/kovid/work/calibre/src/calibre/gui2/wizard/send_email_ui.py:123
@@ -5333,7 +5338,7 @@ msgstr ""
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 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.
\n"
"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.
\n"
-"See the User Manual for a discussion of how font size rescaling works.
"
+"See the User Manual for a discussion of how font size rescaling works.
"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/convert/font_key_ui.py:108
@@ -5396,7 +5401,7 @@ msgid "Modify the document text and structure using common patterns."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/convert/heuristics_ui.py:113
-msgid "Heuristic processing means that calibre will scan your book for common patterns and fix them. As the name implies, this involves guesswork, which means that it could end up worsening the result of a conversion, if calibre guesses wrong. Therefore, it is disabled by default. Often, if a conversion does not turn out as you expect, turning on heuristics can improve matters. Read more about the various heuristic processing options in the User Manual."
+msgid "Heuristic processing means that calibre will scan your book for common patterns and fix them. As the name implies, this involves guesswork, which means that it could end up worsening the result of a conversion, if calibre guesses wrong. Therefore, it is disabled by default. Often, if a conversion does not turn out as you expect, turning on heuristics can improve matters. Read more about the various heuristic processing options in the User Manual."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/convert/heuristics_ui.py:114
@@ -5810,8 +5815,9 @@ msgid "PDB Output"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/convert/pdb_output_ui.py:48
-#: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/adv_search_builder_ui.py:215
-#: /home/kovid/work/calibre/src/calibre/gui2/store/search/adv_search_builder_ui.py:195
+#: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/adv_search_builder_ui.py:225
+#: /home/kovid/work/calibre/src/calibre/gui2/store/mobileread/adv_search_builder_ui.py:186
+#: /home/kovid/work/calibre/src/calibre/gui2/store/search/adv_search_builder_ui.py:205
msgid "&Format:"
msgstr ""
@@ -5970,7 +5976,7 @@ msgstr ""
#:
#: /home/kovid/work/calibre/src/calibre/gui2/convert/search_and_replace_ui.py:154
-msgid "Search and replace uses regular expressions. See the regular expressions tutorial to get started with regular expressions. Also clicking the wizard buttons below will allow you to test your regular expression against the current input document."
+msgid "
Search and replace uses regular expressions. See the regular expressions tutorial to get started with regular expressions. Also clicking the wizard buttons below will allow you to test your regular expression against the current input document."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/convert/single.py:173
@@ -6286,7 +6292,7 @@ msgid "(A regular expression)"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/convert/xpath_wizard_ui.py:89
-msgid "
For example, to match all h2 tags that have class=\"chapter\", set tag to h2, attribute to class and value to chapter.
Leaving attribute blank will match any attribute and leaving value blank will match any value. Setting tag to * will match any tag.
To learn more advanced usage of XPath see the XPath Tutorial."
+msgid "
For example, to match all h2 tags that have class=\"chapter\", set tag to h2, attribute to class and value to chapter.
Leaving attribute blank will match any attribute and leaving value blank will match any value. Setting tag to * will match any tag.
To learn more advanced usage of XPath see the XPath Tutorial."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/cover_flow.py:128
@@ -6312,8 +6318,8 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/library/delegates.py:128
#: /home/kovid/work/calibre/src/calibre/gui2/library/delegates.py:148
#: /home/kovid/work/calibre/src/calibre/gui2/library/delegates.py:230
-#: /home/kovid/work/calibre/src/calibre/gui2/library/delegates.py:263
-#: /home/kovid/work/calibre/src/calibre/gui2/library/delegates.py:267
+#: /home/kovid/work/calibre/src/calibre/gui2/library/delegates.py:279
+#: /home/kovid/work/calibre/src/calibre/gui2/library/delegates.py:283
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1139
msgid "Undefined"
msgstr ""
@@ -6569,7 +6575,7 @@ msgstr ""
#:
#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/configwidget.py:148
-#: /home/kovid/work/calibre/src/calibre/gui2/library/delegates.py:421
+#: /home/kovid/work/calibre/src/calibre/gui2/library/delegates.py:437
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/plugboard.py:273
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/save_template.py:61
msgid "Invalid template"
@@ -6577,7 +6583,7 @@ msgstr ""
#:
#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/configwidget.py:149
-#: /home/kovid/work/calibre/src/calibre/gui2/library/delegates.py:422
+#: /home/kovid/work/calibre/src/calibre/gui2/library/delegates.py:438
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/plugboard.py:274
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/save_template.py:62
msgid "The template %s is invalid:"
@@ -6937,7 +6943,8 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf_ui.py:97
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_ui.py:211
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:73
-#: /home/kovid/work/calibre/src/calibre/gui2/store/search/adv_search_builder_ui.py:189
+#: /home/kovid/work/calibre/src/calibre/gui2/store/mobileread/adv_search_builder_ui.py:181
+#: /home/kovid/work/calibre/src/calibre/gui2/store/search/adv_search_builder_ui.py:199
msgid "&Title:"
msgstr ""
@@ -6951,12 +6958,12 @@ msgid "&Profile:"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comments_dialog.py:24
-#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_dialog.py:218
+#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_dialog.py:222
msgid "&OK"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comments_dialog.py:25
-#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_dialog.py:219
+#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_dialog.py:223
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tweak_epub_ui.py:65
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/main.py:233
msgid "&Cancel"
@@ -7011,7 +7018,7 @@ msgstr ""
#:
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/delete_matching_from_device.py:76
#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:68
-#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1019
+#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1025
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:32
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:73
#: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:321
@@ -8019,91 +8026,105 @@ msgid "Negate"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_ui.py:198
-#: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/adv_search_builder_ui.py:196
-#: /home/kovid/work/calibre/src/calibre/gui2/store/search/adv_search_builder_ui.py:176
+#: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/adv_search_builder_ui.py:206
+#: /home/kovid/work/calibre/src/calibre/gui2/store/mobileread/adv_search_builder_ui.py:168
+#: /home/kovid/work/calibre/src/calibre/gui2/store/search/adv_search_builder_ui.py:186
msgid "Advanced Search"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_ui.py:199
-#: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/adv_search_builder_ui.py:197
-#: /home/kovid/work/calibre/src/calibre/gui2/store/search/adv_search_builder_ui.py:177
+#: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/adv_search_builder_ui.py:207
+#: /home/kovid/work/calibre/src/calibre/gui2/store/mobileread/adv_search_builder_ui.py:169
+#: /home/kovid/work/calibre/src/calibre/gui2/store/search/adv_search_builder_ui.py:187
msgid "&What kind of match to use:"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_ui.py:200
-#: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/adv_search_builder_ui.py:198
-#: /home/kovid/work/calibre/src/calibre/gui2/store/search/adv_search_builder_ui.py:178
+#: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/adv_search_builder_ui.py:208
+#: /home/kovid/work/calibre/src/calibre/gui2/store/mobileread/adv_search_builder_ui.py:170
+#: /home/kovid/work/calibre/src/calibre/gui2/store/search/adv_search_builder_ui.py:188
msgid "Contains: the word or phrase matches anywhere in the metadata field"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_ui.py:201
-#: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/adv_search_builder_ui.py:199
-#: /home/kovid/work/calibre/src/calibre/gui2/store/search/adv_search_builder_ui.py:179
+#: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/adv_search_builder_ui.py:209
+#: /home/kovid/work/calibre/src/calibre/gui2/store/mobileread/adv_search_builder_ui.py:171
+#: /home/kovid/work/calibre/src/calibre/gui2/store/search/adv_search_builder_ui.py:189
msgid "Equals: the word or phrase must match the entire metadata field"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_ui.py:202
-#: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/adv_search_builder_ui.py:200
-#: /home/kovid/work/calibre/src/calibre/gui2/store/search/adv_search_builder_ui.py:180
+#: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/adv_search_builder_ui.py:210
+#: /home/kovid/work/calibre/src/calibre/gui2/store/mobileread/adv_search_builder_ui.py:172
+#: /home/kovid/work/calibre/src/calibre/gui2/store/search/adv_search_builder_ui.py:190
msgid "Regular expression: the expression must match anywhere in the metadata field"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_ui.py:203
-#: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/adv_search_builder_ui.py:201
-#: /home/kovid/work/calibre/src/calibre/gui2/store/search/adv_search_builder_ui.py:181
+#: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/adv_search_builder_ui.py:211
+#: /home/kovid/work/calibre/src/calibre/gui2/store/mobileread/adv_search_builder_ui.py:173
+#: /home/kovid/work/calibre/src/calibre/gui2/store/search/adv_search_builder_ui.py:191
msgid "Find entries that have..."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_ui.py:204
-#: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/adv_search_builder_ui.py:202
-#: /home/kovid/work/calibre/src/calibre/gui2/store/search/adv_search_builder_ui.py:182
+#: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/adv_search_builder_ui.py:212
+#: /home/kovid/work/calibre/src/calibre/gui2/store/mobileread/adv_search_builder_ui.py:174
+#: /home/kovid/work/calibre/src/calibre/gui2/store/search/adv_search_builder_ui.py:192
msgid "&All these words:"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_ui.py:205
-#: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/adv_search_builder_ui.py:203
-#: /home/kovid/work/calibre/src/calibre/gui2/store/search/adv_search_builder_ui.py:183
+#: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/adv_search_builder_ui.py:213
+#: /home/kovid/work/calibre/src/calibre/gui2/store/mobileread/adv_search_builder_ui.py:175
+#: /home/kovid/work/calibre/src/calibre/gui2/store/search/adv_search_builder_ui.py:193
msgid "This exact &phrase:"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_ui.py:206
-#: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/adv_search_builder_ui.py:204
-#: /home/kovid/work/calibre/src/calibre/gui2/store/search/adv_search_builder_ui.py:184
+#: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/adv_search_builder_ui.py:214
+#: /home/kovid/work/calibre/src/calibre/gui2/store/mobileread/adv_search_builder_ui.py:176
+#: /home/kovid/work/calibre/src/calibre/gui2/store/search/adv_search_builder_ui.py:194
msgid "&One or more of these words:"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_ui.py:207
-#: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/adv_search_builder_ui.py:205
-#: /home/kovid/work/calibre/src/calibre/gui2/store/search/adv_search_builder_ui.py:185
+#: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/adv_search_builder_ui.py:215
+#: /home/kovid/work/calibre/src/calibre/gui2/store/mobileread/adv_search_builder_ui.py:177
+#: /home/kovid/work/calibre/src/calibre/gui2/store/search/adv_search_builder_ui.py:195
msgid "But dont show entries that have..."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_ui.py:208
-#: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/adv_search_builder_ui.py:206
-#: /home/kovid/work/calibre/src/calibre/gui2/store/search/adv_search_builder_ui.py:186
+#: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/adv_search_builder_ui.py:216
+#: /home/kovid/work/calibre/src/calibre/gui2/store/mobileread/adv_search_builder_ui.py:178
+#: /home/kovid/work/calibre/src/calibre/gui2/store/search/adv_search_builder_ui.py:196
msgid "Any of these &unwanted words:"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_ui.py:209
-#: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/adv_search_builder_ui.py:207
-#: /home/kovid/work/calibre/src/calibre/gui2/store/search/adv_search_builder_ui.py:187
-msgid "See the User Manual for more help"
+#: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/adv_search_builder_ui.py:217
+#: /home/kovid/work/calibre/src/calibre/gui2/store/search/adv_search_builder_ui.py:197
+msgid "See the User Manual for more help"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_ui.py:210
-#: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/adv_search_builder_ui.py:208
-#: /home/kovid/work/calibre/src/calibre/gui2/store/search/adv_search_builder_ui.py:188
+#: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/adv_search_builder_ui.py:218
+#: /home/kovid/work/calibre/src/calibre/gui2/store/mobileread/adv_search_builder_ui.py:180
+#: /home/kovid/work/calibre/src/calibre/gui2/store/search/adv_search_builder_ui.py:198
msgid "A&dvanced Search"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_ui.py:212
-#: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/adv_search_builder_ui.py:210
-#: /home/kovid/work/calibre/src/calibre/gui2/store/search/adv_search_builder_ui.py:190
+#: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/adv_search_builder_ui.py:220
+#: /home/kovid/work/calibre/src/calibre/gui2/store/mobileread/adv_search_builder_ui.py:182
+#: /home/kovid/work/calibre/src/calibre/gui2/store/search/adv_search_builder_ui.py:200
msgid "Enter the title."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_ui.py:213
-#: /home/kovid/work/calibre/src/calibre/gui2/store/search/adv_search_builder_ui.py:191
+#: /home/kovid/work/calibre/src/calibre/gui2/store/mobileread/adv_search_builder_ui.py:183
+#: /home/kovid/work/calibre/src/calibre/gui2/store/search/adv_search_builder_ui.py:201
msgid "&Author:"
msgstr ""
@@ -8126,14 +8147,16 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_ui.py:219
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/template_functions_ui.py:101
-#: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/adv_search_builder_ui.py:213
-#: /home/kovid/work/calibre/src/calibre/gui2/store/search/adv_search_builder_ui.py:193
+#: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/adv_search_builder_ui.py:223
+#: /home/kovid/work/calibre/src/calibre/gui2/store/mobileread/adv_search_builder_ui.py:184
+#: /home/kovid/work/calibre/src/calibre/gui2/store/search/adv_search_builder_ui.py:203
msgid "&Clear"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_ui.py:220
-#: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/adv_search_builder_ui.py:214
-#: /home/kovid/work/calibre/src/calibre/gui2/store/search/adv_search_builder_ui.py:194
+#: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/adv_search_builder_ui.py:224
+#: /home/kovid/work/calibre/src/calibre/gui2/store/mobileread/adv_search_builder_ui.py:185
+#: /home/kovid/work/calibre/src/calibre/gui2/store/search/adv_search_builder_ui.py:204
msgid "Search only in specific fields:"
msgstr ""
@@ -8341,6 +8364,10 @@ msgstr ""
msgid "Ctrl+S"
msgstr ""
+#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_dialog.py:249
+msgid "EXCEPTION: "
+msgstr ""
+
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_dialog_ui.py:71
msgid "Function &name:"
msgstr ""
@@ -8355,53 +8382,90 @@ msgid "Python &code:"
msgstr ""
#:
-#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_line_editor.py:32
+#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_line_editor.py:36
msgid "Open Template Editor"
msgstr ""
#:
-#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_line_editor.py:35
+#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_line_editor.py:39
msgid "Open Tag Wizard"
msgstr ""
#:
-#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_line_editor.py:41
-#: /home/kovid/work/calibre/src/calibre/gui2/library/delegates.py:408
+#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_line_editor.py:45
+#: /home/kovid/work/calibre/src/calibre/gui2/library/delegates.py:424
msgid "Edit template"
msgstr ""
#:
-#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_line_editor.py:48
+#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_line_editor.py:52
msgid "Invalid text"
msgstr ""
#:
-#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_line_editor.py:49
+#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_line_editor.py:53
msgid "The text in the box was not generated by this wizard"
msgstr ""
#:
-#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_line_editor.py:60
+#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_line_editor.py:64
msgid "Tag Wizard"
msgstr ""
#:
-#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_line_editor.py:68
-msgid "Tags (more than one per box permitted)"
+#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_line_editor.py:72
+msgid "Tags (see the popup help for more information)"
msgstr ""
#:
-#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_line_editor.py:69
-msgid "Color"
+#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_line_editor.py:74
+msgid "You can enter more than one tag per box, separated by commas. The comparison ignores letter case.
A tag value can be a regular expression. Check the box to turn them on. When using regular expressions, note that the wizard puts anchors (^ and $) around the expression, so you must ensure your expression matches from the beginning to the end of the tag.
Regular expression examples:"
msgstr ""
#:
-#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_line_editor.py:115
+#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_line_editor.py:82
+msgid "
.*
matches any tag. No empty tags are checked, so you don't need to worry about empty stringsA.*
matches any tag beginning with A.*mystery.*
matches any tag containing the word \"mystery\""
+msgstr ""
+
+#:
+#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_line_editor.py:89
+msgid "is RE"
+msgstr ""
+
+#:
+#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_line_editor.py:91
+msgid "Check this box if the tag box contains regular expressions"
+msgstr ""
+
+#:
+#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_line_editor.py:94
+msgid "Color if tag found"
+msgstr ""
+
+#:
+#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_line_editor.py:96
+msgid "At least one of the two color boxes must have a value. Leave one color box empty if you want the template to use the next line in this wizard. If both boxes are filled in, the rest of the lines in this wizard will be ignored."
+msgstr ""
+
+#:
+#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_line_editor.py:101
+msgid "Color if tag not found"
+msgstr ""
+
+#:
+#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_line_editor.py:103
+msgid "This box is usually filled in only on the last test. If it is filled in before the last test, then the color for tag found box must be empty or all the rest of the tests will be ignored."
+msgstr ""
+
+#:
+#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_line_editor.py:178
+#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_line_editor.py:183
msgid "Invalid color"
msgstr ""
#:
-#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_line_editor.py:116
+#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_line_editor.py:179
+#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_line_editor.py:184
msgid "The color {0} is not valid"
msgstr ""
@@ -8623,7 +8687,7 @@ msgid "&Add feed"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:286
-msgid "For help with writing advanced news recipes, please visit User Recipes"
+msgid "For help with writing advanced news recipes, please visit User Recipes"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:287
@@ -8719,7 +8783,7 @@ msgstr ""
msgid ""
"\n"
"
Set a regular expression pattern to use when trying to guess ebook metadata from filenames.
\n"
-"
A tutorial on using regular expressions is available.
\n"
+"
A tutorial on using regular expressions is available.
\n"
"
Use the Test functionality below to test your regular expression on a few sample filenames (remember to include the file extension). The group names for the various metadata entries are documented in tooltips.
"
msgstr ""
@@ -8941,7 +9005,7 @@ msgid "Show books in the main memory of the device"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/layout.py:72
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:1023
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:1024
msgid "Card A"
msgstr ""
@@ -8950,7 +9014,7 @@ msgid "Show books in storage card A"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/layout.py:74
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:1025
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:1026
msgid "Card B"
msgstr ""
@@ -8990,7 +9054,7 @@ msgstr ""
msgid "Copy current search text (instead of search name)"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/library/delegates.py:373
+#: /home/kovid/work/calibre/src/calibre/gui2/library/delegates.py:388
msgid "Y"
msgstr ""
@@ -9008,75 +9072,75 @@ msgstr ""
msgid "Modified"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:760
-#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1317
+#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:766
+#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1323
#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:797
msgid "The lookup/search name is \"{0}\""
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:766
-#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1319
+#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:772
+#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1325
msgid "This book's UUID is \"{0}\""
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1016
+#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1022
msgid "In Library"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1020
+#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1026
#: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:311
msgid "Size"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1297
+#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1303
msgid "Marked for deletion"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1300
+#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1306
msgid "Double click to edit me
"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:158
+#: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:159
msgid "Hide column %s"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:163
+#: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:164
msgid "Sort on %s"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:164
+#: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:165
msgid "Ascending"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:167
+#: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:168
msgid "Descending"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:179
+#: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:180
msgid "Change text alignment for %s"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:181
+#: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:182
msgid "Left"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:181
+#: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:182
msgid "Right"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:182
+#: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:183
msgid "Center"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:201
+#: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:202
msgid "Show column"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:213
+#: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:214
msgid "Restore default layout"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:855
+#: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:858
msgid "Dropping onto a device is not supported. First add the book to the calibre library."
msgstr ""
@@ -9995,7 +10059,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:41
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:66
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:73
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:153
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:156
msgid "Yes/No"
msgstr ""
@@ -10027,7 +10091,7 @@ msgstr ""
#:
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:65
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:152
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:155
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/emailp.py:27
#: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/models.py:21
#: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:124
@@ -10071,117 +10135,127 @@ msgid "Selected column is not a user-defined column"
msgstr ""
#:
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:154
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:157
msgid "My Tags"
msgstr ""
#:
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:155
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:158
msgid "My Series"
msgstr ""
#:
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:156
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:159
msgid "My Rating"
msgstr ""
#:
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:157
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:160
msgid "People"
msgstr ""
#:
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:185
-msgid "No lookup name was provided"
-msgstr ""
-
-#:
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:189
-msgid "The lookup name must contain only lower case letters, digits and underscores, and start with a letter"
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:187
+msgid "Examples: The format {0:0>4d}
gives a 4-digit number with leading zeros. The format {0:d} days
prints the number then the word \"days\""
msgstr ""
#:
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:192
+msgid "Examples: The format {0:.1f}
gives a floating point number with 1 digit after the decimal point. The format Price: $ {0:,.2f}
prints \"Price $ \" then displays the number with 2 digits after the decimal point and thousands separated by commas."
+msgstr ""
+
+#:
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:201
+msgid "No lookup name was provided"
+msgstr ""
+
+#:
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:205
+msgid "The lookup name must contain only lower case letters, digits and underscores, and start with a letter"
+msgstr ""
+
+#:
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:208
msgid "Lookup names cannot end with _index, because these names are reserved for the index of a series column."
msgstr ""
#:
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:202
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:218
msgid "No column heading was provided"
msgstr ""
#:
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:212
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:228
msgid "The lookup name %s is already used"
msgstr ""
#:
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:224
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:240
msgid "The heading %s is already used"
msgstr ""
#:
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:235
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:251
msgid "You must enter a template for composite columns"
msgstr ""
#:
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:244
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:260
msgid "You must enter at least one value for enumeration columns"
msgstr ""
#:
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:248
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:264
msgid "You cannot provide the empty value, as it is included by default"
msgstr ""
#:
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:252
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:268
msgid "The value \"{0}\" is in the list more than once"
msgstr ""
#:
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:260
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:276
msgid "The colors box must be empty or contain the same number of items as the value box"
msgstr ""
#:
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:265
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:281
msgid "The color {0} is unknown"
msgstr ""
#:
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column_ui.py:201
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column_ui.py:217
msgid "&Lookup name"
msgstr ""
#:
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column_ui.py:202
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column_ui.py:218
msgid "Column &heading"
msgstr ""
#:
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column_ui.py:203
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column_ui.py:219
msgid "Used for searching the column. Must contain only digits and lower case letters."
msgstr ""
#:
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column_ui.py:204
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column_ui.py:220
msgid "Column heading in the library view and category name in the tag browser"
msgstr ""
#:
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column_ui.py:205
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column_ui.py:221
msgid "&Column type"
msgstr ""
#:
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column_ui.py:206
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column_ui.py:222
msgid "What kind of information will be kept in the column."
msgstr ""
#:
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column_ui.py:207
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column_ui.py:223
msgid ""
"Show check marks in the GUI. Values of 'yes', 'checked', and 'true'\n"
"will show a green check. Values of 'no', 'unchecked', and 'false' will show a red X.\n"
@@ -10189,22 +10263,22 @@ msgid ""
msgstr ""
#:
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column_ui.py:210
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column_ui.py:226
msgid "Show checkmarks"
msgstr ""
#:
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column_ui.py:211
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column_ui.py:227
msgid "Check this box if this column contains names, like the authors column."
msgstr ""
#:
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column_ui.py:212
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column_ui.py:228
msgid "Contains names"
msgstr ""
#:
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column_ui.py:213
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column_ui.py:229
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"
@@ -10215,68 +10289,86 @@ msgid ""
msgstr ""
#:
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column_ui.py:219
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column_ui.py:235
msgid "Use MMM yyyy for month + year, yyyy for year only"
msgstr ""
#:
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column_ui.py:220
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column_ui.py:236
msgid "Default: dd MMM yyyy."
msgstr ""
#:
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column_ui.py:221
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column_ui.py:237
+msgid ""
+"
The format specifier must begin with {0:
\n"
+"and end with }
You can have text before and after the format specifier.\n"
+" "
+msgstr ""
+
+#:
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column_ui.py:240
+msgid "
Default: Not formatted. For format language details see the python documentation"
+msgstr ""
+
+#:
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column_ui.py:241
msgid "Format for &dates"
msgstr ""
#:
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column_ui.py:222
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column_ui.py:242
+msgid "Format for &numbers"
+msgstr ""
+
+#:
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column_ui.py:243
msgid "&Template"
msgstr ""
#:
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column_ui.py:223
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column_ui.py:244
msgid "Field template. Uses the same syntax as save templates."
msgstr ""
#:
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column_ui.py:224
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column_ui.py:245
msgid "Similar to save templates. For example, {title} {isbn}"
msgstr ""
#:
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column_ui.py:225
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column_ui.py:246
msgid "Default: (nothing)"
msgstr ""
#:
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column_ui.py:226
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column_ui.py:247
msgid "&Sort/search column by"
msgstr ""
#:
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column_ui.py:227
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column_ui.py:248
msgid "How this column should handled in the GUI when sorting and searching"
msgstr ""
#:
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column_ui.py:228
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column_ui.py:249
msgid "If checked, this column will appear in the tags browser as a category"
msgstr ""
#:
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column_ui.py:229
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column_ui.py:250
msgid "Show in tags browser"
msgstr ""
#:
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column_ui.py:230
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column_ui.py:235
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column_ui.py:251
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column_ui.py:256
msgid "Values"
msgstr ""
#:
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column_ui.py:231
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column_ui.py:252
msgid ""
"A comma-separated list of permitted values. The empty value is always\n"
"included, and is the default. For example, the list 'one,two,three' has\n"
@@ -10284,19 +10376,19 @@ msgid ""
msgstr ""
#:
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column_ui.py:234
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column_ui.py:255
msgid "The empty string is always the first value"
msgstr ""
#:
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column_ui.py:236
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column_ui.py:257
msgid ""
"A list of color names to use when displaying an item. The\n"
"list must be empty or contain a color for each value."
msgstr ""
#:
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column_ui.py:238
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column_ui.py:259
msgid "Colors"
msgstr ""
@@ -10418,7 +10510,7 @@ msgid "Always"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:132
-msgid "Automatic"
+msgid "If there is enough room"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:133
@@ -10438,7 +10530,7 @@ msgid "Partitioned"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:163
-msgid "Here you can specify coloring rules for columns shown in the library view. Choose the column you wish to color, then supply a template that specifies the color to use based on the values in the column. There is a tutorial on using templates."
+msgid "Here you can specify coloring rules for columns shown in the library view. Choose the column you wish to color, then supply a template that specifies the color to use based on the values in the column. There is a tutorial on using templates."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:170
@@ -10920,7 +11012,7 @@ msgid "Search for plugin"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/plugins.py:230
-#: /home/kovid/work/calibre/src/calibre/gui2/store/search/search.py:297
+#: /home/kovid/work/calibre/src/calibre/gui2/store/search/search.py:321
msgid "No matches"
msgstr ""
@@ -11561,7 +11653,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/search_box.py:95
#: /home/kovid/work/calibre/src/calibre/gui2/search_box.py:279
-#: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/chooser_widget_ui.py:58
+#: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/chooser_widget_ui.py:80
#: /home/kovid/work/calibre/src/calibre/gui2/store/mobileread/store_dialog_ui.py:76
#: /home/kovid/work/calibre/src/calibre/gui2/store/search/search_ui.py:134
#: /home/kovid/work/calibre/src/calibre/gui2/store/search_ui.py:109
@@ -11646,6 +11738,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/shortcuts.py:48
#: /home/kovid/work/calibre/src/calibre/gui2/shortcuts_ui.py:78
#: /home/kovid/work/calibre/src/calibre/gui2/shortcuts_ui.py:83
+#: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/chooser_widget_ui.py:83
#: /home/kovid/work/calibre/src/calibre/gui2/store/search/search_ui.py:138
#: /home/kovid/work/calibre/src/calibre/gui2/store/search_ui.py:113
#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:351
@@ -11718,54 +11811,87 @@ msgid "Open store in external web browswer"
msgstr ""
#:
-#: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/adv_search_builder_ui.py:209
+#: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/adv_search_builder_ui.py:219
msgid "&Name:"
msgstr ""
#:
-#: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/adv_search_builder_ui.py:211
+#: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/adv_search_builder_ui.py:221
msgid "&Description:"
msgstr ""
#:
-#: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/adv_search_builder_ui.py:212
+#: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/adv_search_builder_ui.py:222
msgid "&Headquarters:"
msgstr ""
#:
-#: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/adv_search_builder_ui.py:216
+#: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/adv_search_builder_ui.py:226
msgid "Enabled:"
msgstr ""
#:
-#: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/adv_search_builder_ui.py:217
+#: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/adv_search_builder_ui.py:227
msgid "DRM:"
msgstr ""
#:
-#: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/adv_search_builder_ui.py:218
-#: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/adv_search_builder_ui.py:220
+#: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/adv_search_builder_ui.py:228
+#: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/adv_search_builder_ui.py:230
+#: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/adv_search_builder_ui.py:233
+#: /home/kovid/work/calibre/src/calibre/gui2/store/search/adv_search_builder_ui.py:207
msgid "true"
msgstr ""
#:
-#: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/adv_search_builder_ui.py:219
-#: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/adv_search_builder_ui.py:221
+#: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/adv_search_builder_ui.py:229
+#: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/adv_search_builder_ui.py:231
+#: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/adv_search_builder_ui.py:234
+#: /home/kovid/work/calibre/src/calibre/gui2/store/search/adv_search_builder_ui.py:208
msgid "false"
msgstr ""
#:
-#: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/adv_search_builder_ui.py:222
+#: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/adv_search_builder_ui.py:232
+#: /home/kovid/work/calibre/src/calibre/gui2/store/search/adv_search_builder_ui.py:206
+msgid "Affiliate:"
+msgstr ""
+
+#:
+#: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/adv_search_builder_ui.py:235
msgid "Nam&e/Description ..."
msgstr ""
#:
-#: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/chooser_widget_ui.py:56
+#: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/chooser_widget_ui.py:78
#: /home/kovid/work/calibre/src/calibre/gui2/store/search/search_ui.py:132
#: /home/kovid/work/calibre/src/calibre/gui2/store/search_ui.py:108
msgid "Query:"
msgstr ""
+#:
+#: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/chooser_widget_ui.py:81
+msgid "Enable"
+msgstr ""
+
+#:
+#: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/chooser_widget_ui.py:82
+#: /home/kovid/work/calibre/src/calibre/gui2/store/search/search_ui.py:136
+#: /home/kovid/work/calibre/src/calibre/gui2/store/search_ui.py:111
+msgid "All"
+msgstr ""
+
+#:
+#: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/chooser_widget_ui.py:84
+#: /home/kovid/work/calibre/src/calibre/gui2/store/search/search_ui.py:137
+#: /home/kovid/work/calibre/src/calibre/gui2/store/search_ui.py:112
+msgid "Invert"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/models.py:21
+msgid "Affiliate"
+msgstr ""
+
#: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/models.py:21
msgid "Enabled"
msgstr ""
@@ -11779,33 +11905,44 @@ msgid "No DRM"
msgstr ""
#:
-#: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/models.py:108
-msgid "
This store is currently diabled and cannot be used in other parts of calibre.
"
+#: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/models.py:129
+msgid "This store is currently diabled and cannot be used in other parts of calibre."
msgstr ""
#:
-#: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/models.py:110
-msgid "This store is currently enabled and can be used in other parts of calibre.
"
+#: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/models.py:131
+msgid "This store is currently enabled and can be used in other parts of calibre."
msgstr ""
#:
-#: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/models.py:115
-msgid "This store only distributes ebooks with DRM.
"
+#: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/models.py:136
+msgid "This store only distributes ebooks with DRM."
msgstr ""
#:
-#: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/models.py:117
-msgid "This store distributes ebooks with DRM. It may have some titles without DRM, but you will need to check on a per title basis.
"
+#: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/models.py:138
+msgid "This store distributes ebooks with DRM. It may have some titles without DRM, but you will need to check on a per title basis."
msgstr ""
#:
-#: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/models.py:119
-msgid "This store is headquartered in %s. This is a good indication of what market the store caters to. However, this does not necessarily mean that the store is limited to that market only.
"
+#: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/models.py:140
+msgid "This store is headquartered in %s. This is a good indication of what market the store caters to. However, this does not necessarily mean that the store is limited to that market only."
msgstr ""
#:
-#: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/models.py:121
-msgid "This store distributes ebooks in the following formats: %s
"
+#: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/models.py:143
+#: /home/kovid/work/calibre/src/calibre/gui2/store/search/models.py:203
+msgid "Buying from this store supports the calibre developer: %s."
+msgstr ""
+
+#:
+#: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/models.py:145
+msgid "This store distributes ebooks in the following formats: %s"
+msgstr ""
+
+#:
+#: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/results_view.py:47
+msgid "Configure..."
msgstr ""
#:
@@ -11898,6 +12035,17 @@ msgstr ""
msgid "Not Available"
msgstr ""
+#:
+#: /home/kovid/work/calibre/src/calibre/gui2/store/mobileread/adv_search_builder_ui.py:179
+msgid "See the User Manual for more help"
+msgstr ""
+
+#:
+#: /home/kovid/work/calibre/src/calibre/gui2/store/mobileread/adv_search_builder_ui.py:187
+#: /home/kovid/work/calibre/src/calibre/gui2/store/search/adv_search_builder_ui.py:209
+msgid "Titl&e/Author/Price ..."
+msgstr ""
+
#:
#: /home/kovid/work/calibre/src/calibre/gui2/store/mobileread/cache_progress_dialog_ui.py:51
msgid "Updating book cache"
@@ -11955,13 +12103,12 @@ msgid "Search:"
msgstr ""
#:
-#: /home/kovid/work/calibre/src/calibre/gui2/store/search/adv_search_builder_ui.py:192
+#: /home/kovid/work/calibre/src/calibre/gui2/store/search/adv_search_builder_ui.py:202
msgid "&Price:"
msgstr ""
-#:
-#: /home/kovid/work/calibre/src/calibre/gui2/store/search/adv_search_builder_ui.py:196
-msgid "Titl&e/Author/Price ..."
+#: /home/kovid/work/calibre/src/calibre/gui2/store/search/models.py:36
+msgid ""
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/store/search/models.py:36
@@ -11972,31 +12119,35 @@ msgstr ""
msgid "Price"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/store/search/models.py:180
+#: /home/kovid/work/calibre/src/calibre/gui2/store/search/models.py:191
msgid "Detected price as: %s. Check with the store before making a purchase to verify this price is correct. This price often does not include promotions the store may be running."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/store/search/models.py:183
+#: /home/kovid/work/calibre/src/calibre/gui2/store/search/models.py:194
msgid "This book as been detected as having DRM restrictions. This book may not work with your reader and you will have limitations placed upon you as to what you can do with this book. Check with the store before making any purchases to ensure you can actually read this book."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/store/search/models.py:185
+#: /home/kovid/work/calibre/src/calibre/gui2/store/search/models.py:196
msgid "This book has been detected as being DRM Free. You should be able to use this book on any device provided it is in a format calibre supports for conversion. However, before making a purchase double check the DRM status with the store. The store may not be disclosing the use of DRM."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/store/search/models.py:187
+#: /home/kovid/work/calibre/src/calibre/gui2/store/search/models.py:198
msgid "The DRM status of this book could not be determined. There is a very high likelihood that this book is actually DRM restricted."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/store/search/search.py:252
+#: /home/kovid/work/calibre/src/calibre/gui2/store/search/search.py:105
+msgid "Buying from this store supports the calibre developer: %s
"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/store/search/search.py:261
msgid "Customize get books search"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/store/search/search.py:262
+#: /home/kovid/work/calibre/src/calibre/gui2/store/search/search.py:271
msgid "Configure search"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/store/search/search.py:297
+#: /home/kovid/work/calibre/src/calibre/gui2/store/search/search.py:321
msgid "Couldn't find any books matching your query."
msgstr ""
@@ -12005,16 +12156,6 @@ msgstr ""
msgid "Get Books"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/store/search/search_ui.py:136
-#: /home/kovid/work/calibre/src/calibre/gui2/store/search_ui.py:111
-msgid "All"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/gui2/store/search/search_ui.py:137
-#: /home/kovid/work/calibre/src/calibre/gui2/store/search_ui.py:112
-msgid "Invert"
-msgstr ""
-
#: /home/kovid/work/calibre/src/calibre/gui2/store/search/search_ui.py:140
msgid "Open a selected book in the system's web browser"
msgstr ""
@@ -12381,15 +12522,19 @@ msgstr ""
msgid "%s has been updated to version %s. See the new features."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/update.py:58
+#: /home/kovid/work/calibre/src/calibre/gui2/update.py:55
+msgid "Update only if one of the new features or bug fixes is important to you. If the current version works well for you, do not update."
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/update.py:60
msgid "Update available!"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/update.py:63
+#: /home/kovid/work/calibre/src/calibre/gui2/update.py:65
msgid "Show this notification for future updates"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/update.py:68
+#: /home/kovid/work/calibre/src/calibre/gui2/update.py:70
msgid "&Get update"
msgstr ""
@@ -12960,7 +13105,7 @@ msgid "Demo videos
Videos demonstrating the various features of calibre
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/wizard/finish_ui.py:51
-msgid "User Manual
A User Manual is also available online."
+msgid "User Manual
A User Manual is also available online."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/wizard/kindle_ui.py:49
@@ -13166,63 +13311,63 @@ msgid "Turn on the &content server"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/library/caches.py:161
-#: /home/kovid/work/calibre/src/calibre/library/caches.py:562
-#: /home/kovid/work/calibre/src/calibre/library/caches.py:576
-#: /home/kovid/work/calibre/src/calibre/library/caches.py:586
+#: /home/kovid/work/calibre/src/calibre/library/caches.py:567
+#: /home/kovid/work/calibre/src/calibre/library/caches.py:581
+#: /home/kovid/work/calibre/src/calibre/library/caches.py:591
msgid "checked"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/library/caches.py:161
-#: /home/kovid/work/calibre/src/calibre/library/caches.py:562
-#: /home/kovid/work/calibre/src/calibre/library/caches.py:576
-#: /home/kovid/work/calibre/src/calibre/library/caches.py:586
-#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:214
+#: /home/kovid/work/calibre/src/calibre/library/caches.py:567
+#: /home/kovid/work/calibre/src/calibre/library/caches.py:581
+#: /home/kovid/work/calibre/src/calibre/library/caches.py:591
+#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:216
msgid "yes"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/library/caches.py:163
-#: /home/kovid/work/calibre/src/calibre/library/caches.py:561
-#: /home/kovid/work/calibre/src/calibre/library/caches.py:573
-#: /home/kovid/work/calibre/src/calibre/library/caches.py:583
+#: /home/kovid/work/calibre/src/calibre/library/caches.py:566
+#: /home/kovid/work/calibre/src/calibre/library/caches.py:578
+#: /home/kovid/work/calibre/src/calibre/library/caches.py:588
msgid "unchecked"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/library/caches.py:163
-#: /home/kovid/work/calibre/src/calibre/library/caches.py:561
-#: /home/kovid/work/calibre/src/calibre/library/caches.py:573
-#: /home/kovid/work/calibre/src/calibre/library/caches.py:583
-#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:214
+#: /home/kovid/work/calibre/src/calibre/library/caches.py:566
+#: /home/kovid/work/calibre/src/calibre/library/caches.py:578
+#: /home/kovid/work/calibre/src/calibre/library/caches.py:588
+#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:216
msgid "no"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/caches.py:356
+#: /home/kovid/work/calibre/src/calibre/library/caches.py:361
msgid "today"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/caches.py:359
+#: /home/kovid/work/calibre/src/calibre/library/caches.py:364
msgid "yesterday"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/caches.py:362
+#: /home/kovid/work/calibre/src/calibre/library/caches.py:367
msgid "thismonth"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/caches.py:365
-#: /home/kovid/work/calibre/src/calibre/library/caches.py:366
+#: /home/kovid/work/calibre/src/calibre/library/caches.py:370
+#: /home/kovid/work/calibre/src/calibre/library/caches.py:371
msgid "daysago"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/caches.py:563
-#: /home/kovid/work/calibre/src/calibre/library/caches.py:580
+#: /home/kovid/work/calibre/src/calibre/library/caches.py:568
+#: /home/kovid/work/calibre/src/calibre/library/caches.py:585
msgid "blank"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/caches.py:563
-#: /home/kovid/work/calibre/src/calibre/library/caches.py:580
+#: /home/kovid/work/calibre/src/calibre/library/caches.py:568
+#: /home/kovid/work/calibre/src/calibre/library/caches.py:585
msgid "empty"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/caches.py:564
+#: /home/kovid/work/calibre/src/calibre/library/caches.py:569
msgid "Invalid boolean query \"{0}\""
msgstr ""
@@ -13980,19 +14125,19 @@ msgstr ""
msgid "%sAverage rating is %3.1f"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:1021
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:1022
msgid "Main"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:3109
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3110
msgid "Migrating old database to ebook library in %s
"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:3138
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3139
msgid "Copying %s"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:3155
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3156
msgid "Compacting database"
msgstr ""
@@ -14117,8 +14262,8 @@ msgstr ""
msgid "Replace whitespace with underscores."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:370
-#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:398
+#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:372
+#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:400
msgid "Requested formats not available"
msgstr ""
@@ -14447,35 +14592,35 @@ msgstr ""
msgid "syntax error - program ends before EOF"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/utils/formatter.py:101
-msgid "unknown id "
+#: /home/kovid/work/calibre/src/calibre/utils/formatter.py:103
+msgid "Unknown identifier "
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/utils/formatter.py:107
+#: /home/kovid/work/calibre/src/calibre/utils/formatter.py:110
msgid "unknown function {0}"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/utils/formatter.py:126
+#: /home/kovid/work/calibre/src/calibre/utils/formatter.py:129
msgid "missing closing parenthesis"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/utils/formatter.py:145
+#: /home/kovid/work/calibre/src/calibre/utils/formatter.py:148
msgid "expression is not function or constant"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/utils/formatter.py:179
+#: /home/kovid/work/calibre/src/calibre/utils/formatter.py:182
msgid "format: type {0} requires an integer value, got {1}"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/utils/formatter.py:185
+#: /home/kovid/work/calibre/src/calibre/utils/formatter.py:188
msgid "format: type {0} requires a decimal (float) value, got {1}"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/utils/formatter.py:296
+#: /home/kovid/work/calibre/src/calibre/utils/formatter.py:299
msgid "%s: unknown function"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/utils/formatter.py:343
+#: /home/kovid/work/calibre/src/calibre/utils/formatter.py:348
msgid "No such variable "
msgstr ""
@@ -14483,167 +14628,171 @@ msgstr ""
msgid "No documentation provided"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:79
-msgid "Exception "
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:97
+#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:90
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:112
+#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:105
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:127
+#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:120
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:140
+#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:133
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:150
+#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:143
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:160
+#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:153
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:170
+#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:163
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:180
+#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:173
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:195
+#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:188
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:208
+#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:201
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:218
+#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:211
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:229
+#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:222
msgid "field(name) -- returns the metadata field named by name"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:237
+#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:230
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:246
+#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:239
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:259
+#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:252
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:274
+#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:267
msgid "lookup requires either 2 or an odd number of arguments"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:286
+#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:279
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:298
+#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:291
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:313
+#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:306
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:321
+#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:314
msgid "switch requires an odd number of arguments"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:333
+#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:326
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:349
+#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:342
+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:361
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:360
+#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:372
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:372
+#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:384
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:397
+#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:409
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:408
+#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:420
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:428
+#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:440
msgid "select(val, key) -- interpret the value as a comma-separated list of items, with the items being \"id:value\". Find the pair with theid equal to key, and return the corresponding value."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:445
+#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:457
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`th to the `end_index`th 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:474
+#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:486
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`th to the `end_index`th 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:511
+#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:523
msgid "format_date(val, format_string) -- format the value, which must be a date field, 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:539
+#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:551
msgid "uppercase(val) -- return value of the field in upper case"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:547
+#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:559
msgid "lowercase(val) -- return value of the field in lower case"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:555
+#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:567
msgid "titlecase(val) -- return value of the field in title case"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:563
+#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:575
msgid "capitalize(val) -- return value of the field capitalized"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:571
-msgid "booksize() -- return value of the field capitalized"
+#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:583
+msgid "booksize() -- return value of the size field"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:584
+#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:596
+msgid "ondevice() -- return Yes if ondevice is set, otherwise return the empty string"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:607
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:600
+#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:623
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:616
+#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:639
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:632
+#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:655
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:648
+#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:671
msgid "merge_lists(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 ""
@@ -14663,147 +14812,147 @@ msgstr ""
msgid "Working..."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/utils/localization.py:95
+#: /home/kovid/work/calibre/src/calibre/utils/localization.py:98
msgid "Brazilian Portuguese"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/utils/localization.py:96
+#: /home/kovid/work/calibre/src/calibre/utils/localization.py:99
msgid "English (UK)"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/utils/localization.py:97
+#: /home/kovid/work/calibre/src/calibre/utils/localization.py:100
msgid "Simplified Chinese"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/utils/localization.py:98
+#: /home/kovid/work/calibre/src/calibre/utils/localization.py:101
msgid "Chinese (HK)"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/utils/localization.py:99
+#: /home/kovid/work/calibre/src/calibre/utils/localization.py:102
msgid "Traditional Chinese"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/utils/localization.py:100
+#: /home/kovid/work/calibre/src/calibre/utils/localization.py:103
msgid "English"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/utils/localization.py:101
+#: /home/kovid/work/calibre/src/calibre/utils/localization.py:104
msgid "English (Australia)"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/utils/localization.py:102
+#: /home/kovid/work/calibre/src/calibre/utils/localization.py:105
msgid "English (New Zealand)"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/utils/localization.py:103
+#: /home/kovid/work/calibre/src/calibre/utils/localization.py:106
msgid "English (Canada)"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/utils/localization.py:104
+#: /home/kovid/work/calibre/src/calibre/utils/localization.py:107
msgid "English (India)"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/utils/localization.py:105
+#: /home/kovid/work/calibre/src/calibre/utils/localization.py:108
msgid "English (Thailand)"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/utils/localization.py:106
+#: /home/kovid/work/calibre/src/calibre/utils/localization.py:109
msgid "English (Cyprus)"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/utils/localization.py:107
+#: /home/kovid/work/calibre/src/calibre/utils/localization.py:110
msgid "English (Czechoslovakia)"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/utils/localization.py:108
+#: /home/kovid/work/calibre/src/calibre/utils/localization.py:111
msgid "English (Pakistan)"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/utils/localization.py:109
+#: /home/kovid/work/calibre/src/calibre/utils/localization.py:112
msgid "English (Croatia)"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/utils/localization.py:110
+#: /home/kovid/work/calibre/src/calibre/utils/localization.py:113
msgid "English (Indonesia)"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/utils/localization.py:111
+#: /home/kovid/work/calibre/src/calibre/utils/localization.py:114
msgid "English (Israel)"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/utils/localization.py:112
+#: /home/kovid/work/calibre/src/calibre/utils/localization.py:115
msgid "English (Singapore)"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/utils/localization.py:113
+#: /home/kovid/work/calibre/src/calibre/utils/localization.py:116
msgid "English (Yemen)"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/utils/localization.py:114
+#: /home/kovid/work/calibre/src/calibre/utils/localization.py:117
msgid "English (Ireland)"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/utils/localization.py:115
+#: /home/kovid/work/calibre/src/calibre/utils/localization.py:118
msgid "English (China)"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/utils/localization.py:116
+#: /home/kovid/work/calibre/src/calibre/utils/localization.py:119
msgid "Spanish (Paraguay)"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/utils/localization.py:117
+#: /home/kovid/work/calibre/src/calibre/utils/localization.py:120
msgid "Spanish (Uruguay)"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/utils/localization.py:118
+#: /home/kovid/work/calibre/src/calibre/utils/localization.py:121
msgid "Spanish (Argentina)"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/utils/localization.py:119
+#: /home/kovid/work/calibre/src/calibre/utils/localization.py:122
msgid "Spanish (Mexico)"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/utils/localization.py:120
+#: /home/kovid/work/calibre/src/calibre/utils/localization.py:123
msgid "Spanish (Cuba)"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/utils/localization.py:121
+#: /home/kovid/work/calibre/src/calibre/utils/localization.py:124
msgid "Spanish (Chile)"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/utils/localization.py:122
+#: /home/kovid/work/calibre/src/calibre/utils/localization.py:125
msgid "Spanish (Ecuador)"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/utils/localization.py:123
+#: /home/kovid/work/calibre/src/calibre/utils/localization.py:126
msgid "Spanish (Honduras)"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/utils/localization.py:124
+#: /home/kovid/work/calibre/src/calibre/utils/localization.py:127
msgid "Spanish (Venezuela)"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/utils/localization.py:125
+#: /home/kovid/work/calibre/src/calibre/utils/localization.py:128
msgid "Spanish (Bolivia)"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/utils/localization.py:126
+#: /home/kovid/work/calibre/src/calibre/utils/localization.py:129
msgid "Spanish (Nicaragua)"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/utils/localization.py:127
+#: /home/kovid/work/calibre/src/calibre/utils/localization.py:130
msgid "German (AT)"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/utils/localization.py:128
+#: /home/kovid/work/calibre/src/calibre/utils/localization.py:131
msgid "French (BE)"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/utils/localization.py:129
+#: /home/kovid/work/calibre/src/calibre/utils/localization.py:132
msgid "Dutch (NL)"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/utils/localization.py:130
+#: /home/kovid/work/calibre/src/calibre/utils/localization.py:133
msgid "Dutch (BE)"
msgstr ""
From c319d4f6c567d418a881280ed417a71794011754 Mon Sep 17 00:00:00 2001
From: Kovid Goyal
Date: Sun, 29 May 2011 22:52:36 -0600
Subject: [PATCH 2/2] Alt om Herning and Version2.dk by Rasmus Lauritsen
---
recipes/alt_om_herning.recipe | 43 +++++++++++++++++++++
recipes/version2.recipe | 64 +++++++++++++++++++++++++++++++
resources/template-functions.json | 14 ++++---
3 files changed, 115 insertions(+), 6 deletions(-)
create mode 100644 recipes/alt_om_herning.recipe
create mode 100644 recipes/version2.recipe
diff --git a/recipes/alt_om_herning.recipe b/recipes/alt_om_herning.recipe
new file mode 100644
index 0000000000..c60d142a85
--- /dev/null
+++ b/recipes/alt_om_herning.recipe
@@ -0,0 +1,43 @@
+__license__ = 'GPL v3'
+__copyright__ = '2011, Rasmus Lauritsen '
+'''
+aoh.dk
+'''
+
+from calibre.web.feeds.news import BasicNewsRecipe
+
+class aoh_dk(BasicNewsRecipe):
+ title = 'Alt om Herning'
+ __author__ = 'Rasmus Lauritsen'
+ description = 'Nyheder fra Herning om omegn'
+ publisher = 'Mediehuset Herning Folkeblad'
+ category = 'news, local, Denmark'
+ oldest_article = 14
+ max_articles_per_feed = 50
+ no_stylesheets = True
+ delay = 1
+ encoding = 'utf8'
+ use_embedded_content = False
+ language = 'da'
+ extra_css = """ body{font-family: Verdana,Arial,sans-serif }
+ img{margin-bottom: 0.4em}
+ .txtContent,.stamp{font-size: small}
+ """
+
+ conversion_options = {
+ 'comment' : description
+ , 'tags' : category
+ , 'publisher' : publisher
+ , 'language' : language
+ }
+
+ feeds = [(u'All news', u'http://aoh.dk/rss.xml')]
+
+ keep_only_tags = [
+ dict(name='h1')
+ ,dict(name='span', attrs={'class':['frontpage_body']})
+ ]
+
+ remove_tags = [
+ dict(name=['object','link'])
+ ]
diff --git a/recipes/version2.recipe b/recipes/version2.recipe
new file mode 100644
index 0000000000..7dc257246a
--- /dev/null
+++ b/recipes/version2.recipe
@@ -0,0 +1,64 @@
+import re
+
+__license__ = 'GPL v3'
+__copyright__ = '2011, Rasmus Lauritsen '
+'''
+version2.dk
+'''
+
+from calibre.web.feeds.news import BasicNewsRecipe
+
+class version2(BasicNewsRecipe):
+ title = 'Version2.dk'
+ __author__ = 'Rasmus Lauritsen'
+ description = 'IT News'
+ publisher = 'version2.dk'
+ category = 'news, IT, hardware, software, Denmark'
+ oldest_article = 14
+ max_articles_per_feed = 50
+ no_stylesheets = True
+ remove_empty_feeds = True
+ use_embedded_content = False
+ encoding = 'iso-8859-1'
+ language = 'da'
+
+ extra_css = """
+ body {font-family: "Verdana",Times,serif}
+ .articleauthor{color: #9F9F9F;
+ font-family: Arial, sans-serif;
+ font-size: small;
+ text-transform: uppercase}
+ .rubric,.dd,h6#credit{color: #CD0021;
+ font-family: Arial, sans-serif;
+ font-size: small;
+ text-transform: uppercase}
+ .descender:first-letter{display: inline; font-size: xx-large; font-weight: bold}
+ .dd,h6#credit{color: gray}
+ .c{display: block}
+ .caption,h2#articleintro{font-style: italic}
+ .caption{font-size: small}
+ """
+
+ preprocess_regexps = [ (re.compile(r'?a[^>]*>'),lambda match: ''),
+ (re.compile(r']*article-link-id.*?
'), lambda match: '')]
+
+ keep_only_tags = [dict(name='div', attrs={'class':'article'})]
+
+ remove_tags = [
+ dict(name='p',attrs={'class':'meta links'}),
+ dict(name='div',attrs={'class':'float-right'}),
+ dict(name='span',attrs={'class':'article-link-id'})
+ ]
+
+ feeds = [
+ (u'Seneste nyheder' , u'http://www.version2.dk/feeds/nyheder')
+ ,(u'Forretningssoftware' , u'http://www.version2.dk/feeds/forretningssoftware')
+ ,(u'Internet & styresystemer' , u'http://www.version2.dk/feeds/styresystemer')
+ ,(u'It-arkitektur' , u'http://www.version2.dk/feeds/it-arkitektur')
+ ,(u'It-styring & outsourcing' , u'http://www.version2.dk/feeds/it-styring')
+ ,(u'Job & karriere' , u'http://www.version2.dk/feeds/karriere')
+ ,(u'Mobil it & tele' , u'http://www.version2.dk/feeds/tele')
+ ,(u'Server/storage & netværk' , u'http://www.version2.dk/feeds/server-storage')
+ ,(u'Sikkerhed' , u'http://www.version2.dk/feeds/sikkerhed')
+ ,(u'Softwareudvikling' , u'http://www.version2.dk/feeds/softwareudvikling')
+ ]
diff --git a/resources/template-functions.json b/resources/template-functions.json
index 9fdc1782ea..606b102d41 100644
--- a/resources/template-functions.json
+++ b/resources/template-functions.json
@@ -1,26 +1,27 @@
{
"and": "def evaluate(self, formatter, kwargs, mi, locals, *args):\n i = 0\n while i < len(args):\n if not args[i]:\n return ''\n i += 1\n return '1'\n",
- "contains": "def evaluate(self, formatter, kwargs, mi, locals,\n val, test, value_if_present, value_if_not):\n if re.search(test, val):\n return value_if_present\n else:\n return value_if_not\n",
+ "contains": "def evaluate(self, formatter, kwargs, mi, locals,\n val, test, value_if_present, value_if_not):\n if re.search(test, val, flags=re.I):\n return value_if_present\n else:\n return value_if_not\n",
"divide": "def evaluate(self, formatter, kwargs, mi, locals, x, y):\n x = float(x if x else 0)\n y = float(y if y else 0)\n return unicode(x / y)\n",
"uppercase": "def evaluate(self, formatter, kwargs, mi, locals, val):\n return val.upper()\n",
"strcat": "def evaluate(self, formatter, kwargs, mi, locals, *args):\n i = 0\n res = ''\n for i in range(0, len(args)):\n res += args[i]\n return res\n",
- "in_list": "def evaluate(self, formatter, kwargs, mi, locals, val, sep, pat, fv, nfv):\n l = [v.strip() for v in val.split(sep) if v.strip()]\n for v in l:\n if re.search(pat, v):\n return fv\n return nfv\n",
+ "in_list": "def evaluate(self, formatter, kwargs, mi, locals, val, sep, pat, fv, nfv):\n l = [v.strip() for v in val.split(sep) if v.strip()]\n if l:\n for v in l:\n if re.search(pat, v, flags=re.I):\n return fv\n return nfv\n",
"multiply": "def evaluate(self, formatter, kwargs, mi, locals, x, y):\n x = float(x if x else 0)\n y = float(y if y else 0)\n return unicode(x * y)\n",
"ifempty": "def evaluate(self, formatter, kwargs, mi, locals, val, value_if_empty):\n if val:\n return val\n else:\n return value_if_empty\n",
"booksize": "def evaluate(self, formatter, kwargs, mi, locals):\n if mi.book_size is not None:\n try:\n return str(mi.book_size)\n except:\n pass\n return ''\n",
"select": "def evaluate(self, formatter, kwargs, mi, locals, val, key):\n if not val:\n return ''\n vals = [v.strip() for v in val.split(',')]\n for v in vals:\n if v.startswith(key+':'):\n return v[len(key)+1:]\n return ''\n",
"strcmp": "def evaluate(self, formatter, kwargs, mi, locals, x, y, lt, eq, gt):\n v = strcmp(x, y)\n if v < 0:\n return lt\n if v == 0:\n return eq\n return gt\n",
"first_non_empty": "def evaluate(self, formatter, kwargs, mi, locals, *args):\n i = 0\n while i < len(args):\n if args[i]:\n return args[i]\n i += 1\n return ''\n",
- "re": "def evaluate(self, formatter, kwargs, mi, locals, val, pattern, replacement):\n return re.sub(pattern, replacement, val)\n",
+ "re": "def evaluate(self, formatter, kwargs, mi, locals, val, pattern, replacement):\n return re.sub(pattern, replacement, val, flags=re.I)\n",
"subtract": "def evaluate(self, formatter, kwargs, mi, locals, x, y):\n x = float(x if x else 0)\n y = float(y if y else 0)\n return unicode(x - y)\n",
"list_item": "def evaluate(self, formatter, kwargs, mi, locals, val, index, sep):\n if not val:\n return ''\n index = int(index)\n val = val.split(sep)\n try:\n return val[index]\n except:\n return ''\n",
"shorten": "def evaluate(self, formatter, kwargs, mi, locals,\n val, leading, center_string, trailing):\n l = max(0, int(leading))\n t = max(0, int(trailing))\n if len(val) > l + len(center_string) + t:\n return val[0:l] + center_string + ('' if t == 0 else val[-t:])\n else:\n return val\n",
"field": "def evaluate(self, formatter, kwargs, mi, locals, name):\n return formatter.get_value(name, [], kwargs)\n",
"add": "def evaluate(self, formatter, kwargs, mi, locals, x, y):\n x = float(x if x else 0)\n y = float(y if y else 0)\n return unicode(x + y)\n",
- "lookup": "def evaluate(self, formatter, kwargs, mi, locals, val, *args):\n if len(args) == 2: # here for backwards compatibility\n if val:\n return formatter.vformat('{'+args[0].strip()+'}', [], kwargs)\n else:\n return formatter.vformat('{'+args[1].strip()+'}', [], kwargs)\n if (len(args) % 2) != 1:\n raise ValueError(_('lookup requires either 2 or an odd number of arguments'))\n i = 0\n while i < len(args):\n if i + 1 >= len(args):\n return formatter.vformat('{' + args[i].strip() + '}', [], kwargs)\n if re.search(args[i], val):\n return formatter.vformat('{'+args[i+1].strip() + '}', [], kwargs)\n i += 2\n",
+ "lookup": "def evaluate(self, formatter, kwargs, mi, locals, val, *args):\n if len(args) == 2: # here for backwards compatibility\n if val:\n return formatter.vformat('{'+args[0].strip()+'}', [], kwargs)\n else:\n return formatter.vformat('{'+args[1].strip()+'}', [], kwargs)\n if (len(args) % 2) != 1:\n raise ValueError(_('lookup requires either 2 or an odd number of arguments'))\n i = 0\n while i < len(args):\n if i + 1 >= len(args):\n return formatter.vformat('{' + args[i].strip() + '}', [], kwargs)\n if re.search(args[i], val, flags=re.I):\n return formatter.vformat('{'+args[i+1].strip() + '}', [], kwargs)\n i += 2\n",
"template": "def evaluate(self, formatter, kwargs, mi, locals, template):\n template = template.replace('[[', '{').replace(']]', '}')\n return formatter.__class__().safe_format(template, kwargs, 'TEMPLATE', mi)\n",
"print": "def evaluate(self, formatter, kwargs, mi, locals, *args):\n print args\n return None\n",
"merge_lists": "def evaluate(self, formatter, kwargs, mi, locals, list1, list2, separator):\n l1 = [l.strip() for l in list1.split(separator) if l.strip()]\n l2 = [l.strip() for l in list2.split(separator) if l.strip()]\n lcl1 = set([icu_lower(l) for l in l1])\n res = []\n for i in l1:\n res.append(i)\n for i in l2:\n if icu_lower(i) not in lcl1:\n res.append(i)\n return ', '.join(sorted(res, key=sort_key))\n",
+ "str_in_list": "def evaluate(self, formatter, kwargs, mi, locals, val, sep, str, fv, nfv):\n l = [v.strip() for v in val.split(sep) if v.strip()]\n c = [v.strip() for v in str.split(sep) if v.strip()]\n if l:\n for v in l:\n for t in c:\n if strcmp(t, v) == 0:\n return fv\n return nfv\n",
"titlecase": "def evaluate(self, formatter, kwargs, mi, locals, val):\n return titlecase(val)\n",
"subitems": "def evaluate(self, formatter, kwargs, mi, locals, val, start_index, end_index):\n if not val:\n return ''\n si = int(start_index)\n ei = int(end_index)\n items = [v.strip() for v in val.split(',')]\n rv = set()\n for item in items:\n component = item.split('.')\n try:\n if ei == 0:\n rv.add('.'.join(component[si:]))\n else:\n rv.add('.'.join(component[si:ei]))\n except:\n pass\n return ', '.join(sorted(rv, key=sort_key))\n",
"sublist": "def evaluate(self, formatter, kwargs, mi, locals, val, start_index, end_index, sep):\n if not val:\n return ''\n si = int(start_index)\n ei = int(end_index)\n val = val.split(sep)\n try:\n if ei == 0:\n return sep.join(val[si:])\n else:\n return sep.join(val[si:ei])\n except:\n return ''\n",
@@ -32,9 +33,10 @@
"count": "def evaluate(self, formatter, kwargs, mi, locals, val, sep):\n return unicode(len(val.split(sep)))\n",
"lowercase": "def evaluate(self, formatter, kwargs, mi, locals, val):\n return val.lower()\n",
"substr": "def evaluate(self, formatter, kwargs, mi, locals, str_, start_, end_):\n return str_[int(start_): len(str_) if int(end_) == 0 else int(end_)]\n",
- "assign": "def evaluate(self, formatter, kwargs, mi, locals, target, value):\n locals[target] = value\n return value\n",
- "switch": "def evaluate(self, formatter, kwargs, mi, locals, val, *args):\n if (len(args) % 2) != 1:\n raise ValueError(_('switch requires an odd number of arguments'))\n i = 0\n while i < len(args):\n if i + 1 >= len(args):\n return args[i]\n if re.search(args[i], val):\n return args[i+1]\n i += 2\n",
"or": "def evaluate(self, formatter, kwargs, mi, locals, *args):\n i = 0\n while i < len(args):\n if args[i]:\n return '1'\n i += 1\n return ''\n",
+ "switch": "def evaluate(self, formatter, kwargs, mi, locals, val, *args):\n if (len(args) % 2) != 1:\n raise ValueError(_('switch requires an odd number of arguments'))\n i = 0\n while i < len(args):\n if i + 1 >= len(args):\n return args[i]\n if re.search(args[i], val, flags=re.I):\n return args[i+1]\n i += 2\n",
+ "ondevice": "def evaluate(self, formatter, kwargs, mi, locals):\n if mi.ondevice_col:\n return _('Yes')\n return ''\n",
+ "assign": "def evaluate(self, formatter, kwargs, mi, locals, target, value):\n locals[target] = value\n return value\n",
"raw_field": "def evaluate(self, formatter, kwargs, mi, locals, name):\n return unicode(getattr(mi, name, None))\n",
"cmp": "def evaluate(self, formatter, kwargs, mi, locals, x, y, lt, eq, gt):\n x = float(x if x else 0)\n y = float(y if y else 0)\n if x < y:\n return lt\n if x == y:\n return eq\n return gt\n"
}
\ No newline at end of file