diff --git a/resources/template-functions.json b/resources/template-functions.json
index 606b102d41..b1740465a5 100644
--- a/resources/template-functions.json
+++ b/resources/template-functions.json
@@ -5,7 +5,7 @@
"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 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",
+ "not": "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",
"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",
@@ -27,9 +27,10 @@
"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",
"test": "def evaluate(self, formatter, kwargs, mi, locals, val, value_if_set, value_not_set):\n if val:\n return value_if_set\n else:\n return value_not_set\n",
"eval": "def evaluate(self, formatter, kwargs, mi, locals, template):\n from formatter import eval_formatter\n template = template.replace('[[', '{').replace(']]', '}')\n return eval_formatter.safe_format(template, locals, 'EVAL', None)\n",
- "not": "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",
- "format_date": "def evaluate(self, formatter, kwargs, mi, locals, val, format_string):\n if not val:\n return ''\n try:\n dt = parse_date(val)\n s = format_date(dt, format_string)\n except:\n s = 'BAD DATE'\n return s\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",
+ "format_date": "def evaluate(self, formatter, kwargs, mi, locals, val, format_string):\n if not val or val == 'None':\n return ''\n try:\n dt = parse_date(val)\n s = format_date(dt, format_string)\n except:\n s = 'BAD DATE'\n return s\n",
"capitalize": "def evaluate(self, formatter, kwargs, mi, locals, val):\n return capitalize(val)\n",
+ "identifier_in_list": "def evaluate(self, formatter, kwargs, mi, locals, val, ident, fv, nfv):\n l = [v.strip() for v in val.split(',') if v.strip()]\n (id, _, regexp) = ident.partition(':')\n if not id:\n return nfv\n id += ':'\n if l:\n for v in l:\n if v.startswith(id):\n if not regexp or re.search(regexp, v[len(id):], flags=re.I):\n return fv\n return nfv\n",
"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",
@@ -38,5 +39,5 @@
"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"
+ "cmp": "def evaluate(self, formatter, kwargs, mi, locals, x, y, lt, eq, gt):\n x = float(x if x and x != 'None' else 0)\n y = float(y if y and y != 'None' 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
diff --git a/setup/pygettext.py b/setup/pygettext.py
index 322758871d..882dab05e6 100644
--- a/setup/pygettext.py
+++ b/setup/pygettext.py
@@ -187,7 +187,6 @@ msgstr ""
'''%dict(appname=__appname__, version=version, year=time.strftime('%Y'))
-
def usage(code, msg=''):
print >> sys.stderr, __doc__ % globals()
if msg:
diff --git a/src/calibre/gui2/store/search/models.py b/src/calibre/gui2/store/search/models.py
index 89c11445b3..e2c1a03e90 100644
--- a/src/calibre/gui2/store/search/models.py
+++ b/src/calibre/gui2/store/search/models.py
@@ -33,7 +33,7 @@ class Matches(QAbstractItemModel):
total_changed = pyqtSignal(int)
- HEADERS = [_('Cover'), _('Title'), _('Price'), _('DRM'), _('Store'), _('')]
+ HEADERS = [_('Cover'), _('Title'), _('Price'), _('DRM'), _('Store'), '']
HTML_COLS = (1, 4)
def __init__(self, cover_thread_count=2, detail_thread_count=4):
@@ -58,7 +58,7 @@ class Matches(QAbstractItemModel):
self.search_filter = SearchFilter()
self.cover_pool = CoverThreadPool(cover_thread_count)
self.details_pool = DetailsThreadPool(detail_thread_count)
-
+
self.filter_results_dispatcher = FunctionDispatcher(self.filter_results)
self.got_result_details_dispatcher = FunctionDispatcher(self.got_result_details)
diff --git a/src/calibre/translations/calibre.pot b/src/calibre/translations/calibre.pot
index 50576b12ae..afb1d347ac 100644
--- a/src/calibre/translations/calibre.pot
+++ b/src/calibre/translations/calibre.pot
@@ -4,9 +4,9 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: calibre 0.8.3\n"
-"POT-Creation-Date: 2011-05-29 15:03+MDT\n"
-"PO-Revision-Date: 2011-05-29 15:03+MDT\n"
+"Project-Id-Version: calibre 0.8.4\n"
+"POT-Creation-Date: 2011-06-03 11:17+MDT\n"
+"PO-Revision-Date: 2011-06-03 11:17+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: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/book/base.py:96
+#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:462
+#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:467
+#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:737
#: /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
@@ -74,7 +74,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/base.py:298
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/covers.py:79
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/covers.py:81
-#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/douban.py:78
+#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/douban.py:80
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/google.py:81
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/identify.py:208
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/identify.py:303
@@ -144,32 +144,32 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:366
#: /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:1018
-#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1194
-#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1197
+#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:408
+#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1024
#: /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/library/models.py:1203
+#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1206
+#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1291
#: /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
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/bulk_download.py:119
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:358
-#: /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/metadata/single_download.py:161
+#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:165
#: /home/kovid/work/calibre/src/calibre/gui2/store/google_books_plugin.py:90
#: /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: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/database2.py:521
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:529
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:540
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:1823
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:1960
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:2967
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:2969
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3102
#: /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
@@ -704,11 +704,11 @@ msgstr ""
msgid "Communicate with Android phones."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:96
+#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:97
msgid "Comma separated list of directories to send e-books to on the device. The first one that exists will be used"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:146
+#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:149
msgid "Communicate with S60 phones."
msgstr ""
@@ -765,14 +765,14 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:475
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1057
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1101
-#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3097
-#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3137
+#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3107
+#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3147
msgid "%d of %d"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:482
#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1106
-#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3143
+#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3153
#: /home/kovid/work/calibre/src/calibre/gui2/ebook_download.py:106
msgid "finished"
msgstr ""
@@ -790,7 +790,7 @@ msgid ""
"Click 'Show Details' for a list."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2668
+#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2678
#: /home/kovid/work/calibre/src/calibre/devices/nook/driver.py:100
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:447
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:470
@@ -799,22 +799,22 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:945
#: /home/kovid/work/calibre/src/calibre/gui2/actions/fetch_news.py:73
#: /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:2813
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:317
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:330
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:2831
#: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:159
msgid "News"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2669
+#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2679
#: /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:2773
#: /home/kovid/work/calibre/src/calibre/library/database2.py:2791
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:2809
msgid "Catalog"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3001
+#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3009
msgid "Communicate with iTunes."
msgstr ""
@@ -1150,11 +1150,11 @@ msgstr ""
msgid "Communicate with the Trekstor"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/misc.py:239
+#: /home/kovid/work/calibre/src/calibre/devices/misc.py:242
msgid "Communicate with the EEE Reader"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/misc.py:259
+#: /home/kovid/work/calibre/src/calibre/devices/misc.py:262
msgid "Communicate with the Nextbook Reader"
msgstr ""
@@ -2304,33 +2304,33 @@ 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:51
+#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:56
msgid "Value: unknown field "
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:144
+#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:152
msgid "TEMPLATE ERROR"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:627
+#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:635
#: /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:627
+#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:635
#: /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
+#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:667
msgid "Yes"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:728
+#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:736
#: /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:1023
-#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:132
+#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:65
+#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1029
+#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:133
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:152
#: /home/kovid/work/calibre/src/calibre/gui2/store/mobileread/models.py:23
#: /home/kovid/work/calibre/src/calibre/gui2/store/search/models.py:36
@@ -2339,35 +2339,35 @@ msgstr ""
msgid "Title"
msgstr ""
-#: /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:1024
+#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:737
+#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:67
+#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1030
#: /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:730
-#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:71
+#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:738
+#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:72
#: /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:731
+#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:739
#: /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:732
+#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:740
#: /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:734
+#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:742
#: /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
+#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:73
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:67
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:151
#: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:171
@@ -2375,34 +2375,34 @@ msgstr ""
msgid "Tags"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:736
+#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:744
#: /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
+#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:74
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:67
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:153
#: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:114
msgid "Series"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:737
+#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:745
#: /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:739
+#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:747
msgid "Timestamp"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:741
+#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:749
#: /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
+#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:70
+#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:133
#: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:271
msgid "Published"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:743
+#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:751
msgid "Rights"
msgstr ""
@@ -2543,7 +2543,7 @@ msgstr ""
msgid "Metadata source"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/douban.py:154
+#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/douban.py:156
msgid "Downloads metadata and covers from Douban.com"
msgstr ""
@@ -2711,7 +2711,7 @@ msgid "HTML TOC generation options."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/jacket.py:169
-#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:70
+#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:71
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:68
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:150
#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:759
@@ -3788,55 +3788,55 @@ msgid "Choose formats to be deleted"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:155
-msgid "Choose formats not to be deleted"
+msgid "Choose formats not to be deleted.
Note that this will never remove all formats from a book."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:175
+#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:179
msgid "Cannot delete books"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:176
+#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:180
msgid "No device is connected"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:186
+#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:190
msgid "Main memory"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:187
+#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:191
#: /home/kovid/work/calibre/src/calibre/gui2/device.py:468
#: /home/kovid/work/calibre/src/calibre/gui2/device.py:477
msgid "Storage Card A"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:188
+#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:192
#: /home/kovid/work/calibre/src/calibre/gui2/device.py:470
#: /home/kovid/work/calibre/src/calibre/gui2/device.py:479
msgid "Storage Card B"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:193
+#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:197
msgid "No books to delete"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:194
+#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:198
msgid "None of the selected books are on the device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:211
-#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:302
+#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:215
+#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:306
msgid "Deleting books from device."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:257
+#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:261
msgid "Some of the selected books are on the attached device. Where do you want the selected files deleted from?"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:269
+#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:273
msgid "The selected books will be permanently deleted and the files removed from your calibre library. Are you sure?"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:294
+#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:298
msgid "The selected books will be permanently deleted from your device. Are you sure?"
msgstr ""
@@ -3958,8 +3958,8 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:87
#: /home/kovid/work/calibre/src/calibre/gui2/dnd.py:84
-#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:462
-#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:716
+#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:463
+#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:717
msgid "Download failed"
msgstr ""
@@ -3984,7 +3984,7 @@ msgid "Download complete"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:107
-#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:777
+#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:778
msgid "Download log"
msgstr ""
@@ -4030,11 +4030,11 @@ msgstr ""
msgid "Applying changed metadata"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:520
+#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:522
msgid "Some failures"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:521
+#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:523
msgid "Failed to apply updated metadata for some books in your library. Click \"Show Details\" to see details."
msgstr ""
@@ -4611,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:1027
+#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1033
msgid "Collections"
msgstr ""
@@ -4723,7 +4723,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/conversion_ui.py:54
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/custom_columns_ui.py:81
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/email_ui.py:65
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:297
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:197
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources_ui.py:109
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/misc_ui.py:61
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/plugboard_ui.py:113
@@ -6958,19 +6958,19 @@ 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:222
+#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_dialog.py:236
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:223
+#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_dialog.py:237
#: /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"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comments_dialog_ui.py:43
-#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_dialog_ui.py:70
+#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_dialog_ui.py:88
msgid "Edit Comments"
msgstr ""
@@ -7017,8 +7017,8 @@ 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:1025
+#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:69
+#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1031
#: /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
@@ -7049,7 +7049,7 @@ msgstr ""
#:
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog.py:104
#: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main.py:160
-#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:471
+#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:472
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:503
msgid "No matches found"
msgstr ""
@@ -7211,14 +7211,14 @@ msgid "Copied"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:135
-#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:770
+#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:771
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:205
msgid "Copy to clipboard"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/message_box.py:179
-#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:831
-#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:922
+#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:832
+#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:923
msgid "View log"
msgstr ""
@@ -8199,7 +8199,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories.py:200
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories.py:230
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/template_functions.py:152
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/template_functions.py:154
msgid "Name already used"
msgstr ""
@@ -8364,111 +8364,68 @@ msgstr ""
msgid "Ctrl+S"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_dialog.py:249
+#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_dialog.py:265
msgid "EXCEPTION: "
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_dialog_ui.py:71
+#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_dialog.py:293
+msgid "No column chosen"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_dialog.py:294
+msgid "You must specify a column to be colored"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_dialog.py:297
+msgid "No template provided"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_dialog.py:298
+msgid "The template box cannot be empty"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_dialog_ui.py:89
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:235
+msgid "Set the color of the column:"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_dialog_ui.py:90
+msgid "Template value:"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_dialog_ui.py:91
+msgid "The value the of the template using the current book in the library view"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_dialog_ui.py:92
msgid "Function &name:"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_dialog_ui.py:72
+#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_dialog_ui.py:93
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/template_functions_ui.py:100
msgid "&Documentation:"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_dialog_ui.py:73
+#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_dialog_ui.py:94
msgid "Python &code:"
msgstr ""
#:
-#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_line_editor.py:36
+#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_line_editor.py:30
+msgid "Remove any template from the box"
+msgstr ""
+
+#:
+#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_line_editor.py:32
msgid "Open Template Editor"
msgstr ""
#:
-#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_line_editor.py:39
-msgid "Open Tag Wizard"
-msgstr ""
-
-#:
-#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_line_editor.py:45
+#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_line_editor.py:41
#: /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:52
-msgid "Invalid text"
-msgstr ""
-
-#:
-#: /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:64
-msgid "Tag Wizard"
-msgstr ""
-
-#:
-#: /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: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: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:179
-#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_line_editor.py:184
-msgid "The color {0} is not valid"
-msgstr ""
-
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/test_email_ui.py:56
msgid "Test email settings"
msgstr ""
@@ -8867,7 +8824,7 @@ msgid "Regular expression (?P)"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/init.py:105
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:337
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:237
msgid "Cover Browser"
msgstr ""
@@ -8876,7 +8833,7 @@ msgid "Shift+Alt+B"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/init.py:124
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:334
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:234
msgid "Tag Browser"
msgstr ""
@@ -8904,7 +8861,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/init.py:223
#: /home/kovid/work/calibre/src/calibre/gui2/init.py:233
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:316
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:216
msgid "Book Details"
msgstr ""
@@ -9005,7 +8962,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:1024
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:1042
msgid "Card A"
msgstr ""
@@ -9014,7 +8971,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:1026
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:1044
msgid "Card B"
msgstr ""
@@ -9058,45 +9015,45 @@ msgstr ""
msgid "Y"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:65
+#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:66
#: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:251
msgid "On Device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:67
+#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:68
msgid "Size (MB)"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:74
+#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:75
#: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:241
msgid "Modified"
msgstr ""
-#: /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/library/models.py:772
+#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1329
#: /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:772
-#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1325
+#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:778
+#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1331
msgid "This book's UUID is \"{0}\""
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1022
+#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1028
msgid "In Library"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1026
+#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1032
#: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:311
msgid "Size"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1303
+#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1309
msgid "Marked for deletion"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1306
+#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1312
msgid "Double click to edit me
"
msgstr ""
@@ -9605,7 +9562,7 @@ msgid "Downloaded metadata fields"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:51
-#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:824
+#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:825
#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:107
#: /home/kovid/work/calibre/src/calibre/web/feeds/templates.py:211
#: /home/kovid/work/calibre/src/calibre/web/feeds/templates.py:401
@@ -9718,15 +9675,15 @@ msgstr ""
msgid "Basic metadata"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:132
+#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:133
msgid "Has cover"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:132
+#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:133
msgid "Has summary"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:189
+#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:190
msgid ""
"The has cover indication is not fully\n"
"reliable. Sometimes results marked as not\n"
@@ -9734,59 +9691,59 @@ msgid ""
"cover stage, and vice versa."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:258
+#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:259
msgid "See at"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:393
+#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:394
msgid "calibre is downloading metadata from: "
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:415
+#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:416
msgid "Please wait"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:444
+#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:445
msgid "Query: "
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:463
+#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:464
msgid "Failed to download metadata. Click Show Details to see details"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:472
+#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:473
msgid "Failed to find any books that match your search. Try making the search less specific. For example, use only the author's last name and a single distinctive word from the title.To see the full log, click Show Details."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:538
+#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:539
msgid "Current cover"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:541
+#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:542
msgid "Searching..."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:687
+#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:688
msgid "Downloading covers for %s, please wait..."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:717
+#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:718
msgid "Failed to download any covers, click \"Show details\" for details."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:723
+#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:724
msgid "Could not find any covers for %s"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:725
+#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:726
msgid "Found %d covers of %s. Pick the one you like best."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:813
+#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:814
msgid "Downloading metadata..."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:906
+#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:907
msgid "Downloading cover..."
msgstr ""
@@ -9966,6 +9923,214 @@ msgstr ""
msgid "Reset all disabled &confirmation dialogs"
msgstr ""
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:30
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:35
+msgid "is true"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:31
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:36
+msgid "is false"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:32
+msgid "is undefined"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:39
+msgid "has id"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:40
+msgid "does not have id"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:43
+msgid "is equal to"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:44
+msgid "is less than"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:45
+msgid "is greater than"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:48
+msgid "has"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:49
+msgid "does not have"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:50
+msgid "has pattern"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:51
+msgid "does not have pattern"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:52
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:60
+msgid "is set"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:53
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:61
+msgid "is not set"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:56
+msgid "is"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:57
+msgid "is not"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:58
+msgid "matches pattern"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:59
+msgid "does not match pattern"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:71
+msgid "If the "
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:77
+msgid " column "
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:83
+msgid " value "
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:193
+msgid "Enter either an identifier type or an identifier type and value of the form identifier:value"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:196
+msgid "Enter a number"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:201
+msgid "Enter a date in the format YYYY-MM-DD"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:203
+msgid "Enter a string."
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:205
+msgid "Enter a regular expression"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:207
+msgid "You can match multiple values by separating them with %s"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:222
+msgid "Create/edit a column coloring rule"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:227
+msgid "Create a coloring rule by filling in the boxes below"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:241
+msgid "to"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:249
+msgid "Only if the following conditions are all satisfied:"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:259
+msgid "Add another condition"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:263
+msgid "You can disable a condition by blanking all of its boxes"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:335
+msgid "Invalid condition"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:336
+msgid "One of the conditions for this rule is invalid: %s"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:341
+msgid "No conditions"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:342
+msgid "You must specify at least one non-empty condition for this rule"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:430
+msgid ""
+"\n"
+"
Advanced Rule for column %s:\n"
+"
%s
\n"
+" "
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:435
+msgid ""
+" Set the color of %s to %s if the following\n"
+" conditions are met:
\n"
+" \n"
+" "
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:443
+msgid "If the %s column %s value: %s"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:458
+msgid "You can control the color of columns in the book list by creating \"rules\" that tell calibre what color to use. Click the Add Rule button below to get started. You can change an existing rule by double clicking it."
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:467
+msgid "Add Rule"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:470
+msgid "Remove Rule"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:487
+msgid "Move the selected rule up"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:492
+msgid "Move the selected rule down"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:500
+msgid "Add Advanced Rule"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:548
+msgid "No rule selected"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:549
+msgid "No rule selected for %s."
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:554
+msgid "removal"
+msgstr ""
+
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/columns.py:96
msgid "You must select a column to delete it"
msgstr ""
@@ -10481,156 +10646,135 @@ msgstr ""
msgid "new email address"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:103
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:104
msgid "Narrow"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:103
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:104
msgid "Wide"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:128
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:129
msgid "Off"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:128
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:129
msgid "Small"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:129
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:130
msgid "Large"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:129
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:130
msgid "Medium"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:132
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:133
msgid "Always"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:132
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:133
msgid "If there is enough room"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:133
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:134
msgid "Never"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:136
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:137
msgid "By first letter"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:136
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:137
msgid "Disabled"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:137
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:138
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."
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:166
+msgid "Column coloring"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:170
-msgid "If you want to color a field based on tags, then click the button next to an empty line to open the tags wizard. It will build a template for you. You can later edit that template with the same wizard. If you edit it by hand, the wizard might not work or might restore old values."
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:176
-msgid ""
-"The template must evaluate to one of the color names shown below. You can use any legal template expression. For example, you can set the title to always display in green using the template \"green\" (without the quotes). To show the title in the color named in the custom column #column, use \"{#column}\". To show the title in blue if the custom column #column contains the value \"foo\", in red if the column contains the value \"bar\", otherwise in black, use {#column:switch(foo,blue,bar,red,black)}
To show the title in blue if the book has the exact tag \"Science Fiction\", red if the book has the exact tag \"Mystery\", or black if the book has neither tag, useprogram: \n"
-" t = field('tags'); \n"
-" first_non_empty(\n"
-" in_list(t, ',', '^Science Fiction$', 'blue', ''), \n"
-" in_list(t, ',', '^Mystery$', 'red', 'black'))
To show the title in green if it has one format, blue if it two formats, and red if more, useprogram:cmp(count(field('formats'),','), 2, 'green', 'blue', 'red')
"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:197
-msgid "You can access a multi-line template editor from the context menu (right-click)."
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:199
-msgid "Note: if you want to color a \"custom column with a fixed set of values\", it is often easier to specify the colors in the column definition dialog. There you can provide a color for each value without using a template."
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:298
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:198
msgid "User Interface &layout (needs restart):"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:299
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:199
msgid "Choose &language (requires restart):"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:300
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:200
msgid "Enable system &tray icon (needs restart)"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:301
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:201
msgid "Disable all animations. Useful if you have a slow/old computer."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:302
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:202
msgid "Disable &animations"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:303
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:203
msgid "Disable ¬ifications in system tray"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:304
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:204
msgid "Show &splash screen at startup"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:305
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:205
msgid "&Toolbar"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:306
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:206
msgid "&Icon size:"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:307
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:207
msgid "Show &text under icons:"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:308
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:208
msgid "Interface font:"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:309
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:209
msgid "Change &font (needs restart)"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:310
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:210
msgid "Main Interface"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:311
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:211
msgid "Select displayed metadata"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:312
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:212
msgid "Move up"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:313
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:213
msgid "Move down"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:314
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:214
msgid "Use &Roman numerals for series"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:315
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:215
msgid "Note that comments will always be displayed at the end, regardless of the position you assign here."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:317
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:217
msgid "Tags browser category &partitioning method:"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:318
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:218
msgid ""
"Choose how tag browser subcategories are displayed when\n"
"there are more items than the limit. Select by first\n"
@@ -10639,25 +10783,25 @@ msgid ""
"if you never want subcategories"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:323
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:223
msgid "&Collapse when more items than:"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:324
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:224
msgid ""
"If a Tag Browser category has more than this number of items, it is divided\n"
"up into sub-categories. If the partition method is set to disable, this value is ignored."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:326
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:226
msgid "Show &average ratings in the tags browser"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:327
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:227
msgid "Categories with &hierarchical items:"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:328
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:228
msgid ""
"A comma-separated list of columns in which items containing\n"
"periods are displayed in the tag browser trees. For example, if\n"
@@ -10667,38 +10811,14 @@ msgid ""
"then the tags will be displayed each on their own line."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:335
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:235
msgid "Show cover &browser in a separate window (needs restart)"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:336
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:236
msgid "&Number of covers to show in browse mode (needs restart):"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:338
-msgid "Column to color"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:339
-msgid "Color selection template"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:340
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:341
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:342
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:343
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:344
-msgid "Open the tags wizard."
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:345
-msgid "Color names"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:346
-msgid "Column Coloring"
-msgstr ""
-
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/main.py:230
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/tweaks_ui.py:96
msgid "&Apply"
@@ -10764,12 +10884,12 @@ msgid "Configure %s
%s"
msgstr ""
#:
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:293
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:295
msgid "No source selected"
msgstr ""
#:
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:294
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:296
msgid "No source selected, cannot configure."
msgstr ""
@@ -11386,7 +11506,7 @@ msgid ""
msgstr ""
#:
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/template_functions.py:23
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/template_functions.py:25
msgid ""
"\n"
" Here you can add and remove functions used in template processing. A\n"
@@ -11441,36 +11561,36 @@ msgid ""
msgstr ""
#:
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/template_functions.py:134
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/template_functions.py:144
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/template_functions.py:151
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/template_functions.py:155
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/template_functions.py:166
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/template_functions.py:136
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/template_functions.py:146
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/template_functions.py:153
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/template_functions.py:157
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/template_functions.py:173
msgid "Template functions"
msgstr ""
#:
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/template_functions.py:135
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/template_functions.py:137
msgid "You cannot delete a built-in function"
msgstr ""
#:
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/template_functions.py:145
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/template_functions.py:147
msgid "Function not defined"
msgstr ""
#:
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/template_functions.py:156
-msgid "Argument count must be -1 or greater than zero"
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/template_functions.py:158
+msgid "Argument count should be -1 or greater than zero.Setting it to zero means that this function cannot be used in single function mode."
msgstr ""
#:
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/template_functions.py:167
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/template_functions.py:174
msgid "Exception while compiling function"
msgstr ""
#:
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/template_functions.py:195
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/template_functions.py:202
msgid "function source code not available"
msgstr ""
@@ -12107,10 +12227,6 @@ msgstr ""
msgid "&Price:"
msgstr ""
-#: /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
msgid "DRM"
msgstr ""
@@ -12279,7 +12395,7 @@ msgid "Changing the metadata for that many books can take a while. Are you sure?
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:1157
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:421
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:436
msgid "Searches"
msgstr ""
@@ -14125,19 +14241,19 @@ msgstr ""
msgid "%sAverage rating is %3.1f"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:1022
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:1040
msgid "Main"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:3110
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3128
msgid "
Migrating old database to ebook library in %s
"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:3139
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3157
msgid "Copying %s"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:3156
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3174
msgid "Compacting database"
msgstr ""
@@ -14628,171 +14744,175 @@ msgstr ""
msgid "No documentation provided"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:90
+#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:92
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:105
+#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:108
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:120
+#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:124
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:133
+#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:138
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:143
+#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:149
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:153
+#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:160
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:163
+#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:171
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:173
+#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:183
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:188
+#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:199
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:201
+#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:213
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:211
+#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:224
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:222
+#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:236
msgid "field(name) -- returns the metadata field named by name"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:230
+#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:245
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:239
+#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:255
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:252
+#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:269
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:267
+#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:284
msgid "lookup requires either 2 or an odd number of arguments"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:279
+#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:297
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:291
+#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:310
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:306
+#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:326
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:314
+#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:334
msgid "switch requires an odd number of arguments"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:326
+#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:347
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:342
+#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:365
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
+#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:386
+msgid "identifier_in_list(val, id, found_val, not_found_val) -- treat val as a list of identifiers separated by commas, comparing the string against each value in the list. An identifier has the format \"identifier:value\". The id parameter should be either \"id\" or \"id:regexp\". The first case matches if there is any identifier with that id. The second case matches if the regexp matches the identifier's value. If there is a match, return found_val, otherwise return not_found_val."
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:412
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:372
+#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:424
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:384
+#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:437
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:409
+#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:463
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:420
+#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:475
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:440
+#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:496
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: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\"."
+#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:514
+msgid "sublist(val, start_index, end_index, separator) -- interpret the value as a list of items separated by `separator`, returning a new list made from the `start_index` to the `end_index` item. The first item is number zero. If an index is negative, then it counts from the end of the list. As a special case, an end_index of zero is assumed to be the length of the list. Examples using basic template mode and assuming that the tags column (which is comma-separated) contains \"A, B, C\": {tags:sublist(0,1,\\,)} returns \"A\". {tags:sublist(-1,0,\\,)} returns \"C\". {tags:sublist(0,-1,\\,)} returns \"A, B\"."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py: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: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:551
-msgid "uppercase(val) -- return value of the field in upper case"
-msgstr ""
-
-#: /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:567
-msgid "titlecase(val) -- return value of the field in title case"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:575
-msgid "capitalize(val) -- return value of the field capitalized"
+#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:545
+msgid "subitems(val, start_index, end_index) -- This function is used to break apart lists of items such as genres. It interprets the value as a comma-separated list of items, where each item is a period-separated list. Returns a new list made by first finding all the period-separated items, then for each such item extracting the start_index` to the `end_index` components, then combining the results back together. The first component in a period-separated list has an index of zero. If an index is negative, then it counts from the end of the list. As a special case, an end_index of zero is assumed to be the length of the list. Example using basic template mode and assuming a #genre value of \"A.B.C\": {#genre:subitems(0,1)} returns \"A\". {#genre:subitems(0,2)} returns \"A.B\". {#genre:subitems(1,0)} returns \"B.C\". Assuming a #genre value of \"A.B.C, D.E.F\", {#genre:subitems(0,1)} returns \"A, D\". {#genre:subitems(0,2)} returns \"A.B, D.E\""
msgstr ""
#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:583
-msgid "booksize() -- return value of the size field"
+msgid "format_date(val, format_string) -- format the value, which must be a date, using the format_string, returning a string. The formatting codes are: d : the day as number without a leading zero (1 to 31) dd : the day as number with a leading zero (01 to 31) ddd : the abbreviated localized day name (e.g. \"Mon\" to \"Sun\"). dddd : the long localized day name (e.g. \"Monday\" to \"Sunday\"). M : the month as number without a leading zero (1 to 12). MM : the month as number with a leading zero (01 to 12) MMM : the abbreviated localized month name (e.g. \"Jan\" to \"Dec\"). MMMM : the long localized month name (e.g. \"January\" to \"December\"). yy : the year as two digit number (00 to 99). yyyy : the year as four digit number. iso : the date with time and timezone. Must be the only format present"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:596
-msgid "ondevice() -- return Yes if ondevice is set, otherwise return the empty string"
+#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:612
+msgid "uppercase(val) -- return value of the field in upper case"
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."
+#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:621
+msgid "lowercase(val) -- return value of the field in lower case"
msgstr ""
-#: /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."
+#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:630
+msgid "titlecase(val) -- return value of the field in title case"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:639
+msgid "capitalize(val) -- return value of the field capitalized"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:648
+msgid "booksize() -- return value of the size field"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:662
+msgid "ondevice() -- return Yes if ondevice is set, otherwise return the empty string"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:674
+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:691
+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:708
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:655
+#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:725
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:671
+#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:742
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 ""
@@ -15254,198 +15374,206 @@ msgstr ""
msgid "Should the completion separator be append\nto the end of the completed text to\nautomatically begin a new completion operation\nfor authors.\nCan be either True or False"
msgstr ""
-#: /home/kovid/work/calibre/resources/default_tweaks.py:40
+#: /home/kovid/work/calibre/resources/default_tweaks.py:39
msgid "Author sort name algorithm"
msgstr ""
-#: /home/kovid/work/calibre/resources/default_tweaks.py:41
+#: /home/kovid/work/calibre/resources/default_tweaks.py:40
msgid "The algorithm used to copy author to author_sort\nPossible values are:\ninvert: use \"fn ln\" -> \"ln, fn\"\ncopy : copy author to author_sort without modification\ncomma : use 'copy' if there is a ',' in the name, otherwise use 'invert'\nnocomma : \"fn ln\" -> \"ln fn\" (without the comma)\nWhen this tweak is changed, the author_sort values stored with each author\nmust be recomputed by right-clicking on an author in the left-hand tags pane,\nselecting 'manage authors', and pressing 'Recalculate all author sort values'.\nThe author name suffixes are words that are ignored when they occur at the\nend of an author name. The case of the suffix is ignored and trailing\nperiods are automatically handled."
msgstr ""
-#: /home/kovid/work/calibre/resources/default_tweaks.py:58
+#: /home/kovid/work/calibre/resources/default_tweaks.py:57
msgid "Use author sort in Tag Browser"
msgstr ""
-#: /home/kovid/work/calibre/resources/default_tweaks.py:59
+#: /home/kovid/work/calibre/resources/default_tweaks.py:58
msgid "Set which author field to display in the tags pane (the list of authors,\nseries, publishers etc on the left hand side). The choices are author and\nauthor_sort. This tweak affects only what is displayed under the authors\ncategory in the tags pane and content server. Please note that if you set this\nto author_sort, it is very possible to see duplicate names in the list because\nalthough it is guaranteed that author names are unique, there is no such\nguarantee for author_sort values. Showing duplicates won't break anything, but\nit could lead to some confusion. When using 'author_sort', the tooltip will\nshow the author's name.\nExamples:\ncategories_use_field_for_author_name = 'author'\ncategories_use_field_for_author_name = 'author_sort'"
msgstr ""
+#: /home/kovid/work/calibre/resources/default_tweaks.py:72
+msgid "Completion sort order: choose when to change from lexicographic to ASCII-like"
+msgstr ""
+
#: /home/kovid/work/calibre/resources/default_tweaks.py:73
+msgid "Calibre normally uses locale-dependent lexicographic ordering when showing\ncompletion values. This means that the sort order is correct for the user's\nlanguage. However, this can be slow. Performance is improved by switching to\nascii ordering. This tweak controls when that switch happens. Set it to zero\nto always use ascii ordering. Set it to something larger than zero to switch\nto ascii ordering for performance reasons."
+msgstr ""
+
+#: /home/kovid/work/calibre/resources/default_tweaks.py:81
msgid "Control partitioning of Tag Browser"
msgstr ""
-#: /home/kovid/work/calibre/resources/default_tweaks.py:74
+#: /home/kovid/work/calibre/resources/default_tweaks.py:82
msgid "When partitioning the tags browser, the format of the subcategory label is\ncontrolled by a template: categories_collapsed_name_template if sorting by\nname, categories_collapsed_rating_template if sorting by average rating, and\ncategories_collapsed_popularity_template if sorting by popularity. There are\ntwo variables available to the template: first and last. The variable 'first'\nis the initial item in the subcategory, and the variable 'last' is the final\nitem in the subcategory. Both variables are 'objects'; they each have multiple\nvalues that are obtained by using a suffix. For example, first.name for an\nauthor category will be the name of the author. The sub-values available are:\nname: the printable name of the item\ncount: the number of books that references this item\navg_rating: the average rating of all the books referencing this item\nsort: the sort value. For authors, this is the author_sort for that author\ncategory: the category (e.g., authors, series) that the item is in.\nNote that the \"r'\" in front of the { is necessary if there are backslashes\n(\\ characters) in the template. It doesn't hurt anything to leave it there\neven if there aren't any backslashes."
msgstr ""
-#: /home/kovid/work/calibre/resources/default_tweaks.py:96
+#: /home/kovid/work/calibre/resources/default_tweaks.py:103
msgid "Specify columns to sort the booklist by on startup"
msgstr ""
-#: /home/kovid/work/calibre/resources/default_tweaks.py:97
+#: /home/kovid/work/calibre/resources/default_tweaks.py:104
msgid "Provide a set of columns to be sorted on when calibre starts\nThe argument is None if saved sort history is to be used\notherwise it is a list of column,order pairs. Column is the\nlookup/search name, found using the tooltip for the column\nOrder is 0 for ascending, 1 for descending\nFor example, set it to [('authors',0),('title',0)] to sort by\ntitle within authors."
msgstr ""
-#: /home/kovid/work/calibre/resources/default_tweaks.py:106
+#: /home/kovid/work/calibre/resources/default_tweaks.py:113
msgid "Control how dates are displayed"
msgstr ""
-#: /home/kovid/work/calibre/resources/default_tweaks.py:107
+#: /home/kovid/work/calibre/resources/default_tweaks.py:114
msgid "Format to be used for publication date and the timestamp (date).\nA string controlling how the publication date is displayed in the GUI\nd the day as number without a leading zero (1 to 31)\ndd the day as number with a leading zero (01 to 31)\nddd the abbreviated localized day name (e.g. 'Mon' to 'Sun').\ndddd the long localized day name (e.g. 'Monday' to 'Qt::Sunday').\nM the month as number without a leading zero (1-12)\nMM the month as number with a leading zero (01-12)\nMMM the abbreviated localized month name (e.g. 'Jan' to 'Dec').\nMMMM the long localized month name (e.g. 'January' to 'December').\nyy the year as two digit number (00-99)\nyyyy the year as four digit number\nFor example, given the date of 9 Jan 2010, the following formats show\nMMM yyyy ==> Jan 2010 yyyy ==> 2010 dd MMM yyyy ==> 09 Jan 2010\nMM/yyyy ==> 01/2010 d/M/yy ==> 9/1/10 yy ==> 10\npublication default if not set: MMM yyyy\ntimestamp default if not set: dd MMM yyyy"
msgstr ""
-#: /home/kovid/work/calibre/resources/default_tweaks.py:128
+#: /home/kovid/work/calibre/resources/default_tweaks.py:135
msgid "Control sorting of titles and series in the library display"
msgstr ""
-#: /home/kovid/work/calibre/resources/default_tweaks.py:129
+#: /home/kovid/work/calibre/resources/default_tweaks.py:136
msgid "Control title and series sorting in the library view. If set to\n'library_order', the title sort field will be used instead of the title.\nUnless you have manually edited the title sort field, leading articles such as\nThe and A will be ignored. If set to 'strictly_alphabetic', the titles will be\nsorted as-is (sort by title instead of title sort). For example, with\nlibrary_order, The Client will sort under 'C'. With strictly_alphabetic, the\nbook will sort under 'T'.\nThis flag affects Calibre's library display. It has no effect on devices. In\naddition, titles for books added before changing the flag will retain their\norder until the title is edited. Double-clicking on a title and hitting return\nwithout changing anything is sufficient to change the sort."
msgstr ""
-#: /home/kovid/work/calibre/resources/default_tweaks.py:142
+#: /home/kovid/work/calibre/resources/default_tweaks.py:149
msgid "Control formatting of title and series when used in templates"
msgstr ""
-#: /home/kovid/work/calibre/resources/default_tweaks.py:143
+#: /home/kovid/work/calibre/resources/default_tweaks.py:150
msgid "Control how title and series names are formatted when saving to disk/sending\nto device. The behavior depends on the field being processed. If processing\ntitle, then if this tweak is set to 'library_order', the title will be\nreplaced with title_sort. If it is set to 'strictly_alphabetic', then the\ntitle will not be changed. If processing series, then if set to\n'library_order', articles such as 'The' and 'An' will be moved to the end. If\nset to 'strictly_alphabetic', the series will be sent without change.\nFor example, if the tweak is set to library_order, \"The Lord of the Rings\"\nwill become \"Lord of the Rings, The\". If the tweak is set to\nstrictly_alphabetic, it would remain \"The Lord of the Rings\"."
msgstr ""
-#: /home/kovid/work/calibre/resources/default_tweaks.py:155
+#: /home/kovid/work/calibre/resources/default_tweaks.py:162
msgid "Set the list of words considered to be \"articles\" for sort strings"
msgstr ""
-#: /home/kovid/work/calibre/resources/default_tweaks.py:156
+#: /home/kovid/work/calibre/resources/default_tweaks.py:163
msgid "Set the list of words that are to be considered 'articles' when computing the\ntitle sort strings. The list is a regular expression, with the articles\nseparated by 'or' bars. Comparisons are case insensitive, and that cannot be\nchanged. Changes to this tweak won't have an effect until the book is modified\nin some way. If you enter an invalid pattern, it is silently ignored.\nTo disable use the expression: '^$'\nDefault: '^(A|The|An)\\s+'"
msgstr ""
-#: /home/kovid/work/calibre/resources/default_tweaks.py:165
+#: /home/kovid/work/calibre/resources/default_tweaks.py:172
msgid "Specify a folder calibre should connect to at startup"
msgstr ""
-#: /home/kovid/work/calibre/resources/default_tweaks.py:166
+#: /home/kovid/work/calibre/resources/default_tweaks.py:173
msgid "Specify a folder that calibre should connect to at startup using\nconnect_to_folder. This must be a full path to the folder. If the folder does\nnot exist when calibre starts, it is ignored. If there are '\\' characters in\nthe path (such as in Windows paths), you must double them.\nExamples:\nauto_connect_to_folder = 'C:\\\\Users\\\\someone\\\\Desktop\\\\testlib'\nauto_connect_to_folder = '/home/dropbox/My Dropbox/someone/library'"
msgstr ""
-#: /home/kovid/work/calibre/resources/default_tweaks.py:175
+#: /home/kovid/work/calibre/resources/default_tweaks.py:182
msgid "Specify renaming rules for SONY collections"
msgstr ""
-#: /home/kovid/work/calibre/resources/default_tweaks.py:176
+#: /home/kovid/work/calibre/resources/default_tweaks.py:183
msgid "Specify renaming rules for sony collections. This tweak is only applicable if\nmetadata management is set to automatic. Collections on Sonys are named\ndepending upon whether the field is standard or custom. A collection derived\nfrom a standard field is named for the value in that field. For example, if\nthe standard 'series' column contains the value 'Darkover', then the\ncollection name is 'Darkover'. A collection derived from a custom field will\nhave the name of the field added to the value. For example, if a custom series\ncolumn named 'My Series' contains the name 'Darkover', then the collection\nwill by default be named 'Darkover (My Series)'. For purposes of this\ndocumentation, 'Darkover' is called the value and 'My Series' is called the\ncategory. If two books have fields that generate the same collection name,\nthen both books will be in that collection.\nThis set of tweaks lets you specify for a standard or custom field how\nthe collections are to be named. You can use it to add a description to a\nstandard field, for example 'Foo (Tag)' instead of the 'Foo'. You can also use\nit to force multiple fields to end up in the same collection. For example, you\ncould force the values in 'series', '#my_series_1', and '#my_series_2' to\nappear in collections named 'some_value (Series)', thereby merging all of the\nfields into one set of collections.\nThere are two related tweaks. The first determines the category name to use\nfor a metadata field. The second is a template, used to determines how the\nvalue and category are combined to create the collection name.\nThe syntax of the first tweak, sony_collection_renaming_rules, is:\n{'field_lookup_name':'category_name_to_use', 'lookup_name':'name', ...}\nThe second tweak, sony_collection_name_template, is a template. It uses the\nsame template language as plugboards and save templates. This tweak controls\nhow the value and category are combined together to make the collection name.\nThe only two fields available are {category} and {value}. The {value} field is\nnever empty. The {category} field can be empty. The default is to put the\nvalue first, then the category enclosed in parentheses, it is isn't empty:\n'{value} {category:|(|)}'\nExamples: The first three examples assume that the second tweak\nhas not been changed.\n1: I want three series columns to be merged into one set of collections. The\ncolumn lookup names are 'series', '#series_1' and '#series_2'. I want nothing\nin the parenthesis. The value to use in the tweak value would be:\nsony_collection_renaming_rules={'series':'', '#series_1':'', '#series_2':''}\n2: I want the word '(Series)' to appear on collections made from series, and\nthe word '(Tag)' to appear on collections made from tags. Use:\nsony_collection_renaming_rules={'series':'Series', 'tags':'Tag'}\n3: I want 'series' and '#myseries' to be merged, and for the collection name\nto have '(Series)' appended. The renaming rule is:\nsony_collection_renaming_rules={'series':'Series', '#myseries':'Series'}\n4: Same as example 2, but instead of having the category name in parentheses\nand appended to the value, I want it prepended and separated by a colon, such\nas in Series: Darkover. I must change the template used to format the category name\nThe resulting two tweaks are:\nsony_collection_renaming_rules={'series':'Series', 'tags':'Tag'}\nsony_collection_name_template='{category:||: }{value}'"
msgstr ""
-#: /home/kovid/work/calibre/resources/default_tweaks.py:228
+#: /home/kovid/work/calibre/resources/default_tweaks.py:235
msgid "Specify how SONY collections are sorted"
msgstr ""
-#: /home/kovid/work/calibre/resources/default_tweaks.py:229
+#: /home/kovid/work/calibre/resources/default_tweaks.py:236
msgid "Specify how sony collections are sorted. This tweak is only applicable if\nmetadata management is set to automatic. You can indicate which metadata is to\nbe used to sort on a collection-by-collection basis. The format of the tweak\nis a list of metadata fields from which collections are made, followed by the\nname of the metadata field containing the sort value.\nExample: The following indicates that collections built from pubdate and tags\nare to be sorted by the value in the custom column '#mydate', that collections\nbuilt from 'series' are to be sorted by 'series_index', and that all other\ncollections are to be sorted by title. If a collection metadata field is not\nnamed, then if it is a series- based collection it is sorted by series order,\notherwise it is sorted by title order.\n[(['pubdate', 'tags'],'#mydate'), (['series'],'series_index'), (['*'], 'title')]\nNote that the bracketing and parentheses are required. The syntax is\n[ ( [list of fields], sort field ) , ( [ list of fields ] , sort field ) ]\nDefault: empty (no rules), so no collection attributes are named."
msgstr ""
-#: /home/kovid/work/calibre/resources/default_tweaks.py:247
+#: /home/kovid/work/calibre/resources/default_tweaks.py:253
msgid "Control how tags are applied when copying books to another library"
msgstr ""
-#: /home/kovid/work/calibre/resources/default_tweaks.py:248
+#: /home/kovid/work/calibre/resources/default_tweaks.py:254
msgid "Set this to True to ensure that tags in 'Tags to add when adding\na book' are added when copying books to another library"
msgstr ""
-#: /home/kovid/work/calibre/resources/default_tweaks.py:253
+#: /home/kovid/work/calibre/resources/default_tweaks.py:258
msgid "Set the maximum number of tags to show per book in the content server"
msgstr ""
-#: /home/kovid/work/calibre/resources/default_tweaks.py:257
+#: /home/kovid/work/calibre/resources/default_tweaks.py:261
msgid "Set custom metadata fields that the content server will or will not display."
msgstr ""
-#: /home/kovid/work/calibre/resources/default_tweaks.py:258
+#: /home/kovid/work/calibre/resources/default_tweaks.py:262
msgid "content_server_will_display is a list of custom fields to be displayed.\ncontent_server_wont_display is a list of custom fields not to be displayed.\nwont_display has priority over will_display.\nThe special value '*' means all custom fields. The value [] means no entries.\nDefaults:\ncontent_server_will_display = ['*']\ncontent_server_wont_display = []\nExamples:\nTo display only the custom fields #mytags and #genre:\ncontent_server_will_display = ['#mytags', '#genre']\ncontent_server_wont_display = []\nTo display all fields except #mycomments:\ncontent_server_will_display = ['*']\ncontent_server_wont_display['#mycomments']"
msgstr ""
-#: /home/kovid/work/calibre/resources/default_tweaks.py:275
+#: /home/kovid/work/calibre/resources/default_tweaks.py:279
msgid "Set the maximum number of sort 'levels'"
msgstr ""
-#: /home/kovid/work/calibre/resources/default_tweaks.py:276
+#: /home/kovid/work/calibre/resources/default_tweaks.py:280
msgid "Set the maximum number of sort 'levels' that calibre will use to resort the\nlibrary after certain operations such as searches or device insertion. Each\nsort level adds a performance penalty. If the database is large (thousands of\nbooks) the penalty might be noticeable. If you are not concerned about multi-\nlevel sorts, and if you are seeing a slowdown, reduce the value of this tweak."
msgstr ""
-#: /home/kovid/work/calibre/resources/default_tweaks.py:283
+#: /home/kovid/work/calibre/resources/default_tweaks.py:287
msgid "Specify which font to use when generating a default cover"
msgstr ""
-#: /home/kovid/work/calibre/resources/default_tweaks.py:284
+#: /home/kovid/work/calibre/resources/default_tweaks.py:288
msgid "Absolute path to .ttf font files to use as the fonts for the title, author\nand footer when generating a default cover. Useful if the default font (Liberation\nSerif) does not contain glyphs for the language of the books in your library."
msgstr ""
-#: /home/kovid/work/calibre/resources/default_tweaks.py:290
+#: /home/kovid/work/calibre/resources/default_tweaks.py:294
msgid "Control behavior of double clicks on the book list"
msgstr ""
-#: /home/kovid/work/calibre/resources/default_tweaks.py:291
+#: /home/kovid/work/calibre/resources/default_tweaks.py:295
msgid "Behavior of doubleclick on the books list. Choices: open_viewer, do_nothing,\nedit_cell, edit_metadata. Selecting edit_metadata has the side effect of\ndisabling editing a field using a single click.\nDefault: open_viewer.\nExample: doubleclick_on_library_view = 'do_nothing'"
msgstr ""
-#: /home/kovid/work/calibre/resources/default_tweaks.py:299
+#: /home/kovid/work/calibre/resources/default_tweaks.py:302
msgid "Language to use when sorting."
msgstr ""
-#: /home/kovid/work/calibre/resources/default_tweaks.py:300
+#: /home/kovid/work/calibre/resources/default_tweaks.py:303
msgid "Setting this tweak will force sorting to use the\ncollating order for the specified language. This might be useful if you run\ncalibre in English but want sorting to work in the language where you live.\nSet the tweak to the desired ISO 639-1 language code, in lower case.\nYou can find the list of supported locales at\nhttp://publib.boulder.ibm.com/infocenter/iseries/v5r3/topic/nls/rbagsicusortsequencetables.htm\nDefault: locale_for_sorting = '' -- use the language calibre displays in\nExample: locale_for_sorting = 'fr' -- sort using French rules.\nExample: locale_for_sorting = 'nb' -- sort using Norwegian rules."
msgstr ""
-#: /home/kovid/work/calibre/resources/default_tweaks.py:311
+#: /home/kovid/work/calibre/resources/default_tweaks.py:314
msgid "Number of columns for custom metadata in the edit metadata dialog"
msgstr ""
-#: /home/kovid/work/calibre/resources/default_tweaks.py:312
+#: /home/kovid/work/calibre/resources/default_tweaks.py:315
msgid "Set whether to use one or two columns for custom metadata when editing\nmetadata one book at a time. If True, then the fields are laid out using two\ncolumns. If False, one column is used."
msgstr ""
-#: /home/kovid/work/calibre/resources/default_tweaks.py:317
+#: /home/kovid/work/calibre/resources/default_tweaks.py:320
msgid "The number of seconds to wait before sending emails"
msgstr ""
-#: /home/kovid/work/calibre/resources/default_tweaks.py:318
+#: /home/kovid/work/calibre/resources/default_tweaks.py:321
msgid "The number of seconds to wait before sending emails when using a\npublic email server like gmail or hotmail. Default is: 5 minutes\nSetting it to lower may cause the server's SPAM controls to kick in,\nmaking email sending fail. Changes will take effect only after a restart of\ncalibre."
msgstr ""
-#: /home/kovid/work/calibre/resources/default_tweaks.py:325
+#: /home/kovid/work/calibre/resources/default_tweaks.py:328
msgid "Remove the bright yellow lines at the edges of the book list"
msgstr ""
-#: /home/kovid/work/calibre/resources/default_tweaks.py:326
+#: /home/kovid/work/calibre/resources/default_tweaks.py:329
msgid "Control whether the bright yellow lines at the edges of book list are drawn\nwhen a section of the user interface is hidden. Changes will take effect\nafter a restart of calibre."
msgstr ""
-#: /home/kovid/work/calibre/resources/default_tweaks.py:331
+#: /home/kovid/work/calibre/resources/default_tweaks.py:334
msgid "The maximum width and height for covers saved in the calibre library"
msgstr ""
-#: /home/kovid/work/calibre/resources/default_tweaks.py:332
+#: /home/kovid/work/calibre/resources/default_tweaks.py:335
msgid "All covers in the calibre library will be resized, preserving aspect ratio,\nto fit within this size. This is to prevent slowdowns caused by extremely\nlarge covers"
msgstr ""
-#: /home/kovid/work/calibre/resources/default_tweaks.py:337
+#: /home/kovid/work/calibre/resources/default_tweaks.py:340
msgid "Where to send downloaded news"
msgstr ""
-#: /home/kovid/work/calibre/resources/default_tweaks.py:338
+#: /home/kovid/work/calibre/resources/default_tweaks.py:341
msgid "When automatically sending downloaded news to a connected device, calibre\nwill by default send it to the main memory. By changing this tweak, you can\ncontrol where it is sent. Valid values are \"main\", \"carda\", \"cardb\". Note\nthat if there isn't enough free space available on the location you choose,\nthe files will be sent to the location with the most free space."
msgstr ""
-#: /home/kovid/work/calibre/resources/default_tweaks.py:345
+#: /home/kovid/work/calibre/resources/default_tweaks.py:348
msgid "What interfaces should the content server listen on"
msgstr ""
-#: /home/kovid/work/calibre/resources/default_tweaks.py:346
+#: /home/kovid/work/calibre/resources/default_tweaks.py:349
msgid "By default, the calibre content server listens on '0.0.0.0' which means that it\naccepts IPv4 connections on all interfaces. You can change this to, for\nexample, '127.0.0.1' to only listen for connections from the local machine, or\nto '::' to listen to all incoming IPv6 and IPv4 connections (this may not\nwork on all operating systems)"
msgstr ""
-#: /home/kovid/work/calibre/resources/default_tweaks.py:353
+#: /home/kovid/work/calibre/resources/default_tweaks.py:356
msgid "Unified toolbar on OS X"
msgstr ""
-#: /home/kovid/work/calibre/resources/default_tweaks.py:354
+#: /home/kovid/work/calibre/resources/default_tweaks.py:357
msgid "If you enable this option and restart calibre, the toolbar will be 'unified'\nwith the titlebar as is normal for OS X applications. However, doing this has\nvarious bugs, for instance the minimum width of the toolbar becomes twice\nwhat it should be and it causes other random bugs on some systems, so turn it\non at your own risk!"
msgstr ""