changeset 7203:12a3cd86668f

auto update 'password_pbkdf2_default_rounds' " If the current value for password_pbkdf2_default_rounds is the old default value of 10000, updateconfig will use the new default value when writing the new config. If the curreny value for password_pbkdf2_default_rounds is less than the new default the user will be told to update the value. New translation strings added. Updates to upgrading.txt doc.
author John Rouillard <rouilj@ieee.org>
date Wed, 01 Mar 2023 10:51:37 -0500
parents b222658a3504
children ccb0e566e0be
files doc/upgrading.txt locale/de.po locale/en.po locale/es.po locale/fr.po locale/hu.po locale/it.po locale/ja.po locale/lt.po locale/roundup.pot locale/ru.po locale/zh_CN.po locale/zh_TW.po roundup/admin.py
diffstat 14 files changed, 2578 insertions(+), 2351 deletions(-) [+]
line wrap: on
line diff
--- a/doc/upgrading.txt	Wed Mar 01 10:43:54 2023 -0500
+++ b/doc/upgrading.txt	Wed Mar 01 10:51:37 2023 -0500
@@ -66,6 +66,9 @@
 ``config.ini`` to ``newconfig.ini`` and replace
 ``config.ini`` with ``newconfig.ini``.
 
+``updateconfig`` will tell you if it is changing old default
+values or if a value must be changed manually.
+
 Using the roundup-mailgw script (required)
 ------------------------------------------
 
@@ -191,6 +194,11 @@
 million). This exceeds the current `recommended setting of
 1,300,000`_ for PBKDF2 when used with SHA1.
 
+If you were using the old 10000 value, it will be automatically
+upgraded to 2 million by using ``roundup-admin``'s
+``updateconfig``.  If you were not using the old 10000 default,
+you should update it manually.
+
 After the change users will still be able to log in using the
 older 10000 round hashed passwords. If ``migrate_passwords`` is
 set to ``yes``, passwords will be automatically re-hashed using
--- a/locale/de.po	Wed Mar 01 10:43:54 2023 -0500
+++ b/locale/de.po	Wed Mar 01 10:51:37 2023 -0500
@@ -7,7 +7,7 @@
 msgstr ""
 "Project-Id-Version: Roundup 2.3.0\n"
 "Report-Msgid-Bugs-To: roundup-devel@lists.sourceforge.net\n"
-"POT-Creation-Date: 2022-11-23 22:28-0500\n"
+"POT-Creation-Date: 2023-03-01 10:35-0500\n"
 "PO-Revision-Date: 2016-04-11 09:13+0200\n"
 "Last-Translator: Tobias Herp <tobias.herp@gmx.de>\n"
 "Language-Team: German Translators <roundup-devel@lists.sourceforge.net>\n"
@@ -26,23 +26,23 @@
 "Sie sind nicht berechtigt, die Aktion(en) %(action)s auf die Klasse "
 "%(classname)s anzuwenden."
 
-#: ../roundup/actions.py:64 ../roundup/cgi/actions.py:240
+#: ../roundup/actions.py:65 ../roundup/cgi/actions.py:240
 msgid "You may not retire the admin or anonymous user"
 msgstr "Sie können den Administrator oder den Gast-Benutzer nicht löschen"
 
-#: ../roundup/admin.py:106 ../roundup/admin.py:1259 ../roundup/admin.py:1314
-#: ../roundup/admin.py:1341 ../roundup/admin.py:106:1259 :1314:1341
+#: ../roundup/admin.py:112 ../roundup/admin.py:1295 ../roundup/admin.py:1350
+#: ../roundup/admin.py:1377 ../roundup/admin.py:112:1295 :1350:1377
 #, python-format
 msgid "no such class \"%(classname)s\""
 msgstr "Die Klasse \"%(classname)s\" existiert nicht"
 
 # ../roundup/admin.py:93 :97
-#: ../roundup/admin.py:118
+#: ../roundup/admin.py:124
 #, python-format
 msgid "argument \"%(arg)s\" not propname=value"
 msgstr "Der Parameter \"%(arg)s\" entspricht nicht dem Format Eigenschaft=Wert"
 
-#: ../roundup/admin.py:131
+#: ../roundup/admin.py:137
 #, python-format
 msgid ""
 "Problem: %(message)s\n"
@@ -51,7 +51,7 @@
 "Problem: %(message)s\n"
 "\n"
 
-#: ../roundup/admin.py:132
+#: ../roundup/admin.py:138
 #, fuzzy, python-format
 msgid ""
 "%(message)sUsage: roundup-admin [options] [<command> <arguments>]\n"
@@ -100,12 +100,12 @@
 " roundup-admin help <Befehl>              -- Hilfe zu einem Befehl anzeigen\n"
 " roundup-admin help all                   -- sämtliche Hilfen anzeigen\n"
 
-#: ../roundup/admin.py:159
+#: ../roundup/admin.py:165
 #, fuzzy
 msgid "Commands: "
 msgstr "Befehle:"
 
-#: ../roundup/admin.py:166
+#: ../roundup/admin.py:172
 msgid ""
 "Commands may be abbreviated as long as the abbreviation\n"
 "matches only one command, e.g. l == li == lis == list."
@@ -113,7 +113,8 @@
 "Befehle können abgekürzt werden, solange sie eindeutig bleiben, \n"
 "z.B. l == li == lis == list."
 
-#: ../roundup/admin.py:195
+#: ../roundup/admin.py:201
+#, fuzzy
 msgid ""
 "\n"
 "All commands (except help) require a tracker specifier. This is just\n"
@@ -165,7 +166,7 @@
 " . ROUNDUP_LOGIN environment variable\n"
 " . the -u command-line option\n"
 "If either the name or password is not supplied, they are obtained from the\n"
-"command-line.\n"
+"command-line. (See admin guide before using -u.)\n"
 "\n"
 "Date format examples:\n"
 "  \"2000-04-17.03:45\" means <Date 2000-04-17.08:45:00>\n"
@@ -239,12 +240,12 @@
 "\n"
 "Befehlshilfe:\n"
 
-#: ../roundup/admin.py:258
+#: ../roundup/admin.py:264
 #, python-format
 msgid "%s:"
 msgstr "%s:"
 
-#: ../roundup/admin.py:265
+#: ../roundup/admin.py:271
 msgid ""
 "Usage: help topic\n"
 "        Give help about topic.\n"
@@ -264,22 +265,22 @@
 "        all       -- sämtlichen Hilfetext anzeigen\n"
 "        "
 
-#: ../roundup/admin.py:287
+#: ../roundup/admin.py:293
 #, python-format
 msgid "Sorry, no help for \"%(topic)s\""
 msgstr "Zum Thema \"%(topic)s\" existiert leider kein Hilfetext"
 
 # ../roundup/admin.py:336 :382
-#: ../roundup/admin.py:402 ../roundup/admin.py:458 ../roundup/admin.py:402:458
+#: ../roundup/admin.py:408 ../roundup/admin.py:464 ../roundup/admin.py:408:464
 msgid "Templates:"
 msgstr "Vorlagen:"
 
 # ../roundup/admin.py:339 :393
-#: ../roundup/admin.py:405 ../roundup/admin.py:468 ../roundup/admin.py:405:468
+#: ../roundup/admin.py:411 ../roundup/admin.py:474 ../roundup/admin.py:411:474
 msgid "Back ends:"
 msgstr "Datenbanken:"
 
-#: ../roundup/admin.py:408
+#: ../roundup/admin.py:414
 msgid ""
 "Usage: install [template [backend [key=val[,key=val]]]]\n"
 "        Install a new Roundup tracker.\n"
@@ -334,23 +335,23 @@
 
 # ../roundup/admin.py:358 :483 :562 :612 :682 :703 :731 :802 :869 :940 :988
 # :1010 :1037 :1098 :1156
-#: ../roundup/admin.py:431 ../roundup/admin.py:562 ../roundup/admin.py:635
-#: ../roundup/admin.py:728 ../roundup/admin.py:786 ../roundup/admin.py:872
-#: ../roundup/admin.py:931 ../roundup/admin.py:958 ../roundup/admin.py:985
-#: ../roundup/admin.py:1062 ../roundup/admin.py:1157 ../roundup/admin.py:1243
-#: ../roundup/admin.py:1304 ../roundup/admin.py:1331 ../roundup/admin.py:1367
-#: ../roundup/admin.py:1495 ../roundup/admin.py:1579
-#: ../roundup/admin.py:431:562 :1157 :1243:1304 :1331:1367 :1495:1579 :635:728
-#: :786:872 :931:958 :985:1062
+#: ../roundup/admin.py:437 ../roundup/admin.py:568 ../roundup/admin.py:671
+#: ../roundup/admin.py:764 ../roundup/admin.py:822 ../roundup/admin.py:908
+#: ../roundup/admin.py:967 ../roundup/admin.py:994 ../roundup/admin.py:1021
+#: ../roundup/admin.py:1098 ../roundup/admin.py:1193 ../roundup/admin.py:1279
+#: ../roundup/admin.py:1340 ../roundup/admin.py:1367 ../roundup/admin.py:1403
+#: ../roundup/admin.py:1531 ../roundup/admin.py:1615
+#: ../roundup/admin.py:437:568 :1021:1098:1193 :1279:1340 :1367:1403 :1531:1615
+#: :671:764 :822:908 :967:994
 msgid "Not enough arguments supplied"
 msgstr "Zu wenig Parameter übergeben"
 
-#: ../roundup/admin.py:437
+#: ../roundup/admin.py:443
 #, python-format
 msgid "Instance home parent directory \"%(parent)s\" does not exist"
 msgstr "Das angegebene Tracker-Verzeichnis \"%(parent)s\" existiert nicht"
 
-#: ../roundup/admin.py:446
+#: ../roundup/admin.py:452
 #, python-format
 msgid ""
 "WARNING: There appears to be a tracker in \"%(tracker_home)s\"!\n"
@@ -361,22 +362,22 @@
 "installiert zu sein! Eine erneute Installation löscht sämtliche Daten!\n"
 "Wirklich löschen? Y/N: "
 
-#: ../roundup/admin.py:459
+#: ../roundup/admin.py:465
 #, fuzzy
 msgid "Select template"
 msgstr "Vorlagensatz auswählen [classic]:"
 
-#: ../roundup/admin.py:469
+#: ../roundup/admin.py:475
 #, fuzzy
 msgid "Select backend"
 msgstr "Datenbank auswählen [anydbm]"
 
-#: ../roundup/admin.py:480
+#: ../roundup/admin.py:486
 #, python-format
 msgid "Error in configuration settings: \"%s\""
 msgstr "Fehler in der Konfiguration: \"%s\""
 
-#: ../roundup/admin.py:511
+#: ../roundup/admin.py:517
 #, fuzzy, python-format
 msgid ""
 "\n"
@@ -388,11 +389,11 @@
 " Sie sollten nun die Konfigurationsdatei des Trackers bearbeiten:\n"
 "   %(config_file)s"
 
-#: ../roundup/admin.py:521
+#: ../roundup/admin.py:527
 msgid " ... at a minimum, you must set following options:"
 msgstr " ... passen sie zumindest folgende Optionen an:"
 
-#: ../roundup/admin.py:526
+#: ../roundup/admin.py:532
 #, python-format
 msgid ""
 "\n"
@@ -418,7 +419,7 @@
 " Anschließend MÜSSEN Sie \"roundup-admin initialise\" ausführen.\n"
 "---------------------------------------------------------------------------\n"
 
-#: ../roundup/admin.py:557
+#: ../roundup/admin.py:563
 #, fuzzy
 msgid ""
 "Usage: genconfig <filename>\n"
@@ -431,7 +432,22 @@
 "        Standardwerten in die Datei <filename>.\n"
 "        "
 
-#: ../roundup/admin.py:572
+#: ../roundup/admin.py:581
+#, python-format
+msgid ""
+"Changing option\n"
+"   'password_pbkdf2_default_rounds'\n"
+"from old default of %(old_number)s to new default of %(new_number)s."
+msgstr ""
+
+#: ../roundup/admin.py:593
+#, python-format
+msgid ""
+"Update 'password_pbkdf2_default_rounds'to a number equal to or larger\n"
+"than %s."
+msgstr ""
+
+#: ../roundup/admin.py:604
 #, fuzzy
 msgid ""
 "Usage: updateconfig <filename>\n"
@@ -446,7 +462,7 @@
 "        "
 
 #. password
-#: ../roundup/admin.py:580
+#: ../roundup/admin.py:612
 msgid ""
 "Usage: initialise [adminpw]\n"
 "        Initialise a new Roundup tracker.\n"
@@ -464,23 +480,23 @@
 "        Die Funktion dbinit.init() wird aufgerufen\n"
 "        "
 
-#: ../roundup/admin.py:594
+#: ../roundup/admin.py:626
 msgid "Admin Password: "
 msgstr "Administratorpasswort: "
 
-#: ../roundup/admin.py:595
+#: ../roundup/admin.py:627
 msgid "       Confirm: "
 msgstr "  Wiederholen: "
 
-#: ../roundup/admin.py:599
+#: ../roundup/admin.py:631
 msgid "Instance home does not exist"
 msgstr "Tracker-Verzeichnis existiert nicht"
 
-#: ../roundup/admin.py:603
+#: ../roundup/admin.py:635
 msgid "Instance has not been installed"
 msgstr "Tracker-Instanz wurde nicht installiert"
 
-#: ../roundup/admin.py:609
+#: ../roundup/admin.py:641
 msgid ""
 "WARNING: The database is already initialised!\n"
 "If you re-initialise it, you will lose all the data!\n"
@@ -490,7 +506,7 @@
 "Eine erneute Initialisierung löscht sämtliche Daten!\n"
 "Wirklich löschen? Y/N: "
 
-#: ../roundup/admin.py:625
+#: ../roundup/admin.py:661
 #, fuzzy
 msgid ""
 "Usage: get property designator[,designator]*\n"
@@ -511,7 +527,7 @@
 "        "
 
 # ../roundup/admin.py:516 :531
-#: ../roundup/admin.py:669 ../roundup/admin.py:687 ../roundup/admin.py:669:687
+#: ../roundup/admin.py:705 ../roundup/admin.py:723 ../roundup/admin.py:705:723
 #, python-format
 msgid "property %s is not of type Multilink or Link so -d flag does not apply."
 msgstr ""
@@ -519,21 +535,21 @@
 "hier nicht ausgewertet."
 
 # ../roundup/admin.py:539 :951 :1000 :1022
-#: ../roundup/admin.py:697 ../roundup/admin.py:1261 ../roundup/admin.py:1316
-#: ../roundup/admin.py:697:1261:1316
+#: ../roundup/admin.py:733 ../roundup/admin.py:1297 ../roundup/admin.py:1352
+#: ../roundup/admin.py:733:1297:1352
 #, python-format
 msgid "no such %(classname)s node \"%(nodeid)s\""
 msgstr ""
 "Es existiert kein Eintrag der Klasse %(classname)s mit der ID \"%(nodeid)s\""
 
-#: ../roundup/admin.py:700
+#: ../roundup/admin.py:736
 #, python-format
 msgid "no such %(classname)s property \"%(propname)s\""
 msgstr ""
 "Die Eigenschaft \"%(propname)s\" ist für die Klasse \"%(classname)s\" nicht "
 "definiert"
 
-#: ../roundup/admin.py:708
+#: ../roundup/admin.py:744
 #, fuzzy
 msgid ""
 "Usage: set items property=value property=value ...\n"
@@ -570,7 +586,7 @@
 "(\"1,2,3\").\n"
 "        "
 
-#: ../roundup/admin.py:776
+#: ../roundup/admin.py:812
 #, fuzzy
 msgid ""
 "Usage: filter classname propname=value ...\n"
@@ -592,20 +608,20 @@
 "        "
 
 # ../roundup/admin.py:631 :669 :822 :834 :888
-#: ../roundup/admin.py:819
+#: ../roundup/admin.py:855
 #, fuzzy, python-format
 msgid "Class %(curclassname)s has no property %(pn)s in %(propname)s."
 msgstr "Die Klasse \"%(classname)s\" hat keine Eigenschaft \"%(propname)s\""
 
 # ../roundup/admin.py:631 :669 :822 :834 :888
-#: ../roundup/admin.py:857 ../roundup/admin.py:918 ../roundup/admin.py:1082
-#: ../roundup/admin.py:1094 ../roundup/admin.py:1177
-#: ../roundup/admin.py:857:918 :1082:1094:1177
+#: ../roundup/admin.py:893 ../roundup/admin.py:954 ../roundup/admin.py:1118
+#: ../roundup/admin.py:1130 ../roundup/admin.py:1213
+#: ../roundup/admin.py:893:954 :1118:1130:1213
 #, python-format
 msgid "%(classname)s has no property \"%(propname)s\""
 msgstr "Die Klasse \"%(classname)s\" hat keine Eigenschaft \"%(propname)s\""
 
-#: ../roundup/admin.py:864
+#: ../roundup/admin.py:900
 msgid ""
 "Usage: find classname propname=value ...\n"
 "        Find the nodes of the given class with a given link property value.\n"
@@ -623,7 +639,7 @@
 "        als ID oder als Bezeichner (\"msg23\") spezifiziert werden.\n"
 "        "
 
-#: ../roundup/admin.py:925
+#: ../roundup/admin.py:961
 msgid ""
 "Usage: specification classname\n"
 "        Show the properties for a classname.\n"
@@ -637,17 +653,17 @@
 "        Zeigt sämtliche Eigenschaften der Klasse auf.\n"
 "        "
 
-#: ../roundup/admin.py:941
+#: ../roundup/admin.py:977
 #, fuzzy, python-format
 msgid "%(key)s: %(value)s (key property)\n"
 msgstr "%(key)s: %(value)s (Schlüsseleigenschaft)"
 
-#: ../roundup/admin.py:944
+#: ../roundup/admin.py:980
 #, fuzzy, python-format
 msgid "%(key)s: %(value)s\n"
 msgstr "%(key)s: %(value)s"
 
-#: ../roundup/admin.py:947
+#: ../roundup/admin.py:983
 #, fuzzy
 msgid ""
 "Usage: display designator[,designator]*\n"
@@ -668,12 +684,12 @@
 "        gewählten Eintrags an.\n"
 "        "
 
-#: ../roundup/admin.py:974
+#: ../roundup/admin.py:1010
 #, python-format
 msgid "%(key)s: %(value)s"
 msgstr "%(key)s: %(value)s"
 
-#: ../roundup/admin.py:977
+#: ../roundup/admin.py:1013
 msgid ""
 "Usage: create classname property=value ...\n"
 "        Create a new entry of a given class.\n"
@@ -691,31 +707,31 @@
 "        werden mit den Werten initialisiert\n"
 "        "
 
-#: ../roundup/admin.py:1005
+#: ../roundup/admin.py:1041
 #, python-format
 msgid "%(propname)s (Password): "
 msgstr "%(propname)s (Passwort):"
 
-#: ../roundup/admin.py:1008
+#: ../roundup/admin.py:1044
 #, python-format
 msgid "   %(propname)s (Again): "
 msgstr "   %(propname)s (Wiederholen):"
 
-#: ../roundup/admin.py:1012
+#: ../roundup/admin.py:1048
 msgid "Sorry, try again..."
 msgstr "Bitte erneut versuchen..."
 
-#: ../roundup/admin.py:1016
+#: ../roundup/admin.py:1052
 #, python-format
 msgid "%(propname)s (%(proptype)s): "
 msgstr "%(propname)s (%(proptype)s): "
 
-#: ../roundup/admin.py:1035
+#: ../roundup/admin.py:1071
 #, python-format
 msgid "you must provide the \"%(propname)s\" property."
 msgstr "Sie müssen einen Wert für \"%(propname)s\" angeben."
 
-#: ../roundup/admin.py:1047
+#: ../roundup/admin.py:1083
 msgid ""
 "Usage: list classname [property]\n"
 "        List the instances of a class.\n"
@@ -746,16 +762,16 @@
 "aufgelistet.\n"
 "        "
 
-#: ../roundup/admin.py:1060
+#: ../roundup/admin.py:1096
 msgid "Too many arguments supplied"
 msgstr "Sie haben zuviele Argumente übergeben"
 
-#: ../roundup/admin.py:1096
+#: ../roundup/admin.py:1132
 #, python-format
 msgid "%(nodeid)4s: %(value)s"
 msgstr "%(nodeid)4s: %(value)s"
 
-#: ../roundup/admin.py:1100
+#: ../roundup/admin.py:1136
 msgid ""
 "Usage: templates [trace_search]\n"
 "        List templates and their installed directories.\n"
@@ -765,7 +781,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1128
+#: ../roundup/admin.py:1164
 msgid ""
 "Usage: table classname [property[,property]*]\n"
 "        List the instances of a class in tabular form.\n"
@@ -828,17 +844,17 @@
 "\n"
 "        "
 
-#: ../roundup/admin.py:1172
+#: ../roundup/admin.py:1208
 #, python-format
 msgid "\"%(spec)s\" not name:width"
 msgstr "\"%(spec)s\" entspricht nicht dem Format Eigenschaft:Breite"
 
-#: ../roundup/admin.py:1194
+#: ../roundup/admin.py:1230
 #, python-format
 msgid "\"%(spec)s\" does not have an integer width: \"%(width)s\""
 msgstr ""
 
-#: ../roundup/admin.py:1230
+#: ../roundup/admin.py:1266
 msgid ""
 "Usage: history designator [skipquiet]\n"
 "        Show the history entries of a designator.\n"
@@ -853,7 +869,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1266
+#: ../roundup/admin.py:1302
 msgid ""
 "Usage: commit\n"
 "        Commit changes made to the database during an interactive session.\n"
@@ -878,7 +894,7 @@
 "        geschrieben.\n"
 "        "
 
-#: ../roundup/admin.py:1281
+#: ../roundup/admin.py:1317
 msgid ""
 "Usage: rollback\n"
 "        Undo all changes that are pending commit to the database.\n"
@@ -897,7 +913,7 @@
 "        verworfen.\n"
 "        "
 
-#: ../roundup/admin.py:1294
+#: ../roundup/admin.py:1330
 #, fuzzy
 msgid ""
 "Usage: retire designator[,designator]*\n"
@@ -918,7 +934,7 @@
 "        kann zudem wiederverwendet werden.\n"
 "        "
 
-#: ../roundup/admin.py:1322
+#: ../roundup/admin.py:1358
 #, fuzzy
 msgid ""
 "Usage: restore designator[,designator]*\n"
@@ -938,14 +954,14 @@
 "        "
 
 # ../roundup/admin.py:539 :951 :1000 :1022
-#: ../roundup/admin.py:1347
+#: ../roundup/admin.py:1383
 #, fuzzy
 msgid "no such %(classname)s node \" % (nodeid)s\""
 msgstr ""
 "Es existiert kein Eintrag der Klasse %(classname)s mit der ID \"%(nodeid)s\""
 
 #. grab the directory to export to
-#: ../roundup/admin.py:1353
+#: ../roundup/admin.py:1389
 msgid ""
 "Usage: export [[-]class[,class]] export_dir\n"
 "        Export the database to colon-separated-value files.\n"
@@ -974,7 +990,7 @@
 "        Exportverzeichnis geschrieben.\n"
 "        "
 
-#: ../roundup/admin.py:1460
+#: ../roundup/admin.py:1496
 msgid ""
 "Usage: exporttables [[-]class[,class]] export_dir\n"
 "        Export the database to colon-separated-value files, excluding the\n"
@@ -1005,7 +1021,7 @@
 "        Exportverzeichnis geschrieben.\n"
 "        "
 
-#: ../roundup/admin.py:1475
+#: ../roundup/admin.py:1511
 msgid ""
 "Usage: import import_dir\n"
 "        Import a database from the directory containing CSV files,\n"
@@ -1049,7 +1065,7 @@
 "        verbergen).\n"
 "        "
 
-#: ../roundup/admin.py:1554
+#: ../roundup/admin.py:1590
 msgid ""
 "Usage: importtables export_dir\n"
 "\n"
@@ -1057,7 +1073,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1561
+#: ../roundup/admin.py:1597
 msgid ""
 "Usage: pack period | date\n"
 "\n"
@@ -1096,11 +1112,11 @@
 "\n"
 "        "
 
-#: ../roundup/admin.py:1589
+#: ../roundup/admin.py:1625
 msgid "Invalid format"
 msgstr "Ungültiges Format"
 
-#: ../roundup/admin.py:1602
+#: ../roundup/admin.py:1638
 msgid ""
 "Usage: reindex [classname|designator]*\n"
 "        Re-generate a tracker's search indexes.\n"
@@ -1116,12 +1132,12 @@
 "        normalerweise automatisch.\n"
 "        "
 
-#: ../roundup/admin.py:1616
+#: ../roundup/admin.py:1652
 #, python-format
 msgid "no such item \"%(designator)s\""
 msgstr "Der Eintrag \"%(designator)s\" existiert nicht"
 
-#: ../roundup/admin.py:1626
+#: ../roundup/admin.py:1662
 #, fuzzy
 msgid ""
 "Usage: security [Role name]\n"
@@ -1133,48 +1149,48 @@
 "        Zeigt die Berechtigungen einer oder aller Rollen an.\n"
 "        "
 
-#: ../roundup/admin.py:1635
+#: ../roundup/admin.py:1671
 #, fuzzy, python-format
 msgid "No such Role \"%(role)s\"\n"
 msgstr "Die Rolle \"%(role)s\" existiert nicht "
 
-#: ../roundup/admin.py:1641
+#: ../roundup/admin.py:1677
 #, fuzzy, python-format
 msgid "New Web users get the Roles \"%(role)s\"\n"
 msgstr "Neue Web-Benutzer erhalten die Rollen \"%(role)s\""
 
-#: ../roundup/admin.py:1644
+#: ../roundup/admin.py:1680
 #, fuzzy, python-format
 msgid "New Web users get the Role \"%(role)s\"\n"
 msgstr "Neue Web-Benutzer erhalten die Rolle \"%(role)s\""
 
-#: ../roundup/admin.py:1648
+#: ../roundup/admin.py:1684
 #, fuzzy, python-format
 msgid "New Email users get the Roles \"%(role)s\"\n"
 msgstr "Neue E-Mail-Benutzer erhalten die Rollen \"%(role)s\""
 
-#: ../roundup/admin.py:1650
+#: ../roundup/admin.py:1686
 #, fuzzy, python-format
 msgid "New Email users get the Role \"%(role)s\"\n"
 msgstr "Neue E-Mail-Benutzer erhalten die Rolle \"%(role)s\""
 
-#: ../roundup/admin.py:1653
+#: ../roundup/admin.py:1689
 #, fuzzy, python-format
 msgid "Role \"%(name)s\":\n"
 msgstr "Rolle \"%(name)s\":"
 
-#: ../roundup/admin.py:1659
+#: ../roundup/admin.py:1695
 #, fuzzy
 msgid " %(description)s (%(name)s for \"%(klass)s\""
 msgstr "%(description)s (%(name)s einzig für \"%(klass)s\")"
 
-#: ../roundup/admin.py:1659
+#: ../roundup/admin.py:1695
 #, fuzzy, python-format
 msgid " %(description)s (%(name)s for \"%(klass)s\": %(properties)s only)\n"
 msgstr ""
 " %(description)s (%(name)s für \"%(klass)s\": ausschließlich %(properties)s)"
 
-#: ../roundup/admin.py:1672
+#: ../roundup/admin.py:1708
 #, python-format
 msgid ""
 "\n"
@@ -1182,17 +1198,17 @@
 "\n"
 msgstr ""
 
-#: ../roundup/admin.py:1678
+#: ../roundup/admin.py:1714
 #, fuzzy, python-format
 msgid " %(description)s (%(name)s for \"%(klass)s\" only)\n"
 msgstr "%(description)s (%(name)s einzig für \"%(klass)s\")"
 
-#: ../roundup/admin.py:1681
+#: ../roundup/admin.py:1717
 #, fuzzy, python-format
 msgid " %(description)s (%(name)s)\n"
 msgstr " %(description)s (%(name)s)"
 
-#: ../roundup/admin.py:1685
+#: ../roundup/admin.py:1721
 #, fuzzy
 msgid ""
 "Usage: migrate\n"
@@ -1236,42 +1252,42 @@
 "        es nicht nötig ist; also gewöhnen Sie es sich einfach an.\n"
 "        "
 
-#: ../roundup/admin.py:1706
+#: ../roundup/admin.py:1742
 msgid "Tracker updated"
 msgstr "Tracker aktualisiert"
 
-#: ../roundup/admin.py:1709
+#: ../roundup/admin.py:1745
 msgid "No migration action required"
 msgstr "Keine Migration notwendig"
 
-#: ../roundup/admin.py:1735
+#: ../roundup/admin.py:1771
 #, python-format
 msgid "Unknown command \"%(command)s\" (\"help commands\" for a list)"
 msgstr "Der Befehl \"%(command)s\" existiert nicht (siehe \"help commands\")"
 
-#: ../roundup/admin.py:1741
+#: ../roundup/admin.py:1777
 #, python-format
 msgid "Multiple commands match \"%(command)s\": %(list)s"
 msgstr "Zur Abkürzung \"%(command)s\" passen mehrere Befehle: %(list)s"
 
-#: ../roundup/admin.py:1750
+#: ../roundup/admin.py:1786
 msgid "Enter tracker home: "
 msgstr "Tracker-Verzeichnis: "
 
 # ../roundup/admin.py:1263 :1269 :1289
-#: ../roundup/admin.py:1759 ../roundup/admin.py:1765 ../roundup/admin.py:1802
-#: ../roundup/admin.py:1759:1765:1802
+#: ../roundup/admin.py:1795 ../roundup/admin.py:1801 ../roundup/admin.py:1838
+#: ../roundup/admin.py:1795:1801:1838
 #, python-format
 msgid "Error: %(message)s"
 msgstr "Fehler: %(message)s"
 
-#: ../roundup/admin.py:1775 ../roundup/admin.py:1779
-#: ../roundup/admin.py:1775:1779
+#: ../roundup/admin.py:1811 ../roundup/admin.py:1815
+#: ../roundup/admin.py:1811:1815
 #, python-format
 msgid "Error: Couldn't open tracker: %(message)s"
 msgstr "Fehler: Die Tracker-Instanz konnte nicht geöffnet werden: %(message)s"
 
-#: ../roundup/admin.py:1815
+#: ../roundup/admin.py:1851
 #, python-format
 msgid ""
 "Roundup %s ready for input.\n"
@@ -1280,19 +1296,15 @@
 "Roundup %s ist bereit.\n"
 "Schreiben Sie \"help\", um zur Hilfe zu gelangen."
 
-#: ../roundup/admin.py:1820
+#: ../roundup/admin.py:1856
 msgid "Note: command history and editing not available"
 msgstr "Bemerkung: Befehlsverlauf/-bearbeitung möglicherweise nicht verfügbar"
 
-#: ../roundup/admin.py:1824
-msgid "roundup> "
-msgstr "roundup> "
-
-#: ../roundup/admin.py:1826
+#: ../roundup/admin.py:1862
 msgid "exit..."
 msgstr "beenden..."
 
-#: ../roundup/admin.py:1839
+#: ../roundup/admin.py:1875
 msgid "There are unsaved changes. Commit them (y/N)? "
 msgstr "Es gibt noch ungespeicherte Änderungen. Änderungen speichern (y/N)?"
 
@@ -1404,20 +1416,22 @@
 msgid "restored"
 msgstr "wiederhergestellt"
 
-#: ../roundup/backends/sessions_redis.py:76
-#: ../roundup/backends/sessions_redis.py:95
-#: ../roundup/backends/sessions_redis.py:76:95
+#: ../roundup/backends/sessions_redis.py:78
+#: ../roundup/backends/sessions_redis.py:97
+#: ../roundup/backends/sessions_redis.py:78:97
 #, python-format
 msgid "Key %(key)s not found in %(name)s database."
 msgstr ""
 
-#: ../roundup/backends/sessions_redis.py:191
+#: ../roundup/backends/sessions_redis.py:193
 #, python-format
 msgid "Key %(key)s changed in %(name)s db"
 msgstr ""
 
-#: ../roundup/backends/sessions_redis.py:195
-msgid "Redis set failed afer 3 retries"
+#: ../roundup/backends/sessions_redis.py:203
+#, python-format
+msgid ""
+"Redis set failed after %(retries)d retries for user %(user)s with key %(key)s"
 msgstr ""
 
 #: ../roundup/cgi/actions.py:97
@@ -1736,22 +1750,22 @@
 msgid "Welcome %(username)s!"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1383 ../roundup/cgi/actions.py:1387
-#: ../roundup/cgi/actions.py:1383:1387
+#: ../roundup/cgi/actions.py:1384 ../roundup/cgi/actions.py:1388
+#: ../roundup/cgi/actions.py:1384:1388
 msgid "Invalid login"
 msgstr "Ungültiger Benutzername"
 
-#: ../roundup/cgi/actions.py:1393
+#: ../roundup/cgi/actions.py:1394
 msgid "You do not have permission to login"
 msgstr "Sie sind nicht berechtigt, sich anzumelden"
 
-#: ../roundup/cgi/actions.py:1437 ../roundup/cgi/actions.py:1616
-#: ../roundup/cgi/actions.py:1437:1616
+#: ../roundup/cgi/actions.py:1439 ../roundup/cgi/actions.py:1618
+#: ../roundup/cgi/actions.py:1439:1618
 #, python-format
 msgid "Column \"%(column)s\" not found in %(class)s"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1687
+#: ../roundup/cgi/actions.py:1689
 #, python-format
 msgid "You do not have permission to view %(class)s"
 msgstr "Sie sind nicht berechtigt, Einträge der Klasse \"%(class)s\" zu lesen"
@@ -1857,147 +1871,148 @@
 "Admistratoren wurden benachrichtigt.</p>\n"
 "</body></html>"
 
-#: ../roundup/cgi/client.py:651
+#: ../roundup/cgi/client.py:670 ../roundup/cgi/client.py:1570
+#: ../roundup/cgi/client.py:670:1570
+msgid "Required Header Missing"
+msgstr ""
+
+#: ../roundup/cgi/client.py:672
 #, fuzzy
 msgid "Client is not allowed to use Rest Interface."
 msgstr "Gast-Benutzer sind nicht berechtigt, das Web-Interface zu benutzen."
 
-#: ../roundup/cgi/client.py:895
+#: ../roundup/cgi/client.py:921
 msgid "Form Error: "
 msgstr "Formular-Fehler: "
 
-#: ../roundup/cgi/client.py:985
+#: ../roundup/cgi/client.py:1011
 #, python-format
 msgid "Unrecognized charset: %r"
 msgstr "Zeichensatz nicht erkannt: %r"
 
-#: ../roundup/cgi/client.py:1238 ../roundup/cgi/client.py:2196
-#: ../roundup/cgi/client.py:1238:2196
+#: ../roundup/cgi/client.py:1264 ../roundup/cgi/client.py:2250
+#: ../roundup/cgi/client.py:1264:2250
 msgid "broken form: multiple @action values submitted"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1253
+#: ../roundup/cgi/client.py:1279
 msgid "Anonymous users are not allowed to use the web interface"
 msgstr "Gast-Benutzer sind nicht berechtigt, das Web-Interface zu benutzen."
 
-#: ../roundup/cgi/client.py:1376
+#: ../roundup/cgi/client.py:1430
 msgid "Referer header not available."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1380
+#: ../roundup/cgi/client.py:1434
 #, python-format
 msgid "csrf key used with wrong method from: %s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1409
+#: ../roundup/cgi/client.py:1463
 #, python-format
 msgid "csrf header %(header)s required but missing for user%(userid)s."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1413
+#: ../roundup/cgi/client.py:1467
 #, python-format
 msgid "Missing header: %s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1421
+#: ../roundup/cgi/client.py:1475
 #, python-format
 msgid "csrf Referer header check failed for user%(userid)s. Value=%(referer)s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1426
+#: ../roundup/cgi/client.py:1480
 #, fuzzy, python-format
 msgid "Invalid Referer: %s"
 msgstr "Ungültiger Benutzername"
 
-#: ../roundup/cgi/client.py:1441
+#: ../roundup/cgi/client.py:1495
 #, python-format
 msgid "csrf Origin header check failed for user%(userid)s. Value=%(origin)s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1446
+#: ../roundup/cgi/client.py:1500
 #, fuzzy, python-format
 msgid "Invalid Origin %s"
 msgstr "Ungültiger Benutzername"
 
-#: ../roundup/cgi/client.py:1460
+#: ../roundup/cgi/client.py:1514
 #, python-format
 msgid ""
 "csrf X-FORWARDED-HOST header check failed for user%(userid)s. Value=%(host)s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1466
+#: ../roundup/cgi/client.py:1520
 #, python-format
 msgid "Invalid X-FORWARDED-HOST %s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1485
+#: ../roundup/cgi/client.py:1539
 #, python-format
 msgid "csrf HOST header check failed for user%(userid)s. Value=%(host)s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1490
+#: ../roundup/cgi/client.py:1544
 #, fuzzy, python-format
 msgid "Invalid HOST %s"
 msgstr "Ungültige Anforderung"
 
-#: ../roundup/cgi/client.py:1498
+#: ../roundup/cgi/client.py:1552
 msgid "Csrf: unable to verify sufficient headers"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1499
+#: ../roundup/cgi/client.py:1553
 msgid "Unable to verify sufficient headers"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1513
+#: ../roundup/cgi/client.py:1567
 #, python-format
 msgid "csrf X-REQUESTED-WITH xmlrpc required header check failed for user%s."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1516
-msgid "Required Header Missing"
-msgstr ""
-
-#: ../roundup/cgi/client.py:1554
+#: ../roundup/cgi/client.py:1608
 #, python-format
 msgid "Required csrf field missing for user%s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1556 ../roundup/cgi/client.py:1583
-#: ../roundup/cgi/client.py:1600 ../roundup/cgi/client.py:1556:1583:1600
+#: ../roundup/cgi/client.py:1610 ../roundup/cgi/client.py:1637
+#: ../roundup/cgi/client.py:1654 ../roundup/cgi/client.py:1610:1637:1654
 msgid ""
 "We can't validate your session (csrf failure). Re-enter any unsaved data and "
 "try again."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1560
+#: ../roundup/cgi/client.py:1614
 #, python-format
 msgid "csrf field not supplied by user%s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1572
+#: ../roundup/cgi/client.py:1626
 #, python-format
 msgid ""
 "Csrf mismatch user: current user %(user)s != stored user %(stored)s, current "
 "session, stored session: %(cur_sess)s,%(stor_sess)s for key %(key)s."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1590
+#: ../roundup/cgi/client.py:1644
 #, python-format
 msgid ""
 "Csrf mismatch user: current session %(curr_sess)s != stored session "
 "%(stor_sess)s, current user/stored user is: %(user)s for key %(key)s."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1784
+#: ../roundup/cgi/client.py:1838
 msgid "You are not allowed to view this file."
 msgstr "Sie sind nicht berechtigt, diese Seite anzuzeigen."
 
-#: ../roundup/cgi/client.py:2073
+#: ../roundup/cgi/client.py:2127
 #, python-format
 msgid "%(starttag)sTime elapsed: %(seconds)fs%(endtag)s\n"
 msgstr "%(starttag)sBenötigte Zeit: %(seconds)fs%(endtag)s\n"
 
-#: ../roundup/cgi/client.py:2077
+#: ../roundup/cgi/client.py:2131
 #, python-format
 msgid ""
 "%(starttag)sCache hits: %(cache_hits)d, misses %(cache_misses)d. Loading "
@@ -2006,7 +2021,7 @@
 "%(starttag)sCache benutzt: %(cache_hits)d, verfehlt: %(cache_misses)d. "
 "Einträge laden: %(get_items)fs; filtern: %(filtering)fs.%(endtag)s\n"
 
-#: ../roundup/cgi/client.py:2615
+#: ../roundup/cgi/client.py:2669
 #, python-format
 msgid ""
 "Cache failure: compressed file %(compressed)s is older than its source file "
@@ -2406,28 +2421,28 @@
 msgid "\"%s\" not a node designator"
 msgstr "\"%s\" ist kein gültiger Bezeichner"
 
-#: ../roundup/hyperdb.py:1492 ../roundup/hyperdb.py:1500
-#: ../roundup/hyperdb.py:1492:1500
+#: ../roundup/hyperdb.py:1493 ../roundup/hyperdb.py:1501
+#: ../roundup/hyperdb.py:1493:1501
 #, python-format
 msgid "Not a property name: %s"
 msgstr "Keine Eigenschaft: %s"
 
-#: ../roundup/hyperdb.py:1977
+#: ../roundup/hyperdb.py:1978
 #, fuzzy, python-format
 msgid "property %(property)s: %(value)r is not a %(classname)s."
 msgstr "Der Wert \"%(value)s\" ist nicht in der Liste für \"%(propname)s\""
 
-#: ../roundup/hyperdb.py:1983
+#: ../roundup/hyperdb.py:1984
 #, python-format
 msgid "you may only enter ID values for property %s"
 msgstr "Sie können für die Eigenschaft %s  nur IDs eingeben"
 
-#: ../roundup/hyperdb.py:2018
+#: ../roundup/hyperdb.py:2019
 #, fuzzy, python-format
 msgid "%(property)r is not a property of %(classname)s"
 msgstr "%r ist keine Eigenschaft von %s"
 
-#: ../roundup/init.py:139
+#: ../roundup/init.py:141
 #, python-format
 msgid ""
 "WARNING: directory '%s'\n"
@@ -2732,7 +2747,7 @@
 "Sie sich an %(mailadmin)s und bitten Sie um Korrektur der\n"
 "fehlerhaften Eigenschaften:  %(errors)s\n"
 
-#: ../roundup/mailgw.py:1820
+#: ../roundup/mailgw.py:1821
 #, fuzzy, python-format
 msgid ""
 "\n"
@@ -2759,19 +2774,19 @@
 msgid "Invalid attribute %s"
 msgstr "Ungültiger Benutzername"
 
-#: ../roundup/rest.py:2078
+#: ../roundup/rest.py:2090
 #, python-format
 msgid "Api rate limits exceeded. Please wait: %s seconds."
 msgstr ""
 
-#: ../roundup/rest.py:2113
+#: ../roundup/rest.py:2125
 #, python-format
 msgid ""
 "Unable to parse Accept Header. %(error)s. Acceptable types: "
 "%(acceptable_types)s"
 msgstr ""
 
-#: ../roundup/rest.py:2262
+#: ../roundup/rest.py:2305
 #, python-format
 msgid ""
 "Unrecognized api version: %s. See /rest without specifying api version for "
@@ -2901,27 +2916,27 @@
 msgid "No tracker templates found in directory %s"
 msgstr "Keine Tracker-Vorlage gefunden im Verzeichnis %s"
 
-#: ../roundup/scripts/roundup_mailgw.py:185
+#: ../roundup/scripts/roundup_mailgw.py:182
 msgid ""
 "\n"
 "Error: The instance home must be specified"
 msgstr ""
 
-#: ../roundup/scripts/roundup_mailgw.py:203
+#: ../roundup/scripts/roundup_mailgw.py:200
 #, fuzzy
 msgid ""
 "\n"
 "Error: not enough source specification information"
 msgstr "Sie haben nicht genügend Angaben zur E-Mail-Quelle gemacht"
 
-#: ../roundup/scripts/roundup_mailgw.py:234
+#: ../roundup/scripts/roundup_mailgw.py:231
 #, fuzzy, python-format
 msgid ""
 "\n"
 "Error: %s specification not valid"
 msgstr "Fehler: %s-Optionen ungültig"
 
-#: ../roundup/scripts/roundup_mailgw.py:258
+#: ../roundup/scripts/roundup_mailgw.py:254
 #, fuzzy
 msgid ""
 "\n"
@@ -2935,7 +2950,7 @@
 msgid "WARNING: generating temporary SSL certificate"
 msgstr "WARNUNG: erzeuge temporäres SSL-Zertifikat"
 
-#: ../roundup/scripts/roundup_server.py:329
+#: ../roundup/scripts/roundup_server.py:331
 msgid ""
 "<html><head><title>Roundup trackers index</title></head>\n"
 "<body><h1>Roundup trackers index</h1><ol>\n"
@@ -2943,62 +2958,62 @@
 "<html><head><title>Roundup Tracker-Liste</title></head>\n"
 "<body><h1>Roundup Tracker-Liste</h1><ol>\n"
 
-#: ../roundup/scripts/roundup_server.py:549
+#: ../roundup/scripts/roundup_server.py:551
 #, fuzzy, python-format
 msgid "Error: %(type)s: %(value)s"
 msgstr "%(key)s: %(value)s"
 
-#: ../roundup/scripts/roundup_server.py:561
+#: ../roundup/scripts/roundup_server.py:563
 msgid "WARNING: ignoring \"-g\" argument, not root"
 msgstr ""
 "WARNUNG: die Option \"-g\" wird ignoriert, da Sie nicht Administrator sind"
 
-#: ../roundup/scripts/roundup_server.py:567
+#: ../roundup/scripts/roundup_server.py:569
 msgid "Can't change groups - no grp module"
 msgstr "Die Gruppe kann nicht gewechselt werden - das Modul grp fehlt"
 
-#: ../roundup/scripts/roundup_server.py:576
+#: ../roundup/scripts/roundup_server.py:578
 #, python-format
 msgid "Group %(group)s doesn't exist"
 msgstr "Die Gruppe %(group)s existiert nicht"
 
-#: ../roundup/scripts/roundup_server.py:588
+#: ../roundup/scripts/roundup_server.py:590
 msgid "Can't run as root!"
 msgstr ""
 "Dieser Prozess kann nicht unter dem Administrator-Konto (\"root\") laufen!"
 
-#: ../roundup/scripts/roundup_server.py:591
+#: ../roundup/scripts/roundup_server.py:593
 msgid "WARNING: ignoring \"-u\" argument, not root"
 msgstr ""
 "WARNUNG: die Option \"-u\" wird ignoriert, da Sie nicht Administrator sind"
 
-#: ../roundup/scripts/roundup_server.py:597
+#: ../roundup/scripts/roundup_server.py:599
 msgid "Can't change users - no pwd module"
 msgstr "Der Benutzer kann nicht gewechselt werden - das Modul pwd fehlt"
 
-#: ../roundup/scripts/roundup_server.py:606
+#: ../roundup/scripts/roundup_server.py:608
 #, python-format
 msgid "User %(user)s doesn't exist"
 msgstr "Der Benutzer %(user)s existiert nicht"
 
-#: ../roundup/scripts/roundup_server.py:803
+#: ../roundup/scripts/roundup_server.py:805
 #, python-format
 msgid "Multiprocess mode \"%s\" is not available, switching to single-process"
 msgstr ""
 "Der Multiprozessmodus \"%s\" ist nicht verfügbar, Einprozessmodus aktiviert"
 
-#: ../roundup/scripts/roundup_server.py:830
+#: ../roundup/scripts/roundup_server.py:832
 #, python-format
 msgid "Unable to bind to port %s, port already in use."
 msgstr "Start des Servers auf Port %s schlug fehl. Port bereits verwendet."
 
-#: ../roundup/scripts/roundup_server.py:834
+#: ../roundup/scripts/roundup_server.py:836
 #, fuzzy, python-format
 msgid ""
 "Unable to bind to port %(port)s, access not allowed, errno: %(errno)s %(msg)s"
 msgstr "Start des Servers auf Port %s schlug fehl. Port bereits verwendet."
 
-#: ../roundup/scripts/roundup_server.py:913
+#: ../roundup/scripts/roundup_server.py:915
 msgid ""
 " -c <Command>  Windows Service options.\n"
 "               If you want to run the server as a Windows Service, you\n"
@@ -3014,7 +3029,7 @@
 "               Zudem müssen Sie die Logfile-Option aktivieren.\n"
 "               \"roundup-server -c help\" zeigt eine weitere Hilfe zum Thema."
 
-#: ../roundup/scripts/roundup_server.py:920
+#: ../roundup/scripts/roundup_server.py:922
 msgid ""
 " -u <UID>      runs the Roundup web server as this UID\n"
 " -g <GID>      runs the Roundup web server as this GID\n"
@@ -3028,7 +3043,7 @@
 "               die Prozess-ID in die Datei PIDDatei.\n"
 "               Die Option -l muss dann auch angegeben werden."
 
-#: ../roundup/scripts/roundup_server.py:927
+#: ../roundup/scripts/roundup_server.py:929
 #, fuzzy, python-format
 msgid ""
 "\n"
@@ -3148,21 +3163,21 @@
 "   URLs Probleme bereiten könnten. Am besten verwenden Sie nur Buchstaben, \n"
 "   Zahlen und \"-_\".\n"
 
-#: ../roundup/scripts/roundup_server.py:1103
+#: ../roundup/scripts/roundup_server.py:1105
 msgid "Instances must be name=home"
 msgstr "Instanzen müssen als Tracker-Name=Tracker-Verzeichnis angegeben werden"
 
-#: ../roundup/scripts/roundup_server.py:1117
+#: ../roundup/scripts/roundup_server.py:1119
 #, python-format
 msgid "Configuration saved to %s"
 msgstr "Konfiguration in der Datei %s gespeichert"
 
-#: ../roundup/scripts/roundup_server.py:1135
+#: ../roundup/scripts/roundup_server.py:1137
 msgid "Sorry, you can't run the server as a daemon on this Operating System"
 msgstr ""
 "Auf diesem Betriebssystem kann der Server nicht als Hintergrundprozess laufen"
 
-#: ../roundup/scripts/roundup_server.py:1155
+#: ../roundup/scripts/roundup_server.py:1157
 #, python-format
 msgid "Roundup server started on %(HOST)s:%(PORT)s"
 msgstr "Der Roundup-Server wurde unter %(HOST)s:%(PORT)s gestartet"
@@ -5648,6 +5663,9 @@
 msgid "Password"
 msgstr "Passwort"
 
+#~ msgid "roundup> "
+#~ msgstr "roundup> "
+
 #, fuzzy
 #~ msgid ""
 #~ "Usage: %(program)s [-v] [-c class] [[-C class] -S field=value]* [instance "
--- a/locale/en.po	Wed Mar 01 10:43:54 2023 -0500
+++ b/locale/en.po	Wed Mar 01 10:51:37 2023 -0500
@@ -11,7 +11,7 @@
 msgstr ""
 "Project-Id-Version: Roundup 2.3.0\n"
 "Report-Msgid-Bugs-To: roundup-devel@lists.sourceforge.net\n"
-"POT-Creation-Date: 2022-11-23 22:28-0500\n"
+"POT-Creation-Date: 2023-03-01 10:35-0500\n"
 "PO-Revision-Date: 2004-11-20 13:47+0200\n"
 "Last-Translator: Not applicable\n"
 "Language-Team: English\n"
@@ -26,29 +26,29 @@
 "You do not have permission to retire or restore the %(classname)s class."
 msgstr ""
 
-#: ../roundup/actions.py:64 ../roundup/cgi/actions.py:240
+#: ../roundup/actions.py:65 ../roundup/cgi/actions.py:240
 msgid "You may not retire the admin or anonymous user"
 msgstr ""
 
-#: ../roundup/admin.py:106 ../roundup/admin.py:1259 ../roundup/admin.py:1314
-#: ../roundup/admin.py:1341 ../roundup/admin.py:106:1259 :1314:1341
+#: ../roundup/admin.py:112 ../roundup/admin.py:1295 ../roundup/admin.py:1350
+#: ../roundup/admin.py:1377 ../roundup/admin.py:112:1295 :1350:1377
 #, python-format
 msgid "no such class \"%(classname)s\""
 msgstr ""
 
-#: ../roundup/admin.py:118
+#: ../roundup/admin.py:124
 #, python-format
 msgid "argument \"%(arg)s\" not propname=value"
 msgstr ""
 
-#: ../roundup/admin.py:131
+#: ../roundup/admin.py:137
 #, python-format
 msgid ""
 "Problem: %(message)s\n"
 "\n"
 msgstr ""
 
-#: ../roundup/admin.py:132
+#: ../roundup/admin.py:138
 #, python-format
 msgid ""
 "%(message)sUsage: roundup-admin [options] [<command> <arguments>]\n"
@@ -76,17 +76,17 @@
 " roundup-admin help all                   -- all available help\n"
 msgstr ""
 
-#: ../roundup/admin.py:159
+#: ../roundup/admin.py:165
 msgid "Commands: "
 msgstr ""
 
-#: ../roundup/admin.py:166
+#: ../roundup/admin.py:172
 msgid ""
 "Commands may be abbreviated as long as the abbreviation\n"
 "matches only one command, e.g. l == li == lis == list."
 msgstr ""
 
-#: ../roundup/admin.py:195
+#: ../roundup/admin.py:201
 msgid ""
 "\n"
 "All commands (except help) require a tracker specifier. This is just\n"
@@ -138,7 +138,7 @@
 " . ROUNDUP_LOGIN environment variable\n"
 " . the -u command-line option\n"
 "If either the name or password is not supplied, they are obtained from the\n"
-"command-line.\n"
+"command-line. (See admin guide before using -u.)\n"
 "\n"
 "Date format examples:\n"
 "  \"2000-04-17.03:45\" means <Date 2000-04-17.08:45:00>\n"
@@ -153,12 +153,12 @@
 "Command help:\n"
 msgstr ""
 
-#: ../roundup/admin.py:258
+#: ../roundup/admin.py:264
 #, python-format
 msgid "%s:"
 msgstr ""
 
-#: ../roundup/admin.py:265
+#: ../roundup/admin.py:271
 msgid ""
 "Usage: help topic\n"
 "        Give help about topic.\n"
@@ -170,20 +170,20 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:287
+#: ../roundup/admin.py:293
 #, python-format
 msgid "Sorry, no help for \"%(topic)s\""
 msgstr ""
 
-#: ../roundup/admin.py:402 ../roundup/admin.py:458 ../roundup/admin.py:402:458
+#: ../roundup/admin.py:408 ../roundup/admin.py:464 ../roundup/admin.py:408:464
 msgid "Templates:"
 msgstr ""
 
-#: ../roundup/admin.py:405 ../roundup/admin.py:468 ../roundup/admin.py:405:468
+#: ../roundup/admin.py:411 ../roundup/admin.py:474 ../roundup/admin.py:411:474
 msgid "Back ends:"
 msgstr ""
 
-#: ../roundup/admin.py:408
+#: ../roundup/admin.py:414
 msgid ""
 "Usage: install [template [backend [key=val[,key=val]]]]\n"
 "        Install a new Roundup tracker.\n"
@@ -209,23 +209,23 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:431 ../roundup/admin.py:562 ../roundup/admin.py:635
-#: ../roundup/admin.py:728 ../roundup/admin.py:786 ../roundup/admin.py:872
-#: ../roundup/admin.py:931 ../roundup/admin.py:958 ../roundup/admin.py:985
-#: ../roundup/admin.py:1062 ../roundup/admin.py:1157 ../roundup/admin.py:1243
-#: ../roundup/admin.py:1304 ../roundup/admin.py:1331 ../roundup/admin.py:1367
-#: ../roundup/admin.py:1495 ../roundup/admin.py:1579
-#: ../roundup/admin.py:431:562 :1157 :1243:1304 :1331:1367 :1495:1579 :635:728
-#: :786:872 :931:958 :985:1062
+#: ../roundup/admin.py:437 ../roundup/admin.py:568 ../roundup/admin.py:671
+#: ../roundup/admin.py:764 ../roundup/admin.py:822 ../roundup/admin.py:908
+#: ../roundup/admin.py:967 ../roundup/admin.py:994 ../roundup/admin.py:1021
+#: ../roundup/admin.py:1098 ../roundup/admin.py:1193 ../roundup/admin.py:1279
+#: ../roundup/admin.py:1340 ../roundup/admin.py:1367 ../roundup/admin.py:1403
+#: ../roundup/admin.py:1531 ../roundup/admin.py:1615
+#: ../roundup/admin.py:437:568 :1021:1098:1193 :1279:1340 :1367:1403 :1531:1615
+#: :671:764 :822:908 :967:994
 msgid "Not enough arguments supplied"
 msgstr ""
 
-#: ../roundup/admin.py:437
+#: ../roundup/admin.py:443
 #, python-format
 msgid "Instance home parent directory \"%(parent)s\" does not exist"
 msgstr ""
 
-#: ../roundup/admin.py:446
+#: ../roundup/admin.py:452
 #, python-format
 msgid ""
 "WARNING: There appears to be a tracker in \"%(tracker_home)s\"!\n"
@@ -233,20 +233,20 @@
 "Erase it? Y/N: "
 msgstr ""
 
-#: ../roundup/admin.py:459
+#: ../roundup/admin.py:465
 msgid "Select template"
 msgstr ""
 
-#: ../roundup/admin.py:469
+#: ../roundup/admin.py:475
 msgid "Select backend"
 msgstr ""
 
-#: ../roundup/admin.py:480
+#: ../roundup/admin.py:486
 #, python-format
 msgid "Error in configuration settings: \"%s\""
 msgstr ""
 
-#: ../roundup/admin.py:511
+#: ../roundup/admin.py:517
 #, python-format
 msgid ""
 "\n"
@@ -255,11 +255,11 @@
 "   %(config_file)s"
 msgstr ""
 
-#: ../roundup/admin.py:521
+#: ../roundup/admin.py:527
 msgid " ... at a minimum, you must set following options:"
 msgstr ""
 
-#: ../roundup/admin.py:526
+#: ../roundup/admin.py:532
 #, python-format
 msgid ""
 "\n"
@@ -276,7 +276,7 @@
 "---------------------------------------------------------------------------\n"
 msgstr ""
 
-#: ../roundup/admin.py:557
+#: ../roundup/admin.py:563
 msgid ""
 "Usage: genconfig <filename>\n"
 "        Generate a new tracker config file (ini style) with default\n"
@@ -284,7 +284,22 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:572
+#: ../roundup/admin.py:581
+#, python-format
+msgid ""
+"Changing option\n"
+"   'password_pbkdf2_default_rounds'\n"
+"from old default of %(old_number)s to new default of %(new_number)s."
+msgstr ""
+
+#: ../roundup/admin.py:593
+#, python-format
+msgid ""
+"Update 'password_pbkdf2_default_rounds'to a number equal to or larger\n"
+"than %s."
+msgstr ""
+
+#: ../roundup/admin.py:604
 msgid ""
 "Usage: updateconfig <filename>\n"
 "        Generate an updated tracker config file (ini style) in\n"
@@ -294,7 +309,7 @@
 msgstr ""
 
 #. password
-#: ../roundup/admin.py:580
+#: ../roundup/admin.py:612
 msgid ""
 "Usage: initialise [adminpw]\n"
 "        Initialise a new Roundup tracker.\n"
@@ -305,30 +320,30 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:594
+#: ../roundup/admin.py:626
 msgid "Admin Password: "
 msgstr ""
 
-#: ../roundup/admin.py:595
+#: ../roundup/admin.py:627
 msgid "       Confirm: "
 msgstr ""
 
-#: ../roundup/admin.py:599
+#: ../roundup/admin.py:631
 msgid "Instance home does not exist"
 msgstr ""
 
-#: ../roundup/admin.py:603
+#: ../roundup/admin.py:635
 msgid "Instance has not been installed"
 msgstr ""
 
-#: ../roundup/admin.py:609
+#: ../roundup/admin.py:641
 msgid ""
 "WARNING: The database is already initialised!\n"
 "If you re-initialise it, you will lose all the data!\n"
 "Erase it? Y/N: "
 msgstr ""
 
-#: ../roundup/admin.py:625
+#: ../roundup/admin.py:661
 msgid ""
 "Usage: get property designator[,designator]*\n"
 "        Get the given property of one or more designator(s).\n"
@@ -341,23 +356,23 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:669 ../roundup/admin.py:687 ../roundup/admin.py:669:687
+#: ../roundup/admin.py:705 ../roundup/admin.py:723 ../roundup/admin.py:705:723
 #, python-format
 msgid "property %s is not of type Multilink or Link so -d flag does not apply."
 msgstr ""
 
-#: ../roundup/admin.py:697 ../roundup/admin.py:1261 ../roundup/admin.py:1316
-#: ../roundup/admin.py:697:1261:1316
+#: ../roundup/admin.py:733 ../roundup/admin.py:1297 ../roundup/admin.py:1352
+#: ../roundup/admin.py:733:1297:1352
 #, python-format
 msgid "no such %(classname)s node \"%(nodeid)s\""
 msgstr ""
 
-#: ../roundup/admin.py:700
+#: ../roundup/admin.py:736
 #, python-format
 msgid "no such %(classname)s property \"%(propname)s\""
 msgstr ""
 
-#: ../roundup/admin.py:708
+#: ../roundup/admin.py:744
 msgid ""
 "Usage: set items property=value property=value ...\n"
 "        Set the given properties of one or more items(s).\n"
@@ -378,7 +393,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:776
+#: ../roundup/admin.py:812
 msgid ""
 "Usage: filter classname propname=value ...\n"
 "        Find the nodes of the given class with a given property value.\n"
@@ -391,19 +406,19 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:819
+#: ../roundup/admin.py:855
 #, python-format
 msgid "Class %(curclassname)s has no property %(pn)s in %(propname)s."
 msgstr ""
 
-#: ../roundup/admin.py:857 ../roundup/admin.py:918 ../roundup/admin.py:1082
-#: ../roundup/admin.py:1094 ../roundup/admin.py:1177
-#: ../roundup/admin.py:857:918 :1082:1094:1177
+#: ../roundup/admin.py:893 ../roundup/admin.py:954 ../roundup/admin.py:1118
+#: ../roundup/admin.py:1130 ../roundup/admin.py:1213
+#: ../roundup/admin.py:893:954 :1118:1130:1213
 #, python-format
 msgid "%(classname)s has no property \"%(propname)s\""
 msgstr ""
 
-#: ../roundup/admin.py:864
+#: ../roundup/admin.py:900
 msgid ""
 "Usage: find classname propname=value ...\n"
 "        Find the nodes of the given class with a given link property value.\n"
@@ -414,7 +429,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:925
+#: ../roundup/admin.py:961
 msgid ""
 "Usage: specification classname\n"
 "        Show the properties for a classname.\n"
@@ -423,17 +438,17 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:941
+#: ../roundup/admin.py:977
 #, python-format
 msgid "%(key)s: %(value)s (key property)\n"
 msgstr ""
 
-#: ../roundup/admin.py:944
+#: ../roundup/admin.py:980
 #, python-format
 msgid "%(key)s: %(value)s\n"
 msgstr ""
 
-#: ../roundup/admin.py:947
+#: ../roundup/admin.py:983
 msgid ""
 "Usage: display designator[,designator]*\n"
 "\n"
@@ -447,12 +462,12 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:974
+#: ../roundup/admin.py:1010
 #, python-format
 msgid "%(key)s: %(value)s"
 msgstr ""
 
-#: ../roundup/admin.py:977
+#: ../roundup/admin.py:1013
 msgid ""
 "Usage: create classname property=value ...\n"
 "        Create a new entry of a given class.\n"
@@ -464,31 +479,31 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1005
+#: ../roundup/admin.py:1041
 #, python-format
 msgid "%(propname)s (Password): "
 msgstr ""
 
-#: ../roundup/admin.py:1008
+#: ../roundup/admin.py:1044
 #, python-format
 msgid "   %(propname)s (Again): "
 msgstr ""
 
-#: ../roundup/admin.py:1012
+#: ../roundup/admin.py:1048
 msgid "Sorry, try again..."
 msgstr ""
 
-#: ../roundup/admin.py:1016
+#: ../roundup/admin.py:1052
 #, python-format
 msgid "%(propname)s (%(proptype)s): "
 msgstr ""
 
-#: ../roundup/admin.py:1035
+#: ../roundup/admin.py:1071
 #, python-format
 msgid "you must provide the \"%(propname)s\" property."
 msgstr ""
 
-#: ../roundup/admin.py:1047
+#: ../roundup/admin.py:1083
 msgid ""
 "Usage: list classname [property]\n"
 "        List the instances of a class.\n"
@@ -504,16 +519,16 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1060
+#: ../roundup/admin.py:1096
 msgid "Too many arguments supplied"
 msgstr ""
 
-#: ../roundup/admin.py:1096
+#: ../roundup/admin.py:1132
 #, python-format
 msgid "%(nodeid)4s: %(value)s"
 msgstr ""
 
-#: ../roundup/admin.py:1100
+#: ../roundup/admin.py:1136
 msgid ""
 "Usage: templates [trace_search]\n"
 "        List templates and their installed directories.\n"
@@ -523,7 +538,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1128
+#: ../roundup/admin.py:1164
 msgid ""
 "Usage: table classname [property[,property]*]\n"
 "        List the instances of a class in tabular form.\n"
@@ -555,17 +570,17 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1172
+#: ../roundup/admin.py:1208
 #, python-format
 msgid "\"%(spec)s\" not name:width"
 msgstr ""
 
-#: ../roundup/admin.py:1194
-#, python-format
-msgid "\"%(spec)s\" does not have an integer width: \"%(width)s\""
-msgstr ""
-
 #: ../roundup/admin.py:1230
+#, python-format
+msgid "\"%(spec)s\" does not have an integer width: \"%(width)s\""
+msgstr ""
+
+#: ../roundup/admin.py:1266
 msgid ""
 "Usage: history designator [skipquiet]\n"
 "        Show the history entries of a designator.\n"
@@ -580,7 +595,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1266
+#: ../roundup/admin.py:1302
 msgid ""
 "Usage: commit\n"
 "        Commit changes made to the database during an interactive session.\n"
@@ -594,7 +609,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1281
+#: ../roundup/admin.py:1317
 msgid ""
 "Usage: rollback\n"
 "        Undo all changes that are pending commit to the database.\n"
@@ -606,7 +621,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1294
+#: ../roundup/admin.py:1330
 msgid ""
 "Usage: retire designator[,designator]*\n"
 "        Retire the node specified by designator.\n"
@@ -619,7 +634,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1322
+#: ../roundup/admin.py:1358
 msgid ""
 "Usage: restore designator[,designator]*\n"
 "        Restore the retired node specified by designator.\n"
@@ -631,12 +646,12 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1347
+#: ../roundup/admin.py:1383
 msgid "no such %(classname)s node \" % (nodeid)s\""
 msgstr ""
 
 #. grab the directory to export to
-#: ../roundup/admin.py:1353
+#: ../roundup/admin.py:1389
 msgid ""
 "Usage: export [[-]class[,class]] export_dir\n"
 "        Export the database to colon-separated-value files.\n"
@@ -652,7 +667,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1460
+#: ../roundup/admin.py:1496
 msgid ""
 "Usage: exporttables [[-]class[,class]] export_dir\n"
 "        Export the database to colon-separated-value files, excluding the\n"
@@ -669,7 +684,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1475
+#: ../roundup/admin.py:1511
 msgid ""
 "Usage: import import_dir\n"
 "        Import a database from the directory containing CSV files,\n"
@@ -692,7 +707,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1554
+#: ../roundup/admin.py:1590
 msgid ""
 "Usage: importtables export_dir\n"
 "\n"
@@ -700,7 +715,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1561
+#: ../roundup/admin.py:1597
 msgid ""
 "Usage: pack period | date\n"
 "\n"
@@ -722,11 +737,11 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1589
+#: ../roundup/admin.py:1625
 msgid "Invalid format"
 msgstr ""
 
-#: ../roundup/admin.py:1602
+#: ../roundup/admin.py:1638
 msgid ""
 "Usage: reindex [classname|designator]*\n"
 "        Re-generate a tracker's search indexes.\n"
@@ -736,12 +751,12 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1616
+#: ../roundup/admin.py:1652
 #, python-format
 msgid "no such item \"%(designator)s\""
 msgstr ""
 
-#: ../roundup/admin.py:1626
+#: ../roundup/admin.py:1662
 msgid ""
 "Usage: security [Role name]\n"
 "\n"
@@ -749,46 +764,46 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1635
+#: ../roundup/admin.py:1671
 #, python-format
 msgid "No such Role \"%(role)s\"\n"
 msgstr ""
 
-#: ../roundup/admin.py:1641
+#: ../roundup/admin.py:1677
 #, python-format
 msgid "New Web users get the Roles \"%(role)s\"\n"
 msgstr ""
 
-#: ../roundup/admin.py:1644
+#: ../roundup/admin.py:1680
 #, python-format
 msgid "New Web users get the Role \"%(role)s\"\n"
 msgstr ""
 
-#: ../roundup/admin.py:1648
+#: ../roundup/admin.py:1684
 #, python-format
 msgid "New Email users get the Roles \"%(role)s\"\n"
 msgstr ""
 
-#: ../roundup/admin.py:1650
+#: ../roundup/admin.py:1686
 #, python-format
 msgid "New Email users get the Role \"%(role)s\"\n"
 msgstr ""
 
-#: ../roundup/admin.py:1653
+#: ../roundup/admin.py:1689
 #, python-format
 msgid "Role \"%(name)s\":\n"
 msgstr ""
 
-#: ../roundup/admin.py:1659
+#: ../roundup/admin.py:1695
 msgid " %(description)s (%(name)s for \"%(klass)s\""
 msgstr ""
 
-#: ../roundup/admin.py:1659
+#: ../roundup/admin.py:1695
 #, python-format
 msgid " %(description)s (%(name)s for \"%(klass)s\": %(properties)s only)\n"
 msgstr ""
 
-#: ../roundup/admin.py:1672
+#: ../roundup/admin.py:1708
 #, python-format
 msgid ""
 "\n"
@@ -796,17 +811,17 @@
 "\n"
 msgstr ""
 
-#: ../roundup/admin.py:1678
+#: ../roundup/admin.py:1714
 #, python-format
 msgid " %(description)s (%(name)s for \"%(klass)s\" only)\n"
 msgstr ""
 
-#: ../roundup/admin.py:1681
+#: ../roundup/admin.py:1717
 #, python-format
 msgid " %(description)s (%(name)s)\n"
 msgstr ""
 
-#: ../roundup/admin.py:1685
+#: ../roundup/admin.py:1721
 msgid ""
 "Usage: migrate\n"
 "\n"
@@ -830,60 +845,56 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1706
+#: ../roundup/admin.py:1742
 msgid "Tracker updated"
 msgstr ""
 
-#: ../roundup/admin.py:1709
+#: ../roundup/admin.py:1745
 msgid "No migration action required"
 msgstr ""
 
-#: ../roundup/admin.py:1735
+#: ../roundup/admin.py:1771
 #, python-format
 msgid "Unknown command \"%(command)s\" (\"help commands\" for a list)"
 msgstr ""
 
-#: ../roundup/admin.py:1741
+#: ../roundup/admin.py:1777
 #, python-format
 msgid "Multiple commands match \"%(command)s\": %(list)s"
 msgstr ""
 
-#: ../roundup/admin.py:1750
+#: ../roundup/admin.py:1786
 msgid "Enter tracker home: "
 msgstr ""
 
-#: ../roundup/admin.py:1759 ../roundup/admin.py:1765 ../roundup/admin.py:1802
-#: ../roundup/admin.py:1759:1765:1802
+#: ../roundup/admin.py:1795 ../roundup/admin.py:1801 ../roundup/admin.py:1838
+#: ../roundup/admin.py:1795:1801:1838
 #, python-format
 msgid "Error: %(message)s"
 msgstr ""
 
-#: ../roundup/admin.py:1775 ../roundup/admin.py:1779
-#: ../roundup/admin.py:1775:1779
+#: ../roundup/admin.py:1811 ../roundup/admin.py:1815
+#: ../roundup/admin.py:1811:1815
 #, python-format
 msgid "Error: Couldn't open tracker: %(message)s"
 msgstr ""
 
-#: ../roundup/admin.py:1815
+#: ../roundup/admin.py:1851
 #, python-format
 msgid ""
 "Roundup %s ready for input.\n"
 "Type \"help\" for help."
 msgstr ""
 
-#: ../roundup/admin.py:1820
+#: ../roundup/admin.py:1856
 msgid "Note: command history and editing not available"
 msgstr ""
 
-#: ../roundup/admin.py:1824
-msgid "roundup> "
-msgstr ""
-
-#: ../roundup/admin.py:1826
+#: ../roundup/admin.py:1862
 msgid "exit..."
 msgstr ""
 
-#: ../roundup/admin.py:1839
+#: ../roundup/admin.py:1875
 msgid "There are unsaved changes. Commit them (y/N)? "
 msgstr ""
 
@@ -991,20 +1002,22 @@
 msgid "restored"
 msgstr ""
 
-#: ../roundup/backends/sessions_redis.py:76
-#: ../roundup/backends/sessions_redis.py:95
-#: ../roundup/backends/sessions_redis.py:76:95
+#: ../roundup/backends/sessions_redis.py:78
+#: ../roundup/backends/sessions_redis.py:97
+#: ../roundup/backends/sessions_redis.py:78:97
 #, python-format
 msgid "Key %(key)s not found in %(name)s database."
 msgstr ""
 
-#: ../roundup/backends/sessions_redis.py:191
+#: ../roundup/backends/sessions_redis.py:193
 #, python-format
 msgid "Key %(key)s changed in %(name)s db"
 msgstr ""
 
-#: ../roundup/backends/sessions_redis.py:195
-msgid "Redis set failed afer 3 retries"
+#: ../roundup/backends/sessions_redis.py:203
+#, python-format
+msgid ""
+"Redis set failed after %(retries)d retries for user %(user)s with key %(key)s"
 msgstr ""
 
 #: ../roundup/cgi/actions.py:97
@@ -1306,22 +1319,22 @@
 msgid "Welcome %(username)s!"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1383 ../roundup/cgi/actions.py:1387
-#: ../roundup/cgi/actions.py:1383:1387
+#: ../roundup/cgi/actions.py:1384 ../roundup/cgi/actions.py:1388
+#: ../roundup/cgi/actions.py:1384:1388
 msgid "Invalid login"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1393
+#: ../roundup/cgi/actions.py:1394
 msgid "You do not have permission to login"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1437 ../roundup/cgi/actions.py:1616
-#: ../roundup/cgi/actions.py:1437:1616
+#: ../roundup/cgi/actions.py:1439 ../roundup/cgi/actions.py:1618
+#: ../roundup/cgi/actions.py:1439:1618
 #, python-format
 msgid "Column \"%(column)s\" not found in %(class)s"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1687
+#: ../roundup/cgi/actions.py:1689
 #, python-format
 msgid "You do not have permission to view %(class)s"
 msgstr ""
@@ -1405,153 +1418,154 @@
 "</body></html>"
 msgstr ""
 
-#: ../roundup/cgi/client.py:651
+#: ../roundup/cgi/client.py:670 ../roundup/cgi/client.py:1570
+#: ../roundup/cgi/client.py:670:1570
+msgid "Required Header Missing"
+msgstr ""
+
+#: ../roundup/cgi/client.py:672
 msgid "Client is not allowed to use Rest Interface."
 msgstr ""
 
-#: ../roundup/cgi/client.py:895
+#: ../roundup/cgi/client.py:921
 msgid "Form Error: "
 msgstr ""
 
-#: ../roundup/cgi/client.py:985
+#: ../roundup/cgi/client.py:1011
 #, python-format
 msgid "Unrecognized charset: %r"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1238 ../roundup/cgi/client.py:2196
-#: ../roundup/cgi/client.py:1238:2196
+#: ../roundup/cgi/client.py:1264 ../roundup/cgi/client.py:2250
+#: ../roundup/cgi/client.py:1264:2250
 msgid "broken form: multiple @action values submitted"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1253
+#: ../roundup/cgi/client.py:1279
 msgid "Anonymous users are not allowed to use the web interface"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1376
+#: ../roundup/cgi/client.py:1430
 msgid "Referer header not available."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1380
+#: ../roundup/cgi/client.py:1434
 #, python-format
 msgid "csrf key used with wrong method from: %s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1409
+#: ../roundup/cgi/client.py:1463
 #, python-format
 msgid "csrf header %(header)s required but missing for user%(userid)s."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1413
+#: ../roundup/cgi/client.py:1467
 #, python-format
 msgid "Missing header: %s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1421
+#: ../roundup/cgi/client.py:1475
 #, python-format
 msgid "csrf Referer header check failed for user%(userid)s. Value=%(referer)s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1426
+#: ../roundup/cgi/client.py:1480
 #, python-format
 msgid "Invalid Referer: %s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1441
+#: ../roundup/cgi/client.py:1495
 #, python-format
 msgid "csrf Origin header check failed for user%(userid)s. Value=%(origin)s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1446
+#: ../roundup/cgi/client.py:1500
 #, python-format
 msgid "Invalid Origin %s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1460
+#: ../roundup/cgi/client.py:1514
 #, python-format
 msgid ""
 "csrf X-FORWARDED-HOST header check failed for user%(userid)s. Value=%(host)s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1466
+#: ../roundup/cgi/client.py:1520
 #, python-format
 msgid "Invalid X-FORWARDED-HOST %s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1485
+#: ../roundup/cgi/client.py:1539
 #, python-format
 msgid "csrf HOST header check failed for user%(userid)s. Value=%(host)s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1490
+#: ../roundup/cgi/client.py:1544
 #, python-format
 msgid "Invalid HOST %s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1498
+#: ../roundup/cgi/client.py:1552
 msgid "Csrf: unable to verify sufficient headers"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1499
+#: ../roundup/cgi/client.py:1553
 msgid "Unable to verify sufficient headers"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1513
+#: ../roundup/cgi/client.py:1567
 #, python-format
 msgid "csrf X-REQUESTED-WITH xmlrpc required header check failed for user%s."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1516
-msgid "Required Header Missing"
-msgstr ""
-
-#: ../roundup/cgi/client.py:1554
+#: ../roundup/cgi/client.py:1608
 #, python-format
 msgid "Required csrf field missing for user%s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1556 ../roundup/cgi/client.py:1583
-#: ../roundup/cgi/client.py:1600 ../roundup/cgi/client.py:1556:1583:1600
+#: ../roundup/cgi/client.py:1610 ../roundup/cgi/client.py:1637
+#: ../roundup/cgi/client.py:1654 ../roundup/cgi/client.py:1610:1637:1654
 msgid ""
 "We can't validate your session (csrf failure). Re-enter any unsaved data and "
 "try again."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1560
+#: ../roundup/cgi/client.py:1614
 #, python-format
 msgid "csrf field not supplied by user%s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1572
+#: ../roundup/cgi/client.py:1626
 #, python-format
 msgid ""
 "Csrf mismatch user: current user %(user)s != stored user %(stored)s, current "
 "session, stored session: %(cur_sess)s,%(stor_sess)s for key %(key)s."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1590
+#: ../roundup/cgi/client.py:1644
 #, python-format
 msgid ""
 "Csrf mismatch user: current session %(curr_sess)s != stored session "
 "%(stor_sess)s, current user/stored user is: %(user)s for key %(key)s."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1784
+#: ../roundup/cgi/client.py:1838
 msgid "You are not allowed to view this file."
 msgstr ""
 
-#: ../roundup/cgi/client.py:2073
+#: ../roundup/cgi/client.py:2127
 #, python-format
 msgid "%(starttag)sTime elapsed: %(seconds)fs%(endtag)s\n"
 msgstr ""
 
-#: ../roundup/cgi/client.py:2077
+#: ../roundup/cgi/client.py:2131
 #, python-format
 msgid ""
 "%(starttag)sCache hits: %(cache_hits)d, misses %(cache_misses)d. Loading "
 "items: %(get_items)f secs. Filtering: %(filtering)f secs.%(endtag)s\n"
 msgstr ""
 
-#: ../roundup/cgi/client.py:2615
+#: ../roundup/cgi/client.py:2669
 #, python-format
 msgid ""
 "Cache failure: compressed file %(compressed)s is older than its source file "
@@ -1925,28 +1939,28 @@
 msgid "\"%s\" not a node designator"
 msgstr ""
 
-#: ../roundup/hyperdb.py:1492 ../roundup/hyperdb.py:1500
-#: ../roundup/hyperdb.py:1492:1500
+#: ../roundup/hyperdb.py:1493 ../roundup/hyperdb.py:1501
+#: ../roundup/hyperdb.py:1493:1501
 #, python-format
 msgid "Not a property name: %s"
 msgstr ""
 
-#: ../roundup/hyperdb.py:1977
+#: ../roundup/hyperdb.py:1978
 #, python-format
 msgid "property %(property)s: %(value)r is not a %(classname)s."
 msgstr ""
 
-#: ../roundup/hyperdb.py:1983
+#: ../roundup/hyperdb.py:1984
 #, python-format
 msgid "you may only enter ID values for property %s"
 msgstr ""
 
-#: ../roundup/hyperdb.py:2018
+#: ../roundup/hyperdb.py:2019
 #, python-format
 msgid "%(property)r is not a property of %(classname)s"
 msgstr ""
 
-#: ../roundup/init.py:139
+#: ../roundup/init.py:141
 #, python-format
 msgid ""
 "WARNING: directory '%s'\n"
@@ -2166,7 +2180,7 @@
 "  %(errors)s\n"
 msgstr ""
 
-#: ../roundup/mailgw.py:1820
+#: ../roundup/mailgw.py:1821
 #, python-format
 msgid ""
 "\n"
@@ -2189,19 +2203,19 @@
 msgid "Invalid attribute %s"
 msgstr ""
 
-#: ../roundup/rest.py:2078
+#: ../roundup/rest.py:2090
 #, python-format
 msgid "Api rate limits exceeded. Please wait: %s seconds."
 msgstr ""
 
-#: ../roundup/rest.py:2113
+#: ../roundup/rest.py:2125
 #, python-format
 msgid ""
 "Unable to parse Accept Header. %(error)s. Acceptable types: "
 "%(acceptable_types)s"
 msgstr ""
 
-#: ../roundup/rest.py:2262
+#: ../roundup/rest.py:2305
 #, python-format
 msgid ""
 "Unrecognized api version: %s. See /rest without specifying api version for "
@@ -2324,26 +2338,26 @@
 msgid "No tracker templates found in directory %s"
 msgstr ""
 
-#: ../roundup/scripts/roundup_mailgw.py:185
+#: ../roundup/scripts/roundup_mailgw.py:182
 msgid ""
 "\n"
 "Error: The instance home must be specified"
 msgstr ""
 
-#: ../roundup/scripts/roundup_mailgw.py:203
+#: ../roundup/scripts/roundup_mailgw.py:200
 msgid ""
 "\n"
 "Error: not enough source specification information"
 msgstr ""
 
-#: ../roundup/scripts/roundup_mailgw.py:234
+#: ../roundup/scripts/roundup_mailgw.py:231
 #, python-format
 msgid ""
 "\n"
 "Error: %s specification not valid"
 msgstr ""
 
-#: ../roundup/scripts/roundup_mailgw.py:258
+#: ../roundup/scripts/roundup_mailgw.py:254
 msgid ""
 "\n"
 "Error: The source must be either \"mailbox\", \"pop\", \"pops\", \"apop\", "
@@ -2354,64 +2368,64 @@
 msgid "WARNING: generating temporary SSL certificate"
 msgstr ""
 
-#: ../roundup/scripts/roundup_server.py:329
+#: ../roundup/scripts/roundup_server.py:331
 msgid ""
 "<html><head><title>Roundup trackers index</title></head>\n"
 "<body><h1>Roundup trackers index</h1><ol>\n"
 msgstr ""
 
-#: ../roundup/scripts/roundup_server.py:549
+#: ../roundup/scripts/roundup_server.py:551
 #, python-format
 msgid "Error: %(type)s: %(value)s"
 msgstr ""
 
-#: ../roundup/scripts/roundup_server.py:561
+#: ../roundup/scripts/roundup_server.py:563
 msgid "WARNING: ignoring \"-g\" argument, not root"
 msgstr ""
 
-#: ../roundup/scripts/roundup_server.py:567
+#: ../roundup/scripts/roundup_server.py:569
 msgid "Can't change groups - no grp module"
 msgstr ""
 
-#: ../roundup/scripts/roundup_server.py:576
+#: ../roundup/scripts/roundup_server.py:578
 #, python-format
 msgid "Group %(group)s doesn't exist"
 msgstr ""
 
-#: ../roundup/scripts/roundup_server.py:588
+#: ../roundup/scripts/roundup_server.py:590
 msgid "Can't run as root!"
 msgstr ""
 
-#: ../roundup/scripts/roundup_server.py:591
+#: ../roundup/scripts/roundup_server.py:593
 msgid "WARNING: ignoring \"-u\" argument, not root"
 msgstr ""
 
-#: ../roundup/scripts/roundup_server.py:597
+#: ../roundup/scripts/roundup_server.py:599
 msgid "Can't change users - no pwd module"
 msgstr ""
 
-#: ../roundup/scripts/roundup_server.py:606
+#: ../roundup/scripts/roundup_server.py:608
 #, python-format
 msgid "User %(user)s doesn't exist"
 msgstr ""
 
-#: ../roundup/scripts/roundup_server.py:803
+#: ../roundup/scripts/roundup_server.py:805
 #, python-format
 msgid "Multiprocess mode \"%s\" is not available, switching to single-process"
 msgstr ""
 
-#: ../roundup/scripts/roundup_server.py:830
+#: ../roundup/scripts/roundup_server.py:832
 #, python-format
 msgid "Unable to bind to port %s, port already in use."
 msgstr ""
 
-#: ../roundup/scripts/roundup_server.py:834
+#: ../roundup/scripts/roundup_server.py:836
 #, python-format
 msgid ""
 "Unable to bind to port %(port)s, access not allowed, errno: %(errno)s %(msg)s"
 msgstr ""
 
-#: ../roundup/scripts/roundup_server.py:913
+#: ../roundup/scripts/roundup_server.py:915
 msgid ""
 " -c <Command>  Windows Service options.\n"
 "               If you want to run the server as a Windows Service, you\n"
@@ -2421,7 +2435,7 @@
 "               specifics."
 msgstr ""
 
-#: ../roundup/scripts/roundup_server.py:920
+#: ../roundup/scripts/roundup_server.py:922
 msgid ""
 " -u <UID>      runs the Roundup web server as this UID\n"
 " -g <GID>      runs the Roundup web server as this GID\n"
@@ -2430,7 +2444,7 @@
 "               specified if -d is used."
 msgstr ""
 
-#: ../roundup/scripts/roundup_server.py:927
+#: ../roundup/scripts/roundup_server.py:929
 #, python-format
 msgid ""
 "\n"
@@ -2497,20 +2511,20 @@
 "   any url-unsafe characters like spaces, as these confuse IE.\n"
 msgstr ""
 
-#: ../roundup/scripts/roundup_server.py:1103
+#: ../roundup/scripts/roundup_server.py:1105
 msgid "Instances must be name=home"
 msgstr ""
 
-#: ../roundup/scripts/roundup_server.py:1117
+#: ../roundup/scripts/roundup_server.py:1119
 #, python-format
 msgid "Configuration saved to %s"
 msgstr ""
 
-#: ../roundup/scripts/roundup_server.py:1135
+#: ../roundup/scripts/roundup_server.py:1137
 msgid "Sorry, you can't run the server as a daemon on this Operating System"
 msgstr ""
 
-#: ../roundup/scripts/roundup_server.py:1155
+#: ../roundup/scripts/roundup_server.py:1157
 #, python-format
 msgid "Roundup server started on %(HOST)s:%(PORT)s"
 msgstr ""
--- a/locale/es.po	Wed Mar 01 10:43:54 2023 -0500
+++ b/locale/es.po	Wed Mar 01 10:51:37 2023 -0500
@@ -7,7 +7,7 @@
 msgstr ""
 "Project-Id-Version: Roundup 2.3.0\n"
 "Report-Msgid-Bugs-To: roundup-devel@lists.sourceforge.net\n"
-"POT-Creation-Date: 2022-11-23 22:28-0500\n"
+"POT-Creation-Date: 2023-03-01 10:35-0500\n"
 "PO-Revision-Date: 2013-10-31 10:45+0100\n"
 "Last-Translator: Ramiro Morales <rm0@gmx.net>\n"
 "Language-Team: Spanish Translators <roundup-devel@lists.sourceforge.net>\n"
@@ -24,24 +24,24 @@
 msgstr ""
 "Ud. no posee los permisos necesarios para %(action)s la clase %(classname)s."
 
-#: ../roundup/actions.py:64 ../roundup/cgi/actions.py:240
+#: ../roundup/actions.py:65 ../roundup/cgi/actions.py:240
 msgid "You may not retire the admin or anonymous user"
 msgstr "Ni el usuario admin ni el usuario annimo pueden ser retirados"
 
 # ../roundup/admin.py:85 :955 :1004 :1026
-#: ../roundup/admin.py:106 ../roundup/admin.py:1259 ../roundup/admin.py:1314
-#: ../roundup/admin.py:1341 ../roundup/admin.py:106:1259 :1314:1341
+#: ../roundup/admin.py:112 ../roundup/admin.py:1295 ../roundup/admin.py:1350
+#: ../roundup/admin.py:1377 ../roundup/admin.py:112:1295 :1350:1377
 #, python-format
 msgid "no such class \"%(classname)s\""
 msgstr "la clase \"%(classname)s\" no existe"
 
 # ../roundup/admin.py:95 :99
-#: ../roundup/admin.py:118
+#: ../roundup/admin.py:124
 #, python-format
 msgid "argument \"%(arg)s\" not propname=value"
 msgstr "el argumento \"%(arg)s\" no es de la forma nombrepropiedad=valor"
 
-#: ../roundup/admin.py:131
+#: ../roundup/admin.py:137
 #, python-format
 msgid ""
 "Problem: %(message)s\n"
@@ -50,7 +50,7 @@
 "Problema: %(message)s\n"
 "\n"
 
-#: ../roundup/admin.py:132
+#: ../roundup/admin.py:138
 #, fuzzy, python-format
 msgid ""
 "%(message)sUsage: roundup-admin [options] [<command> <arguments>]\n"
@@ -106,12 +106,12 @@
 " roundup-admin help <comando>             -- ayuda especfica a un comando\n"
 " roundup-admin help all                   -- toda la ayuda disponible\n"
 
-#: ../roundup/admin.py:159
+#: ../roundup/admin.py:165
 #, fuzzy
 msgid "Commands: "
 msgstr "Comandos:"
 
-#: ../roundup/admin.py:166
+#: ../roundup/admin.py:172
 msgid ""
 "Commands may be abbreviated as long as the abbreviation\n"
 "matches only one command, e.g. l == li == lis == list."
@@ -119,7 +119,8 @@
 "Los comandos pueden ser abreviados siempre y cuando la abreviacin\n"
 "coincida con slo un comando, ej. l == li == lis == list."
 
-#: ../roundup/admin.py:195
+#: ../roundup/admin.py:201
+#, fuzzy
 msgid ""
 "\n"
 "All commands (except help) require a tracker specifier. This is just\n"
@@ -171,7 +172,7 @@
 " . ROUNDUP_LOGIN environment variable\n"
 " . the -u command-line option\n"
 "If either the name or password is not supplied, they are obtained from the\n"
-"command-line.\n"
+"command-line. (See admin guide before using -u.)\n"
 "\n"
 "Date format examples:\n"
 "  \"2000-04-17.03:45\" means <Date 2000-04-17.08:45:00>\n"
@@ -264,12 +265,12 @@
 "\n"
 "Ayuda sobre comandos:\n"
 
-#: ../roundup/admin.py:258
+#: ../roundup/admin.py:264
 #, python-format
 msgid "%s:"
 msgstr "%s:"
 
-#: ../roundup/admin.py:265
+#: ../roundup/admin.py:271
 msgid ""
 "Usage: help topic\n"
 "        Give help about topic.\n"
@@ -289,22 +290,22 @@
 "        all       -- toda la ayuda disponible\n"
 "        "
 
-#: ../roundup/admin.py:287
+#: ../roundup/admin.py:293
 #, python-format
 msgid "Sorry, no help for \"%(topic)s\""
 msgstr "Lo siento, no hay ayuda para \"%(topic)s\""
 
 # ../roundup/admin.py:338 :387
-#: ../roundup/admin.py:402 ../roundup/admin.py:458 ../roundup/admin.py:402:458
+#: ../roundup/admin.py:408 ../roundup/admin.py:464 ../roundup/admin.py:408:464
 msgid "Templates:"
 msgstr "Plantillas:"
 
 # ../roundup/admin.py:341 :398
-#: ../roundup/admin.py:405 ../roundup/admin.py:468 ../roundup/admin.py:405:468
+#: ../roundup/admin.py:411 ../roundup/admin.py:474 ../roundup/admin.py:411:474
 msgid "Back ends:"
 msgstr "Motor de almacenamiento"
 
-#: ../roundup/admin.py:408
+#: ../roundup/admin.py:414
 msgid ""
 "Usage: install [template [backend [key=val[,key=val]]]]\n"
 "        Install a new Roundup tracker.\n"
@@ -362,25 +363,25 @@
 
 # ../roundup/admin.py:360 :442 :503 :582 :632 :688 :709 :737 :808 :875 :946
 # :994 :1016 :1043 :1106 :1173
-#: ../roundup/admin.py:431 ../roundup/admin.py:562 ../roundup/admin.py:635
-#: ../roundup/admin.py:728 ../roundup/admin.py:786 ../roundup/admin.py:872
-#: ../roundup/admin.py:931 ../roundup/admin.py:958 ../roundup/admin.py:985
-#: ../roundup/admin.py:1062 ../roundup/admin.py:1157 ../roundup/admin.py:1243
-#: ../roundup/admin.py:1304 ../roundup/admin.py:1331 ../roundup/admin.py:1367
-#: ../roundup/admin.py:1495 ../roundup/admin.py:1579
-#: ../roundup/admin.py:431:562 :1157 :1243:1304 :1331:1367 :1495:1579 :635:728
-#: :786:872 :931:958 :985:1062
+#: ../roundup/admin.py:437 ../roundup/admin.py:568 ../roundup/admin.py:671
+#: ../roundup/admin.py:764 ../roundup/admin.py:822 ../roundup/admin.py:908
+#: ../roundup/admin.py:967 ../roundup/admin.py:994 ../roundup/admin.py:1021
+#: ../roundup/admin.py:1098 ../roundup/admin.py:1193 ../roundup/admin.py:1279
+#: ../roundup/admin.py:1340 ../roundup/admin.py:1367 ../roundup/admin.py:1403
+#: ../roundup/admin.py:1531 ../roundup/admin.py:1615
+#: ../roundup/admin.py:437:568 :1021:1098:1193 :1279:1340 :1367:1403 :1531:1615
+#: :671:764 :822:908 :967:994
 msgid "Not enough arguments supplied"
 msgstr "No se provey una cantidad suficiente de argumentos"
 
-#: ../roundup/admin.py:437
+#: ../roundup/admin.py:443
 #, python-format
 msgid "Instance home parent directory \"%(parent)s\" does not exist"
 msgstr ""
 "El directorio padre \"%(parent)s\" del directorio base de la instancia no "
 "existe"
 
-#: ../roundup/admin.py:446
+#: ../roundup/admin.py:452
 #, python-format
 msgid ""
 "WARNING: There appears to be a tracker in \"%(tracker_home)s\"!\n"
@@ -391,22 +392,22 @@
 "Si Ud. lo reinstala, perder toda la informacin relacionada al mismo!\n"
 "Elimino la misma? Y/N: "
 
-#: ../roundup/admin.py:459
+#: ../roundup/admin.py:465
 #, fuzzy
 msgid "Select template"
 msgstr "Seleccione la plantilla [classic]: "
 
-#: ../roundup/admin.py:469
+#: ../roundup/admin.py:475
 #, fuzzy
 msgid "Select backend"
 msgstr "Selecccione el motor de almacenamiento [anydbm]: "
 
-#: ../roundup/admin.py:480
+#: ../roundup/admin.py:486
 #, python-format
 msgid "Error in configuration settings: \"%s\""
 msgstr "Error en opciones de configuracin: \"%s\""
 
-#: ../roundup/admin.py:511
+#: ../roundup/admin.py:517
 #, python-format
 msgid ""
 "\n"
@@ -419,11 +420,11 @@
 " Ud. debe ahora editar el fichero de configuracin del tracker:\n"
 "   %(config_file)s"
 
-#: ../roundup/admin.py:521
+#: ../roundup/admin.py:527
 msgid " ... at a minimum, you must set following options:"
 msgstr " ... como mnimo, debe configurar las siguientes opciones:"
 
-#: ../roundup/admin.py:526
+#: ../roundup/admin.py:532
 #, python-format
 msgid ""
 "\n"
@@ -451,7 +452,7 @@
 " completado los pasos arriba descriptos.\n"
 "---------------------------------------------------------------------------\n"
 
-#: ../roundup/admin.py:557
+#: ../roundup/admin.py:563
 #, fuzzy
 msgid ""
 "Usage: genconfig <filename>\n"
@@ -465,7 +466,22 @@
 "        con valores por defecto en el fichero <fichero>.\n"
 "        "
 
-#: ../roundup/admin.py:572
+#: ../roundup/admin.py:581
+#, python-format
+msgid ""
+"Changing option\n"
+"   'password_pbkdf2_default_rounds'\n"
+"from old default of %(old_number)s to new default of %(new_number)s."
+msgstr ""
+
+#: ../roundup/admin.py:593
+#, python-format
+msgid ""
+"Update 'password_pbkdf2_default_rounds'to a number equal to or larger\n"
+"than %s."
+msgstr ""
+
+#: ../roundup/admin.py:604
 #, fuzzy
 msgid ""
 "Usage: updateconfig <filename>\n"
@@ -481,7 +497,7 @@
 "        "
 
 #. password
-#: ../roundup/admin.py:580
+#: ../roundup/admin.py:612
 msgid ""
 "Usage: initialise [adminpw]\n"
 "        Initialise a new Roundup tracker.\n"
@@ -500,23 +516,23 @@
 "        Ejecuta la funcin de inicializacin dbinit.init() del tracker\n"
 "        "
 
-#: ../roundup/admin.py:594
+#: ../roundup/admin.py:626
 msgid "Admin Password: "
 msgstr "Contrasea de administracin: "
 
-#: ../roundup/admin.py:595
+#: ../roundup/admin.py:627
 msgid "       Confirm: "
 msgstr "       Confirmar: "
 
-#: ../roundup/admin.py:599
+#: ../roundup/admin.py:631
 msgid "Instance home does not exist"
 msgstr "El directorio base de la instancia no existe"
 
-#: ../roundup/admin.py:603
+#: ../roundup/admin.py:635
 msgid "Instance has not been installed"
 msgstr "La instancia no ha sido instalada"
 
-#: ../roundup/admin.py:609
+#: ../roundup/admin.py:641
 msgid ""
 "WARNING: The database is already initialised!\n"
 "If you re-initialise it, you will lose all the data!\n"
@@ -526,7 +542,7 @@
 "Si la reinicializa, perder toda la informacin!\n"
 "Eliminar la misma? Y/N: "
 
-#: ../roundup/admin.py:625
+#: ../roundup/admin.py:661
 #, fuzzy
 msgid ""
 "Usage: get property designator[,designator]*\n"
@@ -547,7 +563,7 @@
 "        "
 
 # ../roundup/admin.py:536 :551
-#: ../roundup/admin.py:669 ../roundup/admin.py:687 ../roundup/admin.py:669:687
+#: ../roundup/admin.py:705 ../roundup/admin.py:723 ../roundup/admin.py:705:723
 #, python-format
 msgid "property %s is not of type Multilink or Link so -d flag does not apply."
 msgstr ""
@@ -555,18 +571,18 @@
 "no puede usarse."
 
 # ../roundup/admin.py:559 :957 :1006 :1028
-#: ../roundup/admin.py:697 ../roundup/admin.py:1261 ../roundup/admin.py:1316
-#: ../roundup/admin.py:697:1261:1316
+#: ../roundup/admin.py:733 ../roundup/admin.py:1297 ../roundup/admin.py:1352
+#: ../roundup/admin.py:733:1297:1352
 #, python-format
 msgid "no such %(classname)s node \"%(nodeid)s\""
 msgstr "no existe nodo de clase %(classname)s llamado  \"%(nodeid)s\""
 
-#: ../roundup/admin.py:700
+#: ../roundup/admin.py:736
 #, python-format
 msgid "no such %(classname)s property \"%(propname)s\""
 msgstr "no existe propiedad de clase %(classname)s llamado  \"%(propname)s\""
 
-#: ../roundup/admin.py:708
+#: ../roundup/admin.py:744
 #, fuzzy
 msgid ""
 "Usage: set items property=value property=value ...\n"
@@ -601,7 +617,7 @@
 "        asociados como nmeros separados por comas (\"1,2,3\").\n"
 "        "
 
-#: ../roundup/admin.py:776
+#: ../roundup/admin.py:812
 #, fuzzy
 msgid ""
 "Usage: filter classname propname=value ...\n"
@@ -626,20 +642,20 @@
 "        "
 
 # ../roundup/admin.py:675 :828 :840 :894
-#: ../roundup/admin.py:819
+#: ../roundup/admin.py:855
 #, fuzzy, python-format
 msgid "Class %(curclassname)s has no property %(pn)s in %(propname)s."
 msgstr "%(classname)s no posee la propiedad \"%(propname)s\""
 
 # ../roundup/admin.py:675 :828 :840 :894
-#: ../roundup/admin.py:857 ../roundup/admin.py:918 ../roundup/admin.py:1082
-#: ../roundup/admin.py:1094 ../roundup/admin.py:1177
-#: ../roundup/admin.py:857:918 :1082:1094:1177
+#: ../roundup/admin.py:893 ../roundup/admin.py:954 ../roundup/admin.py:1118
+#: ../roundup/admin.py:1130 ../roundup/admin.py:1213
+#: ../roundup/admin.py:893:954 :1118:1130:1213
 #, python-format
 msgid "%(classname)s has no property \"%(propname)s\""
 msgstr "%(classname)s no posee la propiedad \"%(propname)s\""
 
-#: ../roundup/admin.py:864
+#: ../roundup/admin.py:900
 msgid ""
 "Usage: find classname propname=value ...\n"
 "        Find the nodes of the given class with a given link property value.\n"
@@ -660,7 +676,7 @@
 "        enlazado o su valor clave.\n"
 "        "
 
-#: ../roundup/admin.py:925
+#: ../roundup/admin.py:961
 msgid ""
 "Usage: specification classname\n"
 "        Show the properties for a classname.\n"
@@ -674,17 +690,17 @@
 "        Visualiza las propiedades para una cierta clase.\n"
 "        "
 
-#: ../roundup/admin.py:941
+#: ../roundup/admin.py:977
 #, fuzzy, python-format
 msgid "%(key)s: %(value)s (key property)\n"
 msgstr "%(key)s: %(value)s (propiedad de clave)"
 
-#: ../roundup/admin.py:944
+#: ../roundup/admin.py:980
 #, fuzzy, python-format
 msgid "%(key)s: %(value)s\n"
 msgstr "%(key)s: %(value)s"
 
-#: ../roundup/admin.py:947
+#: ../roundup/admin.py:983
 #, fuzzy
 msgid ""
 "Usage: display designator[,designator]*\n"
@@ -705,12 +721,12 @@
 "especificado.\n"
 "        "
 
-#: ../roundup/admin.py:974
+#: ../roundup/admin.py:1010
 #, python-format
 msgid "%(key)s: %(value)s"
 msgstr "%(key)s: %(value)s"
 
-#: ../roundup/admin.py:977
+#: ../roundup/admin.py:1013
 msgid ""
 "Usage: create classname property=value ...\n"
 "        Create a new entry of a given class.\n"
@@ -729,31 +745,31 @@
 "        nombre=valor provistos en la lnea de comandos luego del comando\n"
 "        \"create\" para establecer valores de propiedad(es).        "
 
-#: ../roundup/admin.py:1005
+#: ../roundup/admin.py:1041
 #, python-format
 msgid "%(propname)s (Password): "
 msgstr "%(propname)s (Contrasea): "
 
-#: ../roundup/admin.py:1008
+#: ../roundup/admin.py:1044
 #, python-format
 msgid "   %(propname)s (Again): "
 msgstr "   %(propname)s (Nuevamente): "
 
-#: ../roundup/admin.py:1012
+#: ../roundup/admin.py:1048
 msgid "Sorry, try again..."
 msgstr "Lo lamento, intente nuevamente..."
 
-#: ../roundup/admin.py:1016
+#: ../roundup/admin.py:1052
 #, python-format
 msgid "%(propname)s (%(proptype)s): "
 msgstr "%(propname)s (%(proptype)s): "
 
-#: ../roundup/admin.py:1035
+#: ../roundup/admin.py:1071
 #, python-format
 msgid "you must provide the \"%(propname)s\" property."
 msgstr "debe proveer la propiedad \"%(propname)s\"."
 
-#: ../roundup/admin.py:1047
+#: ../roundup/admin.py:1083
 msgid ""
 "Usage: list classname [property]\n"
 "        List the instances of a class.\n"
@@ -783,16 +799,16 @@
 "clase.\n"
 "        "
 
-#: ../roundup/admin.py:1060
+#: ../roundup/admin.py:1096
 msgid "Too many arguments supplied"
 msgstr "Demasiados argumentos"
 
-#: ../roundup/admin.py:1096
+#: ../roundup/admin.py:1132
 #, python-format
 msgid "%(nodeid)4s: %(value)s"
 msgstr "%(nodeid)4s: %(value)s"
 
-#: ../roundup/admin.py:1100
+#: ../roundup/admin.py:1136
 msgid ""
 "Usage: templates [trace_search]\n"
 "        List templates and their installed directories.\n"
@@ -802,7 +818,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1128
+#: ../roundup/admin.py:1164
 msgid ""
 "Usage: table classname [property[,property]*]\n"
 "        List the instances of a class in tabular form.\n"
@@ -866,17 +882,17 @@
 "        caracteres.\n"
 "        "
 
-#: ../roundup/admin.py:1172
+#: ../roundup/admin.py:1208
 #, python-format
 msgid "\"%(spec)s\" not name:width"
 msgstr "\"%(spec)s\" no es de la forma nombre:longitud"
 
-#: ../roundup/admin.py:1194
+#: ../roundup/admin.py:1230
 #, python-format
 msgid "\"%(spec)s\" does not have an integer width: \"%(width)s\""
 msgstr ""
 
-#: ../roundup/admin.py:1230
+#: ../roundup/admin.py:1266
 msgid ""
 "Usage: history designator [skipquiet]\n"
 "        Show the history entries of a designator.\n"
@@ -891,7 +907,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1266
+#: ../roundup/admin.py:1302
 msgid ""
 "Usage: commit\n"
 "        Commit changes made to the database during an interactive session.\n"
@@ -916,7 +932,7 @@
 "        son automticamente escritos si resultan exitosos.\n"
 "        "
 
-#: ../roundup/admin.py:1281
+#: ../roundup/admin.py:1317
 msgid ""
 "Usage: rollback\n"
 "        Undo all changes that are pending commit to the database.\n"
@@ -938,7 +954,7 @@
 "        no introducira cambios en la base de datos.\n"
 "        "
 
-#: ../roundup/admin.py:1294
+#: ../roundup/admin.py:1330
 #, fuzzy
 msgid ""
 "Usage: retire designator[,designator]*\n"
@@ -959,7 +975,7 @@
 "        reusado.\n"
 "        "
 
-#: ../roundup/admin.py:1322
+#: ../roundup/admin.py:1358
 #, fuzzy
 msgid ""
 "Usage: restore designator[,designator]*\n"
@@ -979,13 +995,13 @@
 "        "
 
 # ../roundup/admin.py:559 :957 :1006 :1028
-#: ../roundup/admin.py:1347
+#: ../roundup/admin.py:1383
 #, fuzzy
 msgid "no such %(classname)s node \" % (nodeid)s\""
 msgstr "no existe nodo de clase %(classname)s llamado  \"%(nodeid)s\""
 
 #. grab the directory to export to
-#: ../roundup/admin.py:1353
+#: ../roundup/admin.py:1389
 msgid ""
 "Usage: export [[-]class[,class]] export_dir\n"
 "        Export the database to colon-separated-value files.\n"
@@ -1013,7 +1029,7 @@
 "        directorio de destino especificado (dir_exportacin).\n"
 "        "
 
-#: ../roundup/admin.py:1460
+#: ../roundup/admin.py:1496
 msgid ""
 "Usage: exporttables [[-]class[,class]] export_dir\n"
 "        Export the database to colon-separated-value files, excluding the\n"
@@ -1042,7 +1058,7 @@
 "        directorio de destino especificado.\n"
 "        "
 
-#: ../roundup/admin.py:1475
+#: ../roundup/admin.py:1511
 msgid ""
 "Usage: import import_dir\n"
 "        Import a database from the directory containing CSV files,\n"
@@ -1087,7 +1103,7 @@
 "        tediosamente, retirar toda los datos viejos.)\n"
 "        "
 
-#: ../roundup/admin.py:1554
+#: ../roundup/admin.py:1590
 msgid ""
 "Usage: importtables export_dir\n"
 "\n"
@@ -1095,7 +1111,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1561
+#: ../roundup/admin.py:1597
 msgid ""
 "Usage: pack period | date\n"
 "\n"
@@ -1134,11 +1150,11 @@
 "\n"
 "        "
 
-#: ../roundup/admin.py:1589
+#: ../roundup/admin.py:1625
 msgid "Invalid format"
 msgstr "Formato invlido"
 
-#: ../roundup/admin.py:1602
+#: ../roundup/admin.py:1638
 msgid ""
 "Usage: reindex [classname|designator]*\n"
 "        Re-generate a tracker's search indexes.\n"
@@ -1154,12 +1170,12 @@
 "        Es un comando que por lo general se ejecuta automticamente.\n"
 "        "
 
-#: ../roundup/admin.py:1616
+#: ../roundup/admin.py:1652
 #, python-format
 msgid "no such item \"%(designator)s\""
 msgstr "no existe un tem llamado \"%(designator)s\""
 
-#: ../roundup/admin.py:1626
+#: ../roundup/admin.py:1662
 #, fuzzy
 msgid ""
 "Usage: security [Role name]\n"
@@ -1171,49 +1187,49 @@
 "        Muestra los permisos disponibles para uno o todos los Roles.\n"
 "        "
 
-#: ../roundup/admin.py:1635
+#: ../roundup/admin.py:1671
 #, fuzzy, python-format
 msgid "No such Role \"%(role)s\"\n"
 msgstr "No existe un Rol llamado \"%(role)s\""
 
-#: ../roundup/admin.py:1641
+#: ../roundup/admin.py:1677
 #, fuzzy, python-format
 msgid "New Web users get the Roles \"%(role)s\"\n"
 msgstr "Los nuevos usuarios creados va Web obtiene los Roles \"%(role)s\""
 
-#: ../roundup/admin.py:1644
+#: ../roundup/admin.py:1680
 #, fuzzy, python-format
 msgid "New Web users get the Role \"%(role)s\"\n"
 msgstr "Los nuevos usuarios creados va Web obtienen el Rol \"%(role)s\""
 
-#: ../roundup/admin.py:1648
+#: ../roundup/admin.py:1684
 #, fuzzy, python-format
 msgid "New Email users get the Roles \"%(role)s\"\n"
 msgstr ""
 "Los nuevos usuarios creados va e-mail obtienen los Roles  \"%(role)s\""
 
-#: ../roundup/admin.py:1650
+#: ../roundup/admin.py:1686
 #, fuzzy, python-format
 msgid "New Email users get the Role \"%(role)s\"\n"
 msgstr "Los nuevos usuarios creados va e-mail obtienen el Rol \"%(role)s\""
 
-#: ../roundup/admin.py:1653
+#: ../roundup/admin.py:1689
 #, fuzzy, python-format
 msgid "Role \"%(name)s\":\n"
 msgstr "Rol \"%(name)s\":"
 
-#: ../roundup/admin.py:1659
+#: ../roundup/admin.py:1695
 #, fuzzy
 msgid " %(description)s (%(name)s for \"%(klass)s\""
 msgstr " %(description)s (%(name)s para \"%(klass)s\" solamente)"
 
-#: ../roundup/admin.py:1659
+#: ../roundup/admin.py:1695
 #, fuzzy, python-format
 msgid " %(description)s (%(name)s for \"%(klass)s\": %(properties)s only)\n"
 msgstr ""
 " %(description)s (%(name)s para \"%(klass)s\": %(properties)s solamente)"
 
-#: ../roundup/admin.py:1672
+#: ../roundup/admin.py:1708
 #, python-format
 msgid ""
 "\n"
@@ -1221,17 +1237,17 @@
 "\n"
 msgstr ""
 
-#: ../roundup/admin.py:1678
+#: ../roundup/admin.py:1714
 #, fuzzy, python-format
 msgid " %(description)s (%(name)s for \"%(klass)s\" only)\n"
 msgstr " %(description)s (%(name)s para \"%(klass)s\" solamente)"
 
-#: ../roundup/admin.py:1681
+#: ../roundup/admin.py:1717
 #, fuzzy, python-format
 msgid " %(description)s (%(name)s)\n"
 msgstr " %(description)s (%(name)s)"
 
-#: ../roundup/admin.py:1685
+#: ../roundup/admin.py:1721
 msgid ""
 "Usage: migrate\n"
 "\n"
@@ -1255,45 +1271,45 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1706
+#: ../roundup/admin.py:1742
 #, fuzzy
 msgid "Tracker updated"
 msgstr "Directorio base del tracker"
 
-#: ../roundup/admin.py:1709
+#: ../roundup/admin.py:1745
 msgid "No migration action required"
 msgstr ""
 
-#: ../roundup/admin.py:1735
+#: ../roundup/admin.py:1771
 #, python-format
 msgid "Unknown command \"%(command)s\" (\"help commands\" for a list)"
 msgstr ""
 "Comando desconocido \"%(command)s\" (tipee \"help commands\" para obtener "
 "una lista)"
 
-#: ../roundup/admin.py:1741
+#: ../roundup/admin.py:1777
 #, python-format
 msgid "Multiple commands match \"%(command)s\": %(list)s"
 msgstr "Coinciden mas de un comando \"%(command)s\": %(list)s"
 
-#: ../roundup/admin.py:1750
+#: ../roundup/admin.py:1786
 msgid "Enter tracker home: "
 msgstr "Ingrese directorio base del tracker: "
 
 # ../roundup/admin.py:1296 :1302 :1322
-#: ../roundup/admin.py:1759 ../roundup/admin.py:1765 ../roundup/admin.py:1802
-#: ../roundup/admin.py:1759:1765:1802
+#: ../roundup/admin.py:1795 ../roundup/admin.py:1801 ../roundup/admin.py:1838
+#: ../roundup/admin.py:1795:1801:1838
 #, python-format
 msgid "Error: %(message)s"
 msgstr "Error: %(message)s"
 
-#: ../roundup/admin.py:1775 ../roundup/admin.py:1779
-#: ../roundup/admin.py:1775:1779
+#: ../roundup/admin.py:1811 ../roundup/admin.py:1815
+#: ../roundup/admin.py:1811:1815
 #, python-format
 msgid "Error: Couldn't open tracker: %(message)s"
 msgstr "Error: No se pudo abrir el tracker: %(message)s"
 
-#: ../roundup/admin.py:1815
+#: ../roundup/admin.py:1851
 #, python-format
 msgid ""
 "Roundup %s ready for input.\n"
@@ -1302,19 +1318,15 @@
 "Roundup %s listo para comandos.\n"
 "Tipee \"help\" para ayuda."
 
-#: ../roundup/admin.py:1820
+#: ../roundup/admin.py:1856
 msgid "Note: command history and editing not available"
 msgstr "Nota: historia y edicin de comandos no disponible"
 
-#: ../roundup/admin.py:1824
-msgid "roundup> "
-msgstr "roundup> "
-
-#: ../roundup/admin.py:1826
+#: ../roundup/admin.py:1862
 msgid "exit..."
 msgstr "salir..."
 
-#: ../roundup/admin.py:1839
+#: ../roundup/admin.py:1875
 msgid "There are unsaved changes. Commit them (y/N)? "
 msgstr "Hay cambios sin guardar. Debo guardar los mismos (y/N)? "
 
@@ -1422,20 +1434,22 @@
 msgid "restored"
 msgstr "restaura"
 
-#: ../roundup/backends/sessions_redis.py:76
-#: ../roundup/backends/sessions_redis.py:95
-#: ../roundup/backends/sessions_redis.py:76:95
+#: ../roundup/backends/sessions_redis.py:78
+#: ../roundup/backends/sessions_redis.py:97
+#: ../roundup/backends/sessions_redis.py:78:97
 #, python-format
 msgid "Key %(key)s not found in %(name)s database."
 msgstr ""
 
-#: ../roundup/backends/sessions_redis.py:191
+#: ../roundup/backends/sessions_redis.py:193
 #, python-format
 msgid "Key %(key)s changed in %(name)s db"
 msgstr ""
 
-#: ../roundup/backends/sessions_redis.py:195
-msgid "Redis set failed afer 3 retries"
+#: ../roundup/backends/sessions_redis.py:203
+#, python-format
+msgid ""
+"Redis set failed after %(retries)d retries for user %(user)s with key %(key)s"
 msgstr ""
 
 #: ../roundup/cgi/actions.py:97
@@ -1752,22 +1766,22 @@
 msgstr ""
 
 # ../roundup/cgi/actions.py:891 :895
-#: ../roundup/cgi/actions.py:1383 ../roundup/cgi/actions.py:1387
-#: ../roundup/cgi/actions.py:1383:1387
+#: ../roundup/cgi/actions.py:1384 ../roundup/cgi/actions.py:1388
+#: ../roundup/cgi/actions.py:1384:1388
 msgid "Invalid login"
 msgstr "nombre de usuario  contrasea invlidos"
 
-#: ../roundup/cgi/actions.py:1393
+#: ../roundup/cgi/actions.py:1394
 msgid "You do not have permission to login"
 msgstr "Ud. no tiene permiso para ingresar al sistema"
 
-#: ../roundup/cgi/actions.py:1437 ../roundup/cgi/actions.py:1616
-#: ../roundup/cgi/actions.py:1437:1616
+#: ../roundup/cgi/actions.py:1439 ../roundup/cgi/actions.py:1618
+#: ../roundup/cgi/actions.py:1439:1618
 #, python-format
 msgid "Column \"%(column)s\" not found in %(class)s"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1687
+#: ../roundup/cgi/actions.py:1689
 #, fuzzy, python-format
 msgid "You do not have permission to view %(class)s"
 msgstr "Ud. no posee los permisos necesarios para editar %(class)s"
@@ -1872,149 +1886,150 @@
 "p>\n"
 "</body></html>"
 
-#: ../roundup/cgi/client.py:651
+#: ../roundup/cgi/client.py:670 ../roundup/cgi/client.py:1570
+#: ../roundup/cgi/client.py:670:1570
+msgid "Required Header Missing"
+msgstr ""
+
+#: ../roundup/cgi/client.py:672
 #, fuzzy
 msgid "Client is not allowed to use Rest Interface."
 msgstr "Los usuarios anonimos no tienen permitido usar esta interfaz Web"
 
-#: ../roundup/cgi/client.py:895
+#: ../roundup/cgi/client.py:921
 msgid "Form Error: "
 msgstr "Error de formulario"
 
-#: ../roundup/cgi/client.py:985
+#: ../roundup/cgi/client.py:1011
 #, python-format
 msgid "Unrecognized charset: %r"
 msgstr "Conjunto de caracteres desconocido: %r"
 
-#: ../roundup/cgi/client.py:1238 ../roundup/cgi/client.py:2196
-#: ../roundup/cgi/client.py:1238:2196
+#: ../roundup/cgi/client.py:1264 ../roundup/cgi/client.py:2250
+#: ../roundup/cgi/client.py:1264:2250
 msgid "broken form: multiple @action values submitted"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1253
+#: ../roundup/cgi/client.py:1279
 msgid "Anonymous users are not allowed to use the web interface"
 msgstr "Los usuarios anonimos no tienen permitido usar esta interfaz Web"
 
-#: ../roundup/cgi/client.py:1376
+#: ../roundup/cgi/client.py:1430
 msgid "Referer header not available."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1380
+#: ../roundup/cgi/client.py:1434
 #, python-format
 msgid "csrf key used with wrong method from: %s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1409
+#: ../roundup/cgi/client.py:1463
 #, python-format
 msgid "csrf header %(header)s required but missing for user%(userid)s."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1413
+#: ../roundup/cgi/client.py:1467
 #, python-format
 msgid "Missing header: %s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1421
+#: ../roundup/cgi/client.py:1475
 #, python-format
 msgid "csrf Referer header check failed for user%(userid)s. Value=%(referer)s"
 msgstr ""
 
 # ../roundup/cgi/actions.py:891 :895
-#: ../roundup/cgi/client.py:1426
+#: ../roundup/cgi/client.py:1480
 #, fuzzy, python-format
 msgid "Invalid Referer: %s"
 msgstr "nombre de usuario  contrasea invlidos"
 
-#: ../roundup/cgi/client.py:1441
+#: ../roundup/cgi/client.py:1495
 #, python-format
 msgid "csrf Origin header check failed for user%(userid)s. Value=%(origin)s"
 msgstr ""
 
 # ../roundup/cgi/actions.py:891 :895
-#: ../roundup/cgi/client.py:1446
+#: ../roundup/cgi/client.py:1500
 #, fuzzy, python-format
 msgid "Invalid Origin %s"
 msgstr "nombre de usuario  contrasea invlidos"
 
-#: ../roundup/cgi/client.py:1460
+#: ../roundup/cgi/client.py:1514
 #, python-format
 msgid ""
 "csrf X-FORWARDED-HOST header check failed for user%(userid)s. Value=%(host)s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1466
+#: ../roundup/cgi/client.py:1520
 #, python-format
 msgid "Invalid X-FORWARDED-HOST %s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1485
+#: ../roundup/cgi/client.py:1539
 #, python-format
 msgid "csrf HOST header check failed for user%(userid)s. Value=%(host)s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1490
+#: ../roundup/cgi/client.py:1544
 #, python-format
 msgid "Invalid HOST %s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1498
+#: ../roundup/cgi/client.py:1552
 msgid "Csrf: unable to verify sufficient headers"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1499
+#: ../roundup/cgi/client.py:1553
 msgid "Unable to verify sufficient headers"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1513
+#: ../roundup/cgi/client.py:1567
 #, python-format
 msgid "csrf X-REQUESTED-WITH xmlrpc required header check failed for user%s."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1516
-msgid "Required Header Missing"
-msgstr ""
-
-#: ../roundup/cgi/client.py:1554
+#: ../roundup/cgi/client.py:1608
 #, python-format
 msgid "Required csrf field missing for user%s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1556 ../roundup/cgi/client.py:1583
-#: ../roundup/cgi/client.py:1600 ../roundup/cgi/client.py:1556:1583:1600
+#: ../roundup/cgi/client.py:1610 ../roundup/cgi/client.py:1637
+#: ../roundup/cgi/client.py:1654 ../roundup/cgi/client.py:1610:1637:1654
 msgid ""
 "We can't validate your session (csrf failure). Re-enter any unsaved data and "
 "try again."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1560
+#: ../roundup/cgi/client.py:1614
 #, python-format
 msgid "csrf field not supplied by user%s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1572
+#: ../roundup/cgi/client.py:1626
 #, python-format
 msgid ""
 "Csrf mismatch user: current user %(user)s != stored user %(stored)s, current "
 "session, stored session: %(cur_sess)s,%(stor_sess)s for key %(key)s."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1590
+#: ../roundup/cgi/client.py:1644
 #, python-format
 msgid ""
 "Csrf mismatch user: current session %(curr_sess)s != stored session "
 "%(stor_sess)s, current user/stored user is: %(user)s for key %(key)s."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1784
+#: ../roundup/cgi/client.py:1838
 msgid "You are not allowed to view this file."
 msgstr "Ud. no tiene permitido ver este fichero"
 
-#: ../roundup/cgi/client.py:2073
+#: ../roundup/cgi/client.py:2127
 #, python-format
 msgid "%(starttag)sTime elapsed: %(seconds)fs%(endtag)s\n"
 msgstr "%(starttag)sTiempo transcurrido: %(seconds)fs%(endtag)s\n"
 
-#: ../roundup/cgi/client.py:2077
+#: ../roundup/cgi/client.py:2131
 #, python-format
 msgid ""
 "%(starttag)sCache hits: %(cache_hits)d, misses %(cache_misses)d. Loading "
@@ -2023,7 +2038,7 @@
 "%(starttag)sAciertos Cache: %(cache_hits)d, no aciertos %(cache_misses)d. "
 "Cargando items: %(get_items)f secs. Filtrado: %(filtering)f secs.%(endtag)s\n"
 
-#: ../roundup/cgi/client.py:2615
+#: ../roundup/cgi/client.py:2669
 #, python-format
 msgid ""
 "Cache failure: compressed file %(compressed)s is older than its source file "
@@ -2430,30 +2445,30 @@
 msgid "\"%s\" not a node designator"
 msgstr ""
 
-#: ../roundup/hyperdb.py:1492 ../roundup/hyperdb.py:1500
-#: ../roundup/hyperdb.py:1492:1500
+#: ../roundup/hyperdb.py:1493 ../roundup/hyperdb.py:1501
+#: ../roundup/hyperdb.py:1493:1501
 #, python-format
 msgid "Not a property name: %s"
 msgstr ""
 
-#: ../roundup/hyperdb.py:1977
+#: ../roundup/hyperdb.py:1978
 #, fuzzy, python-format
 msgid "property %(property)s: %(value)r is not a %(classname)s."
 msgstr ""
 "propiedad \"%(propname)s\": \"%(value)s\" no se encuentra en este momento en "
 "la lista"
 
-#: ../roundup/hyperdb.py:1983
+#: ../roundup/hyperdb.py:1984
 #, python-format
 msgid "you may only enter ID values for property %s"
 msgstr ""
 
-#: ../roundup/hyperdb.py:2018
+#: ../roundup/hyperdb.py:2019
 #, python-format
 msgid "%(property)r is not a property of %(classname)s"
 msgstr ""
 
-#: ../roundup/init.py:139
+#: ../roundup/init.py:141
 #, python-format
 msgid ""
 "WARNING: directory '%s'\n"
@@ -2752,7 +2767,7 @@
 "incorrectas:\n"
 "  %(errors)s\n"
 
-#: ../roundup/mailgw.py:1820
+#: ../roundup/mailgw.py:1821
 #, fuzzy, python-format
 msgid ""
 "\n"
@@ -2781,19 +2796,19 @@
 msgid "Invalid attribute %s"
 msgstr "nombre de usuario  contrasea invlidos"
 
-#: ../roundup/rest.py:2078
+#: ../roundup/rest.py:2090
 #, python-format
 msgid "Api rate limits exceeded. Please wait: %s seconds."
 msgstr ""
 
-#: ../roundup/rest.py:2113
+#: ../roundup/rest.py:2125
 #, python-format
 msgid ""
 "Unable to parse Accept Header. %(error)s. Acceptable types: "
 "%(acceptable_types)s"
 msgstr ""
 
-#: ../roundup/rest.py:2262
+#: ../roundup/rest.py:2305
 #, python-format
 msgid ""
 "Unrecognized api version: %s. See /rest without specifying api version for "
@@ -2922,27 +2937,27 @@
 msgid "No tracker templates found in directory %s"
 msgstr "No se encontraron templates de trackers en el directorio %s"
 
-#: ../roundup/scripts/roundup_mailgw.py:185
+#: ../roundup/scripts/roundup_mailgw.py:182
 msgid ""
 "\n"
 "Error: The instance home must be specified"
 msgstr ""
 
-#: ../roundup/scripts/roundup_mailgw.py:203
+#: ../roundup/scripts/roundup_mailgw.py:200
 #, fuzzy
 msgid ""
 "\n"
 "Error: not enough source specification information"
 msgstr "Error: no hay informacin de especificacin de origen suficiente"
 
-#: ../roundup/scripts/roundup_mailgw.py:234
+#: ../roundup/scripts/roundup_mailgw.py:231
 #, fuzzy, python-format
 msgid ""
 "\n"
 "Error: %s specification not valid"
 msgstr "Error: especification pop no vlida"
 
-#: ../roundup/scripts/roundup_mailgw.py:258
+#: ../roundup/scripts/roundup_mailgw.py:254
 #, fuzzy
 msgid ""
 "\n"
@@ -2956,7 +2971,7 @@
 msgid "WARNING: generating temporary SSL certificate"
 msgstr "ATENCION: generando certificado SLL temporario"
 
-#: ../roundup/scripts/roundup_server.py:329
+#: ../roundup/scripts/roundup_server.py:331
 msgid ""
 "<html><head><title>Roundup trackers index</title></head>\n"
 "<body><h1>Roundup trackers index</h1><ol>\n"
@@ -2964,59 +2979,59 @@
 "<html><head><title>ndice de trackers Roundup</title></head>\n"
 "<body><h1>ndice de trackers Roundup</h1><ol>\n"
 
-#: ../roundup/scripts/roundup_server.py:549
+#: ../roundup/scripts/roundup_server.py:551
 #, fuzzy, python-format
 msgid "Error: %(type)s: %(value)s"
 msgstr "%(key)s: %(value)s"
 
-#: ../roundup/scripts/roundup_server.py:561
+#: ../roundup/scripts/roundup_server.py:563
 msgid "WARNING: ignoring \"-g\" argument, not root"
 msgstr "ATENCIN: ignorando argumento \"-g\" , Ud. no es root"
 
-#: ../roundup/scripts/roundup_server.py:567
+#: ../roundup/scripts/roundup_server.py:569
 msgid "Can't change groups - no grp module"
 msgstr "No puede cambiar grupos - el mdulo grp no est presente"
 
-#: ../roundup/scripts/roundup_server.py:576
+#: ../roundup/scripts/roundup_server.py:578
 #, python-format
 msgid "Group %(group)s doesn't exist"
 msgstr "El grupo %(group)s no existe"
 
-#: ../roundup/scripts/roundup_server.py:588
+#: ../roundup/scripts/roundup_server.py:590
 msgid "Can't run as root!"
 msgstr "No puede ejecutarse como root!"
 
-#: ../roundup/scripts/roundup_server.py:591
+#: ../roundup/scripts/roundup_server.py:593
 msgid "WARNING: ignoring \"-u\" argument, not root"
 msgstr "ATENCIN: ignorando argumento \"-u\", Ud. no es root"
 
-#: ../roundup/scripts/roundup_server.py:597
+#: ../roundup/scripts/roundup_server.py:599
 msgid "Can't change users - no pwd module"
 msgstr "No puedo cambiar usuarios - no existe el mdulo pwd"
 
-#: ../roundup/scripts/roundup_server.py:606
+#: ../roundup/scripts/roundup_server.py:608
 #, python-format
 msgid "User %(user)s doesn't exist"
 msgstr "El usuario %(user)s no existe"
 
-#: ../roundup/scripts/roundup_server.py:803
+#: ../roundup/scripts/roundup_server.py:805
 #, python-format
 msgid "Multiprocess mode \"%s\" is not available, switching to single-process"
 msgstr ""
 "El modo multiproceso \"%s\" no est disponible, conmutado a proceso simple"
 
-#: ../roundup/scripts/roundup_server.py:830
+#: ../roundup/scripts/roundup_server.py:832
 #, python-format
 msgid "Unable to bind to port %s, port already in use."
 msgstr "Imposible asociarse al puerto %s, el mismo ya est en uso."
 
-#: ../roundup/scripts/roundup_server.py:834
+#: ../roundup/scripts/roundup_server.py:836
 #, fuzzy, python-format
 msgid ""
 "Unable to bind to port %(port)s, access not allowed, errno: %(errno)s %(msg)s"
 msgstr "Imposible asociarse al puerto %s, el mismo ya est en uso."
 
-#: ../roundup/scripts/roundup_server.py:913
+#: ../roundup/scripts/roundup_server.py:915
 msgid ""
 " -c <Command>  Windows Service options.\n"
 "               If you want to run the server as a Windows Service, you\n"
@@ -3038,7 +3053,7 @@
 "para\n"
 "               Servicios Web."
 
-#: ../roundup/scripts/roundup_server.py:920
+#: ../roundup/scripts/roundup_server.py:922
 msgid ""
 " -u <UID>      runs the Roundup web server as this UID\n"
 " -g <GID>      runs the Roundup web server as this GID\n"
@@ -3053,7 +3068,7 @@
 "               PID del servidor en el fichero especificado por PIDfile.\n"
 "               La opcin -l *debe* ser especificada si se usa la opcin -d."
 
-#: ../roundup/scripts/roundup_server.py:927
+#: ../roundup/scripts/roundup_server.py:929
 #, fuzzy, python-format
 msgid ""
 "\n"
@@ -3186,22 +3201,22 @@
 "   caracteres tales como espacios, dado que los mismos confunden a Internet "
 "Explorer.\n"
 
-#: ../roundup/scripts/roundup_server.py:1103
+#: ../roundup/scripts/roundup_server.py:1105
 msgid "Instances must be name=home"
 msgstr "Las Instancias debe ser de la forma nombre=directorio base"
 
-#: ../roundup/scripts/roundup_server.py:1117
+#: ../roundup/scripts/roundup_server.py:1119
 #, python-format
 msgid "Configuration saved to %s"
 msgstr "Configuracin guardada en %s"
 
-#: ../roundup/scripts/roundup_server.py:1135
+#: ../roundup/scripts/roundup_server.py:1137
 msgid "Sorry, you can't run the server as a daemon on this Operating System"
 msgstr ""
 "Lo siento, no puede ejecutar el servidor como un demonio en este Sistema "
 "Operativo"
 
-#: ../roundup/scripts/roundup_server.py:1155
+#: ../roundup/scripts/roundup_server.py:1157
 #, python-format
 msgid "Roundup server started on %(HOST)s:%(PORT)s"
 msgstr "servidor Roundup iniciado en %(HOST)s:%(PORT)s"
@@ -5692,6 +5707,9 @@
 msgid "Password"
 msgstr "Contrasea para Login"
 
+#~ msgid "roundup> "
+#~ msgstr "roundup> "
+
 #, fuzzy
 #~ msgid ""
 #~ "Usage: %(program)s [-v] [-c class] [[-C class] -S field=value]* [instance "
--- a/locale/fr.po	Wed Mar 01 10:43:54 2023 -0500
+++ b/locale/fr.po	Wed Mar 01 10:51:37 2023 -0500
@@ -10,7 +10,7 @@
 msgstr ""
 "Project-Id-Version: Roundup 2.3.0\n"
 "Report-Msgid-Bugs-To: roundup-devel@lists.sourceforge.net\n"
-"POT-Creation-Date: 2022-11-23 22:28-0500\n"
+"POT-Creation-Date: 2023-03-01 10:35-0500\n"
 "PO-Revision-Date: 2013-10-31 12:19+0100\n"
 "Last-Translator: Stephane Raimbault <stephane.raimbault@gmail.com>\n"
 "Language-Team: GNOME French Team <gnomefr@traduc.org>\n"
@@ -27,26 +27,26 @@
 msgstr ""
 "Vous n'avez pas les permissions pour %(action)s la classe %(classname)s."
 
-#: ../roundup/actions.py:64 ../roundup/cgi/actions.py:240
+#: ../roundup/actions.py:65 ../roundup/cgi/actions.py:240
 msgid "You may not retire the admin or anonymous user"
 msgstr "Vous ne pouvez pas abandonner les utilisateurs admin ou anonyme"
 
 # ../roundup/admin.py:85 :979 :1028 :1050
 # ../roundup/admin.py:1052 ../roundup/admin.py:85:981 :1030:1052
-#: ../roundup/admin.py:106 ../roundup/admin.py:1259 ../roundup/admin.py:1314
-#: ../roundup/admin.py:1341 ../roundup/admin.py:106:1259 :1314:1341
+#: ../roundup/admin.py:112 ../roundup/admin.py:1295 ../roundup/admin.py:1350
+#: ../roundup/admin.py:1377 ../roundup/admin.py:112:1295 :1350:1377
 #, python-format
 msgid "no such class \"%(classname)s\""
 msgstr "aucune classe nomme %(classname)s"
 
 # ../roundup/admin.py:95 :99
 # ../roundup/admin.py:95 ../roundup/admin.py:99 ../roundup/admin.py:95:99
-#: ../roundup/admin.py:118
+#: ../roundup/admin.py:124
 #, python-format
 msgid "argument \"%(arg)s\" not propname=value"
 msgstr "l'argument %(arg)s n'est pas au format nom-de-proprit=valeur"
 
-#: ../roundup/admin.py:131
+#: ../roundup/admin.py:137
 #, python-format
 msgid ""
 "Problem: %(message)s\n"
@@ -55,7 +55,7 @@
 "Problme: %(message)s\n"
 "\n"
 
-#: ../roundup/admin.py:132
+#: ../roundup/admin.py:138
 #, fuzzy, python-format
 msgid ""
 "%(message)sUsage: roundup-admin [options] [<command> <arguments>]\n"
@@ -111,12 +111,12 @@
 " roundup-admin help <commande>            -- l'aide sur une commande\n"
 " roundup-admin help all                   -- toute l'aide disponible\n"
 
-#: ../roundup/admin.py:159
+#: ../roundup/admin.py:165
 #, fuzzy
 msgid "Commands: "
 msgstr "Commandes:"
 
-#: ../roundup/admin.py:166
+#: ../roundup/admin.py:172
 msgid ""
 "Commands may be abbreviated as long as the abbreviation\n"
 "matches only one command, e.g. l == li == lis == list."
@@ -125,7 +125,8 @@
 "o l'abrviation ne correspond qu' une seule commande,\n"
 "par ex.: l == li == lis == list."
 
-#: ../roundup/admin.py:195
+#: ../roundup/admin.py:201
+#, fuzzy
 msgid ""
 "\n"
 "All commands (except help) require a tracker specifier. This is just\n"
@@ -177,7 +178,7 @@
 " . ROUNDUP_LOGIN environment variable\n"
 " . the -u command-line option\n"
 "If either the name or password is not supplied, they are obtained from the\n"
-"command-line.\n"
+"command-line. (See admin guide before using -u.)\n"
 "\n"
 "Date format examples:\n"
 "  \"2000-04-17.03:45\" means <Date 2000-04-17.08:45:00>\n"
@@ -263,12 +264,12 @@
 "\n"
 "Aide sur les commandes:\n"
 
-#: ../roundup/admin.py:258
+#: ../roundup/admin.py:264
 #, python-format
 msgid "%s:"
 msgstr "%s:"
 
-#: ../roundup/admin.py:265
+#: ../roundup/admin.py:271
 msgid ""
 "Usage: help topic\n"
 "        Give help about topic.\n"
@@ -288,24 +289,24 @@
 "        all        -- toute l'aide disponible\n"
 "        "
 
-#: ../roundup/admin.py:287
+#: ../roundup/admin.py:293
 #, python-format
 msgid "Sorry, no help for \"%(topic)s\""
 msgstr "Dsol, aucune aide n'est disponible au sujet de %(topic)s"
 
 # ../roundup/admin.py:338 :394
 # ../roundup/admin.py:340 ../roundup/admin.py:396 ../roundup/admin.py:340:396
-#: ../roundup/admin.py:402 ../roundup/admin.py:458 ../roundup/admin.py:402:458
+#: ../roundup/admin.py:408 ../roundup/admin.py:464 ../roundup/admin.py:408:464
 msgid "Templates:"
 msgstr "Modles:"
 
 # ../roundup/admin.py:341 :405
 # ../roundup/admin.py:343 ../roundup/admin.py:407 ../roundup/admin.py:343:407
-#: ../roundup/admin.py:405 ../roundup/admin.py:468 ../roundup/admin.py:405:468
+#: ../roundup/admin.py:411 ../roundup/admin.py:474 ../roundup/admin.py:411:474
 msgid "Back ends:"
 msgstr "Moteurs de stockage:"
 
-#: ../roundup/admin.py:408
+#: ../roundup/admin.py:414
 #, fuzzy
 msgid ""
 "Usage: install [template [backend [key=val[,key=val]]]]\n"
@@ -364,23 +365,23 @@
 # :1018 :1040 :1067 :1134 :1204
 # ../roundup/admin.py:1207 ../roundup/admin.py:369:466 :1020:1042 :1069:1136
 # :1207 :527:606 :656:714 :735:763 :834:901:972
-#: ../roundup/admin.py:431 ../roundup/admin.py:562 ../roundup/admin.py:635
-#: ../roundup/admin.py:728 ../roundup/admin.py:786 ../roundup/admin.py:872
-#: ../roundup/admin.py:931 ../roundup/admin.py:958 ../roundup/admin.py:985
-#: ../roundup/admin.py:1062 ../roundup/admin.py:1157 ../roundup/admin.py:1243
-#: ../roundup/admin.py:1304 ../roundup/admin.py:1331 ../roundup/admin.py:1367
-#: ../roundup/admin.py:1495 ../roundup/admin.py:1579
-#: ../roundup/admin.py:431:562 :1157 :1243:1304 :1331:1367 :1495:1579 :635:728
-#: :786:872 :931:958 :985:1062
+#: ../roundup/admin.py:437 ../roundup/admin.py:568 ../roundup/admin.py:671
+#: ../roundup/admin.py:764 ../roundup/admin.py:822 ../roundup/admin.py:908
+#: ../roundup/admin.py:967 ../roundup/admin.py:994 ../roundup/admin.py:1021
+#: ../roundup/admin.py:1098 ../roundup/admin.py:1193 ../roundup/admin.py:1279
+#: ../roundup/admin.py:1340 ../roundup/admin.py:1367 ../roundup/admin.py:1403
+#: ../roundup/admin.py:1531 ../roundup/admin.py:1615
+#: ../roundup/admin.py:437:568 :1021:1098:1193 :1279:1340 :1367:1403 :1531:1615
+#: :671:764 :822:908 :967:994
 msgid "Not enough arguments supplied"
 msgstr "Pas suffisamment d'arguments fournis"
 
-#: ../roundup/admin.py:437
+#: ../roundup/admin.py:443
 #, python-format
 msgid "Instance home parent directory \"%(parent)s\" does not exist"
 msgstr "Le rpertoire parent %(parent)s de l'instance de base n'existe pas"
 
-#: ../roundup/admin.py:446
+#: ../roundup/admin.py:452
 #, python-format
 msgid ""
 "WARNING: There appears to be a tracker in \"%(tracker_home)s\"!\n"
@@ -392,22 +393,22 @@
 "Si vous le rinstallez, vous perdrez toutes les donnes!\n"
 "Supprimer le pisteur (Y/N)? "
 
-#: ../roundup/admin.py:459
+#: ../roundup/admin.py:465
 #, fuzzy
 msgid "Select template"
 msgstr "Slection du modle [classic]: "
 
-#: ../roundup/admin.py:469
+#: ../roundup/admin.py:475
 #, fuzzy
 msgid "Select backend"
 msgstr "Slection du moteur de stockage [anydbm]: "
 
-#: ../roundup/admin.py:480
+#: ../roundup/admin.py:486
 #, python-format
 msgid "Error in configuration settings: \"%s\""
 msgstr "Erreur dans les paramtres de la configuration: %s"
 
-#: ../roundup/admin.py:511
+#: ../roundup/admin.py:517
 #, python-format
 msgid ""
 "\n"
@@ -420,11 +421,11 @@
 " Vous devez maintenant modifier le fichier de configuration du pisteur:\n"
 "    %(config_file)s"
 
-#: ../roundup/admin.py:521
+#: ../roundup/admin.py:527
 msgid " ... at a minimum, you must set following options:"
 msgstr " ou au minimum, vous devez dfinir les options suivantes:"
 
-#: ../roundup/admin.py:526
+#: ../roundup/admin.py:532
 #, python-format
 msgid ""
 "\n"
@@ -456,7 +457,7 @@
 " que vous avez ralis les tapes prcdentes.\n"
 "---------------------------------------------------------------------------\n"
 
-#: ../roundup/admin.py:557
+#: ../roundup/admin.py:563
 #, fuzzy
 msgid ""
 "Usage: genconfig <filename>\n"
@@ -469,7 +470,22 @@
 "              (au format ini) avec des valeurs par dfaut dans\n"
 "              <nomfichier>"
 
-#: ../roundup/admin.py:572
+#: ../roundup/admin.py:581
+#, python-format
+msgid ""
+"Changing option\n"
+"   'password_pbkdf2_default_rounds'\n"
+"from old default of %(old_number)s to new default of %(new_number)s."
+msgstr ""
+
+#: ../roundup/admin.py:593
+#, python-format
+msgid ""
+"Update 'password_pbkdf2_default_rounds'to a number equal to or larger\n"
+"than %s."
+msgstr ""
+
+#: ../roundup/admin.py:604
 #, fuzzy
 msgid ""
 "Usage: updateconfig <filename>\n"
@@ -484,7 +500,7 @@
 "              <nomfichier>"
 
 #. password
-#: ../roundup/admin.py:580
+#: ../roundup/admin.py:612
 msgid ""
 "Usage: initialise [adminpw]\n"
 "        Initialise a new Roundup tracker.\n"
@@ -503,23 +519,23 @@
 "        Excute la fonction d'initialisation dbinit.init() du pisteur.\n"
 "        "
 
-#: ../roundup/admin.py:594
+#: ../roundup/admin.py:626
 msgid "Admin Password: "
 msgstr "Mot de passe administrateur: "
 
-#: ../roundup/admin.py:595
+#: ../roundup/admin.py:627
 msgid "       Confirm: "
 msgstr "       Confirmez: "
 
-#: ../roundup/admin.py:599
+#: ../roundup/admin.py:631
 msgid "Instance home does not exist"
 msgstr "Le rpertoire racine de l'instance n'existe pas"
 
-#: ../roundup/admin.py:603
+#: ../roundup/admin.py:635
 msgid "Instance has not been installed"
 msgstr "L'instance n'a pas t installe"
 
-#: ../roundup/admin.py:609
+#: ../roundup/admin.py:641
 msgid ""
 "WARNING: The database is already initialised!\n"
 "If you re-initialise it, you will lose all the data!\n"
@@ -529,7 +545,7 @@
 "Si vous la rinitialisez, vous perdrez toutes les donnes!\n"
 "Supprimez la base de donnes (Y/N)? "
 
-#: ../roundup/admin.py:625
+#: ../roundup/admin.py:661
 #, fuzzy
 msgid ""
 "Usage: get property designator[,designator]*\n"
@@ -551,7 +567,7 @@
 
 # ../roundup/admin.py:558 :573
 # ../roundup/admin.py:560 ../roundup/admin.py:575 ../roundup/admin.py:560:575
-#: ../roundup/admin.py:669 ../roundup/admin.py:687 ../roundup/admin.py:669:687
+#: ../roundup/admin.py:705 ../roundup/admin.py:723 ../roundup/admin.py:705:723
 #, python-format
 msgid "property %s is not of type Multilink or Link so -d flag does not apply."
 msgstr ""
@@ -560,19 +576,19 @@
 
 # ../roundup/admin.py:581 :981 :1030 :1052
 # ../roundup/admin.py:1054 ../roundup/admin.py:583:983 :1032:1054
-#: ../roundup/admin.py:697 ../roundup/admin.py:1261 ../roundup/admin.py:1316
-#: ../roundup/admin.py:697:1261:1316
+#: ../roundup/admin.py:733 ../roundup/admin.py:1297 ../roundup/admin.py:1352
+#: ../roundup/admin.py:733:1297:1352
 #, python-format
 msgid "no such %(classname)s node \"%(nodeid)s\""
 msgstr "le noeud %(nodeid)s de classe %(classname)s n'existe pas"
 
-#: ../roundup/admin.py:700
+#: ../roundup/admin.py:736
 #, python-format
 msgid "no such %(classname)s property \"%(propname)s\""
 msgstr ""
 "la proprit %(propname)s n'existe pas pour la classe %(classname)s"
 
-#: ../roundup/admin.py:708
+#: ../roundup/admin.py:744
 #, fuzzy
 msgid ""
 "Usage: set items property=value property=value ...\n"
@@ -607,7 +623,7 @@
 "        ce lien sont indiqus comme des nombres spars par des\n"
 "        virgules (par ex. 1,2,3)."
 
-#: ../roundup/admin.py:776
+#: ../roundup/admin.py:812
 #, fuzzy
 msgid ""
 "Usage: filter classname propname=value ...\n"
@@ -631,21 +647,21 @@
 
 # ../roundup/admin.py:699 :852 :864 :918
 # ../roundup/admin.py:920 ../roundup/admin.py:701:854 :866:920
-#: ../roundup/admin.py:819
+#: ../roundup/admin.py:855
 #, fuzzy, python-format
 msgid "Class %(curclassname)s has no property %(pn)s in %(propname)s."
 msgstr "%(classname)s n'a pas de proprit %(propname)s"
 
 # ../roundup/admin.py:699 :852 :864 :918
 # ../roundup/admin.py:920 ../roundup/admin.py:701:854 :866:920
-#: ../roundup/admin.py:857 ../roundup/admin.py:918 ../roundup/admin.py:1082
-#: ../roundup/admin.py:1094 ../roundup/admin.py:1177
-#: ../roundup/admin.py:857:918 :1082:1094:1177
+#: ../roundup/admin.py:893 ../roundup/admin.py:954 ../roundup/admin.py:1118
+#: ../roundup/admin.py:1130 ../roundup/admin.py:1213
+#: ../roundup/admin.py:893:954 :1118:1130:1213
 #, python-format
 msgid "%(classname)s has no property \"%(propname)s\""
 msgstr "%(classname)s n'a pas de proprit %(propname)s"
 
-#: ../roundup/admin.py:864
+#: ../roundup/admin.py:900
 msgid ""
 "Usage: find classname propname=value ...\n"
 "        Find the nodes of the given class with a given link property value.\n"
@@ -664,7 +680,7 @@
 "        noeud li, ou sa valeur de cl.\n"
 "        "
 
-#: ../roundup/admin.py:925
+#: ../roundup/admin.py:961
 msgid ""
 "Usage: specification classname\n"
 "        Show the properties for a classname.\n"
@@ -678,17 +694,17 @@
 "        Cette commande numre les proprits de la classe nomme.\n"
 "        "
 
-#: ../roundup/admin.py:941
+#: ../roundup/admin.py:977
 #, fuzzy, python-format
 msgid "%(key)s: %(value)s (key property)\n"
 msgstr "%(key)s: %(value)s (proprit cl)"
 
-#: ../roundup/admin.py:944
+#: ../roundup/admin.py:980
 #, fuzzy, python-format
 msgid "%(key)s: %(value)s\n"
 msgstr "%(key)s: %(value)s"
 
-#: ../roundup/admin.py:947
+#: ../roundup/admin.py:983
 #, fuzzy
 msgid ""
 "Usage: display designator[,designator]*\n"
@@ -709,12 +725,12 @@
 "        des noeuds indiqus.\n"
 "        "
 
-#: ../roundup/admin.py:974
+#: ../roundup/admin.py:1010
 #, python-format
 msgid "%(key)s: %(value)s"
 msgstr "%(key)s: %(value)s"
 
-#: ../roundup/admin.py:977
+#: ../roundup/admin.py:1013
 msgid ""
 "Usage: create classname property=value ...\n"
 "        Create a new entry of a given class.\n"
@@ -734,31 +750,31 @@
 "        create.\n"
 "        "
 
-#: ../roundup/admin.py:1005
+#: ../roundup/admin.py:1041
 #, python-format
 msgid "%(propname)s (Password): "
 msgstr "%(propname)s (mot de passe): "
 
-#: ../roundup/admin.py:1008
+#: ../roundup/admin.py:1044
 #, python-format
 msgid "   %(propname)s (Again): "
 msgstr "   %(propname)s ( nouveau): "
 
-#: ../roundup/admin.py:1012
+#: ../roundup/admin.py:1048
 msgid "Sorry, try again..."
 msgstr "Dsol, essayez  nouveau..."
 
-#: ../roundup/admin.py:1016
+#: ../roundup/admin.py:1052
 #, python-format
 msgid "%(propname)s (%(proptype)s): "
 msgstr "%(propname)s (%(proptype)s): "
 
-#: ../roundup/admin.py:1035
+#: ../roundup/admin.py:1071
 #, python-format
 msgid "you must provide the \"%(propname)s\" property."
 msgstr "vous devez renseigner la proprit %(propname)s."
 
-#: ../roundup/admin.py:1047
+#: ../roundup/admin.py:1083
 msgid ""
 "Usage: list classname [property]\n"
 "        List the instances of a class.\n"
@@ -788,16 +804,16 @@
 "        proprit pour chaque instance de cette classe.\n"
 "        "
 
-#: ../roundup/admin.py:1060
+#: ../roundup/admin.py:1096
 msgid "Too many arguments supplied"
 msgstr "Trop d'arguments fournis"
 
-#: ../roundup/admin.py:1096
+#: ../roundup/admin.py:1132
 #, python-format
 msgid "%(nodeid)4s: %(value)s"
 msgstr "%(nodeid)4s: %(value)s"
 
-#: ../roundup/admin.py:1100
+#: ../roundup/admin.py:1136
 msgid ""
 "Usage: templates [trace_search]\n"
 "        List templates and their installed directories.\n"
@@ -807,7 +823,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1128
+#: ../roundup/admin.py:1164
 msgid ""
 "Usage: table classname [property[,property]*]\n"
 "        List the instances of a class in tabular form.\n"
@@ -869,17 +885,17 @@
 "        donnera une colonne Name large de 4 caractres.\n"
 "        "
 
-#: ../roundup/admin.py:1172
+#: ../roundup/admin.py:1208
 #, python-format
 msgid "\"%(spec)s\" not name:width"
 msgstr "%(spec)s ne correspond pas au format nom:largeur"
 
-#: ../roundup/admin.py:1194
+#: ../roundup/admin.py:1230
 #, python-format
 msgid "\"%(spec)s\" does not have an integer width: \"%(width)s\""
 msgstr ""
 
-#: ../roundup/admin.py:1230
+#: ../roundup/admin.py:1266
 msgid ""
 "Usage: history designator [skipquiet]\n"
 "        Show the history entries of a designator.\n"
@@ -894,7 +910,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1266
+#: ../roundup/admin.py:1302
 msgid ""
 "Usage: commit\n"
 "        Commit changes made to the database during an interactive session.\n"
@@ -919,7 +935,7 @@
 "        automatiquement valides si elles russissent.\n"
 "        "
 
-#: ../roundup/admin.py:1281
+#: ../roundup/admin.py:1317
 msgid ""
 "Usage: rollback\n"
 "        Undo all changes that are pending commit to the database.\n"
@@ -942,7 +958,7 @@
 "        base de donnes.\n"
 "        "
 
-#: ../roundup/admin.py:1294
+#: ../roundup/admin.py:1330
 #, fuzzy
 msgid ""
 "Usage: retire designator[,designator]*\n"
@@ -963,7 +979,7 @@
 "        valeur de cl peut tre r-utilise.\n"
 "        "
 
-#: ../roundup/admin.py:1322
+#: ../roundup/admin.py:1358
 #, fuzzy
 msgid ""
 "Usage: restore designator[,designator]*\n"
@@ -985,13 +1001,13 @@
 
 # ../roundup/admin.py:581 :981 :1030 :1052
 # ../roundup/admin.py:1054 ../roundup/admin.py:583:983 :1032:1054
-#: ../roundup/admin.py:1347
+#: ../roundup/admin.py:1383
 #, fuzzy
 msgid "no such %(classname)s node \" % (nodeid)s\""
 msgstr "le noeud %(nodeid)s de classe %(classname)s n'existe pas"
 
 #. grab the directory to export to
-#: ../roundup/admin.py:1353
+#: ../roundup/admin.py:1389
 #, fuzzy
 msgid ""
 "Usage: export [[-]class[,class]] export_dir\n"
@@ -1018,7 +1034,7 @@
 "        format aux valeurs spares par des doubles-points.\n"
 "        "
 
-#: ../roundup/admin.py:1460
+#: ../roundup/admin.py:1496
 #, fuzzy
 msgid ""
 "Usage: exporttables [[-]class[,class]] export_dir\n"
@@ -1046,7 +1062,7 @@
 "        format aux valeurs spares par des doubles-points.\n"
 "        "
 
-#: ../roundup/admin.py:1475
+#: ../roundup/admin.py:1511
 msgid ""
 "Usage: import import_dir\n"
 "        Import a database from the directory containing CSV files,\n"
@@ -1091,7 +1107,7 @@
 "        plus pniblement, abandonnez toutes les anciennes donnes).\n"
 "        "
 
-#: ../roundup/admin.py:1554
+#: ../roundup/admin.py:1590
 msgid ""
 "Usage: importtables export_dir\n"
 "\n"
@@ -1099,7 +1115,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1561
+#: ../roundup/admin.py:1597
 msgid ""
 "Usage: pack period | date\n"
 "\n"
@@ -1141,11 +1157,11 @@
 "\n"
 "        "
 
-#: ../roundup/admin.py:1589
+#: ../roundup/admin.py:1625
 msgid "Invalid format"
 msgstr "Format non valide"
 
-#: ../roundup/admin.py:1602
+#: ../roundup/admin.py:1638
 msgid ""
 "Usage: reindex [classname|designator]*\n"
 "        Re-generate a tracker's search indexes.\n"
@@ -1161,12 +1177,12 @@
 "        Cette opration est normalement effectuer automatiquement.\n"
 "        "
 
-#: ../roundup/admin.py:1616
+#: ../roundup/admin.py:1652
 #, python-format
 msgid "no such item \"%(designator)s\""
 msgstr "pas d'lment %(designator)s"
 
-#: ../roundup/admin.py:1626
+#: ../roundup/admin.py:1662
 #, fuzzy
 msgid ""
 "Usage: security [Role name]\n"
@@ -1178,48 +1194,48 @@
 "        Affiche les permissions disponible pour un ou plusieurs rles.\n"
 "        "
 
-#: ../roundup/admin.py:1635
+#: ../roundup/admin.py:1671
 #, fuzzy, python-format
 msgid "No such Role \"%(role)s\"\n"
 msgstr "Ce rle %(role)s n'existe pas"
 
-#: ../roundup/admin.py:1641
+#: ../roundup/admin.py:1677
 #, fuzzy, python-format
 msgid "New Web users get the Roles \"%(role)s\"\n"
 msgstr "Les nouveaux utilisateurs Web ont les rles %(role)s"
 
-#: ../roundup/admin.py:1644
+#: ../roundup/admin.py:1680
 #, fuzzy, python-format
 msgid "New Web users get the Role \"%(role)s\"\n"
 msgstr "Les nouveaux utilisateurs Web ont le rle %(role)s"
 
-#: ../roundup/admin.py:1648
+#: ../roundup/admin.py:1684
 #, fuzzy, python-format
 msgid "New Email users get the Roles \"%(role)s\"\n"
 msgstr "Les nouveaux utilisateurs Courriel ont les rles %(role)s"
 
-#: ../roundup/admin.py:1650
+#: ../roundup/admin.py:1686
 #, fuzzy, python-format
 msgid "New Email users get the Role \"%(role)s\"\n"
 msgstr "Les nouveaux utilisateurs Courriel ont le rle %(role)s"
 
-#: ../roundup/admin.py:1653
+#: ../roundup/admin.py:1689
 #, fuzzy, python-format
 msgid "Role \"%(name)s\":\n"
 msgstr "Rle %(name)s:"
 
-#: ../roundup/admin.py:1659
+#: ../roundup/admin.py:1695
 #, fuzzy
 msgid " %(description)s (%(name)s for \"%(klass)s\""
 msgstr " %(description)s (%(name)s pour %(klass)s uniquement)"
 
-#: ../roundup/admin.py:1659
+#: ../roundup/admin.py:1695
 #, fuzzy, python-format
 msgid " %(description)s (%(name)s for \"%(klass)s\": %(properties)s only)\n"
 msgstr ""
 " %(description)s (%(name)s pour %(klass)s: %(properties)s uniquement)"
 
-#: ../roundup/admin.py:1672
+#: ../roundup/admin.py:1708
 #, python-format
 msgid ""
 "\n"
@@ -1227,17 +1243,17 @@
 "\n"
 msgstr ""
 
-#: ../roundup/admin.py:1678
+#: ../roundup/admin.py:1714
 #, fuzzy, python-format
 msgid " %(description)s (%(name)s for \"%(klass)s\" only)\n"
 msgstr " %(description)s (%(name)s pour %(klass)s uniquement)"
 
-#: ../roundup/admin.py:1681
+#: ../roundup/admin.py:1717
 #, fuzzy, python-format
 msgid " %(description)s (%(name)s)\n"
 msgstr " %(description)s (%(name)s)"
 
-#: ../roundup/admin.py:1685
+#: ../roundup/admin.py:1721
 msgid ""
 "Usage: migrate\n"
 "\n"
@@ -1261,44 +1277,44 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1706
+#: ../roundup/admin.py:1742
 #, fuzzy
 msgid "Tracker updated"
 msgstr "Accueil de Tracker"
 
-#: ../roundup/admin.py:1709
+#: ../roundup/admin.py:1745
 msgid "No migration action required"
 msgstr ""
 
-#: ../roundup/admin.py:1735
+#: ../roundup/admin.py:1771
 #, python-format
 msgid "Unknown command \"%(command)s\" (\"help commands\" for a list)"
 msgstr "Commande inconnue %(command)s (help commands pour la liste)"
 
-#: ../roundup/admin.py:1741
+#: ../roundup/admin.py:1777
 #, python-format
 msgid "Multiple commands match \"%(command)s\": %(list)s"
 msgstr "Plusieurs commandes correspondent  %(command)s: %(list)s"
 
-#: ../roundup/admin.py:1750
+#: ../roundup/admin.py:1786
 msgid "Enter tracker home: "
 msgstr "Saisissez le rpertoire racine du pisteur: "
 
 # ../roundup/admin.py:1332 :1338 :1358
 # ../roundup/admin.py:1335:1341:1361
-#: ../roundup/admin.py:1759 ../roundup/admin.py:1765 ../roundup/admin.py:1802
-#: ../roundup/admin.py:1759:1765:1802
+#: ../roundup/admin.py:1795 ../roundup/admin.py:1801 ../roundup/admin.py:1838
+#: ../roundup/admin.py:1795:1801:1838
 #, python-format
 msgid "Error: %(message)s"
 msgstr "Erreur: %(message)s"
 
-#: ../roundup/admin.py:1775 ../roundup/admin.py:1779
-#: ../roundup/admin.py:1775:1779
+#: ../roundup/admin.py:1811 ../roundup/admin.py:1815
+#: ../roundup/admin.py:1811:1815
 #, python-format
 msgid "Error: Couldn't open tracker: %(message)s"
 msgstr "Erreur: impossible d'ouvrir le pisteur, %(message)s"
 
-#: ../roundup/admin.py:1815
+#: ../roundup/admin.py:1851
 #, python-format
 msgid ""
 "Roundup %s ready for input.\n"
@@ -1307,19 +1323,15 @@
 "Roundup %s est prt pour la saisie.\n"
 "Saisissez help pour l'aide."
 
-#: ../roundup/admin.py:1820
+#: ../roundup/admin.py:1856
 msgid "Note: command history and editing not available"
 msgstr "Note: l'historique et l'dition des commandes n'est pas disponible"
 
-#: ../roundup/admin.py:1824
-msgid "roundup> "
-msgstr "roundup> "
-
-#: ../roundup/admin.py:1826
+#: ../roundup/admin.py:1862
 msgid "exit..."
 msgstr "sortie..."
 
-#: ../roundup/admin.py:1839
+#: ../roundup/admin.py:1875
 msgid "There are unsaved changes. Commit them (y/N)? "
 msgstr "Des changements n'ont pas t enregistrs, les valider (y/N)?"
 
@@ -1427,20 +1439,22 @@
 msgid "restored"
 msgstr "restaur"
 
-#: ../roundup/backends/sessions_redis.py:76
-#: ../roundup/backends/sessions_redis.py:95
-#: ../roundup/backends/sessions_redis.py:76:95
+#: ../roundup/backends/sessions_redis.py:78
+#: ../roundup/backends/sessions_redis.py:97
+#: ../roundup/backends/sessions_redis.py:78:97
 #, python-format
 msgid "Key %(key)s not found in %(name)s database."
 msgstr ""
 
-#: ../roundup/backends/sessions_redis.py:191
+#: ../roundup/backends/sessions_redis.py:193
 #, python-format
 msgid "Key %(key)s changed in %(name)s db"
 msgstr ""
 
-#: ../roundup/backends/sessions_redis.py:195
-msgid "Redis set failed afer 3 retries"
+#: ../roundup/backends/sessions_redis.py:203
+#, python-format
+msgid ""
+"Redis set failed after %(retries)d retries for user %(user)s with key %(key)s"
 msgstr ""
 
 #: ../roundup/cgi/actions.py:97
@@ -1764,22 +1778,22 @@
 
 # ../roundup/cgi/actions.py:930 :934
 # ../roundup/cgi/actions.py:930:934
-#: ../roundup/cgi/actions.py:1383 ../roundup/cgi/actions.py:1387
-#: ../roundup/cgi/actions.py:1383:1387
+#: ../roundup/cgi/actions.py:1384 ../roundup/cgi/actions.py:1388
+#: ../roundup/cgi/actions.py:1384:1388
 msgid "Invalid login"
 msgstr "Tentative de connexion non valide"
 
-#: ../roundup/cgi/actions.py:1393
+#: ../roundup/cgi/actions.py:1394
 msgid "You do not have permission to login"
 msgstr "Vous n'avez la permission de vous connecter"
 
-#: ../roundup/cgi/actions.py:1437 ../roundup/cgi/actions.py:1616
-#: ../roundup/cgi/actions.py:1437:1616
+#: ../roundup/cgi/actions.py:1439 ../roundup/cgi/actions.py:1618
+#: ../roundup/cgi/actions.py:1439:1618
 #, python-format
 msgid "Column \"%(column)s\" not found in %(class)s"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1687
+#: ../roundup/cgi/actions.py:1689
 #, fuzzy, python-format
 msgid "You do not have permission to view %(class)s"
 msgstr "Vous n'avez pas la permission de modifier %(class)s"
@@ -1885,153 +1899,154 @@
 "Les administrateurs du pisteur ont t notifis du problme.</p>\n"
 "</body></html>"
 
-#: ../roundup/cgi/client.py:651
+#: ../roundup/cgi/client.py:670 ../roundup/cgi/client.py:1570
+#: ../roundup/cgi/client.py:670:1570
+msgid "Required Header Missing"
+msgstr ""
+
+#: ../roundup/cgi/client.py:672
 #, fuzzy
 msgid "Client is not allowed to use Rest Interface."
 msgstr ""
 "Les utilisateurs anonymes ne sont pas autoriss  utiliser l'interface Web"
 
-#: ../roundup/cgi/client.py:895
+#: ../roundup/cgi/client.py:921
 msgid "Form Error: "
 msgstr "Erreur de formulaire: "
 
-#: ../roundup/cgi/client.py:985
+#: ../roundup/cgi/client.py:1011
 #, python-format
 msgid "Unrecognized charset: %r"
 msgstr "Jeu de caractres non reconnu: %r"
 
-#: ../roundup/cgi/client.py:1238 ../roundup/cgi/client.py:2196
-#: ../roundup/cgi/client.py:1238:2196
+#: ../roundup/cgi/client.py:1264 ../roundup/cgi/client.py:2250
+#: ../roundup/cgi/client.py:1264:2250
 msgid "broken form: multiple @action values submitted"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1253
+#: ../roundup/cgi/client.py:1279
 msgid "Anonymous users are not allowed to use the web interface"
 msgstr ""
 "Les utilisateurs anonymes ne sont pas autoriss  utiliser l'interface Web"
 
-#: ../roundup/cgi/client.py:1376
+#: ../roundup/cgi/client.py:1430
 msgid "Referer header not available."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1380
+#: ../roundup/cgi/client.py:1434
 #, python-format
 msgid "csrf key used with wrong method from: %s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1409
+#: ../roundup/cgi/client.py:1463
 #, python-format
 msgid "csrf header %(header)s required but missing for user%(userid)s."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1413
+#: ../roundup/cgi/client.py:1467
 #, python-format
 msgid "Missing header: %s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1421
+#: ../roundup/cgi/client.py:1475
 #, python-format
 msgid "csrf Referer header check failed for user%(userid)s. Value=%(referer)s"
 msgstr ""
 
 # ../roundup/cgi/actions.py:930 :934
 # ../roundup/cgi/actions.py:930:934
-#: ../roundup/cgi/client.py:1426
+#: ../roundup/cgi/client.py:1480
 #, fuzzy, python-format
 msgid "Invalid Referer: %s"
 msgstr "Tentative de connexion non valide"
 
-#: ../roundup/cgi/client.py:1441
+#: ../roundup/cgi/client.py:1495
 #, python-format
 msgid "csrf Origin header check failed for user%(userid)s. Value=%(origin)s"
 msgstr ""
 
 # ../roundup/cgi/actions.py:930 :934
 # ../roundup/cgi/actions.py:930:934
-#: ../roundup/cgi/client.py:1446
+#: ../roundup/cgi/client.py:1500
 #, fuzzy, python-format
 msgid "Invalid Origin %s"
 msgstr "Tentative de connexion non valide"
 
-#: ../roundup/cgi/client.py:1460
+#: ../roundup/cgi/client.py:1514
 #, python-format
 msgid ""
 "csrf X-FORWARDED-HOST header check failed for user%(userid)s. Value=%(host)s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1466
+#: ../roundup/cgi/client.py:1520
 #, python-format
 msgid "Invalid X-FORWARDED-HOST %s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1485
+#: ../roundup/cgi/client.py:1539
 #, python-format
 msgid "csrf HOST header check failed for user%(userid)s. Value=%(host)s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1490
+#: ../roundup/cgi/client.py:1544
 #, python-format
 msgid "Invalid HOST %s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1498
+#: ../roundup/cgi/client.py:1552
 msgid "Csrf: unable to verify sufficient headers"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1499
+#: ../roundup/cgi/client.py:1553
 msgid "Unable to verify sufficient headers"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1513
+#: ../roundup/cgi/client.py:1567
 #, python-format
 msgid "csrf X-REQUESTED-WITH xmlrpc required header check failed for user%s."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1516
-msgid "Required Header Missing"
-msgstr ""
-
-#: ../roundup/cgi/client.py:1554
+#: ../roundup/cgi/client.py:1608
 #, python-format
 msgid "Required csrf field missing for user%s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1556 ../roundup/cgi/client.py:1583
-#: ../roundup/cgi/client.py:1600 ../roundup/cgi/client.py:1556:1583:1600
+#: ../roundup/cgi/client.py:1610 ../roundup/cgi/client.py:1637
+#: ../roundup/cgi/client.py:1654 ../roundup/cgi/client.py:1610:1637:1654
 msgid ""
 "We can't validate your session (csrf failure). Re-enter any unsaved data and "
 "try again."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1560
+#: ../roundup/cgi/client.py:1614
 #, python-format
 msgid "csrf field not supplied by user%s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1572
+#: ../roundup/cgi/client.py:1626
 #, python-format
 msgid ""
 "Csrf mismatch user: current user %(user)s != stored user %(stored)s, current "
 "session, stored session: %(cur_sess)s,%(stor_sess)s for key %(key)s."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1590
+#: ../roundup/cgi/client.py:1644
 #, python-format
 msgid ""
 "Csrf mismatch user: current session %(curr_sess)s != stored session "
 "%(stor_sess)s, current user/stored user is: %(user)s for key %(key)s."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1784
+#: ../roundup/cgi/client.py:1838
 msgid "You are not allowed to view this file."
 msgstr "Vous n'tes pas autoris  voir ce fichier"
 
-#: ../roundup/cgi/client.py:2073
+#: ../roundup/cgi/client.py:2127
 #, python-format
 msgid "%(starttag)sTime elapsed: %(seconds)fs%(endtag)s\n"
 msgstr "%(starttag)sTemps coul: %(seconds)fs%(endtag)s\n"
 
-#: ../roundup/cgi/client.py:2077
+#: ../roundup/cgi/client.py:2131
 #, python-format
 msgid ""
 "%(starttag)sCache hits: %(cache_hits)d, misses %(cache_misses)d. Loading "
@@ -2041,7 +2056,7 @@
 "Chargement d'lments: %(get_items)f secondes. Filtrage: %(filtering)f "
 "secondes.%(endtag)s\n"
 
-#: ../roundup/cgi/client.py:2615
+#: ../roundup/cgi/client.py:2669
 #, python-format
 msgid ""
 "Cache failure: compressed file %(compressed)s is older than its source file "
@@ -2457,30 +2472,30 @@
 msgid "\"%s\" not a node designator"
 msgstr ""
 
-#: ../roundup/hyperdb.py:1492 ../roundup/hyperdb.py:1500
-#: ../roundup/hyperdb.py:1492:1500
+#: ../roundup/hyperdb.py:1493 ../roundup/hyperdb.py:1501
+#: ../roundup/hyperdb.py:1493:1501
 #, python-format
 msgid "Not a property name: %s"
 msgstr ""
 
-#: ../roundup/hyperdb.py:1977
+#: ../roundup/hyperdb.py:1978
 #, fuzzy, python-format
 msgid "property %(property)s: %(value)r is not a %(classname)s."
 msgstr ""
 "proprit %(propname)s: %(value)s n'est pas actuellement dans la "
 "liste"
 
-#: ../roundup/hyperdb.py:1983
+#: ../roundup/hyperdb.py:1984
 #, python-format
 msgid "you may only enter ID values for property %s"
 msgstr ""
 
-#: ../roundup/hyperdb.py:2018
+#: ../roundup/hyperdb.py:2019
 #, python-format
 msgid "%(property)r is not a property of %(classname)s"
 msgstr ""
 
-#: ../roundup/init.py:139
+#: ../roundup/init.py:141
 #, python-format
 msgid ""
 "WARNING: directory '%s'\n"
@@ -2780,7 +2795,7 @@
 "corrigs:\n"
 "  %(errors)s\n"
 
-#: ../roundup/mailgw.py:1820
+#: ../roundup/mailgw.py:1821
 #, fuzzy, python-format
 msgid ""
 "\n"
@@ -2810,19 +2825,19 @@
 msgid "Invalid attribute %s"
 msgstr "Tentative de connexion non valide"
 
-#: ../roundup/rest.py:2078
+#: ../roundup/rest.py:2090
 #, python-format
 msgid "Api rate limits exceeded. Please wait: %s seconds."
 msgstr ""
 
-#: ../roundup/rest.py:2113
+#: ../roundup/rest.py:2125
 #, python-format
 msgid ""
 "Unable to parse Accept Header. %(error)s. Acceptable types: "
 "%(acceptable_types)s"
 msgstr ""
 
-#: ../roundup/rest.py:2262
+#: ../roundup/rest.py:2305
 #, python-format
 msgid ""
 "Unrecognized api version: %s. See /rest without specifying api version for "
@@ -2948,13 +2963,13 @@
 msgid "No tracker templates found in directory %s"
 msgstr "Aucun modle de pisteur dans le rpertoire %s"
 
-#: ../roundup/scripts/roundup_mailgw.py:185
+#: ../roundup/scripts/roundup_mailgw.py:182
 msgid ""
 "\n"
 "Error: The instance home must be specified"
 msgstr ""
 
-#: ../roundup/scripts/roundup_mailgw.py:203
+#: ../roundup/scripts/roundup_mailgw.py:200
 #, fuzzy
 msgid ""
 "\n"
@@ -2962,14 +2977,14 @@
 msgstr ""
 "Erreur: pas suffisament d'informations dans la spcification de la source"
 
-#: ../roundup/scripts/roundup_mailgw.py:234
+#: ../roundup/scripts/roundup_mailgw.py:231
 #, fuzzy, python-format
 msgid ""
 "\n"
 "Error: %s specification not valid"
 msgstr "Erreur: la spcification pop n'est pas valide"
 
-#: ../roundup/scripts/roundup_mailgw.py:258
+#: ../roundup/scripts/roundup_mailgw.py:254
 #, fuzzy
 msgid ""
 "\n"
@@ -2983,7 +2998,7 @@
 msgid "WARNING: generating temporary SSL certificate"
 msgstr ""
 
-#: ../roundup/scripts/roundup_server.py:329
+#: ../roundup/scripts/roundup_server.py:331
 msgid ""
 "<html><head><title>Roundup trackers index</title></head>\n"
 "<body><h1>Roundup trackers index</h1><ol>\n"
@@ -2991,64 +3006,64 @@
 "<html><head><title>Index des pisteurs Roundup</title></head>\n"
 "<body><h1>Index des pisteurs Roundup</h1><ol>\n"
 
-#: ../roundup/scripts/roundup_server.py:549
+#: ../roundup/scripts/roundup_server.py:551
 #, fuzzy, python-format
 msgid "Error: %(type)s: %(value)s"
 msgstr "%(key)s: %(value)s"
 
-#: ../roundup/scripts/roundup_server.py:561
+#: ../roundup/scripts/roundup_server.py:563
 msgid "WARNING: ignoring \"-g\" argument, not root"
 msgstr ""
 "ATTENTION: le paramtre -g est ignor, vous n'tes pas superutilisateur "
 "(root)"
 
-#: ../roundup/scripts/roundup_server.py:567
+#: ../roundup/scripts/roundup_server.py:569
 msgid "Can't change groups - no grp module"
 msgstr "Impossible de changer les groupes - le module grp n'est pas prsent"
 
-#: ../roundup/scripts/roundup_server.py:576
+#: ../roundup/scripts/roundup_server.py:578
 #, python-format
 msgid "Group %(group)s doesn't exist"
 msgstr "Le groupe %(group)s n'existe pas"
 
-#: ../roundup/scripts/roundup_server.py:588
+#: ../roundup/scripts/roundup_server.py:590
 msgid "Can't run as root!"
 msgstr "Impossible d'excuter en tant que superutilisateur (\"root\")"
 
-#: ../roundup/scripts/roundup_server.py:591
+#: ../roundup/scripts/roundup_server.py:593
 msgid "WARNING: ignoring \"-u\" argument, not root"
 msgstr ""
 "ATTENTION: le paramtre \"-u\" est ignor, vous n'tes pas superutilisateur "
 "(\"root\")"
 
-#: ../roundup/scripts/roundup_server.py:597
+#: ../roundup/scripts/roundup_server.py:599
 msgid "Can't change users - no pwd module"
 msgstr ""
 "Impossible de changer les utilisateurs - le module pwd n'est pas prsent"
 
-#: ../roundup/scripts/roundup_server.py:606
+#: ../roundup/scripts/roundup_server.py:608
 #, python-format
 msgid "User %(user)s doesn't exist"
 msgstr "L'utilisateur %(user)s n'existe pas"
 
-#: ../roundup/scripts/roundup_server.py:803
+#: ../roundup/scripts/roundup_server.py:805
 #, python-format
 msgid "Multiprocess mode \"%s\" is not available, switching to single-process"
 msgstr ""
 "Le mode multiprocessus \"%s\" n'existe pas, passage en mode processus unique"
 
-#: ../roundup/scripts/roundup_server.py:830
+#: ../roundup/scripts/roundup_server.py:832
 #, python-format
 msgid "Unable to bind to port %s, port already in use."
 msgstr "Impossible de s'attacher au port %s, le port est dj utilis"
 
-#: ../roundup/scripts/roundup_server.py:834
+#: ../roundup/scripts/roundup_server.py:836
 #, fuzzy, python-format
 msgid ""
 "Unable to bind to port %(port)s, access not allowed, errno: %(errno)s %(msg)s"
 msgstr "Impossible de s'attacher au port %s, le port est dj utilis"
 
-#: ../roundup/scripts/roundup_server.py:913
+#: ../roundup/scripts/roundup_server.py:915
 msgid ""
 " -c <Command>  Windows Service options.\n"
 "               If you want to run the server as a Windows Service, you\n"
@@ -3067,7 +3082,7 @@
 "               La commande roundup-server -c help donne les\n"
 "               spcificits du service Windows."
 
-#: ../roundup/scripts/roundup_server.py:920
+#: ../roundup/scripts/roundup_server.py:922
 msgid ""
 " -u <UID>      runs the Roundup web server as this UID\n"
 " -g <GID>      runs the Roundup web server as this GID\n"
@@ -3086,7 +3101,7 @@
 "PID\n"
 "               L'option -l option *doit* tre spcifie si -d est utilis."
 
-#: ../roundup/scripts/roundup_server.py:927
+#: ../roundup/scripts/roundup_server.py:929
 #, fuzzy, python-format
 msgid ""
 "\n"
@@ -3207,22 +3222,22 @@
 "    souhait. Assurez-vous que name ne contienne pas de caractres\n"
 "    inappropris pour une URL, comme les espaces qui perturbe IE.\n"
 
-#: ../roundup/scripts/roundup_server.py:1103
+#: ../roundup/scripts/roundup_server.py:1105
 msgid "Instances must be name=home"
 msgstr "Les instances doivent tre nom=base-du-pisteur"
 
-#: ../roundup/scripts/roundup_server.py:1117
+#: ../roundup/scripts/roundup_server.py:1119
 #, python-format
 msgid "Configuration saved to %s"
 msgstr "Configuration sauvegarde dans %s"
 
-#: ../roundup/scripts/roundup_server.py:1135
+#: ../roundup/scripts/roundup_server.py:1137
 msgid "Sorry, you can't run the server as a daemon on this Operating System"
 msgstr ""
 "Dsol, vous ne pouvez pas dmarrer le serveur en tche de fond avec ce "
 "systme d'exploitation"
 
-#: ../roundup/scripts/roundup_server.py:1155
+#: ../roundup/scripts/roundup_server.py:1157
 #, python-format
 msgid "Roundup server started on %(HOST)s:%(PORT)s"
 msgstr "Le serveur Roundup est dmarr sur %(HOST)s:%(PORT)s"
@@ -5724,6 +5739,9 @@
 msgid "Password"
 msgstr "Mot de passe"
 
+#~ msgid "roundup> "
+#~ msgstr "roundup> "
+
 #, fuzzy
 #~ msgid ""
 #~ "Usage: %(program)s [-v] [-c class] [[-C class] -S field=value]* [instance "
--- a/locale/hu.po	Wed Mar 01 10:43:54 2023 -0500
+++ b/locale/hu.po	Wed Mar 01 10:51:37 2023 -0500
@@ -8,7 +8,7 @@
 msgstr ""
 "Project-Id-Version: Roundup 2.3.0\n"
 "Report-Msgid-Bugs-To: roundup-devel@lists.sourceforge.net\n"
-"POT-Creation-Date: 2022-11-23 22:28-0500\n"
+"POT-Creation-Date: 2023-03-01 10:35-0500\n"
 "PO-Revision-Date: 2013-10-31 12:19+0100\n"
 "Last-Translator: kilo aka Gabor Kmetyko <kg_kilo@freemail.hu>\n"
 "Language-Team: Hungarian\n"
@@ -24,31 +24,31 @@
 "You do not have permission to retire or restore the %(classname)s class."
 msgstr "Nincs jogosultsága %(action)s műveletre a(z) %(classname)s osztályon."
 
-#: ../roundup/actions.py:64 ../roundup/cgi/actions.py:240
+#: ../roundup/actions.py:65 ../roundup/cgi/actions.py:240
 msgid "You may not retire the admin or anonymous user"
 msgstr "Az admin és anonymous felhasználókat nem lehet visszavonultatni"
 
 # ../roundup/admin.py:85 :981 :1030 :1052
-#: ../roundup/admin.py:106 ../roundup/admin.py:1259 ../roundup/admin.py:1314
-#: ../roundup/admin.py:1341 ../roundup/admin.py:106:1259 :1314:1341
+#: ../roundup/admin.py:112 ../roundup/admin.py:1295 ../roundup/admin.py:1350
+#: ../roundup/admin.py:1377 ../roundup/admin.py:112:1295 :1350:1377
 #, python-format
 msgid "no such class \"%(classname)s\""
 msgstr "nincs \"%(classname)s\" osztály"
 
 # ../roundup/admin.py:95 :99
-#: ../roundup/admin.py:118
+#: ../roundup/admin.py:124
 #, python-format
 msgid "argument \"%(arg)s\" not propname=value"
 msgstr "A(z) \"%(arg)s\" argumentum nem név=érték alakú"
 
-#: ../roundup/admin.py:131
+#: ../roundup/admin.py:137
 #, python-format
 msgid ""
 "Problem: %(message)s\n"
 "\n"
 msgstr "Probléma: %(message)s\n"
 
-#: ../roundup/admin.py:132
+#: ../roundup/admin.py:138
 #, fuzzy, python-format
 msgid ""
 "%(message)sUsage: roundup-admin [options] [<command> <arguments>]\n"
@@ -100,12 +100,12 @@
 " roundup-admin help <command>             -- parancs-specifikus segítség\n"
 " roundup-admin help all                   -- minden elérhető segítség\n"
 
-#: ../roundup/admin.py:159
+#: ../roundup/admin.py:165
 #, fuzzy
 msgid "Commands: "
 msgstr "Parancsok:"
 
-#: ../roundup/admin.py:166
+#: ../roundup/admin.py:172
 msgid ""
 "Commands may be abbreviated as long as the abbreviation\n"
 "matches only one command, e.g. l == li == lis == list."
@@ -113,7 +113,7 @@
 "A parancsok rövidíthetők mindaddig, amíg csak egy parancsra illenek, pl. l "
 "== li == lis == list."
 
-#: ../roundup/admin.py:195
+#: ../roundup/admin.py:201
 msgid ""
 "\n"
 "All commands (except help) require a tracker specifier. This is just\n"
@@ -165,7 +165,7 @@
 " . ROUNDUP_LOGIN environment variable\n"
 " . the -u command-line option\n"
 "If either the name or password is not supplied, they are obtained from the\n"
-"command-line.\n"
+"command-line. (See admin guide before using -u.)\n"
 "\n"
 "Date format examples:\n"
 "  \"2000-04-17.03:45\" means <Date 2000-04-17.08:45:00>\n"
@@ -180,12 +180,12 @@
 "Command help:\n"
 msgstr ""
 
-#: ../roundup/admin.py:258
+#: ../roundup/admin.py:264
 #, python-format
 msgid "%s:"
 msgstr "%s:"
 
-#: ../roundup/admin.py:265
+#: ../roundup/admin.py:271
 msgid ""
 "Usage: help topic\n"
 "        Give help about topic.\n"
@@ -205,22 +205,22 @@
 "        all       -- minden elérhető segítség\n"
 "        "
 
-#: ../roundup/admin.py:287
+#: ../roundup/admin.py:293
 #, python-format
 msgid "Sorry, no help for \"%(topic)s\""
 msgstr "Elnézést, \"%(topic)s\" témához nincs súgó"
 
 # ../roundup/admin.py:340 :396
-#: ../roundup/admin.py:402 ../roundup/admin.py:458 ../roundup/admin.py:402:458
+#: ../roundup/admin.py:408 ../roundup/admin.py:464 ../roundup/admin.py:408:464
 msgid "Templates:"
 msgstr "Sablonok:"
 
 # ../roundup/admin.py:343 :407
-#: ../roundup/admin.py:405 ../roundup/admin.py:468 ../roundup/admin.py:405:468
+#: ../roundup/admin.py:411 ../roundup/admin.py:474 ../roundup/admin.py:411:474
 msgid "Back ends:"
 msgstr "Adatbázis hátterek:"
 
-#: ../roundup/admin.py:408
+#: ../roundup/admin.py:414
 msgid ""
 "Usage: install [template [backend [key=val[,key=val]]]]\n"
 "        Install a new Roundup tracker.\n"
@@ -248,23 +248,23 @@
 
 # ../roundup/admin.py:369 :466 :527 :606 :656 :714 :735 :763 :834 :901 :972
 # :1020 :1042 :1069 :1136 :1207
-#: ../roundup/admin.py:431 ../roundup/admin.py:562 ../roundup/admin.py:635
-#: ../roundup/admin.py:728 ../roundup/admin.py:786 ../roundup/admin.py:872
-#: ../roundup/admin.py:931 ../roundup/admin.py:958 ../roundup/admin.py:985
-#: ../roundup/admin.py:1062 ../roundup/admin.py:1157 ../roundup/admin.py:1243
-#: ../roundup/admin.py:1304 ../roundup/admin.py:1331 ../roundup/admin.py:1367
-#: ../roundup/admin.py:1495 ../roundup/admin.py:1579
-#: ../roundup/admin.py:431:562 :1157 :1243:1304 :1331:1367 :1495:1579 :635:728
-#: :786:872 :931:958 :985:1062
+#: ../roundup/admin.py:437 ../roundup/admin.py:568 ../roundup/admin.py:671
+#: ../roundup/admin.py:764 ../roundup/admin.py:822 ../roundup/admin.py:908
+#: ../roundup/admin.py:967 ../roundup/admin.py:994 ../roundup/admin.py:1021
+#: ../roundup/admin.py:1098 ../roundup/admin.py:1193 ../roundup/admin.py:1279
+#: ../roundup/admin.py:1340 ../roundup/admin.py:1367 ../roundup/admin.py:1403
+#: ../roundup/admin.py:1531 ../roundup/admin.py:1615
+#: ../roundup/admin.py:437:568 :1021:1098:1193 :1279:1340 :1367:1403 :1531:1615
+#: :671:764 :822:908 :967:994
 msgid "Not enough arguments supplied"
 msgstr "Nincs megadva elég argumentum"
 
-#: ../roundup/admin.py:437
+#: ../roundup/admin.py:443
 #, python-format
 msgid "Instance home parent directory \"%(parent)s\" does not exist"
 msgstr "Példány könyvtár szülője (\"%(parent)s\") nem létezik"
 
-#: ../roundup/admin.py:446
+#: ../roundup/admin.py:452
 #, python-format
 msgid ""
 "WARNING: There appears to be a tracker in \"%(tracker_home)s\"!\n"
@@ -276,22 +276,22 @@
 "Ha újra installálod, minden adat elveszik!\n"
 "Töröljem? Y/N: "
 
-#: ../roundup/admin.py:459
+#: ../roundup/admin.py:465
 #, fuzzy
 msgid "Select template"
 msgstr "Sablon választása [classic]: "
 
-#: ../roundup/admin.py:469
+#: ../roundup/admin.py:475
 #, fuzzy
 msgid "Select backend"
 msgstr "Adatbázis háttér választása [anydbm]: "
 
-#: ../roundup/admin.py:480
+#: ../roundup/admin.py:486
 #, python-format
 msgid "Error in configuration settings: \"%s\""
 msgstr "Hiba a konfigurációs beállításokban: \"%s\""
 
-#: ../roundup/admin.py:511
+#: ../roundup/admin.py:517
 #, python-format
 msgid ""
 "\n"
@@ -304,11 +304,11 @@
 " Most kell szerkesztened a konfigurációs fájlt:\n"
 "   %(config_file)s"
 
-#: ../roundup/admin.py:521
+#: ../roundup/admin.py:527
 msgid " ... at a minimum, you must set following options:"
 msgstr " ... legalább a következő opciókat kell beállítani:"
 
-#: ../roundup/admin.py:526
+#: ../roundup/admin.py:532
 #, python-format
 msgid ""
 "\n"
@@ -325,7 +325,7 @@
 "---------------------------------------------------------------------------\n"
 msgstr ""
 
-#: ../roundup/admin.py:557
+#: ../roundup/admin.py:563
 #, fuzzy
 msgid ""
 "Usage: genconfig <filename>\n"
@@ -339,7 +339,22 @@
 "        a <fájlnév> fájlba.\n"
 "        "
 
-#: ../roundup/admin.py:572
+#: ../roundup/admin.py:581
+#, python-format
+msgid ""
+"Changing option\n"
+"   'password_pbkdf2_default_rounds'\n"
+"from old default of %(old_number)s to new default of %(new_number)s."
+msgstr ""
+
+#: ../roundup/admin.py:593
+#, python-format
+msgid ""
+"Update 'password_pbkdf2_default_rounds'to a number equal to or larger\n"
+"than %s."
+msgstr ""
+
+#: ../roundup/admin.py:604
 #, fuzzy
 msgid ""
 "Usage: updateconfig <filename>\n"
@@ -355,7 +370,7 @@
 "        "
 
 #. password
-#: ../roundup/admin.py:580
+#: ../roundup/admin.py:612
 msgid ""
 "Usage: initialise [adminpw]\n"
 "        Initialise a new Roundup tracker.\n"
@@ -373,23 +388,23 @@
 "        Végrehajtja az adatbázist inicializáló dbinit.init() rutint\n"
 "        "
 
-#: ../roundup/admin.py:594
+#: ../roundup/admin.py:626
 msgid "Admin Password: "
 msgstr "Adminisztrátori jelszó: "
 
-#: ../roundup/admin.py:595
+#: ../roundup/admin.py:627
 msgid "       Confirm: "
 msgstr "       Megerősítés "
 
-#: ../roundup/admin.py:599
+#: ../roundup/admin.py:631
 msgid "Instance home does not exist"
 msgstr "A példány könyvtára nem létezik"
 
-#: ../roundup/admin.py:603
+#: ../roundup/admin.py:635
 msgid "Instance has not been installed"
 msgstr "A példány nem lett installálva"
 
-#: ../roundup/admin.py:609
+#: ../roundup/admin.py:641
 msgid ""
 "WARNING: The database is already initialised!\n"
 "If you re-initialise it, you will lose all the data!\n"
@@ -399,7 +414,7 @@
 "Újrainicializálás esetén minden adat elvész!\n"
 "Törli? Y/N: "
 
-#: ../roundup/admin.py:625
+#: ../roundup/admin.py:661
 #, fuzzy
 msgid ""
 "Usage: get property designator[,designator]*\n"
@@ -420,7 +435,7 @@
 "        "
 
 # ../roundup/admin.py:560 :575
-#: ../roundup/admin.py:669 ../roundup/admin.py:687 ../roundup/admin.py:669:687
+#: ../roundup/admin.py:705 ../roundup/admin.py:723 ../roundup/admin.py:705:723
 #, python-format
 msgid "property %s is not of type Multilink or Link so -d flag does not apply."
 msgstr ""
@@ -428,18 +443,18 @@
 "alkalmazható."
 
 # ../roundup/admin.py:583 :983 :1032 :1054
-#: ../roundup/admin.py:697 ../roundup/admin.py:1261 ../roundup/admin.py:1316
-#: ../roundup/admin.py:697:1261:1316
+#: ../roundup/admin.py:733 ../roundup/admin.py:1297 ../roundup/admin.py:1352
+#: ../roundup/admin.py:733:1297:1352
 #, python-format
 msgid "no such %(classname)s node \"%(nodeid)s\""
 msgstr "nincs \"%(nodeid)s\" %(classname)s csomópont"
 
-#: ../roundup/admin.py:700
+#: ../roundup/admin.py:736
 #, python-format
 msgid "no such %(classname)s property \"%(propname)s\""
 msgstr "nincs \"%(propname)s\" %(classname)s tulajdonság"
 
-#: ../roundup/admin.py:708
+#: ../roundup/admin.py:744
 msgid ""
 "Usage: set items property=value property=value ...\n"
 "        Set the given properties of one or more items(s).\n"
@@ -460,7 +475,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:776
+#: ../roundup/admin.py:812
 msgid ""
 "Usage: filter classname propname=value ...\n"
 "        Find the nodes of the given class with a given property value.\n"
@@ -474,20 +489,20 @@
 msgstr ""
 
 # ../roundup/admin.py:701 :854 :866 :920
-#: ../roundup/admin.py:819
+#: ../roundup/admin.py:855
 #, fuzzy, python-format
 msgid "Class %(curclassname)s has no property %(pn)s in %(propname)s."
 msgstr "%(classname)s-nek nincs \"%(propname)s\" tulajdonsága"
 
 # ../roundup/admin.py:701 :854 :866 :920
-#: ../roundup/admin.py:857 ../roundup/admin.py:918 ../roundup/admin.py:1082
-#: ../roundup/admin.py:1094 ../roundup/admin.py:1177
-#: ../roundup/admin.py:857:918 :1082:1094:1177
+#: ../roundup/admin.py:893 ../roundup/admin.py:954 ../roundup/admin.py:1118
+#: ../roundup/admin.py:1130 ../roundup/admin.py:1213
+#: ../roundup/admin.py:893:954 :1118:1130:1213
 #, python-format
 msgid "%(classname)s has no property \"%(propname)s\""
 msgstr "%(classname)s-nek nincs \"%(propname)s\" tulajdonsága"
 
-#: ../roundup/admin.py:864
+#: ../roundup/admin.py:900
 msgid ""
 "Usage: find classname propname=value ...\n"
 "        Find the nodes of the given class with a given link property value.\n"
@@ -498,7 +513,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:925
+#: ../roundup/admin.py:961
 msgid ""
 "Usage: specification classname\n"
 "        Show the properties for a classname.\n"
@@ -512,17 +527,17 @@
 "        Listázza az adott osztály tulajdonságait.\n"
 "        "
 
-#: ../roundup/admin.py:941
+#: ../roundup/admin.py:977
 #, fuzzy, python-format
 msgid "%(key)s: %(value)s (key property)\n"
 msgstr "%(key)s: %(value)s (kulcs tulajdonság)"
 
-#: ../roundup/admin.py:944
+#: ../roundup/admin.py:980
 #, fuzzy, python-format
 msgid "%(key)s: %(value)s\n"
 msgstr "%(key)s: %(value)s"
 
-#: ../roundup/admin.py:947
+#: ../roundup/admin.py:983
 #, fuzzy
 msgid ""
 "Usage: display designator[,designator]*\n"
@@ -543,12 +558,12 @@
 "        csomópont értékét.\n"
 "        "
 
-#: ../roundup/admin.py:974
+#: ../roundup/admin.py:1010
 #, python-format
 msgid "%(key)s: %(value)s"
 msgstr "%(key)s: %(value)s"
 
-#: ../roundup/admin.py:977
+#: ../roundup/admin.py:1013
 msgid ""
 "Usage: create classname property=value ...\n"
 "        Create a new entry of a given class.\n"
@@ -560,31 +575,31 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1005
+#: ../roundup/admin.py:1041
 #, python-format
 msgid "%(propname)s (Password): "
 msgstr "%(propname)s (Jelszó): "
 
-#: ../roundup/admin.py:1008
+#: ../roundup/admin.py:1044
 #, python-format
 msgid "   %(propname)s (Again): "
 msgstr "   %(propname)s (Ismét): "
 
-#: ../roundup/admin.py:1012
+#: ../roundup/admin.py:1048
 msgid "Sorry, try again..."
 msgstr "Sajnálom, próbálja újra..."
 
-#: ../roundup/admin.py:1016
+#: ../roundup/admin.py:1052
 #, python-format
 msgid "%(propname)s (%(proptype)s): "
 msgstr "%(propname)s (%(proptype)s): "
 
-#: ../roundup/admin.py:1035
+#: ../roundup/admin.py:1071
 #, python-format
 msgid "you must provide the \"%(propname)s\" property."
 msgstr "meg kell adni a(z) \"%(propname)s\" tulajdonságot."
 
-#: ../roundup/admin.py:1047
+#: ../roundup/admin.py:1083
 msgid ""
 "Usage: list classname [property]\n"
 "        List the instances of a class.\n"
@@ -600,16 +615,16 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1060
+#: ../roundup/admin.py:1096
 msgid "Too many arguments supplied"
 msgstr "Túl sok argumentum került megadásra"
 
-#: ../roundup/admin.py:1096
+#: ../roundup/admin.py:1132
 #, python-format
 msgid "%(nodeid)4s: %(value)s"
 msgstr "%(nodeid)4s: %(value)s"
 
-#: ../roundup/admin.py:1100
+#: ../roundup/admin.py:1136
 msgid ""
 "Usage: templates [trace_search]\n"
 "        List templates and their installed directories.\n"
@@ -619,7 +634,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1128
+#: ../roundup/admin.py:1164
 msgid ""
 "Usage: table classname [property[,property]*]\n"
 "        List the instances of a class in tabular form.\n"
@@ -651,17 +666,17 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1172
+#: ../roundup/admin.py:1208
 #, python-format
 msgid "\"%(spec)s\" not name:width"
 msgstr "\"%(spec)s\" nem név:hossz formátumú"
 
-#: ../roundup/admin.py:1194
+#: ../roundup/admin.py:1230
 #, python-format
 msgid "\"%(spec)s\" does not have an integer width: \"%(width)s\""
 msgstr ""
 
-#: ../roundup/admin.py:1230
+#: ../roundup/admin.py:1266
 msgid ""
 "Usage: history designator [skipquiet]\n"
 "        Show the history entries of a designator.\n"
@@ -676,7 +691,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1266
+#: ../roundup/admin.py:1302
 msgid ""
 "Usage: commit\n"
 "        Commit changes made to the database during an interactive session.\n"
@@ -690,7 +705,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1281
+#: ../roundup/admin.py:1317
 msgid ""
 "Usage: rollback\n"
 "        Undo all changes that are pending commit to the database.\n"
@@ -702,7 +717,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1294
+#: ../roundup/admin.py:1330
 msgid ""
 "Usage: retire designator[,designator]*\n"
 "        Retire the node specified by designator.\n"
@@ -715,7 +730,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1322
+#: ../roundup/admin.py:1358
 msgid ""
 "Usage: restore designator[,designator]*\n"
 "        Restore the retired node specified by designator.\n"
@@ -728,13 +743,13 @@
 msgstr ""
 
 # ../roundup/admin.py:583 :983 :1032 :1054
-#: ../roundup/admin.py:1347
+#: ../roundup/admin.py:1383
 #, fuzzy
 msgid "no such %(classname)s node \" % (nodeid)s\""
 msgstr "nincs \"%(nodeid)s\" %(classname)s csomópont"
 
 #. grab the directory to export to
-#: ../roundup/admin.py:1353
+#: ../roundup/admin.py:1389
 msgid ""
 "Usage: export [[-]class[,class]] export_dir\n"
 "        Export the database to colon-separated-value files.\n"
@@ -750,7 +765,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1460
+#: ../roundup/admin.py:1496
 msgid ""
 "Usage: exporttables [[-]class[,class]] export_dir\n"
 "        Export the database to colon-separated-value files, excluding the\n"
@@ -767,7 +782,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1475
+#: ../roundup/admin.py:1511
 msgid ""
 "Usage: import import_dir\n"
 "        Import a database from the directory containing CSV files,\n"
@@ -790,7 +805,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1554
+#: ../roundup/admin.py:1590
 msgid ""
 "Usage: importtables export_dir\n"
 "\n"
@@ -798,7 +813,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1561
+#: ../roundup/admin.py:1597
 msgid ""
 "Usage: pack period | date\n"
 "\n"
@@ -820,11 +835,11 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1589
+#: ../roundup/admin.py:1625
 msgid "Invalid format"
 msgstr "Hibás formátum"
 
-#: ../roundup/admin.py:1602
+#: ../roundup/admin.py:1638
 msgid ""
 "Usage: reindex [classname|designator]*\n"
 "        Re-generate a tracker's search indexes.\n"
@@ -834,12 +849,12 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1616
+#: ../roundup/admin.py:1652
 #, python-format
 msgid "no such item \"%(designator)s\""
 msgstr "nincs ilyen elem: \"%(designator)s\""
 
-#: ../roundup/admin.py:1626
+#: ../roundup/admin.py:1662
 #, fuzzy
 msgid ""
 "Usage: security [Role name]\n"
@@ -851,47 +866,47 @@
 "        Megjeleníti a megadott vagy az összes szerepkör jogosultságait.\n"
 "        "
 
-#: ../roundup/admin.py:1635
+#: ../roundup/admin.py:1671
 #, fuzzy, python-format
 msgid "No such Role \"%(role)s\"\n"
 msgstr "Nincs ilyen szerepkör: \"%(role)s\""
 
-#: ../roundup/admin.py:1641
+#: ../roundup/admin.py:1677
 #, fuzzy, python-format
 msgid "New Web users get the Roles \"%(role)s\"\n"
 msgstr "Új web felhasználók ezeket a szerepköröket kapják: \"%(role)s\""
 
-#: ../roundup/admin.py:1644
+#: ../roundup/admin.py:1680
 #, fuzzy, python-format
 msgid "New Web users get the Role \"%(role)s\"\n"
 msgstr "Új web felhasználók ezt a szerepkört kapják \"%(role)s\""
 
-#: ../roundup/admin.py:1648
+#: ../roundup/admin.py:1684
 #, fuzzy, python-format
 msgid "New Email users get the Roles \"%(role)s\"\n"
 msgstr "Új e-mail felhasználók ezeket a szerepköröket kapják: \"%(role)s\""
 
-#: ../roundup/admin.py:1650
+#: ../roundup/admin.py:1686
 #, fuzzy, python-format
 msgid "New Email users get the Role \"%(role)s\"\n"
 msgstr "Új e-mail felhasználók ezt a szerepkört kapják: \"%(role)s\""
 
-#: ../roundup/admin.py:1653
+#: ../roundup/admin.py:1689
 #, fuzzy, python-format
 msgid "Role \"%(name)s\":\n"
 msgstr "\"%(name)s\" szerepkör:"
 
-#: ../roundup/admin.py:1659
+#: ../roundup/admin.py:1695
 #, fuzzy
 msgid " %(description)s (%(name)s for \"%(klass)s\""
 msgstr " %(description)s (%(name)s)"
 
-#: ../roundup/admin.py:1659
+#: ../roundup/admin.py:1695
 #, fuzzy, python-format
 msgid " %(description)s (%(name)s for \"%(klass)s\": %(properties)s only)\n"
 msgstr " %(description)s (%(name)s)"
 
-#: ../roundup/admin.py:1672
+#: ../roundup/admin.py:1708
 #, python-format
 msgid ""
 "\n"
@@ -899,17 +914,17 @@
 "\n"
 msgstr ""
 
-#: ../roundup/admin.py:1678
+#: ../roundup/admin.py:1714
 #, fuzzy, python-format
 msgid " %(description)s (%(name)s for \"%(klass)s\" only)\n"
 msgstr " %(description)s (%(name)s)"
 
-#: ../roundup/admin.py:1681
+#: ../roundup/admin.py:1717
 #, fuzzy, python-format
 msgid " %(description)s (%(name)s)\n"
 msgstr " %(description)s (%(name)s)"
 
-#: ../roundup/admin.py:1685
+#: ../roundup/admin.py:1721
 msgid ""
 "Usage: migrate\n"
 "\n"
@@ -933,46 +948,46 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1706
+#: ../roundup/admin.py:1742
 #, fuzzy
 msgid "Tracker updated"
 msgstr "Hibakövető"
 
-#: ../roundup/admin.py:1709
+#: ../roundup/admin.py:1745
 msgid "No migration action required"
 msgstr ""
 
-#: ../roundup/admin.py:1735
+#: ../roundup/admin.py:1771
 #, python-format
 msgid "Unknown command \"%(command)s\" (\"help commands\" for a list)"
 msgstr ""
 "\"%(command)s\": ismeretlen parancs (\"help commands\" parancsok "
 "listázásához)"
 
-#: ../roundup/admin.py:1741
+#: ../roundup/admin.py:1777
 #, python-format
 msgid "Multiple commands match \"%(command)s\": %(list)s"
 msgstr ""
 "Több parancs is illeszkedik a megadott \"%(command)s\" parancsra: %(list)s"
 
-#: ../roundup/admin.py:1750
+#: ../roundup/admin.py:1786
 msgid "Enter tracker home: "
 msgstr "Adja meg a hibakövető könyvtárát: "
 
 # ../roundup/admin.py:1335 :1341 :1361
-#: ../roundup/admin.py:1759 ../roundup/admin.py:1765 ../roundup/admin.py:1802
-#: ../roundup/admin.py:1759:1765:1802
+#: ../roundup/admin.py:1795 ../roundup/admin.py:1801 ../roundup/admin.py:1838
+#: ../roundup/admin.py:1795:1801:1838
 #, python-format
 msgid "Error: %(message)s"
 msgstr "Hiba: %(message)s"
 
-#: ../roundup/admin.py:1775 ../roundup/admin.py:1779
-#: ../roundup/admin.py:1775:1779
+#: ../roundup/admin.py:1811 ../roundup/admin.py:1815
+#: ../roundup/admin.py:1811:1815
 #, python-format
 msgid "Error: Couldn't open tracker: %(message)s"
 msgstr "Hiba: Hibakövető megnyitása sikertelen: %(message)s"
 
-#: ../roundup/admin.py:1815
+#: ../roundup/admin.py:1851
 #, python-format
 msgid ""
 "Roundup %s ready for input.\n"
@@ -981,19 +996,15 @@
 "A Roundup %s fogadókész.\n"
 "Segítségért gépeljen \"help\"-et."
 
-#: ../roundup/admin.py:1820
+#: ../roundup/admin.py:1856
 msgid "Note: command history and editing not available"
 msgstr "Megjegyzés: a parancsok története és szerkesztése nem elérhető"
 
-#: ../roundup/admin.py:1824
-msgid "roundup> "
-msgstr "roundup> "
-
-#: ../roundup/admin.py:1826
+#: ../roundup/admin.py:1862
 msgid "exit..."
 msgstr "kilépés..."
 
-#: ../roundup/admin.py:1839
+#: ../roundup/admin.py:1875
 msgid "There are unsaved changes. Commit them (y/N)? "
 msgstr "Vannak nem mentett változtatások. Elmenti őket (y/N)? "
 
@@ -1105,20 +1116,22 @@
 msgid "restored"
 msgstr "visszaállított"
 
-#: ../roundup/backends/sessions_redis.py:76
-#: ../roundup/backends/sessions_redis.py:95
-#: ../roundup/backends/sessions_redis.py:76:95
+#: ../roundup/backends/sessions_redis.py:78
+#: ../roundup/backends/sessions_redis.py:97
+#: ../roundup/backends/sessions_redis.py:78:97
 #, python-format
 msgid "Key %(key)s not found in %(name)s database."
 msgstr ""
 
-#: ../roundup/backends/sessions_redis.py:191
+#: ../roundup/backends/sessions_redis.py:193
 #, python-format
 msgid "Key %(key)s changed in %(name)s db"
 msgstr ""
 
-#: ../roundup/backends/sessions_redis.py:195
-msgid "Redis set failed afer 3 retries"
+#: ../roundup/backends/sessions_redis.py:203
+#, python-format
+msgid ""
+"Redis set failed after %(retries)d retries for user %(user)s with key %(key)s"
 msgstr ""
 
 #: ../roundup/cgi/actions.py:97
@@ -1431,22 +1444,22 @@
 msgstr ""
 
 # ../roundup/cgi/actions.py:930 :934
-#: ../roundup/cgi/actions.py:1383 ../roundup/cgi/actions.py:1387
-#: ../roundup/cgi/actions.py:1383:1387
+#: ../roundup/cgi/actions.py:1384 ../roundup/cgi/actions.py:1388
+#: ../roundup/cgi/actions.py:1384:1388
 msgid "Invalid login"
 msgstr "Hibás bejelentkezés"
 
-#: ../roundup/cgi/actions.py:1393
+#: ../roundup/cgi/actions.py:1394
 msgid "You do not have permission to login"
 msgstr "Nincs jogosultsága bejelentkezni"
 
-#: ../roundup/cgi/actions.py:1437 ../roundup/cgi/actions.py:1616
-#: ../roundup/cgi/actions.py:1437:1616
+#: ../roundup/cgi/actions.py:1439 ../roundup/cgi/actions.py:1618
+#: ../roundup/cgi/actions.py:1439:1618
 #, python-format
 msgid "Column \"%(column)s\" not found in %(class)s"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1687
+#: ../roundup/cgi/actions.py:1689
 #, fuzzy, python-format
 msgid "You do not have permission to view %(class)s"
 msgstr "Nincs jogosultsága szerkeszteni %(class)s-t"
@@ -1544,149 +1557,150 @@
 "A hibakövető karbantartói értesítést kaptak a problémáról.</p>\n"
 "</body></html>"
 
-#: ../roundup/cgi/client.py:651
+#: ../roundup/cgi/client.py:670 ../roundup/cgi/client.py:1570
+#: ../roundup/cgi/client.py:670:1570
+msgid "Required Header Missing"
+msgstr ""
+
+#: ../roundup/cgi/client.py:672
 #, fuzzy
 msgid "Client is not allowed to use Rest Interface."
 msgstr "Anonim felhasználók nem használhatják a webes felületet"
 
-#: ../roundup/cgi/client.py:895
+#: ../roundup/cgi/client.py:921
 msgid "Form Error: "
 msgstr "Űrlap hiba: "
 
-#: ../roundup/cgi/client.py:985
+#: ../roundup/cgi/client.py:1011
 #, python-format
 msgid "Unrecognized charset: %r"
 msgstr "Ismeretlen karakterkészlet: %r"
 
-#: ../roundup/cgi/client.py:1238 ../roundup/cgi/client.py:2196
-#: ../roundup/cgi/client.py:1238:2196
+#: ../roundup/cgi/client.py:1264 ../roundup/cgi/client.py:2250
+#: ../roundup/cgi/client.py:1264:2250
 msgid "broken form: multiple @action values submitted"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1253
+#: ../roundup/cgi/client.py:1279
 msgid "Anonymous users are not allowed to use the web interface"
 msgstr "Anonim felhasználók nem használhatják a webes felületet"
 
-#: ../roundup/cgi/client.py:1376
+#: ../roundup/cgi/client.py:1430
 msgid "Referer header not available."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1380
+#: ../roundup/cgi/client.py:1434
 #, python-format
 msgid "csrf key used with wrong method from: %s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1409
+#: ../roundup/cgi/client.py:1463
 #, python-format
 msgid "csrf header %(header)s required but missing for user%(userid)s."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1413
+#: ../roundup/cgi/client.py:1467
 #, python-format
 msgid "Missing header: %s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1421
+#: ../roundup/cgi/client.py:1475
 #, python-format
 msgid "csrf Referer header check failed for user%(userid)s. Value=%(referer)s"
 msgstr ""
 
 # ../roundup/cgi/actions.py:930 :934
-#: ../roundup/cgi/client.py:1426
+#: ../roundup/cgi/client.py:1480
 #, fuzzy, python-format
 msgid "Invalid Referer: %s"
 msgstr "Hibás bejelentkezés"
 
-#: ../roundup/cgi/client.py:1441
+#: ../roundup/cgi/client.py:1495
 #, python-format
 msgid "csrf Origin header check failed for user%(userid)s. Value=%(origin)s"
 msgstr ""
 
 # ../roundup/cgi/actions.py:930 :934
-#: ../roundup/cgi/client.py:1446
+#: ../roundup/cgi/client.py:1500
 #, fuzzy, python-format
 msgid "Invalid Origin %s"
 msgstr "Hibás bejelentkezés"
 
-#: ../roundup/cgi/client.py:1460
+#: ../roundup/cgi/client.py:1514
 #, python-format
 msgid ""
 "csrf X-FORWARDED-HOST header check failed for user%(userid)s. Value=%(host)s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1466
+#: ../roundup/cgi/client.py:1520
 #, python-format
 msgid "Invalid X-FORWARDED-HOST %s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1485
+#: ../roundup/cgi/client.py:1539
 #, python-format
 msgid "csrf HOST header check failed for user%(userid)s. Value=%(host)s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1490
+#: ../roundup/cgi/client.py:1544
 #, python-format
 msgid "Invalid HOST %s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1498
+#: ../roundup/cgi/client.py:1552
 msgid "Csrf: unable to verify sufficient headers"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1499
+#: ../roundup/cgi/client.py:1553
 msgid "Unable to verify sufficient headers"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1513
+#: ../roundup/cgi/client.py:1567
 #, python-format
 msgid "csrf X-REQUESTED-WITH xmlrpc required header check failed for user%s."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1516
-msgid "Required Header Missing"
-msgstr ""
-
-#: ../roundup/cgi/client.py:1554
+#: ../roundup/cgi/client.py:1608
 #, python-format
 msgid "Required csrf field missing for user%s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1556 ../roundup/cgi/client.py:1583
-#: ../roundup/cgi/client.py:1600 ../roundup/cgi/client.py:1556:1583:1600
+#: ../roundup/cgi/client.py:1610 ../roundup/cgi/client.py:1637
+#: ../roundup/cgi/client.py:1654 ../roundup/cgi/client.py:1610:1637:1654
 msgid ""
 "We can't validate your session (csrf failure). Re-enter any unsaved data and "
 "try again."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1560
+#: ../roundup/cgi/client.py:1614
 #, python-format
 msgid "csrf field not supplied by user%s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1572
+#: ../roundup/cgi/client.py:1626
 #, python-format
 msgid ""
 "Csrf mismatch user: current user %(user)s != stored user %(stored)s, current "
 "session, stored session: %(cur_sess)s,%(stor_sess)s for key %(key)s."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1590
+#: ../roundup/cgi/client.py:1644
 #, python-format
 msgid ""
 "Csrf mismatch user: current session %(curr_sess)s != stored session "
 "%(stor_sess)s, current user/stored user is: %(user)s for key %(key)s."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1784
+#: ../roundup/cgi/client.py:1838
 msgid "You are not allowed to view this file."
 msgstr "Nem nézheti meg ezt a fájlt."
 
-#: ../roundup/cgi/client.py:2073
+#: ../roundup/cgi/client.py:2127
 #, python-format
 msgid "%(starttag)sTime elapsed: %(seconds)fs%(endtag)s\n"
 msgstr "%(starttag)sEltelt idő: %(seconds)fs%(endtag)s\n"
 
-#: ../roundup/cgi/client.py:2077
+#: ../roundup/cgi/client.py:2131
 #, python-format
 msgid ""
 "%(starttag)sCache hits: %(cache_hits)d, misses %(cache_misses)d. Loading "
@@ -1695,7 +1709,7 @@
 "%(starttag)sCache találatok: %(cache_hits)d, tévedés %(cache_misses)d. "
 "Elemek betöltése: %(get_items)f mp. Szűrés: %(filtering)f mp.%(endtag)s\n"
 
-#: ../roundup/cgi/client.py:2615
+#: ../roundup/cgi/client.py:2669
 #, python-format
 msgid ""
 "Cache failure: compressed file %(compressed)s is older than its source file "
@@ -2095,28 +2109,28 @@
 msgstr ""
 
 # ../roundup/hyperdb.py:949:957
-#: ../roundup/hyperdb.py:1492 ../roundup/hyperdb.py:1500
-#: ../roundup/hyperdb.py:1492:1500
+#: ../roundup/hyperdb.py:1493 ../roundup/hyperdb.py:1501
+#: ../roundup/hyperdb.py:1493:1501
 #, python-format
 msgid "Not a property name: %s"
 msgstr ""
 
-#: ../roundup/hyperdb.py:1977
+#: ../roundup/hyperdb.py:1978
 #, fuzzy, python-format
 msgid "property %(property)s: %(value)r is not a %(classname)s."
 msgstr "\"%(propname)s\" tulajdonság: \"%(value)s\" jelenleg nincs a listában"
 
-#: ../roundup/hyperdb.py:1983
+#: ../roundup/hyperdb.py:1984
 #, python-format
 msgid "you may only enter ID values for property %s"
 msgstr ""
 
-#: ../roundup/hyperdb.py:2018
+#: ../roundup/hyperdb.py:2019
 #, python-format
 msgid "%(property)r is not a property of %(classname)s"
 msgstr ""
 
-#: ../roundup/init.py:139
+#: ../roundup/init.py:141
 #, python-format
 msgid ""
 "WARNING: directory '%s'\n"
@@ -2385,7 +2399,7 @@
 "%(mailadmin)s-nal és javíttassa ki a hibás tulajdonságokat:\n"
 "  %(errors)s\n"
 
-#: ../roundup/mailgw.py:1820
+#: ../roundup/mailgw.py:1821
 #, fuzzy, python-format
 msgid ""
 "\n"
@@ -2413,19 +2427,19 @@
 msgid "Invalid attribute %s"
 msgstr "Hibás bejelentkezés"
 
-#: ../roundup/rest.py:2078
+#: ../roundup/rest.py:2090
 #, python-format
 msgid "Api rate limits exceeded. Please wait: %s seconds."
 msgstr ""
 
-#: ../roundup/rest.py:2113
+#: ../roundup/rest.py:2125
 #, python-format
 msgid ""
 "Unable to parse Accept Header. %(error)s. Acceptable types: "
 "%(acceptable_types)s"
 msgstr ""
 
-#: ../roundup/rest.py:2262
+#: ../roundup/rest.py:2305
 #, python-format
 msgid ""
 "Unrecognized api version: %s. See /rest without specifying api version for "
@@ -2549,27 +2563,27 @@
 msgid "No tracker templates found in directory %s"
 msgstr "Nem található tracker sablon a(z) %s könyvtárban"
 
-#: ../roundup/scripts/roundup_mailgw.py:185
+#: ../roundup/scripts/roundup_mailgw.py:182
 msgid ""
 "\n"
 "Error: The instance home must be specified"
 msgstr ""
 
-#: ../roundup/scripts/roundup_mailgw.py:203
+#: ../roundup/scripts/roundup_mailgw.py:200
 #, fuzzy
 msgid ""
 "\n"
 "Error: not enough source specification information"
 msgstr "Hiba: nincs elég forrás specifikációs információ"
 
-#: ../roundup/scripts/roundup_mailgw.py:234
+#: ../roundup/scripts/roundup_mailgw.py:231
 #, fuzzy, python-format
 msgid ""
 "\n"
 "Error: %s specification not valid"
 msgstr "Hiba: a pop specifikáció nem érvényes"
 
-#: ../roundup/scripts/roundup_mailgw.py:258
+#: ../roundup/scripts/roundup_mailgw.py:254
 #, fuzzy
 msgid ""
 "\n"
@@ -2583,7 +2597,7 @@
 msgid "WARNING: generating temporary SSL certificate"
 msgstr ""
 
-#: ../roundup/scripts/roundup_server.py:329
+#: ../roundup/scripts/roundup_server.py:331
 msgid ""
 "<html><head><title>Roundup trackers index</title></head>\n"
 "<body><h1>Roundup trackers index</h1><ol>\n"
@@ -2591,58 +2605,58 @@
 "<html><head><title>Roundup hibakövetők listája</title></head>\n"
 "<body><h1>Roundup hibakövetők listája</h1><ol>\n"
 
-#: ../roundup/scripts/roundup_server.py:549
+#: ../roundup/scripts/roundup_server.py:551
 #, fuzzy, python-format
 msgid "Error: %(type)s: %(value)s"
 msgstr "%(key)s: %(value)s"
 
-#: ../roundup/scripts/roundup_server.py:561
+#: ../roundup/scripts/roundup_server.py:563
 msgid "WARNING: ignoring \"-g\" argument, not root"
 msgstr "FIGYELEM: \"-g\" opció figyelmen kívül hagyásra került, nem root"
 
-#: ../roundup/scripts/roundup_server.py:567
+#: ../roundup/scripts/roundup_server.py:569
 msgid "Can't change groups - no grp module"
 msgstr "Nem lehet csoportot váltani - nincs meg a grp modul"
 
-#: ../roundup/scripts/roundup_server.py:576
+#: ../roundup/scripts/roundup_server.py:578
 #, python-format
 msgid "Group %(group)s doesn't exist"
 msgstr "%(group)s csoport nem létezik"
 
-#: ../roundup/scripts/roundup_server.py:588
+#: ../roundup/scripts/roundup_server.py:590
 msgid "Can't run as root!"
 msgstr "Nem futhat root-ként!"
 
-#: ../roundup/scripts/roundup_server.py:591
+#: ../roundup/scripts/roundup_server.py:593
 msgid "WARNING: ignoring \"-u\" argument, not root"
 msgstr "FIGYELEM: \"-u\" opció figyelmen kívül hagyásra került, nem root"
 
-#: ../roundup/scripts/roundup_server.py:597
+#: ../roundup/scripts/roundup_server.py:599
 msgid "Can't change users - no pwd module"
 msgstr "Felhasználóváltás nem sikerült - nincs pwd modul"
 
-#: ../roundup/scripts/roundup_server.py:606
+#: ../roundup/scripts/roundup_server.py:608
 #, python-format
 msgid "User %(user)s doesn't exist"
 msgstr "A(z) %(user)s felhasználó nem létezik"
 
-#: ../roundup/scripts/roundup_server.py:803
+#: ../roundup/scripts/roundup_server.py:805
 #, python-format
 msgid "Multiprocess mode \"%s\" is not available, switching to single-process"
 msgstr "\"%s\" többszálú mód nem érhető el, áttérés egyszálú módra"
 
-#: ../roundup/scripts/roundup_server.py:830
+#: ../roundup/scripts/roundup_server.py:832
 #, python-format
 msgid "Unable to bind to port %s, port already in use."
 msgstr "Nem sikerült a(z) %s portra csatlakozni, a port már használatban van."
 
-#: ../roundup/scripts/roundup_server.py:834
+#: ../roundup/scripts/roundup_server.py:836
 #, fuzzy, python-format
 msgid ""
 "Unable to bind to port %(port)s, access not allowed, errno: %(errno)s %(msg)s"
 msgstr "Nem sikerült a(z) %s portra csatlakozni, a port már használatban van."
 
-#: ../roundup/scripts/roundup_server.py:913
+#: ../roundup/scripts/roundup_server.py:915
 msgid ""
 " -c <Command>  Windows Service options.\n"
 "               If you want to run the server as a Windows Service, you\n"
@@ -2652,7 +2666,7 @@
 "               specifics."
 msgstr ""
 
-#: ../roundup/scripts/roundup_server.py:920
+#: ../roundup/scripts/roundup_server.py:922
 msgid ""
 " -u <UID>      runs the Roundup web server as this UID\n"
 " -g <GID>      runs the Roundup web server as this GID\n"
@@ -2661,7 +2675,7 @@
 "               specified if -d is used."
 msgstr ""
 
-#: ../roundup/scripts/roundup_server.py:927
+#: ../roundup/scripts/roundup_server.py:929
 #, python-format
 msgid ""
 "\n"
@@ -2728,21 +2742,21 @@
 "   any url-unsafe characters like spaces, as these confuse IE.\n"
 msgstr ""
 
-#: ../roundup/scripts/roundup_server.py:1103
+#: ../roundup/scripts/roundup_server.py:1105
 msgid "Instances must be name=home"
 msgstr "A példányoknak név=home formában kell lenniük"
 
-#: ../roundup/scripts/roundup_server.py:1117
+#: ../roundup/scripts/roundup_server.py:1119
 #, python-format
 msgid "Configuration saved to %s"
 msgstr "Beállítások elmentve ide: %s"
 
-#: ../roundup/scripts/roundup_server.py:1135
+#: ../roundup/scripts/roundup_server.py:1137
 msgid "Sorry, you can't run the server as a daemon on this Operating System"
 msgstr ""
 "Elnézést, ezen az operációs rendszeren a szerver nem indítható démonként"
 
-#: ../roundup/scripts/roundup_server.py:1155
+#: ../roundup/scripts/roundup_server.py:1157
 #, python-format
 msgid "Roundup server started on %(HOST)s:%(PORT)s"
 msgstr "Roundup server elindítva a(z) %(HOST)s:%(PORT)s gépen"
@@ -5205,6 +5219,9 @@
 msgid "Password"
 msgstr "Bejelentkezési jelszó"
 
+#~ msgid "roundup> "
+#~ msgstr "roundup> "
+
 #~ msgid "<em>%s: %s</em>\n"
 #~ msgstr "<em>%s: %s</em>\n"
 
--- a/locale/it.po	Wed Mar 01 10:43:54 2023 -0500
+++ b/locale/it.po	Wed Mar 01 10:51:37 2023 -0500
@@ -7,7 +7,7 @@
 msgstr ""
 "Project-Id-Version: Roundup 2.3.0\n"
 "Report-Msgid-Bugs-To: roundup-devel@lists.sourceforge.net\n"
-"POT-Creation-Date: 2022-11-23 22:28-0500\n"
+"POT-Creation-Date: 2023-03-01 10:35-0500\n"
 "PO-Revision-Date: 2013-10-31 12:20+0100\n"
 "Last-Translator: Marco Ghidinelli <marco.ghidinelli@ing.unibs.it>\n"
 "Language-Team: italian <it@li.org>\n"
@@ -23,24 +23,24 @@
 "You do not have permission to retire or restore the %(classname)s class."
 msgstr "Non hai i permessi per %(action)s la classe %(classname)s."
 
-#: ../roundup/actions.py:64 ../roundup/cgi/actions.py:240
+#: ../roundup/actions.py:65 ../roundup/cgi/actions.py:240
 msgid "You may not retire the admin or anonymous user"
 msgstr "Non è possibile ritirare l'utente amministratore o l'utente anonimo"
 
 # ../roundup/admin.py:1052 ../roundup/admin.py:85:981 :1030:1052
-#: ../roundup/admin.py:106 ../roundup/admin.py:1259 ../roundup/admin.py:1314
-#: ../roundup/admin.py:1341 ../roundup/admin.py:106:1259 :1314:1341
+#: ../roundup/admin.py:112 ../roundup/admin.py:1295 ../roundup/admin.py:1350
+#: ../roundup/admin.py:1377 ../roundup/admin.py:112:1295 :1350:1377
 #, python-format
 msgid "no such class \"%(classname)s\""
 msgstr "classe \"%(classname)s\" mancante"
 
 # ../roundup/admin.py:95 ../roundup/admin.py:99 ../roundup/admin.py:95:99
-#: ../roundup/admin.py:118
+#: ../roundup/admin.py:124
 #, python-format
 msgid "argument \"%(arg)s\" not propname=value"
 msgstr "argomento \"%(arg)s\" non nel formato nome=valore"
 
-#: ../roundup/admin.py:131
+#: ../roundup/admin.py:137
 #, python-format
 msgid ""
 "Problem: %(message)s\n"
@@ -49,7 +49,7 @@
 "Problema: %(message)s\n"
 "\n"
 
-#: ../roundup/admin.py:132
+#: ../roundup/admin.py:138
 #, python-format
 msgid ""
 "%(message)sUsage: roundup-admin [options] [<command> <arguments>]\n"
@@ -77,12 +77,12 @@
 " roundup-admin help all                   -- all available help\n"
 msgstr ""
 
-#: ../roundup/admin.py:159
+#: ../roundup/admin.py:165
 #, fuzzy
 msgid "Commands: "
 msgstr "Comandi:"
 
-#: ../roundup/admin.py:166
+#: ../roundup/admin.py:172
 msgid ""
 "Commands may be abbreviated as long as the abbreviation\n"
 "matches only one command, e.g. l == li == lis == list."
@@ -90,7 +90,7 @@
 "I comandi possono essere abbreviati finchè l'abbreviazione rimane univoca\n"
 "es: l == li == lis == list."
 
-#: ../roundup/admin.py:195
+#: ../roundup/admin.py:201
 msgid ""
 "\n"
 "All commands (except help) require a tracker specifier. This is just\n"
@@ -142,7 +142,7 @@
 " . ROUNDUP_LOGIN environment variable\n"
 " . the -u command-line option\n"
 "If either the name or password is not supplied, they are obtained from the\n"
-"command-line.\n"
+"command-line. (See admin guide before using -u.)\n"
 "\n"
 "Date format examples:\n"
 "  \"2000-04-17.03:45\" means <Date 2000-04-17.08:45:00>\n"
@@ -157,12 +157,12 @@
 "Command help:\n"
 msgstr ""
 
-#: ../roundup/admin.py:258
+#: ../roundup/admin.py:264
 #, python-format
 msgid "%s:"
 msgstr "%s:"
 
-#: ../roundup/admin.py:265
+#: ../roundup/admin.py:271
 msgid ""
 "Usage: help topic\n"
 "        Give help about topic.\n"
@@ -174,22 +174,22 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:287
+#: ../roundup/admin.py:293
 #, python-format
 msgid "Sorry, no help for \"%(topic)s\""
 msgstr "Nessun aiuto per \"%(topic)s\""
 
 # ../roundup/admin.py:340 ../roundup/admin.py:396 ../roundup/admin.py:340:396
-#: ../roundup/admin.py:402 ../roundup/admin.py:458 ../roundup/admin.py:402:458
+#: ../roundup/admin.py:408 ../roundup/admin.py:464 ../roundup/admin.py:408:464
 msgid "Templates:"
 msgstr "Modelli predefiniti:"
 
 # ../roundup/admin.py:343 ../roundup/admin.py:407 ../roundup/admin.py:343:407
-#: ../roundup/admin.py:405 ../roundup/admin.py:468 ../roundup/admin.py:405:468
+#: ../roundup/admin.py:411 ../roundup/admin.py:474 ../roundup/admin.py:411:474
 msgid "Back ends:"
 msgstr "Back ends:"
 
-#: ../roundup/admin.py:408
+#: ../roundup/admin.py:414
 msgid ""
 "Usage: install [template [backend [key=val[,key=val]]]]\n"
 "        Install a new Roundup tracker.\n"
@@ -217,23 +217,23 @@
 
 # ../roundup/admin.py:1243 ../roundup/admin.py:369:466 :1020:1042 :1072:1171
 # :1243 :527:606 :656:714 :735:763 :834:901 :972
-#: ../roundup/admin.py:431 ../roundup/admin.py:562 ../roundup/admin.py:635
-#: ../roundup/admin.py:728 ../roundup/admin.py:786 ../roundup/admin.py:872
-#: ../roundup/admin.py:931 ../roundup/admin.py:958 ../roundup/admin.py:985
-#: ../roundup/admin.py:1062 ../roundup/admin.py:1157 ../roundup/admin.py:1243
-#: ../roundup/admin.py:1304 ../roundup/admin.py:1331 ../roundup/admin.py:1367
-#: ../roundup/admin.py:1495 ../roundup/admin.py:1579
-#: ../roundup/admin.py:431:562 :1157 :1243:1304 :1331:1367 :1495:1579 :635:728
-#: :786:872 :931:958 :985:1062
+#: ../roundup/admin.py:437 ../roundup/admin.py:568 ../roundup/admin.py:671
+#: ../roundup/admin.py:764 ../roundup/admin.py:822 ../roundup/admin.py:908
+#: ../roundup/admin.py:967 ../roundup/admin.py:994 ../roundup/admin.py:1021
+#: ../roundup/admin.py:1098 ../roundup/admin.py:1193 ../roundup/admin.py:1279
+#: ../roundup/admin.py:1340 ../roundup/admin.py:1367 ../roundup/admin.py:1403
+#: ../roundup/admin.py:1531 ../roundup/admin.py:1615
+#: ../roundup/admin.py:437:568 :1021:1098:1193 :1279:1340 :1367:1403 :1531:1615
+#: :671:764 :822:908 :967:994
 msgid "Not enough arguments supplied"
 msgstr "Non sono stati forniti abbastanza argomenti"
 
-#: ../roundup/admin.py:437
+#: ../roundup/admin.py:443
 #, python-format
 msgid "Instance home parent directory \"%(parent)s\" does not exist"
 msgstr "la directory radice dell'istanza \"%(parent)s\" non esiste"
 
-#: ../roundup/admin.py:446
+#: ../roundup/admin.py:452
 #, python-format
 msgid ""
 "WARNING: There appears to be a tracker in \"%(tracker_home)s\"!\n"
@@ -244,22 +244,22 @@
 "Se verrà reinstallata, tutti i dati precedentemente salvati andranno persi\n"
 "Cancellare la directory specificata? Y/N: "
 
-#: ../roundup/admin.py:459
+#: ../roundup/admin.py:465
 #, fuzzy
 msgid "Select template"
 msgstr "Seleziona il modello predefinito [classic]: "
 
-#: ../roundup/admin.py:469
+#: ../roundup/admin.py:475
 #, fuzzy
 msgid "Select backend"
 msgstr "Seleziona il backend [anydbm]: "
 
-#: ../roundup/admin.py:480
+#: ../roundup/admin.py:486
 #, python-format
 msgid "Error in configuration settings: \"%s\""
 msgstr "Erorre nei settaggi di configurazione: \"%s\""
 
-#: ../roundup/admin.py:511
+#: ../roundup/admin.py:517
 #, python-format
 msgid ""
 "\n"
@@ -268,11 +268,11 @@
 "   %(config_file)s"
 msgstr ""
 
-#: ../roundup/admin.py:521
+#: ../roundup/admin.py:527
 msgid " ... at a minimum, you must set following options:"
 msgstr " ... devono essere configurate almeno le seguenti opzioni:"
 
-#: ../roundup/admin.py:526
+#: ../roundup/admin.py:532
 #, python-format
 msgid ""
 "\n"
@@ -289,7 +289,7 @@
 "---------------------------------------------------------------------------\n"
 msgstr ""
 
-#: ../roundup/admin.py:557
+#: ../roundup/admin.py:563
 msgid ""
 "Usage: genconfig <filename>\n"
 "        Generate a new tracker config file (ini style) with default\n"
@@ -297,7 +297,22 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:572
+#: ../roundup/admin.py:581
+#, python-format
+msgid ""
+"Changing option\n"
+"   'password_pbkdf2_default_rounds'\n"
+"from old default of %(old_number)s to new default of %(new_number)s."
+msgstr ""
+
+#: ../roundup/admin.py:593
+#, python-format
+msgid ""
+"Update 'password_pbkdf2_default_rounds'to a number equal to or larger\n"
+"than %s."
+msgstr ""
+
+#: ../roundup/admin.py:604
 msgid ""
 "Usage: updateconfig <filename>\n"
 "        Generate an updated tracker config file (ini style) in\n"
@@ -307,7 +322,7 @@
 msgstr ""
 
 #. password
-#: ../roundup/admin.py:580
+#: ../roundup/admin.py:612
 msgid ""
 "Usage: initialise [adminpw]\n"
 "        Initialise a new Roundup tracker.\n"
@@ -318,30 +333,30 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:594
+#: ../roundup/admin.py:626
 msgid "Admin Password: "
 msgstr "Password dell'amministratore"
 
-#: ../roundup/admin.py:595
+#: ../roundup/admin.py:627
 msgid "       Confirm: "
 msgstr "       Conferma: "
 
-#: ../roundup/admin.py:599
+#: ../roundup/admin.py:631
 msgid "Instance home does not exist"
 msgstr "La home dell'istanza non esiste"
 
-#: ../roundup/admin.py:603
+#: ../roundup/admin.py:635
 msgid "Instance has not been installed"
 msgstr "L'istanza non è stata installata"
 
-#: ../roundup/admin.py:609
+#: ../roundup/admin.py:641
 msgid ""
 "WARNING: The database is already initialised!\n"
 "If you re-initialise it, you will lose all the data!\n"
 "Erase it? Y/N: "
 msgstr ""
 
-#: ../roundup/admin.py:625
+#: ../roundup/admin.py:661
 msgid ""
 "Usage: get property designator[,designator]*\n"
 "        Get the given property of one or more designator(s).\n"
@@ -355,24 +370,24 @@
 msgstr ""
 
 # ../roundup/admin.py:560 ../roundup/admin.py:575 ../roundup/admin.py:560:575
-#: ../roundup/admin.py:669 ../roundup/admin.py:687 ../roundup/admin.py:669:687
+#: ../roundup/admin.py:705 ../roundup/admin.py:723 ../roundup/admin.py:705:723
 #, python-format
 msgid "property %s is not of type Multilink or Link so -d flag does not apply."
 msgstr ""
 
 # ../roundup/admin.py:1054 ../roundup/admin.py:583:983 :1032:1054
-#: ../roundup/admin.py:697 ../roundup/admin.py:1261 ../roundup/admin.py:1316
-#: ../roundup/admin.py:697:1261:1316
+#: ../roundup/admin.py:733 ../roundup/admin.py:1297 ../roundup/admin.py:1352
+#: ../roundup/admin.py:733:1297:1352
 #, python-format
 msgid "no such %(classname)s node \"%(nodeid)s\""
 msgstr ""
 
-#: ../roundup/admin.py:700
+#: ../roundup/admin.py:736
 #, python-format
 msgid "no such %(classname)s property \"%(propname)s\""
 msgstr ""
 
-#: ../roundup/admin.py:708
+#: ../roundup/admin.py:744
 msgid ""
 "Usage: set items property=value property=value ...\n"
 "        Set the given properties of one or more items(s).\n"
@@ -393,7 +408,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:776
+#: ../roundup/admin.py:812
 msgid ""
 "Usage: filter classname propname=value ...\n"
 "        Find the nodes of the given class with a given property value.\n"
@@ -407,20 +422,20 @@
 msgstr ""
 
 # ../roundup/admin.py:920 ../roundup/admin.py:701:854 :866:920
-#: ../roundup/admin.py:819
+#: ../roundup/admin.py:855
 #, fuzzy, python-format
 msgid "Class %(curclassname)s has no property %(pn)s in %(propname)s."
 msgstr "la classe %(classname)s non ha la proprietà \"%(propname)s\""
 
 # ../roundup/admin.py:920 ../roundup/admin.py:701:854 :866:920
-#: ../roundup/admin.py:857 ../roundup/admin.py:918 ../roundup/admin.py:1082
-#: ../roundup/admin.py:1094 ../roundup/admin.py:1177
-#: ../roundup/admin.py:857:918 :1082:1094:1177
+#: ../roundup/admin.py:893 ../roundup/admin.py:954 ../roundup/admin.py:1118
+#: ../roundup/admin.py:1130 ../roundup/admin.py:1213
+#: ../roundup/admin.py:893:954 :1118:1130:1213
 #, python-format
 msgid "%(classname)s has no property \"%(propname)s\""
 msgstr "la classe %(classname)s non ha la proprietà \"%(propname)s\""
 
-#: ../roundup/admin.py:864
+#: ../roundup/admin.py:900
 msgid ""
 "Usage: find classname propname=value ...\n"
 "        Find the nodes of the given class with a given link property value.\n"
@@ -431,7 +446,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:925
+#: ../roundup/admin.py:961
 msgid ""
 "Usage: specification classname\n"
 "        Show the properties for a classname.\n"
@@ -440,17 +455,17 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:941
+#: ../roundup/admin.py:977
 #, fuzzy, python-format
 msgid "%(key)s: %(value)s (key property)\n"
 msgstr "%(key)s %(value)s (chiave)"
 
-#: ../roundup/admin.py:944
+#: ../roundup/admin.py:980
 #, fuzzy, python-format
 msgid "%(key)s: %(value)s\n"
 msgstr "%(key)s:·%(value)s"
 
-#: ../roundup/admin.py:947
+#: ../roundup/admin.py:983
 msgid ""
 "Usage: display designator[,designator]*\n"
 "\n"
@@ -464,12 +479,12 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:974
+#: ../roundup/admin.py:1010
 #, python-format
 msgid "%(key)s: %(value)s"
 msgstr "%(key)s:·%(value)s"
 
-#: ../roundup/admin.py:977
+#: ../roundup/admin.py:1013
 msgid ""
 "Usage: create classname property=value ...\n"
 "        Create a new entry of a given class.\n"
@@ -481,31 +496,31 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1005
+#: ../roundup/admin.py:1041
 #, python-format
 msgid "%(propname)s (Password): "
 msgstr "%(propname)s·(Password):·"
 
-#: ../roundup/admin.py:1008
+#: ../roundup/admin.py:1044
 #, python-format
 msgid "   %(propname)s (Again): "
 msgstr "   %(propname)s (Ripeti password): "
 
-#: ../roundup/admin.py:1012
+#: ../roundup/admin.py:1048
 msgid "Sorry, try again..."
 msgstr "Mi dispiace, riprova..."
 
-#: ../roundup/admin.py:1016
+#: ../roundup/admin.py:1052
 #, python-format
 msgid "%(propname)s (%(proptype)s): "
 msgstr "%(propname)s (%(proptype)s): "
 
-#: ../roundup/admin.py:1035
+#: ../roundup/admin.py:1071
 #, python-format
 msgid "you must provide the \"%(propname)s\" property."
 msgstr "deve essere fornita la proprietà \"%(propname)s\"."
 
-#: ../roundup/admin.py:1047
+#: ../roundup/admin.py:1083
 msgid ""
 "Usage: list classname [property]\n"
 "        List the instances of a class.\n"
@@ -521,16 +536,16 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1060
+#: ../roundup/admin.py:1096
 msgid "Too many arguments supplied"
 msgstr ""
 
-#: ../roundup/admin.py:1096
+#: ../roundup/admin.py:1132
 #, python-format
 msgid "%(nodeid)4s: %(value)s"
 msgstr ""
 
-#: ../roundup/admin.py:1100
+#: ../roundup/admin.py:1136
 msgid ""
 "Usage: templates [trace_search]\n"
 "        List templates and their installed directories.\n"
@@ -540,7 +555,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1128
+#: ../roundup/admin.py:1164
 msgid ""
 "Usage: table classname [property[,property]*]\n"
 "        List the instances of a class in tabular form.\n"
@@ -572,17 +587,17 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1172
+#: ../roundup/admin.py:1208
 #, python-format
 msgid "\"%(spec)s\" not name:width"
 msgstr ""
 
-#: ../roundup/admin.py:1194
-#, python-format
-msgid "\"%(spec)s\" does not have an integer width: \"%(width)s\""
-msgstr ""
-
 #: ../roundup/admin.py:1230
+#, python-format
+msgid "\"%(spec)s\" does not have an integer width: \"%(width)s\""
+msgstr ""
+
+#: ../roundup/admin.py:1266
 msgid ""
 "Usage: history designator [skipquiet]\n"
 "        Show the history entries of a designator.\n"
@@ -597,7 +612,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1266
+#: ../roundup/admin.py:1302
 msgid ""
 "Usage: commit\n"
 "        Commit changes made to the database during an interactive session.\n"
@@ -611,7 +626,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1281
+#: ../roundup/admin.py:1317
 msgid ""
 "Usage: rollback\n"
 "        Undo all changes that are pending commit to the database.\n"
@@ -623,7 +638,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1294
+#: ../roundup/admin.py:1330
 msgid ""
 "Usage: retire designator[,designator]*\n"
 "        Retire the node specified by designator.\n"
@@ -636,7 +651,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1322
+#: ../roundup/admin.py:1358
 msgid ""
 "Usage: restore designator[,designator]*\n"
 "        Restore the retired node specified by designator.\n"
@@ -649,13 +664,13 @@
 msgstr ""
 
 # ../roundup/admin.py:1052 ../roundup/admin.py:85:981 :1030:1052
-#: ../roundup/admin.py:1347
+#: ../roundup/admin.py:1383
 #, fuzzy
 msgid "no such %(classname)s node \" % (nodeid)s\""
 msgstr "classe \"%(classname)s\" mancante"
 
 #. grab the directory to export to
-#: ../roundup/admin.py:1353
+#: ../roundup/admin.py:1389
 msgid ""
 "Usage: export [[-]class[,class]] export_dir\n"
 "        Export the database to colon-separated-value files.\n"
@@ -671,7 +686,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1460
+#: ../roundup/admin.py:1496
 msgid ""
 "Usage: exporttables [[-]class[,class]] export_dir\n"
 "        Export the database to colon-separated-value files, excluding the\n"
@@ -688,7 +703,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1475
+#: ../roundup/admin.py:1511
 msgid ""
 "Usage: import import_dir\n"
 "        Import a database from the directory containing CSV files,\n"
@@ -711,7 +726,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1554
+#: ../roundup/admin.py:1590
 msgid ""
 "Usage: importtables export_dir\n"
 "\n"
@@ -719,7 +734,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1561
+#: ../roundup/admin.py:1597
 msgid ""
 "Usage: pack period | date\n"
 "\n"
@@ -741,11 +756,11 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1589
+#: ../roundup/admin.py:1625
 msgid "Invalid format"
 msgstr ""
 
-#: ../roundup/admin.py:1602
+#: ../roundup/admin.py:1638
 msgid ""
 "Usage: reindex [classname|designator]*\n"
 "        Re-generate a tracker's search indexes.\n"
@@ -755,12 +770,12 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1616
+#: ../roundup/admin.py:1652
 #, python-format
 msgid "no such item \"%(designator)s\""
 msgstr ""
 
-#: ../roundup/admin.py:1626
+#: ../roundup/admin.py:1662
 msgid ""
 "Usage: security [Role name]\n"
 "\n"
@@ -768,46 +783,46 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1635
+#: ../roundup/admin.py:1671
 #, fuzzy, python-format
 msgid "No such Role \"%(role)s\"\n"
 msgstr "Non è presente il ruolo \"%(role)s\""
 
-#: ../roundup/admin.py:1641
+#: ../roundup/admin.py:1677
 #, fuzzy, python-format
 msgid "New Web users get the Roles \"%(role)s\"\n"
 msgstr "I nuovi utenti Web otterranno i ruoli \"%(role)s\""
 
-#: ../roundup/admin.py:1644
+#: ../roundup/admin.py:1680
 #, fuzzy, python-format
 msgid "New Web users get the Role \"%(role)s\"\n"
 msgstr "I nuovi utenti Web otterranno il ruolo \"%(role)s)\""
 
-#: ../roundup/admin.py:1648
+#: ../roundup/admin.py:1684
 #, fuzzy, python-format
 msgid "New Email users get the Roles \"%(role)s\"\n"
 msgstr "I nuovi utenti Email otterranno i ruoli \"%(role)s)\""
 
-#: ../roundup/admin.py:1650
+#: ../roundup/admin.py:1686
 #, fuzzy, python-format
 msgid "New Email users get the Role \"%(role)s\"\n"
 msgstr "I nuovi utenti Email otterranno il ruolo \"%(role)s\""
 
-#: ../roundup/admin.py:1653
+#: ../roundup/admin.py:1689
 #, fuzzy, python-format
 msgid "Role \"%(name)s\":\n"
 msgstr "Ruolo \"%(name)s\":"
 
-#: ../roundup/admin.py:1659
+#: ../roundup/admin.py:1695
 msgid " %(description)s (%(name)s for \"%(klass)s\""
 msgstr ""
 
-#: ../roundup/admin.py:1659
+#: ../roundup/admin.py:1695
 #, python-format
 msgid " %(description)s (%(name)s for \"%(klass)s\": %(properties)s only)\n"
 msgstr ""
 
-#: ../roundup/admin.py:1672
+#: ../roundup/admin.py:1708
 #, python-format
 msgid ""
 "\n"
@@ -815,17 +830,17 @@
 "\n"
 msgstr ""
 
-#: ../roundup/admin.py:1678
+#: ../roundup/admin.py:1714
 #, python-format
 msgid " %(description)s (%(name)s for \"%(klass)s\" only)\n"
 msgstr ""
 
-#: ../roundup/admin.py:1681
+#: ../roundup/admin.py:1717
 #, python-format
 msgid " %(description)s (%(name)s)\n"
 msgstr ""
 
-#: ../roundup/admin.py:1685
+#: ../roundup/admin.py:1721
 msgid ""
 "Usage: migrate\n"
 "\n"
@@ -849,61 +864,57 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1706
+#: ../roundup/admin.py:1742
 msgid "Tracker updated"
 msgstr ""
 
-#: ../roundup/admin.py:1709
+#: ../roundup/admin.py:1745
 msgid "No migration action required"
 msgstr ""
 
-#: ../roundup/admin.py:1735
+#: ../roundup/admin.py:1771
 #, python-format
 msgid "Unknown command \"%(command)s\" (\"help commands\" for a list)"
 msgstr ""
 
-#: ../roundup/admin.py:1741
+#: ../roundup/admin.py:1777
 #, python-format
 msgid "Multiple commands match \"%(command)s\": %(list)s"
 msgstr ""
 
-#: ../roundup/admin.py:1750
+#: ../roundup/admin.py:1786
 msgid "Enter tracker home: "
 msgstr ""
 
 # ../roundup/admin.py:1371:1377 :1397
-#: ../roundup/admin.py:1759 ../roundup/admin.py:1765 ../roundup/admin.py:1802
-#: ../roundup/admin.py:1759:1765:1802
+#: ../roundup/admin.py:1795 ../roundup/admin.py:1801 ../roundup/admin.py:1838
+#: ../roundup/admin.py:1795:1801:1838
 #, python-format
 msgid "Error: %(message)s"
 msgstr ""
 
-#: ../roundup/admin.py:1775 ../roundup/admin.py:1779
-#: ../roundup/admin.py:1775:1779
+#: ../roundup/admin.py:1811 ../roundup/admin.py:1815
+#: ../roundup/admin.py:1811:1815
 #, python-format
 msgid "Error: Couldn't open tracker: %(message)s"
 msgstr ""
 
-#: ../roundup/admin.py:1815
+#: ../roundup/admin.py:1851
 #, python-format
 msgid ""
 "Roundup %s ready for input.\n"
 "Type \"help\" for help."
 msgstr ""
 
-#: ../roundup/admin.py:1820
+#: ../roundup/admin.py:1856
 msgid "Note: command history and editing not available"
 msgstr ""
 
-#: ../roundup/admin.py:1824
-msgid "roundup> "
-msgstr ""
-
-#: ../roundup/admin.py:1826
+#: ../roundup/admin.py:1862
 msgid "exit..."
 msgstr ""
 
-#: ../roundup/admin.py:1839
+#: ../roundup/admin.py:1875
 msgid "There are unsaved changes. Commit them (y/N)? "
 msgstr ""
 
@@ -1011,20 +1022,22 @@
 msgid "restored"
 msgstr "ripristina"
 
-#: ../roundup/backends/sessions_redis.py:76
-#: ../roundup/backends/sessions_redis.py:95
-#: ../roundup/backends/sessions_redis.py:76:95
+#: ../roundup/backends/sessions_redis.py:78
+#: ../roundup/backends/sessions_redis.py:97
+#: ../roundup/backends/sessions_redis.py:78:97
 #, python-format
 msgid "Key %(key)s not found in %(name)s database."
 msgstr ""
 
-#: ../roundup/backends/sessions_redis.py:191
+#: ../roundup/backends/sessions_redis.py:193
 #, python-format
 msgid "Key %(key)s changed in %(name)s db"
 msgstr ""
 
-#: ../roundup/backends/sessions_redis.py:195
-msgid "Redis set failed afer 3 retries"
+#: ../roundup/backends/sessions_redis.py:203
+#, python-format
+msgid ""
+"Redis set failed after %(retries)d retries for user %(user)s with key %(key)s"
 msgstr ""
 
 #: ../roundup/cgi/actions.py:97
@@ -1340,22 +1353,22 @@
 msgstr ""
 
 # ../roundup/cgi/actions.py:931:935
-#: ../roundup/cgi/actions.py:1383 ../roundup/cgi/actions.py:1387
-#: ../roundup/cgi/actions.py:1383:1387
+#: ../roundup/cgi/actions.py:1384 ../roundup/cgi/actions.py:1388
+#: ../roundup/cgi/actions.py:1384:1388
 msgid "Invalid login"
 msgstr "Login invalida"
 
-#: ../roundup/cgi/actions.py:1393
+#: ../roundup/cgi/actions.py:1394
 msgid "You do not have permission to login"
 msgstr "Non hai il permesso per eseguire la login"
 
-#: ../roundup/cgi/actions.py:1437 ../roundup/cgi/actions.py:1616
-#: ../roundup/cgi/actions.py:1437:1616
+#: ../roundup/cgi/actions.py:1439 ../roundup/cgi/actions.py:1618
+#: ../roundup/cgi/actions.py:1439:1618
 #, python-format
 msgid "Column \"%(column)s\" not found in %(class)s"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1687
+#: ../roundup/cgi/actions.py:1689
 #, fuzzy, python-format
 msgid "You do not have permission to view %(class)s"
 msgstr "Non hai i permessi per modificare i %(class)s"
@@ -1459,158 +1472,159 @@
 "La notifica del problema è stata notificata al manutentore del tracker.</p>\n"
 "</body></html>"
 
-#: ../roundup/cgi/client.py:651
+#: ../roundup/cgi/client.py:670 ../roundup/cgi/client.py:1570
+#: ../roundup/cgi/client.py:670:1570
+msgid "Required Header Missing"
+msgstr ""
+
+#: ../roundup/cgi/client.py:672
 #, fuzzy
 msgid "Client is not allowed to use Rest Interface."
 msgstr ""
 "Gli utenti anonimi non hanno il permesso di utilizzare l'interfaccia web"
 
-#: ../roundup/cgi/client.py:895
+#: ../roundup/cgi/client.py:921
 msgid "Form Error: "
 msgstr "Errore nella Form: "
 
-#: ../roundup/cgi/client.py:985
+#: ../roundup/cgi/client.py:1011
 #, python-format
 msgid "Unrecognized charset: %r"
 msgstr "Codice di carattere sconosciuto: %r"
 
-#: ../roundup/cgi/client.py:1238 ../roundup/cgi/client.py:2196
-#: ../roundup/cgi/client.py:1238:2196
+#: ../roundup/cgi/client.py:1264 ../roundup/cgi/client.py:2250
+#: ../roundup/cgi/client.py:1264:2250
 msgid "broken form: multiple @action values submitted"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1253
+#: ../roundup/cgi/client.py:1279
 msgid "Anonymous users are not allowed to use the web interface"
 msgstr ""
 "Gli utenti anonimi non hanno il permesso di utilizzare l'interfaccia web"
 
-#: ../roundup/cgi/client.py:1376
+#: ../roundup/cgi/client.py:1430
 msgid "Referer header not available."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1380
+#: ../roundup/cgi/client.py:1434
 #, python-format
 msgid "csrf key used with wrong method from: %s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1409
+#: ../roundup/cgi/client.py:1463
 #, python-format
 msgid "csrf header %(header)s required but missing for user%(userid)s."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1413
+#: ../roundup/cgi/client.py:1467
 #, python-format
 msgid "Missing header: %s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1421
+#: ../roundup/cgi/client.py:1475
 #, python-format
 msgid "csrf Referer header check failed for user%(userid)s. Value=%(referer)s"
 msgstr ""
 
 # ../roundup/cgi/actions.py:931:935
-#: ../roundup/cgi/client.py:1426
+#: ../roundup/cgi/client.py:1480
 #, fuzzy, python-format
 msgid "Invalid Referer: %s"
 msgstr "Login invalida"
 
-#: ../roundup/cgi/client.py:1441
+#: ../roundup/cgi/client.py:1495
 #, python-format
 msgid "csrf Origin header check failed for user%(userid)s. Value=%(origin)s"
 msgstr ""
 
 # ../roundup/cgi/actions.py:931:935
-#: ../roundup/cgi/client.py:1446
+#: ../roundup/cgi/client.py:1500
 #, fuzzy, python-format
 msgid "Invalid Origin %s"
 msgstr "Login invalida"
 
-#: ../roundup/cgi/client.py:1460
+#: ../roundup/cgi/client.py:1514
 #, python-format
 msgid ""
 "csrf X-FORWARDED-HOST header check failed for user%(userid)s. Value=%(host)s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1466
+#: ../roundup/cgi/client.py:1520
 #, python-format
 msgid "Invalid X-FORWARDED-HOST %s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1485
+#: ../roundup/cgi/client.py:1539
 #, python-format
 msgid "csrf HOST header check failed for user%(userid)s. Value=%(host)s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1490
+#: ../roundup/cgi/client.py:1544
 #, python-format
 msgid "Invalid HOST %s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1498
+#: ../roundup/cgi/client.py:1552
 msgid "Csrf: unable to verify sufficient headers"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1499
+#: ../roundup/cgi/client.py:1553
 msgid "Unable to verify sufficient headers"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1513
+#: ../roundup/cgi/client.py:1567
 #, python-format
 msgid "csrf X-REQUESTED-WITH xmlrpc required header check failed for user%s."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1516
-msgid "Required Header Missing"
-msgstr ""
-
-#: ../roundup/cgi/client.py:1554
+#: ../roundup/cgi/client.py:1608
 #, python-format
 msgid "Required csrf field missing for user%s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1556 ../roundup/cgi/client.py:1583
-#: ../roundup/cgi/client.py:1600 ../roundup/cgi/client.py:1556:1583:1600
+#: ../roundup/cgi/client.py:1610 ../roundup/cgi/client.py:1637
+#: ../roundup/cgi/client.py:1654 ../roundup/cgi/client.py:1610:1637:1654
 msgid ""
 "We can't validate your session (csrf failure). Re-enter any unsaved data and "
 "try again."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1560
+#: ../roundup/cgi/client.py:1614
 #, python-format
 msgid "csrf field not supplied by user%s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1572
+#: ../roundup/cgi/client.py:1626
 #, python-format
 msgid ""
 "Csrf mismatch user: current user %(user)s != stored user %(stored)s, current "
 "session, stored session: %(cur_sess)s,%(stor_sess)s for key %(key)s."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1590
+#: ../roundup/cgi/client.py:1644
 #, python-format
 msgid ""
 "Csrf mismatch user: current session %(curr_sess)s != stored session "
 "%(stor_sess)s, current user/stored user is: %(user)s for key %(key)s."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1784
+#: ../roundup/cgi/client.py:1838
 msgid "You are not allowed to view this file."
 msgstr "Non si dispone dei permessi per visualizzare questo file."
 
-#: ../roundup/cgi/client.py:2073
+#: ../roundup/cgi/client.py:2127
 #, python-format
 msgid "%(starttag)sTime elapsed: %(seconds)fs%(endtag)s\n"
 msgstr "%(starttag)sTempo trascorso: %(seconds)fs%(endtag)s\n"
 
-#: ../roundup/cgi/client.py:2077
+#: ../roundup/cgi/client.py:2131
 #, python-format
 msgid ""
 "%(starttag)sCache hits: %(cache_hits)d, misses %(cache_misses)d. Loading "
 "items: %(get_items)f secs. Filtering: %(filtering)f secs.%(endtag)s\n"
 msgstr ""
 
-#: ../roundup/cgi/client.py:2615
+#: ../roundup/cgi/client.py:2669
 #, python-format
 msgid ""
 "Cache failure: compressed file %(compressed)s is older than its source file "
@@ -2016,29 +2030,29 @@
 msgid "\"%s\" not a node designator"
 msgstr ""
 
-#: ../roundup/hyperdb.py:1492 ../roundup/hyperdb.py:1500
-#: ../roundup/hyperdb.py:1492:1500
+#: ../roundup/hyperdb.py:1493 ../roundup/hyperdb.py:1501
+#: ../roundup/hyperdb.py:1493:1501
 #, python-format
 msgid "Not a property name: %s"
 msgstr ""
 
-#: ../roundup/hyperdb.py:1977
+#: ../roundup/hyperdb.py:1978
 #, fuzzy, python-format
 msgid "property %(property)s: %(value)r is not a %(classname)s."
 msgstr ""
 "la proprietà \"%(propname)s\": \"%(value)s\" non è al momento nella lista"
 
-#: ../roundup/hyperdb.py:1983
+#: ../roundup/hyperdb.py:1984
 #, python-format
 msgid "you may only enter ID values for property %s"
 msgstr ""
 
-#: ../roundup/hyperdb.py:2018
+#: ../roundup/hyperdb.py:2019
 #, python-format
 msgid "%(property)r is not a property of %(classname)s"
 msgstr ""
 
-#: ../roundup/init.py:139
+#: ../roundup/init.py:141
 #, python-format
 msgid ""
 "WARNING: directory '%s'\n"
@@ -2327,7 +2341,7 @@
 "%(mailadmin)s e segnala che la proprietà scorretta:\n"
 "  %(errors)s\n"
 
-#: ../roundup/mailgw.py:1820
+#: ../roundup/mailgw.py:1821
 #, fuzzy, python-format
 msgid ""
 "\n"
@@ -2355,19 +2369,19 @@
 msgid "Invalid attribute %s"
 msgstr "Login invalida"
 
-#: ../roundup/rest.py:2078
+#: ../roundup/rest.py:2090
 #, python-format
 msgid "Api rate limits exceeded. Please wait: %s seconds."
 msgstr ""
 
-#: ../roundup/rest.py:2113
+#: ../roundup/rest.py:2125
 #, python-format
 msgid ""
 "Unable to parse Accept Header. %(error)s. Acceptable types: "
 "%(acceptable_types)s"
 msgstr ""
 
-#: ../roundup/rest.py:2262
+#: ../roundup/rest.py:2305
 #, python-format
 msgid ""
 "Unrecognized api version: %s. See /rest without specifying api version for "
@@ -2500,27 +2514,27 @@
 msgid "No tracker templates found in directory %s"
 msgstr ""
 
-#: ../roundup/scripts/roundup_mailgw.py:185
+#: ../roundup/scripts/roundup_mailgw.py:182
 msgid ""
 "\n"
 "Error: The instance home must be specified"
 msgstr ""
 
-#: ../roundup/scripts/roundup_mailgw.py:203
+#: ../roundup/scripts/roundup_mailgw.py:200
 #, fuzzy
 msgid ""
 "\n"
 "Error: not enough source specification information"
 msgstr "Errore: insufficienti informazioni sul sorgente"
 
-#: ../roundup/scripts/roundup_mailgw.py:234
+#: ../roundup/scripts/roundup_mailgw.py:231
 #, fuzzy, python-format
 msgid ""
 "\n"
 "Error: %s specification not valid"
 msgstr "Errore: il pop server specificato non è valido."
 
-#: ../roundup/scripts/roundup_mailgw.py:258
+#: ../roundup/scripts/roundup_mailgw.py:254
 #, fuzzy
 msgid ""
 "\n"
@@ -2534,7 +2548,7 @@
 msgid "WARNING: generating temporary SSL certificate"
 msgstr ""
 
-#: ../roundup/scripts/roundup_server.py:329
+#: ../roundup/scripts/roundup_server.py:331
 msgid ""
 "<html><head><title>Roundup trackers index</title></head>\n"
 "<body><h1>Roundup trackers index</h1><ol>\n"
@@ -2542,60 +2556,60 @@
 "<html><head><title>indice dei ticket Roundup</title></head>\n"
 "<body><h1>indice dei ticket Roundup</h1><ol>\n"
 
-#: ../roundup/scripts/roundup_server.py:549
+#: ../roundup/scripts/roundup_server.py:551
 #, fuzzy, python-format
 msgid "Error: %(type)s: %(value)s"
 msgstr "%(key)s:·%(value)s"
 
-#: ../roundup/scripts/roundup_server.py:561
+#: ../roundup/scripts/roundup_server.py:563
 msgid "WARNING: ignoring \"-g\" argument, not root"
 msgstr "ATTENZIONE: ignoro il parametro \"-g\", non sei root"
 
-#: ../roundup/scripts/roundup_server.py:567
+#: ../roundup/scripts/roundup_server.py:569
 msgid "Can't change groups - no grp module"
 msgstr "Non è possibile cambiare gruppo - nessun modulo grp"
 
-#: ../roundup/scripts/roundup_server.py:576
+#: ../roundup/scripts/roundup_server.py:578
 #, python-format
 msgid "Group %(group)s doesn't exist"
 msgstr "Il gruppo %(group)s non esiste"
 
-#: ../roundup/scripts/roundup_server.py:588
+#: ../roundup/scripts/roundup_server.py:590
 msgid "Can't run as root!"
 msgstr "Non può essere eseguito come root!"
 
-#: ../roundup/scripts/roundup_server.py:591
+#: ../roundup/scripts/roundup_server.py:593
 msgid "WARNING: ignoring \"-u\" argument, not root"
 msgstr ""
 
-#: ../roundup/scripts/roundup_server.py:597
+#: ../roundup/scripts/roundup_server.py:599
 msgid "Can't change users - no pwd module"
 msgstr "Non è possibile cambiare utente - nessun modulo pwd"
 
-#: ../roundup/scripts/roundup_server.py:606
+#: ../roundup/scripts/roundup_server.py:608
 #, python-format
 msgid "User %(user)s doesn't exist"
 msgstr "L'utente %(user)s non esiste"
 
-#: ../roundup/scripts/roundup_server.py:803
+#: ../roundup/scripts/roundup_server.py:805
 #, python-format
 msgid "Multiprocess mode \"%s\" is not available, switching to single-process"
 msgstr ""
 "La modalità multiprocesso \"%s\" non è disponibile, viene utilizzata quella "
 "a singolo processo"
 
-#: ../roundup/scripts/roundup_server.py:830
+#: ../roundup/scripts/roundup_server.py:832
 #, python-format
 msgid "Unable to bind to port %s, port already in use."
 msgstr "Impossibile bindare alla porta %s, la porta risulta già in uso."
 
-#: ../roundup/scripts/roundup_server.py:834
+#: ../roundup/scripts/roundup_server.py:836
 #, fuzzy, python-format
 msgid ""
 "Unable to bind to port %(port)s, access not allowed, errno: %(errno)s %(msg)s"
 msgstr "Impossibile bindare alla porta %s, la porta risulta già in uso."
 
-#: ../roundup/scripts/roundup_server.py:913
+#: ../roundup/scripts/roundup_server.py:915
 msgid ""
 " -c <Command>  Windows Service options.\n"
 "               If you want to run the server as a Windows Service, you\n"
@@ -2605,7 +2619,7 @@
 "               specifics."
 msgstr ""
 
-#: ../roundup/scripts/roundup_server.py:920
+#: ../roundup/scripts/roundup_server.py:922
 msgid ""
 " -u <UID>      runs the Roundup web server as this UID\n"
 " -g <GID>      runs the Roundup web server as this GID\n"
@@ -2614,7 +2628,7 @@
 "               specified if -d is used."
 msgstr ""
 
-#: ../roundup/scripts/roundup_server.py:927
+#: ../roundup/scripts/roundup_server.py:929
 #, python-format
 msgid ""
 "\n"
@@ -2681,22 +2695,22 @@
 "   any url-unsafe characters like spaces, as these confuse IE.\n"
 msgstr ""
 
-#: ../roundup/scripts/roundup_server.py:1103
+#: ../roundup/scripts/roundup_server.py:1105
 msgid "Instances must be name=home"
 msgstr "L'istanza deve essere nel formato nome=home"
 
-#: ../roundup/scripts/roundup_server.py:1117
+#: ../roundup/scripts/roundup_server.py:1119
 #, python-format
 msgid "Configuration saved to %s"
 msgstr "Configurazione salvata in %s"
 
-#: ../roundup/scripts/roundup_server.py:1135
+#: ../roundup/scripts/roundup_server.py:1137
 msgid "Sorry, you can't run the server as a daemon on this Operating System"
 msgstr ""
 "Spiacente, non è possibile utilizzare il server come demone su questo "
 "sistema operativo."
 
-#: ../roundup/scripts/roundup_server.py:1155
+#: ../roundup/scripts/roundup_server.py:1157
 #, python-format
 msgid "Roundup server started on %(HOST)s:%(PORT)s"
 msgstr "Il server Roundup è stato attivato su %(HOST)s:%(PORT)s"
--- a/locale/ja.po	Wed Mar 01 10:43:54 2023 -0500
+++ b/locale/ja.po	Wed Mar 01 10:51:37 2023 -0500
@@ -7,7 +7,7 @@
 msgstr ""
 "Project-Id-Version: Roundup 2.3.0\n"
 "Report-Msgid-Bugs-To: roundup-devel@lists.sourceforge.net\n"
-"POT-Creation-Date: 2022-11-23 22:28-0500\n"
+"POT-Creation-Date: 2023-03-01 10:35-0500\n"
 "PO-Revision-Date: 2013-10-31 12:20+0100\n"
 "Last-Translator: Yasushi Iwata <iwata@know-net.co.jp>\n"
 "Language-Team: Yasushi Iwata <iwata@know-net.co.jp>\n"
@@ -23,29 +23,29 @@
 "You do not have permission to retire or restore the %(classname)s class."
 msgstr "%(classname)s の %(action)s を実行する権限がありません。"
 
-#: ../roundup/actions.py:64 ../roundup/cgi/actions.py:240
+#: ../roundup/actions.py:65 ../roundup/cgi/actions.py:240
 msgid "You may not retire the admin or anonymous user"
 msgstr "ユーザー admin と anonymous を無効にすることはできません"
 
-#: ../roundup/admin.py:106 ../roundup/admin.py:1259 ../roundup/admin.py:1314
-#: ../roundup/admin.py:1341 ../roundup/admin.py:106:1259 :1314:1341
+#: ../roundup/admin.py:112 ../roundup/admin.py:1295 ../roundup/admin.py:1350
+#: ../roundup/admin.py:1377 ../roundup/admin.py:112:1295 :1350:1377
 #, python-format
 msgid "no such class \"%(classname)s\""
 msgstr ""
 
-#: ../roundup/admin.py:118
+#: ../roundup/admin.py:124
 #, python-format
 msgid "argument \"%(arg)s\" not propname=value"
 msgstr ""
 
-#: ../roundup/admin.py:131
+#: ../roundup/admin.py:137
 #, python-format
 msgid ""
 "Problem: %(message)s\n"
 "\n"
 msgstr ""
 
-#: ../roundup/admin.py:132
+#: ../roundup/admin.py:138
 #, python-format
 msgid ""
 "%(message)sUsage: roundup-admin [options] [<command> <arguments>]\n"
@@ -73,17 +73,17 @@
 " roundup-admin help all                   -- all available help\n"
 msgstr ""
 
-#: ../roundup/admin.py:159
+#: ../roundup/admin.py:165
 msgid "Commands: "
 msgstr ""
 
-#: ../roundup/admin.py:166
+#: ../roundup/admin.py:172
 msgid ""
 "Commands may be abbreviated as long as the abbreviation\n"
 "matches only one command, e.g. l == li == lis == list."
 msgstr ""
 
-#: ../roundup/admin.py:195
+#: ../roundup/admin.py:201
 msgid ""
 "\n"
 "All commands (except help) require a tracker specifier. This is just\n"
@@ -135,7 +135,7 @@
 " . ROUNDUP_LOGIN environment variable\n"
 " . the -u command-line option\n"
 "If either the name or password is not supplied, they are obtained from the\n"
-"command-line.\n"
+"command-line. (See admin guide before using -u.)\n"
 "\n"
 "Date format examples:\n"
 "  \"2000-04-17.03:45\" means <Date 2000-04-17.08:45:00>\n"
@@ -150,12 +150,12 @@
 "Command help:\n"
 msgstr ""
 
-#: ../roundup/admin.py:258
+#: ../roundup/admin.py:264
 #, python-format
 msgid "%s:"
 msgstr ""
 
-#: ../roundup/admin.py:265
+#: ../roundup/admin.py:271
 msgid ""
 "Usage: help topic\n"
 "        Give help about topic.\n"
@@ -167,20 +167,20 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:287
+#: ../roundup/admin.py:293
 #, python-format
 msgid "Sorry, no help for \"%(topic)s\""
 msgstr ""
 
-#: ../roundup/admin.py:402 ../roundup/admin.py:458 ../roundup/admin.py:402:458
+#: ../roundup/admin.py:408 ../roundup/admin.py:464 ../roundup/admin.py:408:464
 msgid "Templates:"
 msgstr ""
 
-#: ../roundup/admin.py:405 ../roundup/admin.py:468 ../roundup/admin.py:405:468
+#: ../roundup/admin.py:411 ../roundup/admin.py:474 ../roundup/admin.py:411:474
 msgid "Back ends:"
 msgstr ""
 
-#: ../roundup/admin.py:408
+#: ../roundup/admin.py:414
 msgid ""
 "Usage: install [template [backend [key=val[,key=val]]]]\n"
 "        Install a new Roundup tracker.\n"
@@ -206,23 +206,23 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:431 ../roundup/admin.py:562 ../roundup/admin.py:635
-#: ../roundup/admin.py:728 ../roundup/admin.py:786 ../roundup/admin.py:872
-#: ../roundup/admin.py:931 ../roundup/admin.py:958 ../roundup/admin.py:985
-#: ../roundup/admin.py:1062 ../roundup/admin.py:1157 ../roundup/admin.py:1243
-#: ../roundup/admin.py:1304 ../roundup/admin.py:1331 ../roundup/admin.py:1367
-#: ../roundup/admin.py:1495 ../roundup/admin.py:1579
-#: ../roundup/admin.py:431:562 :1157 :1243:1304 :1331:1367 :1495:1579 :635:728
-#: :786:872 :931:958 :985:1062
+#: ../roundup/admin.py:437 ../roundup/admin.py:568 ../roundup/admin.py:671
+#: ../roundup/admin.py:764 ../roundup/admin.py:822 ../roundup/admin.py:908
+#: ../roundup/admin.py:967 ../roundup/admin.py:994 ../roundup/admin.py:1021
+#: ../roundup/admin.py:1098 ../roundup/admin.py:1193 ../roundup/admin.py:1279
+#: ../roundup/admin.py:1340 ../roundup/admin.py:1367 ../roundup/admin.py:1403
+#: ../roundup/admin.py:1531 ../roundup/admin.py:1615
+#: ../roundup/admin.py:437:568 :1021:1098:1193 :1279:1340 :1367:1403 :1531:1615
+#: :671:764 :822:908 :967:994
 msgid "Not enough arguments supplied"
 msgstr ""
 
-#: ../roundup/admin.py:437
+#: ../roundup/admin.py:443
 #, python-format
 msgid "Instance home parent directory \"%(parent)s\" does not exist"
 msgstr ""
 
-#: ../roundup/admin.py:446
+#: ../roundup/admin.py:452
 #, python-format
 msgid ""
 "WARNING: There appears to be a tracker in \"%(tracker_home)s\"!\n"
@@ -230,20 +230,20 @@
 "Erase it? Y/N: "
 msgstr ""
 
-#: ../roundup/admin.py:459
+#: ../roundup/admin.py:465
 msgid "Select template"
 msgstr ""
 
-#: ../roundup/admin.py:469
+#: ../roundup/admin.py:475
 msgid "Select backend"
 msgstr ""
 
-#: ../roundup/admin.py:480
+#: ../roundup/admin.py:486
 #, python-format
 msgid "Error in configuration settings: \"%s\""
 msgstr ""
 
-#: ../roundup/admin.py:511
+#: ../roundup/admin.py:517
 #, python-format
 msgid ""
 "\n"
@@ -252,11 +252,11 @@
 "   %(config_file)s"
 msgstr ""
 
-#: ../roundup/admin.py:521
+#: ../roundup/admin.py:527
 msgid " ... at a minimum, you must set following options:"
 msgstr ""
 
-#: ../roundup/admin.py:526
+#: ../roundup/admin.py:532
 #, python-format
 msgid ""
 "\n"
@@ -273,7 +273,7 @@
 "---------------------------------------------------------------------------\n"
 msgstr ""
 
-#: ../roundup/admin.py:557
+#: ../roundup/admin.py:563
 msgid ""
 "Usage: genconfig <filename>\n"
 "        Generate a new tracker config file (ini style) with default\n"
@@ -281,7 +281,22 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:572
+#: ../roundup/admin.py:581
+#, python-format
+msgid ""
+"Changing option\n"
+"   'password_pbkdf2_default_rounds'\n"
+"from old default of %(old_number)s to new default of %(new_number)s."
+msgstr ""
+
+#: ../roundup/admin.py:593
+#, python-format
+msgid ""
+"Update 'password_pbkdf2_default_rounds'to a number equal to or larger\n"
+"than %s."
+msgstr ""
+
+#: ../roundup/admin.py:604
 msgid ""
 "Usage: updateconfig <filename>\n"
 "        Generate an updated tracker config file (ini style) in\n"
@@ -291,7 +306,7 @@
 msgstr ""
 
 #. password
-#: ../roundup/admin.py:580
+#: ../roundup/admin.py:612
 msgid ""
 "Usage: initialise [adminpw]\n"
 "        Initialise a new Roundup tracker.\n"
@@ -302,30 +317,30 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:594
+#: ../roundup/admin.py:626
 msgid "Admin Password: "
 msgstr ""
 
-#: ../roundup/admin.py:595
+#: ../roundup/admin.py:627
 msgid "       Confirm: "
 msgstr ""
 
-#: ../roundup/admin.py:599
+#: ../roundup/admin.py:631
 msgid "Instance home does not exist"
 msgstr ""
 
-#: ../roundup/admin.py:603
+#: ../roundup/admin.py:635
 msgid "Instance has not been installed"
 msgstr ""
 
-#: ../roundup/admin.py:609
+#: ../roundup/admin.py:641
 msgid ""
 "WARNING: The database is already initialised!\n"
 "If you re-initialise it, you will lose all the data!\n"
 "Erase it? Y/N: "
 msgstr ""
 
-#: ../roundup/admin.py:625
+#: ../roundup/admin.py:661
 msgid ""
 "Usage: get property designator[,designator]*\n"
 "        Get the given property of one or more designator(s).\n"
@@ -338,23 +353,23 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:669 ../roundup/admin.py:687 ../roundup/admin.py:669:687
+#: ../roundup/admin.py:705 ../roundup/admin.py:723 ../roundup/admin.py:705:723
 #, python-format
 msgid "property %s is not of type Multilink or Link so -d flag does not apply."
 msgstr ""
 
-#: ../roundup/admin.py:697 ../roundup/admin.py:1261 ../roundup/admin.py:1316
-#: ../roundup/admin.py:697:1261:1316
+#: ../roundup/admin.py:733 ../roundup/admin.py:1297 ../roundup/admin.py:1352
+#: ../roundup/admin.py:733:1297:1352
 #, python-format
 msgid "no such %(classname)s node \"%(nodeid)s\""
 msgstr ""
 
-#: ../roundup/admin.py:700
+#: ../roundup/admin.py:736
 #, python-format
 msgid "no such %(classname)s property \"%(propname)s\""
 msgstr ""
 
-#: ../roundup/admin.py:708
+#: ../roundup/admin.py:744
 msgid ""
 "Usage: set items property=value property=value ...\n"
 "        Set the given properties of one or more items(s).\n"
@@ -375,7 +390,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:776
+#: ../roundup/admin.py:812
 msgid ""
 "Usage: filter classname propname=value ...\n"
 "        Find the nodes of the given class with a given property value.\n"
@@ -388,19 +403,19 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:819
+#: ../roundup/admin.py:855
 #, python-format
 msgid "Class %(curclassname)s has no property %(pn)s in %(propname)s."
 msgstr ""
 
-#: ../roundup/admin.py:857 ../roundup/admin.py:918 ../roundup/admin.py:1082
-#: ../roundup/admin.py:1094 ../roundup/admin.py:1177
-#: ../roundup/admin.py:857:918 :1082:1094:1177
+#: ../roundup/admin.py:893 ../roundup/admin.py:954 ../roundup/admin.py:1118
+#: ../roundup/admin.py:1130 ../roundup/admin.py:1213
+#: ../roundup/admin.py:893:954 :1118:1130:1213
 #, python-format
 msgid "%(classname)s has no property \"%(propname)s\""
 msgstr ""
 
-#: ../roundup/admin.py:864
+#: ../roundup/admin.py:900
 msgid ""
 "Usage: find classname propname=value ...\n"
 "        Find the nodes of the given class with a given link property value.\n"
@@ -411,7 +426,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:925
+#: ../roundup/admin.py:961
 msgid ""
 "Usage: specification classname\n"
 "        Show the properties for a classname.\n"
@@ -420,17 +435,17 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:941
+#: ../roundup/admin.py:977
 #, python-format
 msgid "%(key)s: %(value)s (key property)\n"
 msgstr ""
 
-#: ../roundup/admin.py:944
+#: ../roundup/admin.py:980
 #, python-format
 msgid "%(key)s: %(value)s\n"
 msgstr ""
 
-#: ../roundup/admin.py:947
+#: ../roundup/admin.py:983
 msgid ""
 "Usage: display designator[,designator]*\n"
 "\n"
@@ -444,12 +459,12 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:974
+#: ../roundup/admin.py:1010
 #, python-format
 msgid "%(key)s: %(value)s"
 msgstr ""
 
-#: ../roundup/admin.py:977
+#: ../roundup/admin.py:1013
 msgid ""
 "Usage: create classname property=value ...\n"
 "        Create a new entry of a given class.\n"
@@ -461,31 +476,31 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1005
+#: ../roundup/admin.py:1041
 #, python-format
 msgid "%(propname)s (Password): "
 msgstr ""
 
-#: ../roundup/admin.py:1008
+#: ../roundup/admin.py:1044
 #, python-format
 msgid "   %(propname)s (Again): "
 msgstr ""
 
-#: ../roundup/admin.py:1012
+#: ../roundup/admin.py:1048
 msgid "Sorry, try again..."
 msgstr ""
 
-#: ../roundup/admin.py:1016
+#: ../roundup/admin.py:1052
 #, python-format
 msgid "%(propname)s (%(proptype)s): "
 msgstr ""
 
-#: ../roundup/admin.py:1035
+#: ../roundup/admin.py:1071
 #, python-format
 msgid "you must provide the \"%(propname)s\" property."
 msgstr ""
 
-#: ../roundup/admin.py:1047
+#: ../roundup/admin.py:1083
 msgid ""
 "Usage: list classname [property]\n"
 "        List the instances of a class.\n"
@@ -501,16 +516,16 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1060
+#: ../roundup/admin.py:1096
 msgid "Too many arguments supplied"
 msgstr ""
 
-#: ../roundup/admin.py:1096
+#: ../roundup/admin.py:1132
 #, python-format
 msgid "%(nodeid)4s: %(value)s"
 msgstr ""
 
-#: ../roundup/admin.py:1100
+#: ../roundup/admin.py:1136
 msgid ""
 "Usage: templates [trace_search]\n"
 "        List templates and their installed directories.\n"
@@ -520,7 +535,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1128
+#: ../roundup/admin.py:1164
 msgid ""
 "Usage: table classname [property[,property]*]\n"
 "        List the instances of a class in tabular form.\n"
@@ -552,17 +567,17 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1172
+#: ../roundup/admin.py:1208
 #, python-format
 msgid "\"%(spec)s\" not name:width"
 msgstr ""
 
-#: ../roundup/admin.py:1194
-#, python-format
-msgid "\"%(spec)s\" does not have an integer width: \"%(width)s\""
-msgstr ""
-
 #: ../roundup/admin.py:1230
+#, python-format
+msgid "\"%(spec)s\" does not have an integer width: \"%(width)s\""
+msgstr ""
+
+#: ../roundup/admin.py:1266
 msgid ""
 "Usage: history designator [skipquiet]\n"
 "        Show the history entries of a designator.\n"
@@ -577,7 +592,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1266
+#: ../roundup/admin.py:1302
 msgid ""
 "Usage: commit\n"
 "        Commit changes made to the database during an interactive session.\n"
@@ -591,7 +606,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1281
+#: ../roundup/admin.py:1317
 msgid ""
 "Usage: rollback\n"
 "        Undo all changes that are pending commit to the database.\n"
@@ -603,7 +618,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1294
+#: ../roundup/admin.py:1330
 msgid ""
 "Usage: retire designator[,designator]*\n"
 "        Retire the node specified by designator.\n"
@@ -616,7 +631,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1322
+#: ../roundup/admin.py:1358
 msgid ""
 "Usage: restore designator[,designator]*\n"
 "        Restore the retired node specified by designator.\n"
@@ -628,12 +643,12 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1347
+#: ../roundup/admin.py:1383
 msgid "no such %(classname)s node \" % (nodeid)s\""
 msgstr ""
 
 #. grab the directory to export to
-#: ../roundup/admin.py:1353
+#: ../roundup/admin.py:1389
 msgid ""
 "Usage: export [[-]class[,class]] export_dir\n"
 "        Export the database to colon-separated-value files.\n"
@@ -649,7 +664,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1460
+#: ../roundup/admin.py:1496
 msgid ""
 "Usage: exporttables [[-]class[,class]] export_dir\n"
 "        Export the database to colon-separated-value files, excluding the\n"
@@ -666,7 +681,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1475
+#: ../roundup/admin.py:1511
 msgid ""
 "Usage: import import_dir\n"
 "        Import a database from the directory containing CSV files,\n"
@@ -689,7 +704,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1554
+#: ../roundup/admin.py:1590
 msgid ""
 "Usage: importtables export_dir\n"
 "\n"
@@ -697,7 +712,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1561
+#: ../roundup/admin.py:1597
 msgid ""
 "Usage: pack period | date\n"
 "\n"
@@ -719,11 +734,11 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1589
+#: ../roundup/admin.py:1625
 msgid "Invalid format"
 msgstr ""
 
-#: ../roundup/admin.py:1602
+#: ../roundup/admin.py:1638
 msgid ""
 "Usage: reindex [classname|designator]*\n"
 "        Re-generate a tracker's search indexes.\n"
@@ -733,12 +748,12 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1616
+#: ../roundup/admin.py:1652
 #, python-format
 msgid "no such item \"%(designator)s\""
 msgstr ""
 
-#: ../roundup/admin.py:1626
+#: ../roundup/admin.py:1662
 msgid ""
 "Usage: security [Role name]\n"
 "\n"
@@ -746,46 +761,46 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1635
+#: ../roundup/admin.py:1671
 #, python-format
 msgid "No such Role \"%(role)s\"\n"
 msgstr ""
 
-#: ../roundup/admin.py:1641
+#: ../roundup/admin.py:1677
 #, python-format
 msgid "New Web users get the Roles \"%(role)s\"\n"
 msgstr ""
 
-#: ../roundup/admin.py:1644
+#: ../roundup/admin.py:1680
 #, python-format
 msgid "New Web users get the Role \"%(role)s\"\n"
 msgstr ""
 
-#: ../roundup/admin.py:1648
+#: ../roundup/admin.py:1684
 #, python-format
 msgid "New Email users get the Roles \"%(role)s\"\n"
 msgstr ""
 
-#: ../roundup/admin.py:1650
+#: ../roundup/admin.py:1686
 #, python-format
 msgid "New Email users get the Role \"%(role)s\"\n"
 msgstr ""
 
-#: ../roundup/admin.py:1653
+#: ../roundup/admin.py:1689
 #, python-format
 msgid "Role \"%(name)s\":\n"
 msgstr ""
 
-#: ../roundup/admin.py:1659
+#: ../roundup/admin.py:1695
 msgid " %(description)s (%(name)s for \"%(klass)s\""
 msgstr ""
 
-#: ../roundup/admin.py:1659
+#: ../roundup/admin.py:1695
 #, python-format
 msgid " %(description)s (%(name)s for \"%(klass)s\": %(properties)s only)\n"
 msgstr ""
 
-#: ../roundup/admin.py:1672
+#: ../roundup/admin.py:1708
 #, python-format
 msgid ""
 "\n"
@@ -793,17 +808,17 @@
 "\n"
 msgstr ""
 
-#: ../roundup/admin.py:1678
+#: ../roundup/admin.py:1714
 #, python-format
 msgid " %(description)s (%(name)s for \"%(klass)s\" only)\n"
 msgstr ""
 
-#: ../roundup/admin.py:1681
+#: ../roundup/admin.py:1717
 #, python-format
 msgid " %(description)s (%(name)s)\n"
 msgstr ""
 
-#: ../roundup/admin.py:1685
+#: ../roundup/admin.py:1721
 msgid ""
 "Usage: migrate\n"
 "\n"
@@ -827,60 +842,56 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1706
+#: ../roundup/admin.py:1742
 msgid "Tracker updated"
 msgstr ""
 
-#: ../roundup/admin.py:1709
+#: ../roundup/admin.py:1745
 msgid "No migration action required"
 msgstr ""
 
-#: ../roundup/admin.py:1735
+#: ../roundup/admin.py:1771
 #, python-format
 msgid "Unknown command \"%(command)s\" (\"help commands\" for a list)"
 msgstr ""
 
-#: ../roundup/admin.py:1741
+#: ../roundup/admin.py:1777
 #, python-format
 msgid "Multiple commands match \"%(command)s\": %(list)s"
 msgstr ""
 
-#: ../roundup/admin.py:1750
+#: ../roundup/admin.py:1786
 msgid "Enter tracker home: "
 msgstr ""
 
-#: ../roundup/admin.py:1759 ../roundup/admin.py:1765 ../roundup/admin.py:1802
-#: ../roundup/admin.py:1759:1765:1802
+#: ../roundup/admin.py:1795 ../roundup/admin.py:1801 ../roundup/admin.py:1838
+#: ../roundup/admin.py:1795:1801:1838
 #, python-format
 msgid "Error: %(message)s"
 msgstr ""
 
-#: ../roundup/admin.py:1775 ../roundup/admin.py:1779
-#: ../roundup/admin.py:1775:1779
+#: ../roundup/admin.py:1811 ../roundup/admin.py:1815
+#: ../roundup/admin.py:1811:1815
 #, python-format
 msgid "Error: Couldn't open tracker: %(message)s"
 msgstr ""
 
-#: ../roundup/admin.py:1815
+#: ../roundup/admin.py:1851
 #, python-format
 msgid ""
 "Roundup %s ready for input.\n"
 "Type \"help\" for help."
 msgstr ""
 
-#: ../roundup/admin.py:1820
+#: ../roundup/admin.py:1856
 msgid "Note: command history and editing not available"
 msgstr ""
 
-#: ../roundup/admin.py:1824
-msgid "roundup> "
-msgstr ""
-
-#: ../roundup/admin.py:1826
+#: ../roundup/admin.py:1862
 msgid "exit..."
 msgstr ""
 
-#: ../roundup/admin.py:1839
+#: ../roundup/admin.py:1875
 msgid "There are unsaved changes. Commit them (y/N)? "
 msgstr ""
 
@@ -988,20 +999,22 @@
 msgid "restored"
 msgstr ""
 
-#: ../roundup/backends/sessions_redis.py:76
-#: ../roundup/backends/sessions_redis.py:95
-#: ../roundup/backends/sessions_redis.py:76:95
+#: ../roundup/backends/sessions_redis.py:78
+#: ../roundup/backends/sessions_redis.py:97
+#: ../roundup/backends/sessions_redis.py:78:97
 #, python-format
 msgid "Key %(key)s not found in %(name)s database."
 msgstr ""
 
-#: ../roundup/backends/sessions_redis.py:191
+#: ../roundup/backends/sessions_redis.py:193
 #, python-format
 msgid "Key %(key)s changed in %(name)s db"
 msgstr ""
 
-#: ../roundup/backends/sessions_redis.py:195
-msgid "Redis set failed afer 3 retries"
+#: ../roundup/backends/sessions_redis.py:203
+#, python-format
+msgid ""
+"Redis set failed after %(retries)d retries for user %(user)s with key %(key)s"
 msgstr ""
 
 #: ../roundup/cgi/actions.py:97
@@ -1307,22 +1320,22 @@
 msgid "Welcome %(username)s!"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1383 ../roundup/cgi/actions.py:1387
-#: ../roundup/cgi/actions.py:1383:1387
+#: ../roundup/cgi/actions.py:1384 ../roundup/cgi/actions.py:1388
+#: ../roundup/cgi/actions.py:1384:1388
 msgid "Invalid login"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1393
+#: ../roundup/cgi/actions.py:1394
 msgid "You do not have permission to login"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1437 ../roundup/cgi/actions.py:1616
-#: ../roundup/cgi/actions.py:1437:1616
+#: ../roundup/cgi/actions.py:1439 ../roundup/cgi/actions.py:1618
+#: ../roundup/cgi/actions.py:1439:1618
 #, python-format
 msgid "Column \"%(column)s\" not found in %(class)s"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1687
+#: ../roundup/cgi/actions.py:1689
 #, python-format
 msgid "You do not have permission to view %(class)s"
 msgstr "%(class)s を表示する権限がありません"
@@ -1408,154 +1421,155 @@
 "</body></html>"
 msgstr ""
 
-#: ../roundup/cgi/client.py:651
+#: ../roundup/cgi/client.py:670 ../roundup/cgi/client.py:1570
+#: ../roundup/cgi/client.py:670:1570
+msgid "Required Header Missing"
+msgstr ""
+
+#: ../roundup/cgi/client.py:672
 #, fuzzy
 msgid "Client is not allowed to use Rest Interface."
 msgstr "クエリー編集の権限がありません。"
 
-#: ../roundup/cgi/client.py:895
+#: ../roundup/cgi/client.py:921
 msgid "Form Error: "
 msgstr ""
 
-#: ../roundup/cgi/client.py:985
+#: ../roundup/cgi/client.py:1011
 #, python-format
 msgid "Unrecognized charset: %r"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1238 ../roundup/cgi/client.py:2196
-#: ../roundup/cgi/client.py:1238:2196
+#: ../roundup/cgi/client.py:1264 ../roundup/cgi/client.py:2250
+#: ../roundup/cgi/client.py:1264:2250
 msgid "broken form: multiple @action values submitted"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1253
+#: ../roundup/cgi/client.py:1279
 msgid "Anonymous users are not allowed to use the web interface"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1376
+#: ../roundup/cgi/client.py:1430
 msgid "Referer header not available."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1380
+#: ../roundup/cgi/client.py:1434
 #, python-format
 msgid "csrf key used with wrong method from: %s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1409
+#: ../roundup/cgi/client.py:1463
 #, python-format
 msgid "csrf header %(header)s required but missing for user%(userid)s."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1413
+#: ../roundup/cgi/client.py:1467
 #, python-format
 msgid "Missing header: %s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1421
+#: ../roundup/cgi/client.py:1475
 #, python-format
 msgid "csrf Referer header check failed for user%(userid)s. Value=%(referer)s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1426
+#: ../roundup/cgi/client.py:1480
 #, fuzzy, python-format
 msgid "Invalid Referer: %s"
 msgstr "不正なリクエスト"
 
-#: ../roundup/cgi/client.py:1441
+#: ../roundup/cgi/client.py:1495
 #, python-format
 msgid "csrf Origin header check failed for user%(userid)s. Value=%(origin)s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1446
+#: ../roundup/cgi/client.py:1500
 #, fuzzy, python-format
 msgid "Invalid Origin %s"
 msgstr "不正なリクエスト"
 
-#: ../roundup/cgi/client.py:1460
+#: ../roundup/cgi/client.py:1514
 #, python-format
 msgid ""
 "csrf X-FORWARDED-HOST header check failed for user%(userid)s. Value=%(host)s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1466
+#: ../roundup/cgi/client.py:1520
 #, python-format
 msgid "Invalid X-FORWARDED-HOST %s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1485
+#: ../roundup/cgi/client.py:1539
 #, python-format
 msgid "csrf HOST header check failed for user%(userid)s. Value=%(host)s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1490
+#: ../roundup/cgi/client.py:1544
 #, fuzzy, python-format
 msgid "Invalid HOST %s"
 msgstr "不正なリクエスト"
 
-#: ../roundup/cgi/client.py:1498
+#: ../roundup/cgi/client.py:1552
 msgid "Csrf: unable to verify sufficient headers"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1499
+#: ../roundup/cgi/client.py:1553
 msgid "Unable to verify sufficient headers"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1513
+#: ../roundup/cgi/client.py:1567
 #, python-format
 msgid "csrf X-REQUESTED-WITH xmlrpc required header check failed for user%s."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1516
-msgid "Required Header Missing"
-msgstr ""
-
-#: ../roundup/cgi/client.py:1554
+#: ../roundup/cgi/client.py:1608
 #, python-format
 msgid "Required csrf field missing for user%s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1556 ../roundup/cgi/client.py:1583
-#: ../roundup/cgi/client.py:1600 ../roundup/cgi/client.py:1556:1583:1600
+#: ../roundup/cgi/client.py:1610 ../roundup/cgi/client.py:1637
+#: ../roundup/cgi/client.py:1654 ../roundup/cgi/client.py:1610:1637:1654
 msgid ""
 "We can't validate your session (csrf failure). Re-enter any unsaved data and "
 "try again."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1560
+#: ../roundup/cgi/client.py:1614
 #, python-format
 msgid "csrf field not supplied by user%s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1572
+#: ../roundup/cgi/client.py:1626
 #, python-format
 msgid ""
 "Csrf mismatch user: current user %(user)s != stored user %(stored)s, current "
 "session, stored session: %(cur_sess)s,%(stor_sess)s for key %(key)s."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1590
+#: ../roundup/cgi/client.py:1644
 #, python-format
 msgid ""
 "Csrf mismatch user: current session %(curr_sess)s != stored session "
 "%(stor_sess)s, current user/stored user is: %(user)s for key %(key)s."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1784
+#: ../roundup/cgi/client.py:1838
 msgid "You are not allowed to view this file."
 msgstr ""
 
-#: ../roundup/cgi/client.py:2073
+#: ../roundup/cgi/client.py:2127
 #, python-format
 msgid "%(starttag)sTime elapsed: %(seconds)fs%(endtag)s\n"
 msgstr ""
 
-#: ../roundup/cgi/client.py:2077
+#: ../roundup/cgi/client.py:2131
 #, python-format
 msgid ""
 "%(starttag)sCache hits: %(cache_hits)d, misses %(cache_misses)d. Loading "
 "items: %(get_items)f secs. Filtering: %(filtering)f secs.%(endtag)s\n"
 msgstr ""
 
-#: ../roundup/cgi/client.py:2615
+#: ../roundup/cgi/client.py:2669
 #, python-format
 msgid ""
 "Cache failure: compressed file %(compressed)s is older than its source file "
@@ -1937,28 +1951,28 @@
 msgid "\"%s\" not a node designator"
 msgstr ""
 
-#: ../roundup/hyperdb.py:1492 ../roundup/hyperdb.py:1500
-#: ../roundup/hyperdb.py:1492:1500
+#: ../roundup/hyperdb.py:1493 ../roundup/hyperdb.py:1501
+#: ../roundup/hyperdb.py:1493:1501
 #, python-format
 msgid "Not a property name: %s"
 msgstr ""
 
-#: ../roundup/hyperdb.py:1977
+#: ../roundup/hyperdb.py:1978
 #, fuzzy, python-format
 msgid "property %(property)s: %(value)r is not a %(classname)s."
 msgstr "プロパティ \"%(propname)s\": \"%(value)s\" がリストの中にありません"
 
-#: ../roundup/hyperdb.py:1983
+#: ../roundup/hyperdb.py:1984
 #, python-format
 msgid "you may only enter ID values for property %s"
 msgstr ""
 
-#: ../roundup/hyperdb.py:2018
+#: ../roundup/hyperdb.py:2019
 #, python-format
 msgid "%(property)r is not a property of %(classname)s"
 msgstr ""
 
-#: ../roundup/init.py:139
+#: ../roundup/init.py:141
 #, python-format
 msgid ""
 "WARNING: directory '%s'\n"
@@ -2179,7 +2193,7 @@
 "  %(errors)s\n"
 msgstr ""
 
-#: ../roundup/mailgw.py:1820
+#: ../roundup/mailgw.py:1821
 #, python-format
 msgid ""
 "\n"
@@ -2202,19 +2216,19 @@
 msgid "Invalid attribute %s"
 msgstr "不正なリクエスト"
 
-#: ../roundup/rest.py:2078
+#: ../roundup/rest.py:2090
 #, python-format
 msgid "Api rate limits exceeded. Please wait: %s seconds."
 msgstr ""
 
-#: ../roundup/rest.py:2113
+#: ../roundup/rest.py:2125
 #, python-format
 msgid ""
 "Unable to parse Accept Header. %(error)s. Acceptable types: "
 "%(acceptable_types)s"
 msgstr ""
 
-#: ../roundup/rest.py:2262
+#: ../roundup/rest.py:2305
 #, python-format
 msgid ""
 "Unrecognized api version: %s. See /rest without specifying api version for "
@@ -2337,26 +2351,26 @@
 msgid "No tracker templates found in directory %s"
 msgstr ""
 
-#: ../roundup/scripts/roundup_mailgw.py:185
+#: ../roundup/scripts/roundup_mailgw.py:182
 msgid ""
 "\n"
 "Error: The instance home must be specified"
 msgstr ""
 
-#: ../roundup/scripts/roundup_mailgw.py:203
+#: ../roundup/scripts/roundup_mailgw.py:200
 msgid ""
 "\n"
 "Error: not enough source specification information"
 msgstr ""
 
-#: ../roundup/scripts/roundup_mailgw.py:234
+#: ../roundup/scripts/roundup_mailgw.py:231
 #, python-format
 msgid ""
 "\n"
 "Error: %s specification not valid"
 msgstr ""
 
-#: ../roundup/scripts/roundup_mailgw.py:258
+#: ../roundup/scripts/roundup_mailgw.py:254
 msgid ""
 "\n"
 "Error: The source must be either \"mailbox\", \"pop\", \"pops\", \"apop\", "
@@ -2367,64 +2381,64 @@
 msgid "WARNING: generating temporary SSL certificate"
 msgstr ""
 
-#: ../roundup/scripts/roundup_server.py:329
+#: ../roundup/scripts/roundup_server.py:331
 msgid ""
 "<html><head><title>Roundup trackers index</title></head>\n"
 "<body><h1>Roundup trackers index</h1><ol>\n"
 msgstr ""
 
-#: ../roundup/scripts/roundup_server.py:549
+#: ../roundup/scripts/roundup_server.py:551
 #, python-format
 msgid "Error: %(type)s: %(value)s"
 msgstr ""
 
-#: ../roundup/scripts/roundup_server.py:561
+#: ../roundup/scripts/roundup_server.py:563
 msgid "WARNING: ignoring \"-g\" argument, not root"
 msgstr ""
 
-#: ../roundup/scripts/roundup_server.py:567
+#: ../roundup/scripts/roundup_server.py:569
 msgid "Can't change groups - no grp module"
 msgstr ""
 
-#: ../roundup/scripts/roundup_server.py:576
+#: ../roundup/scripts/roundup_server.py:578
 #, python-format
 msgid "Group %(group)s doesn't exist"
 msgstr ""
 
-#: ../roundup/scripts/roundup_server.py:588
+#: ../roundup/scripts/roundup_server.py:590
 msgid "Can't run as root!"
 msgstr ""
 
-#: ../roundup/scripts/roundup_server.py:591
+#: ../roundup/scripts/roundup_server.py:593
 msgid "WARNING: ignoring \"-u\" argument, not root"
 msgstr ""
 
-#: ../roundup/scripts/roundup_server.py:597
+#: ../roundup/scripts/roundup_server.py:599
 msgid "Can't change users - no pwd module"
 msgstr ""
 
-#: ../roundup/scripts/roundup_server.py:606
+#: ../roundup/scripts/roundup_server.py:608
 #, python-format
 msgid "User %(user)s doesn't exist"
 msgstr ""
 
-#: ../roundup/scripts/roundup_server.py:803
+#: ../roundup/scripts/roundup_server.py:805
 #, python-format
 msgid "Multiprocess mode \"%s\" is not available, switching to single-process"
 msgstr ""
 
-#: ../roundup/scripts/roundup_server.py:830
+#: ../roundup/scripts/roundup_server.py:832
 #, python-format
 msgid "Unable to bind to port %s, port already in use."
 msgstr ""
 
-#: ../roundup/scripts/roundup_server.py:834
+#: ../roundup/scripts/roundup_server.py:836
 #, python-format
 msgid ""
 "Unable to bind to port %(port)s, access not allowed, errno: %(errno)s %(msg)s"
 msgstr ""
 
-#: ../roundup/scripts/roundup_server.py:913
+#: ../roundup/scripts/roundup_server.py:915
 msgid ""
 " -c <Command>  Windows Service options.\n"
 "               If you want to run the server as a Windows Service, you\n"
@@ -2434,7 +2448,7 @@
 "               specifics."
 msgstr ""
 
-#: ../roundup/scripts/roundup_server.py:920
+#: ../roundup/scripts/roundup_server.py:922
 msgid ""
 " -u <UID>      runs the Roundup web server as this UID\n"
 " -g <GID>      runs the Roundup web server as this GID\n"
@@ -2443,7 +2457,7 @@
 "               specified if -d is used."
 msgstr ""
 
-#: ../roundup/scripts/roundup_server.py:927
+#: ../roundup/scripts/roundup_server.py:929
 #, python-format
 msgid ""
 "\n"
@@ -2510,20 +2524,20 @@
 "   any url-unsafe characters like spaces, as these confuse IE.\n"
 msgstr ""
 
-#: ../roundup/scripts/roundup_server.py:1103
+#: ../roundup/scripts/roundup_server.py:1105
 msgid "Instances must be name=home"
 msgstr ""
 
-#: ../roundup/scripts/roundup_server.py:1117
+#: ../roundup/scripts/roundup_server.py:1119
 #, python-format
 msgid "Configuration saved to %s"
 msgstr ""
 
-#: ../roundup/scripts/roundup_server.py:1135
+#: ../roundup/scripts/roundup_server.py:1137
 msgid "Sorry, you can't run the server as a daemon on this Operating System"
 msgstr ""
 
-#: ../roundup/scripts/roundup_server.py:1155
+#: ../roundup/scripts/roundup_server.py:1157
 #, python-format
 msgid "Roundup server started on %(HOST)s:%(PORT)s"
 msgstr ""
--- a/locale/lt.po	Wed Mar 01 10:43:54 2023 -0500
+++ b/locale/lt.po	Wed Mar 01 10:51:37 2023 -0500
@@ -7,7 +7,7 @@
 msgstr ""
 "Project-Id-Version: Roundup 2.3.0\n"
 "Report-Msgid-Bugs-To: roundup-devel@lists.sourceforge.net\n"
-"POT-Creation-Date: 2022-11-23 22:28-0500\n"
+"POT-Creation-Date: 2023-03-01 10:35-0500\n"
 "PO-Revision-Date: 2013-10-31 12:21+0100\n"
 "Last-Translator: Nerijus Baliunas <nerijus@users.sourceforge.net>\n"
 "Language-Team: \n"
@@ -24,24 +24,24 @@
 "You do not have permission to retire or restore the %(classname)s class."
 msgstr "Jūs neturite leidimo %(action)s %(classname)s klasę."
 
-#: ../roundup/actions.py:64 ../roundup/cgi/actions.py:240
+#: ../roundup/actions.py:65 ../roundup/cgi/actions.py:240
 msgid "You may not retire the admin or anonymous user"
 msgstr "Negalite deaktyvuoti administratoriaus ar anoniminio vartotojo"
 
 # ../roundup/admin.py:85 :962 :1011 :1033
-#: ../roundup/admin.py:106 ../roundup/admin.py:1259 ../roundup/admin.py:1314
-#: ../roundup/admin.py:1341 ../roundup/admin.py:106:1259 :1314:1341
+#: ../roundup/admin.py:112 ../roundup/admin.py:1295 ../roundup/admin.py:1350
+#: ../roundup/admin.py:1377 ../roundup/admin.py:112:1295 :1350:1377
 #, python-format
 msgid "no such class \"%(classname)s\""
 msgstr "nėra klasės \"%(classname)s\""
 
 # ../roundup/admin.py:95 :99
-#: ../roundup/admin.py:118
+#: ../roundup/admin.py:124
 #, python-format
 msgid "argument \"%(arg)s\" not propname=value"
 msgstr "argumentas \"%(arg)s\" nėra parinktis=reikšmė formato"
 
-#: ../roundup/admin.py:131
+#: ../roundup/admin.py:137
 #, python-format
 msgid ""
 "Problem: %(message)s\n"
@@ -50,7 +50,7 @@
 "Problema: %(message)s\n"
 "\n"
 
-#: ../roundup/admin.py:132
+#: ../roundup/admin.py:138
 #, fuzzy, python-format
 msgid ""
 "%(message)sUsage: roundup-admin [options] [<command> <arguments>]\n"
@@ -100,12 +100,12 @@
 " roundup-admin help <komanda>             -- specifinė pagalba komandoms\n"
 " roundup-admin help all                   -- visa įmanoma pagalba\n"
 
-#: ../roundup/admin.py:159
+#: ../roundup/admin.py:165
 #, fuzzy
 msgid "Commands: "
 msgstr "Komandos:"
 
-#: ../roundup/admin.py:166
+#: ../roundup/admin.py:172
 msgid ""
 "Commands may be abbreviated as long as the abbreviation\n"
 "matches only one command, e.g. l == li == lis == list."
@@ -113,7 +113,8 @@
 "Komandos gali būti sutrumpintos, tačiau sutrumpinimas turi atitikti tik\n"
 "vieną komandą, pvz. l == li == lis == list."
 
-#: ../roundup/admin.py:195
+#: ../roundup/admin.py:201
+#, fuzzy
 msgid ""
 "\n"
 "All commands (except help) require a tracker specifier. This is just\n"
@@ -165,7 +166,7 @@
 " . ROUNDUP_LOGIN environment variable\n"
 " . the -u command-line option\n"
 "If either the name or password is not supplied, they are obtained from the\n"
-"command-line.\n"
+"command-line. (See admin guide before using -u.)\n"
 "\n"
 "Date format examples:\n"
 "  \"2000-04-17.03:45\" means <Date 2000-04-17.08:45:00>\n"
@@ -246,12 +247,12 @@
 "\n"
 "Komandų pagalba:\n"
 
-#: ../roundup/admin.py:258
+#: ../roundup/admin.py:264
 #, python-format
 msgid "%s:"
 msgstr "%s:"
 
-#: ../roundup/admin.py:265
+#: ../roundup/admin.py:271
 msgid ""
 "Usage: help topic\n"
 "        Give help about topic.\n"
@@ -271,22 +272,22 @@
 "        all       -- visa įmanoma pagalba\n"
 "        "
 
-#: ../roundup/admin.py:287
+#: ../roundup/admin.py:293
 #, python-format
 msgid "Sorry, no help for \"%(topic)s\""
 msgstr "Atsiprašome, pagalbos temai \"%(topic)s\" nėra"
 
 # ../roundup/admin.py:338 :387
-#: ../roundup/admin.py:402 ../roundup/admin.py:458 ../roundup/admin.py:402:458
+#: ../roundup/admin.py:408 ../roundup/admin.py:464 ../roundup/admin.py:408:464
 msgid "Templates:"
 msgstr "Šablonai:"
 
 # ../roundup/admin.py:341 :398
-#: ../roundup/admin.py:405 ../roundup/admin.py:468 ../roundup/admin.py:405:468
+#: ../roundup/admin.py:411 ../roundup/admin.py:474 ../roundup/admin.py:411:474
 msgid "Back ends:"
 msgstr "Duomenų saugyklos:"
 
-#: ../roundup/admin.py:408
+#: ../roundup/admin.py:414
 msgid ""
 "Usage: install [template [backend [key=val[,key=val]]]]\n"
 "        Install a new Roundup tracker.\n"
@@ -336,23 +337,23 @@
 
 # ../roundup/admin.py:360 :447 :508 :587 :637 :695 :716 :744 :815 :882 :953
 # :1001 :1023 :1050 :1117 :1184
-#: ../roundup/admin.py:431 ../roundup/admin.py:562 ../roundup/admin.py:635
-#: ../roundup/admin.py:728 ../roundup/admin.py:786 ../roundup/admin.py:872
-#: ../roundup/admin.py:931 ../roundup/admin.py:958 ../roundup/admin.py:985
-#: ../roundup/admin.py:1062 ../roundup/admin.py:1157 ../roundup/admin.py:1243
-#: ../roundup/admin.py:1304 ../roundup/admin.py:1331 ../roundup/admin.py:1367
-#: ../roundup/admin.py:1495 ../roundup/admin.py:1579
-#: ../roundup/admin.py:431:562 :1157 :1243:1304 :1331:1367 :1495:1579 :635:728
-#: :786:872 :931:958 :985:1062
+#: ../roundup/admin.py:437 ../roundup/admin.py:568 ../roundup/admin.py:671
+#: ../roundup/admin.py:764 ../roundup/admin.py:822 ../roundup/admin.py:908
+#: ../roundup/admin.py:967 ../roundup/admin.py:994 ../roundup/admin.py:1021
+#: ../roundup/admin.py:1098 ../roundup/admin.py:1193 ../roundup/admin.py:1279
+#: ../roundup/admin.py:1340 ../roundup/admin.py:1367 ../roundup/admin.py:1403
+#: ../roundup/admin.py:1531 ../roundup/admin.py:1615
+#: ../roundup/admin.py:437:568 :1021:1098:1193 :1279:1340 :1367:1403 :1531:1615
+#: :671:764 :822:908 :967:994
 msgid "Not enough arguments supplied"
 msgstr "Paduota nepakankamai argumentų"
 
-#: ../roundup/admin.py:437
+#: ../roundup/admin.py:443
 #, python-format
 msgid "Instance home parent directory \"%(parent)s\" does not exist"
 msgstr "Namų direktorijos tėvinė direktorija \"%(parent)s\" neegzistuoja"
 
-#: ../roundup/admin.py:446
+#: ../roundup/admin.py:452
 #, python-format
 msgid ""
 "WARNING: There appears to be a tracker in \"%(tracker_home)s\"!\n"
@@ -363,22 +364,22 @@
 "Jei jūs jį perdiegsite, prarasite visus duomenis!\n"
 "Ištrinti jį? Y/N: "
 
-#: ../roundup/admin.py:459
+#: ../roundup/admin.py:465
 #, fuzzy
 msgid "Select template"
 msgstr "Pasirinkite šabloną [klasikinis]: "
 
-#: ../roundup/admin.py:469
+#: ../roundup/admin.py:475
 #, fuzzy
 msgid "Select backend"
 msgstr "Pasirinkite duomenų saugyklą [anydbm]: "
 
-#: ../roundup/admin.py:480
+#: ../roundup/admin.py:486
 #, python-format
 msgid "Error in configuration settings: \"%s\""
 msgstr "Klaida konfigūracijos nustatymuose: \"%s\""
 
-#: ../roundup/admin.py:511
+#: ../roundup/admin.py:517
 #, python-format
 msgid ""
 "\n"
@@ -391,11 +392,11 @@
 " Dabar jūs turėtumėte pakeisti tracker'io konfigūracijos failą:\n"
 "   %(config_file)s"
 
-#: ../roundup/admin.py:521
+#: ../roundup/admin.py:527
 msgid " ... at a minimum, you must set following options:"
 msgstr " ... mažiausiai turėtumėte nustalyti šias parinktis:"
 
-#: ../roundup/admin.py:526
+#: ../roundup/admin.py:532
 #, python-format
 msgid ""
 "\n"
@@ -424,7 +425,7 @@
 " aukščiau minėtus žingsnius.\n"
 "---------------------------------------------------------------------------\n"
 
-#: ../roundup/admin.py:557
+#: ../roundup/admin.py:563
 #, fuzzy
 msgid ""
 "Usage: genconfig <filename>\n"
@@ -437,7 +438,22 @@
 "            įprastomis reikšmėmis faile <failovardas>.\n"
 "        "
 
-#: ../roundup/admin.py:572
+#: ../roundup/admin.py:581
+#, python-format
+msgid ""
+"Changing option\n"
+"   'password_pbkdf2_default_rounds'\n"
+"from old default of %(old_number)s to new default of %(new_number)s."
+msgstr ""
+
+#: ../roundup/admin.py:593
+#, python-format
+msgid ""
+"Update 'password_pbkdf2_default_rounds'to a number equal to or larger\n"
+"than %s."
+msgstr ""
+
+#: ../roundup/admin.py:604
 #, fuzzy
 msgid ""
 "Usage: updateconfig <filename>\n"
@@ -452,7 +468,7 @@
 "        "
 
 #. password
-#: ../roundup/admin.py:580
+#: ../roundup/admin.py:612
 msgid ""
 "Usage: initialise [adminpw]\n"
 "        Initialise a new Roundup tracker.\n"
@@ -470,23 +486,23 @@
 "            Vykdyti tracker'io inicializacijos funkciją dbinit.init()\n"
 "        "
 
-#: ../roundup/admin.py:594
+#: ../roundup/admin.py:626
 msgid "Admin Password: "
 msgstr "Administratoriaus slaptažodis: "
 
-#: ../roundup/admin.py:595
+#: ../roundup/admin.py:627
 msgid "       Confirm: "
 msgstr "       Patvirtinkite: "
 
-#: ../roundup/admin.py:599
+#: ../roundup/admin.py:631
 msgid "Instance home does not exist"
 msgstr "Namų direktorija neegzistuoja"
 
-#: ../roundup/admin.py:603
+#: ../roundup/admin.py:635
 msgid "Instance has not been installed"
 msgstr "Egzempliorius nebuvo įdiegtas"
 
-#: ../roundup/admin.py:609
+#: ../roundup/admin.py:641
 msgid ""
 "WARNING: The database is already initialised!\n"
 "If you re-initialise it, you will lose all the data!\n"
@@ -496,7 +512,7 @@
 "Jei jūs ją inicializuosite dar kartą, prarasite visus duomenis!\n"
 "Ištrinti duomenų bazę? Y/N: "
 
-#: ../roundup/admin.py:625
+#: ../roundup/admin.py:661
 #, fuzzy
 msgid ""
 "Usage: get property designator[,designator]*\n"
@@ -516,7 +532,7 @@
 "            "
 
 # ../roundup/admin.py:541 :556
-#: ../roundup/admin.py:669 ../roundup/admin.py:687 ../roundup/admin.py:669:687
+#: ../roundup/admin.py:705 ../roundup/admin.py:723 ../roundup/admin.py:705:723
 #, python-format
 msgid "property %s is not of type Multilink or Link so -d flag does not apply."
 msgstr ""
@@ -524,18 +540,18 @@
 "-d netinkamas."
 
 # ../roundup/admin.py:564 :964 :1013 :1035
-#: ../roundup/admin.py:697 ../roundup/admin.py:1261 ../roundup/admin.py:1316
-#: ../roundup/admin.py:697:1261:1316
+#: ../roundup/admin.py:733 ../roundup/admin.py:1297 ../roundup/admin.py:1352
+#: ../roundup/admin.py:733:1297:1352
 #, python-format
 msgid "no such %(classname)s node \"%(nodeid)s\""
 msgstr "nėra tokio %(classname)s elemento \"%(nodeid)s\""
 
-#: ../roundup/admin.py:700
+#: ../roundup/admin.py:736
 #, python-format
 msgid "no such %(classname)s property \"%(propname)s\""
 msgstr "nėra tokio %(classname)s parinkties \"%(propname)s\""
 
-#: ../roundup/admin.py:708
+#: ../roundup/admin.py:744
 #, fuzzy
 msgid ""
 "Usage: set items property=value property=value ...\n"
@@ -570,7 +586,7 @@
 "            reikšmės (t.y. \"1,2,3\").\n"
 "        "
 
-#: ../roundup/admin.py:776
+#: ../roundup/admin.py:812
 #, fuzzy
 msgid ""
 "Usage: filter classname propname=value ...\n"
@@ -593,20 +609,20 @@
 "        "
 
 # ../roundup/admin.py:682 :835 :847 :901
-#: ../roundup/admin.py:819
+#: ../roundup/admin.py:855
 #, fuzzy, python-format
 msgid "Class %(curclassname)s has no property %(pn)s in %(propname)s."
 msgstr "%(classname)s neturi parinkties \"%(propname)s\""
 
 # ../roundup/admin.py:682 :835 :847 :901
-#: ../roundup/admin.py:857 ../roundup/admin.py:918 ../roundup/admin.py:1082
-#: ../roundup/admin.py:1094 ../roundup/admin.py:1177
-#: ../roundup/admin.py:857:918 :1082:1094:1177
+#: ../roundup/admin.py:893 ../roundup/admin.py:954 ../roundup/admin.py:1118
+#: ../roundup/admin.py:1130 ../roundup/admin.py:1213
+#: ../roundup/admin.py:893:954 :1118:1130:1213
 #, python-format
 msgid "%(classname)s has no property \"%(propname)s\""
 msgstr "%(classname)s neturi parinkties \"%(propname)s\""
 
-#: ../roundup/admin.py:864
+#: ../roundup/admin.py:900
 msgid ""
 "Usage: find classname propname=value ...\n"
 "        Find the nodes of the given class with a given link property value.\n"
@@ -625,7 +641,7 @@
 "            arba jo raktinė reikšmė.\n"
 "        "
 
-#: ../roundup/admin.py:925
+#: ../roundup/admin.py:961
 msgid ""
 "Usage: specification classname\n"
 "        Show the properties for a classname.\n"
@@ -639,17 +655,17 @@
 "            Ši komanda išvardina duotos klasės parinktis.\n"
 "        "
 
-#: ../roundup/admin.py:941
+#: ../roundup/admin.py:977
 #, fuzzy, python-format
 msgid "%(key)s: %(value)s (key property)\n"
 msgstr "%(key)s: %(value)s (key property)"
 
-#: ../roundup/admin.py:944
+#: ../roundup/admin.py:980
 #, fuzzy, python-format
 msgid "%(key)s: %(value)s\n"
 msgstr "%(key)s: %(value)s"
 
-#: ../roundup/admin.py:947
+#: ../roundup/admin.py:983
 #, fuzzy
 msgid ""
 "Usage: display designator[,designator]*\n"
@@ -669,12 +685,12 @@
 "            Ši komanda išvardina parinktis ir jų reikšmes duotam elementui.\n"
 "        "
 
-#: ../roundup/admin.py:974
+#: ../roundup/admin.py:1010
 #, python-format
 msgid "%(key)s: %(value)s"
 msgstr "%(key)s: %(value)s"
 
-#: ../roundup/admin.py:977
+#: ../roundup/admin.py:1013
 msgid ""
 "Usage: create classname property=value ...\n"
 "        Create a new entry of a given class.\n"
@@ -693,31 +709,31 @@
 "            eilutėje po \"create\" komandos.\n"
 "        "
 
-#: ../roundup/admin.py:1005
+#: ../roundup/admin.py:1041
 #, python-format
 msgid "%(propname)s (Password): "
 msgstr "%(propname)s (Slaptažodis): "
 
-#: ../roundup/admin.py:1008
+#: ../roundup/admin.py:1044
 #, python-format
 msgid "   %(propname)s (Again): "
 msgstr "   %(propname)s (Pakartoti): "
 
-#: ../roundup/admin.py:1012
+#: ../roundup/admin.py:1048
 msgid "Sorry, try again..."
 msgstr "Bandykite dar kartą..."
 
-#: ../roundup/admin.py:1016
+#: ../roundup/admin.py:1052
 #, python-format
 msgid "%(propname)s (%(proptype)s): "
 msgstr "%(propname)s (%(proptype)s): "
 
-#: ../roundup/admin.py:1035
+#: ../roundup/admin.py:1071
 #, python-format
 msgid "you must provide the \"%(propname)s\" property."
 msgstr "turite pateikti parinktį \"%(propname)s\"."
 
-#: ../roundup/admin.py:1047
+#: ../roundup/admin.py:1083
 msgid ""
 "Usage: list classname [property]\n"
 "        List the instances of a class.\n"
@@ -745,16 +761,16 @@
 "            parinkties sąrašas kiekvienam klasės egzemplioriui.\n"
 "        "
 
-#: ../roundup/admin.py:1060
+#: ../roundup/admin.py:1096
 msgid "Too many arguments supplied"
 msgstr "Pateikta per daug argumentų"
 
-#: ../roundup/admin.py:1096
+#: ../roundup/admin.py:1132
 #, python-format
 msgid "%(nodeid)4s: %(value)s"
 msgstr "%(nodeid)4s: %(value)s"
 
-#: ../roundup/admin.py:1100
+#: ../roundup/admin.py:1136
 msgid ""
 "Usage: templates [trace_search]\n"
 "        List templates and their installed directories.\n"
@@ -764,7 +780,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1128
+#: ../roundup/admin.py:1164
 msgid ""
 "Usage: table classname [property[,property]*]\n"
 "        List the instances of a class in tabular form.\n"
@@ -826,17 +842,17 @@
 "            pateiks 4 simbolių ilgio \"Name\" stulpelį.\n"
 "        "
 
-#: ../roundup/admin.py:1172
+#: ../roundup/admin.py:1208
 #, python-format
 msgid "\"%(spec)s\" not name:width"
 msgstr "\"%(spec)s\" ne vardas:plotis"
 
-#: ../roundup/admin.py:1194
+#: ../roundup/admin.py:1230
 #, python-format
 msgid "\"%(spec)s\" does not have an integer width: \"%(width)s\""
 msgstr ""
 
-#: ../roundup/admin.py:1230
+#: ../roundup/admin.py:1266
 msgid ""
 "Usage: history designator [skipquiet]\n"
 "        Show the history entries of a designator.\n"
@@ -851,7 +867,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1266
+#: ../roundup/admin.py:1302
 msgid ""
 "Usage: commit\n"
 "        Commit changes made to the database during an interactive session.\n"
@@ -876,7 +892,7 @@
 "            išsaugomos, jei jos įvykdomos sėkmingai.\n"
 "        "
 
-#: ../roundup/admin.py:1281
+#: ../roundup/admin.py:1317
 msgid ""
 "Usage: rollback\n"
 "        Undo all changes that are pending commit to the database.\n"
@@ -898,7 +914,7 @@
 "             nepadarys jokių pakeitimų duomenų bazėje.\n"
 "        "
 
-#: ../roundup/admin.py:1294
+#: ../roundup/admin.py:1330
 #, fuzzy
 msgid ""
 "Usage: retire designator[,designator]*\n"
@@ -919,7 +935,7 @@
 "            kartą.\n"
 "        "
 
-#: ../roundup/admin.py:1322
+#: ../roundup/admin.py:1358
 #, fuzzy
 msgid ""
 "Usage: restore designator[,designator]*\n"
@@ -938,13 +954,13 @@
 "        "
 
 # ../roundup/admin.py:564 :964 :1013 :1035
-#: ../roundup/admin.py:1347
+#: ../roundup/admin.py:1383
 #, fuzzy
 msgid "no such %(classname)s node \" % (nodeid)s\""
 msgstr "nėra tokio %(classname)s elemento \"%(nodeid)s\""
 
 #. grab the directory to export to
-#: ../roundup/admin.py:1353
+#: ../roundup/admin.py:1389
 msgid ""
 "Usage: export [[-]class[,class]] export_dir\n"
 "        Export the database to colon-separated-value files.\n"
@@ -972,7 +988,7 @@
 "        direktorijoje.\n"
 "        "
 
-#: ../roundup/admin.py:1460
+#: ../roundup/admin.py:1496
 msgid ""
 "Usage: exporttables [[-]class[,class]] export_dir\n"
 "        Export the database to colon-separated-value files, excluding the\n"
@@ -1002,7 +1018,7 @@
 "        direktorijoje.\n"
 "        "
 
-#: ../roundup/admin.py:1475
+#: ../roundup/admin.py:1511
 msgid ""
 "Usage: import import_dir\n"
 "        Import a database from the directory containing CSV files,\n"
@@ -1047,7 +1063,7 @@
 "            veiksmas).\n"
 "        "
 
-#: ../roundup/admin.py:1554
+#: ../roundup/admin.py:1590
 msgid ""
 "Usage: importtables export_dir\n"
 "\n"
@@ -1055,7 +1071,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1561
+#: ../roundup/admin.py:1597
 msgid ""
 "Usage: pack period | date\n"
 "\n"
@@ -1094,11 +1110,11 @@
 "\n"
 "        "
 
-#: ../roundup/admin.py:1589
+#: ../roundup/admin.py:1625
 msgid "Invalid format"
 msgstr "Netinkamas formatas"
 
-#: ../roundup/admin.py:1602
+#: ../roundup/admin.py:1638
 msgid ""
 "Usage: reindex [classname|designator]*\n"
 "        Re-generate a tracker's search indexes.\n"
@@ -1114,12 +1130,12 @@
 "            Paprastai tai įvyksta automatiškai.\n"
 "        "
 
-#: ../roundup/admin.py:1616
+#: ../roundup/admin.py:1652
 #, python-format
 msgid "no such item \"%(designator)s\""
 msgstr "nėra elemento \"%(designator)s\""
 
-#: ../roundup/admin.py:1626
+#: ../roundup/admin.py:1662
 #, fuzzy
 msgid ""
 "Usage: security [Role name]\n"
@@ -1131,47 +1147,47 @@
 "            Parodo vienos ar kelių rolių permisijas.\n"
 "        "
 
-#: ../roundup/admin.py:1635
+#: ../roundup/admin.py:1671
 #, fuzzy, python-format
 msgid "No such Role \"%(role)s\"\n"
 msgstr "Nėra tokios rolės \"%(role)s\""
 
-#: ../roundup/admin.py:1641
+#: ../roundup/admin.py:1677
 #, fuzzy, python-format
 msgid "New Web users get the Roles \"%(role)s\"\n"
 msgstr "Naujiems web vartotojams suteikiamos rolės \"%(role)s\""
 
-#: ../roundup/admin.py:1644
+#: ../roundup/admin.py:1680
 #, fuzzy, python-format
 msgid "New Web users get the Role \"%(role)s\"\n"
 msgstr "Naujiems web vartotojams suteikiama rolė \"%(role)s\""
 
-#: ../roundup/admin.py:1648
+#: ../roundup/admin.py:1684
 #, fuzzy, python-format
 msgid "New Email users get the Roles \"%(role)s\"\n"
 msgstr "Naujiems vartotojams per el. paštą suteikiamos rolės \"%(role)s\""
 
-#: ../roundup/admin.py:1650
+#: ../roundup/admin.py:1686
 #, fuzzy, python-format
 msgid "New Email users get the Role \"%(role)s\"\n"
 msgstr "Naujiems vartotojams per el. paštą suteikiama rolė \"%(role)s\""
 
-#: ../roundup/admin.py:1653
+#: ../roundup/admin.py:1689
 #, fuzzy, python-format
 msgid "Role \"%(name)s\":\n"
 msgstr "Rolė \"%(name)s\":"
 
-#: ../roundup/admin.py:1659
+#: ../roundup/admin.py:1695
 #, fuzzy
 msgid " %(description)s (%(name)s for \"%(klass)s\""
 msgstr " %(description)s (%(name)s skirta tik \"%(klass)s\")"
 
-#: ../roundup/admin.py:1659
+#: ../roundup/admin.py:1695
 #, fuzzy, python-format
 msgid " %(description)s (%(name)s for \"%(klass)s\": %(properties)s only)\n"
 msgstr " %(description)s (%(name)s skirta tik \"%(klass)s\": %(properties)s)"
 
-#: ../roundup/admin.py:1672
+#: ../roundup/admin.py:1708
 #, python-format
 msgid ""
 "\n"
@@ -1179,17 +1195,17 @@
 "\n"
 msgstr ""
 
-#: ../roundup/admin.py:1678
+#: ../roundup/admin.py:1714
 #, fuzzy, python-format
 msgid " %(description)s (%(name)s for \"%(klass)s\" only)\n"
 msgstr " %(description)s (%(name)s skirta tik \"%(klass)s\")"
 
-#: ../roundup/admin.py:1681
+#: ../roundup/admin.py:1717
 #, fuzzy, python-format
 msgid " %(description)s (%(name)s)\n"
 msgstr " %(description)s (%(name)s)"
 
-#: ../roundup/admin.py:1685
+#: ../roundup/admin.py:1721
 msgid ""
 "Usage: migrate\n"
 "\n"
@@ -1213,45 +1229,45 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1706
+#: ../roundup/admin.py:1742
 #, fuzzy
 msgid "Tracker updated"
 msgstr "Tracker'io namų direktorija"
 
-#: ../roundup/admin.py:1709
+#: ../roundup/admin.py:1745
 msgid "No migration action required"
 msgstr ""
 
-#: ../roundup/admin.py:1735
+#: ../roundup/admin.py:1771
 #, python-format
 msgid "Unknown command \"%(command)s\" (\"help commands\" for a list)"
 msgstr ""
 "Nežinoma komanda \"%(command)s\" (įveskite \"help commands\" komandų\n"
 "sąrašui gauti)"
 
-#: ../roundup/admin.py:1741
+#: ../roundup/admin.py:1777
 #, python-format
 msgid "Multiple commands match \"%(command)s\": %(list)s"
 msgstr "Kelios komandos atitinka \"%(command)s\": %(list)s"
 
-#: ../roundup/admin.py:1750
+#: ../roundup/admin.py:1786
 msgid "Enter tracker home: "
 msgstr "Įveskite tracker'io namų direktoriją: "
 
 # ../roundup/admin.py:1312 :1318 :1338
-#: ../roundup/admin.py:1759 ../roundup/admin.py:1765 ../roundup/admin.py:1802
-#: ../roundup/admin.py:1759:1765:1802
+#: ../roundup/admin.py:1795 ../roundup/admin.py:1801 ../roundup/admin.py:1838
+#: ../roundup/admin.py:1795:1801:1838
 #, python-format
 msgid "Error: %(message)s"
 msgstr "Klaida: %(message)s"
 
-#: ../roundup/admin.py:1775 ../roundup/admin.py:1779
-#: ../roundup/admin.py:1775:1779
+#: ../roundup/admin.py:1811 ../roundup/admin.py:1815
+#: ../roundup/admin.py:1811:1815
 #, python-format
 msgid "Error: Couldn't open tracker: %(message)s"
 msgstr "Klaida: Negaliu atidaryti tracker'io: %(message)s"
 
-#: ../roundup/admin.py:1815
+#: ../roundup/admin.py:1851
 #, python-format
 msgid ""
 "Roundup %s ready for input.\n"
@@ -1260,19 +1276,15 @@
 "Roundup %s pasiruošęs priimti duomenis.\n"
 "Norėdami iškviesti pagalbą įveskite \"help\"."
 
-#: ../roundup/admin.py:1820
+#: ../roundup/admin.py:1856
 msgid "Note: command history and editing not available"
 msgstr "Pastaba: komandų archyvas ir redagavimas neprieinami"
 
-#: ../roundup/admin.py:1824
-msgid "roundup> "
-msgstr "roundup> "
-
-#: ../roundup/admin.py:1826
+#: ../roundup/admin.py:1862
 msgid "exit..."
 msgstr "išeiti..."
 
-#: ../roundup/admin.py:1839
+#: ../roundup/admin.py:1875
 msgid "There are unsaved changes. Commit them (y/N)? "
 msgstr "Yra neišsaugotų pakeitimų. Išsaugoti juos (y/N)? "
 
@@ -1380,20 +1392,22 @@
 msgid "restored"
 msgstr "aktyvuotas"
 
-#: ../roundup/backends/sessions_redis.py:76
-#: ../roundup/backends/sessions_redis.py:95
-#: ../roundup/backends/sessions_redis.py:76:95
+#: ../roundup/backends/sessions_redis.py:78
+#: ../roundup/backends/sessions_redis.py:97
+#: ../roundup/backends/sessions_redis.py:78:97
 #, python-format
 msgid "Key %(key)s not found in %(name)s database."
 msgstr ""
 
-#: ../roundup/backends/sessions_redis.py:191
+#: ../roundup/backends/sessions_redis.py:193
 #, python-format
 msgid "Key %(key)s changed in %(name)s db"
 msgstr ""
 
-#: ../roundup/backends/sessions_redis.py:195
-msgid "Redis set failed afer 3 retries"
+#: ../roundup/backends/sessions_redis.py:203
+#, python-format
+msgid ""
+"Redis set failed after %(retries)d retries for user %(user)s with key %(key)s"
 msgstr ""
 
 #: ../roundup/cgi/actions.py:97
@@ -1709,22 +1723,22 @@
 msgstr ""
 
 # ../roundup/cgi/actions.py:897 :901
-#: ../roundup/cgi/actions.py:1383 ../roundup/cgi/actions.py:1387
-#: ../roundup/cgi/actions.py:1383:1387
+#: ../roundup/cgi/actions.py:1384 ../roundup/cgi/actions.py:1388
+#: ../roundup/cgi/actions.py:1384:1388
 msgid "Invalid login"
 msgstr "Neteisingas vartotojo vardas ar slaptažodis"
 
-#: ../roundup/cgi/actions.py:1393
+#: ../roundup/cgi/actions.py:1394
 msgid "You do not have permission to login"
 msgstr "Neturite prisijungimo teisių"
 
-#: ../roundup/cgi/actions.py:1437 ../roundup/cgi/actions.py:1616
-#: ../roundup/cgi/actions.py:1437:1616
+#: ../roundup/cgi/actions.py:1439 ../roundup/cgi/actions.py:1618
+#: ../roundup/cgi/actions.py:1439:1618
 #, python-format
 msgid "Column \"%(column)s\" not found in %(class)s"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1687
+#: ../roundup/cgi/actions.py:1689
 #, fuzzy, python-format
 msgid "You do not have permission to view %(class)s"
 msgstr "Neturite leidimo redaguoti %(class)s"
@@ -1828,149 +1842,150 @@
 "Apie klaidą pranešėme tracker'io administratoriui.</p>\n"
 "</body></html>"
 
-#: ../roundup/cgi/client.py:651
+#: ../roundup/cgi/client.py:670 ../roundup/cgi/client.py:1570
+#: ../roundup/cgi/client.py:670:1570
+msgid "Required Header Missing"
+msgstr ""
+
+#: ../roundup/cgi/client.py:672
 #, fuzzy
 msgid "Client is not allowed to use Rest Interface."
 msgstr "Anoniminiai vartotojai neturi teisių naudoti web interfeisą"
 
-#: ../roundup/cgi/client.py:895
+#: ../roundup/cgi/client.py:921
 msgid "Form Error: "
 msgstr "Formos klaida: "
 
-#: ../roundup/cgi/client.py:985
+#: ../roundup/cgi/client.py:1011
 #, python-format
 msgid "Unrecognized charset: %r"
 msgstr "Neatpažinta koduotė: %r"
 
-#: ../roundup/cgi/client.py:1238 ../roundup/cgi/client.py:2196
-#: ../roundup/cgi/client.py:1238:2196
+#: ../roundup/cgi/client.py:1264 ../roundup/cgi/client.py:2250
+#: ../roundup/cgi/client.py:1264:2250
 msgid "broken form: multiple @action values submitted"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1253
+#: ../roundup/cgi/client.py:1279
 msgid "Anonymous users are not allowed to use the web interface"
 msgstr "Anoniminiai vartotojai neturi teisių naudoti web interfeisą"
 
-#: ../roundup/cgi/client.py:1376
+#: ../roundup/cgi/client.py:1430
 msgid "Referer header not available."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1380
+#: ../roundup/cgi/client.py:1434
 #, python-format
 msgid "csrf key used with wrong method from: %s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1409
+#: ../roundup/cgi/client.py:1463
 #, python-format
 msgid "csrf header %(header)s required but missing for user%(userid)s."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1413
+#: ../roundup/cgi/client.py:1467
 #, python-format
 msgid "Missing header: %s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1421
+#: ../roundup/cgi/client.py:1475
 #, python-format
 msgid "csrf Referer header check failed for user%(userid)s. Value=%(referer)s"
 msgstr ""
 
 # ../roundup/cgi/actions.py:897 :901
-#: ../roundup/cgi/client.py:1426
+#: ../roundup/cgi/client.py:1480
 #, fuzzy, python-format
 msgid "Invalid Referer: %s"
 msgstr "Neteisingas vartotojo vardas ar slaptažodis"
 
-#: ../roundup/cgi/client.py:1441
+#: ../roundup/cgi/client.py:1495
 #, python-format
 msgid "csrf Origin header check failed for user%(userid)s. Value=%(origin)s"
 msgstr ""
 
 # ../roundup/cgi/actions.py:897 :901
-#: ../roundup/cgi/client.py:1446
+#: ../roundup/cgi/client.py:1500
 #, fuzzy, python-format
 msgid "Invalid Origin %s"
 msgstr "Neteisingas vartotojo vardas ar slaptažodis"
 
-#: ../roundup/cgi/client.py:1460
+#: ../roundup/cgi/client.py:1514
 #, python-format
 msgid ""
 "csrf X-FORWARDED-HOST header check failed for user%(userid)s. Value=%(host)s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1466
+#: ../roundup/cgi/client.py:1520
 #, python-format
 msgid "Invalid X-FORWARDED-HOST %s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1485
+#: ../roundup/cgi/client.py:1539
 #, python-format
 msgid "csrf HOST header check failed for user%(userid)s. Value=%(host)s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1490
+#: ../roundup/cgi/client.py:1544
 #, python-format
 msgid "Invalid HOST %s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1498
+#: ../roundup/cgi/client.py:1552
 msgid "Csrf: unable to verify sufficient headers"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1499
+#: ../roundup/cgi/client.py:1553
 msgid "Unable to verify sufficient headers"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1513
+#: ../roundup/cgi/client.py:1567
 #, python-format
 msgid "csrf X-REQUESTED-WITH xmlrpc required header check failed for user%s."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1516
-msgid "Required Header Missing"
-msgstr ""
-
-#: ../roundup/cgi/client.py:1554
+#: ../roundup/cgi/client.py:1608
 #, python-format
 msgid "Required csrf field missing for user%s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1556 ../roundup/cgi/client.py:1583
-#: ../roundup/cgi/client.py:1600 ../roundup/cgi/client.py:1556:1583:1600
+#: ../roundup/cgi/client.py:1610 ../roundup/cgi/client.py:1637
+#: ../roundup/cgi/client.py:1654 ../roundup/cgi/client.py:1610:1637:1654
 msgid ""
 "We can't validate your session (csrf failure). Re-enter any unsaved data and "
 "try again."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1560
+#: ../roundup/cgi/client.py:1614
 #, python-format
 msgid "csrf field not supplied by user%s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1572
+#: ../roundup/cgi/client.py:1626
 #, python-format
 msgid ""
 "Csrf mismatch user: current user %(user)s != stored user %(stored)s, current "
 "session, stored session: %(cur_sess)s,%(stor_sess)s for key %(key)s."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1590
+#: ../roundup/cgi/client.py:1644
 #, python-format
 msgid ""
 "Csrf mismatch user: current session %(curr_sess)s != stored session "
 "%(stor_sess)s, current user/stored user is: %(user)s for key %(key)s."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1784
+#: ../roundup/cgi/client.py:1838
 msgid "You are not allowed to view this file."
 msgstr "Jūs neturite teisių žiūrėti šį failą."
 
-#: ../roundup/cgi/client.py:2073
+#: ../roundup/cgi/client.py:2127
 #, python-format
 msgid "%(starttag)sTime elapsed: %(seconds)fs%(endtag)s\n"
 msgstr "%(starttag)sPraėjęs laikas: %(seconds)fs%(endtag)s\n"
 
-#: ../roundup/cgi/client.py:2077
+#: ../roundup/cgi/client.py:2131
 #, python-format
 msgid ""
 "%(starttag)sCache hits: %(cache_hits)d, misses %(cache_misses)d. Loading "
@@ -1980,7 +1995,7 @@
 "%(cache_misses)d. Įkeliami elementai: %(get_items)f sek. Filtruojama: "
 "%(filtering)f sek.%(endtag)s\n"
 
-#: ../roundup/cgi/client.py:2615
+#: ../roundup/cgi/client.py:2669
 #, python-format
 msgid ""
 "Cache failure: compressed file %(compressed)s is older than its source file "
@@ -2384,28 +2399,28 @@
 msgid "\"%s\" not a node designator"
 msgstr ""
 
-#: ../roundup/hyperdb.py:1492 ../roundup/hyperdb.py:1500
-#: ../roundup/hyperdb.py:1492:1500
+#: ../roundup/hyperdb.py:1493 ../roundup/hyperdb.py:1501
+#: ../roundup/hyperdb.py:1493:1501
 #, python-format
 msgid "Not a property name: %s"
 msgstr ""
 
-#: ../roundup/hyperdb.py:1977
+#: ../roundup/hyperdb.py:1978
 #, fuzzy, python-format
 msgid "property %(property)s: %(value)r is not a %(classname)s."
 msgstr "parinkties \"%(propname)s\": \"%(value)s\" nėra sąraše"
 
-#: ../roundup/hyperdb.py:1983
+#: ../roundup/hyperdb.py:1984
 #, python-format
 msgid "you may only enter ID values for property %s"
 msgstr ""
 
-#: ../roundup/hyperdb.py:2018
+#: ../roundup/hyperdb.py:2019
 #, python-format
 msgid "%(property)r is not a property of %(classname)s"
 msgstr ""
 
-#: ../roundup/init.py:139
+#: ../roundup/init.py:141
 #, python-format
 msgid ""
 "WARNING: directory '%s'\n"
@@ -2688,7 +2703,7 @@
 "%(mailadmin)s, kad pataisytų neteisingus atributus:\n"
 "  %(errors)s\n"
 
-#: ../roundup/mailgw.py:1820
+#: ../roundup/mailgw.py:1821
 #, fuzzy, python-format
 msgid ""
 "\n"
@@ -2716,19 +2731,19 @@
 msgid "Invalid attribute %s"
 msgstr "Neteisingas vartotojo vardas ar slaptažodis"
 
-#: ../roundup/rest.py:2078
+#: ../roundup/rest.py:2090
 #, python-format
 msgid "Api rate limits exceeded. Please wait: %s seconds."
 msgstr ""
 
-#: ../roundup/rest.py:2113
+#: ../roundup/rest.py:2125
 #, python-format
 msgid ""
 "Unable to parse Accept Header. %(error)s. Acceptable types: "
 "%(acceptable_types)s"
 msgstr ""
 
-#: ../roundup/rest.py:2262
+#: ../roundup/rest.py:2305
 #, python-format
 msgid ""
 "Unrecognized api version: %s. See /rest without specifying api version for "
@@ -2857,27 +2872,27 @@
 msgid "No tracker templates found in directory %s"
 msgstr "Direktorijoje %s nėra tracker'io šablonų"
 
-#: ../roundup/scripts/roundup_mailgw.py:185
+#: ../roundup/scripts/roundup_mailgw.py:182
 msgid ""
 "\n"
 "Error: The instance home must be specified"
 msgstr ""
 
-#: ../roundup/scripts/roundup_mailgw.py:203
+#: ../roundup/scripts/roundup_mailgw.py:200
 #, fuzzy
 msgid ""
 "\n"
 "Error: not enough source specification information"
 msgstr "Klaida: nepakankamai šaltinio specifikacijos informacijos"
 
-#: ../roundup/scripts/roundup_mailgw.py:234
+#: ../roundup/scripts/roundup_mailgw.py:231
 #, fuzzy, python-format
 msgid ""
 "\n"
 "Error: %s specification not valid"
 msgstr "Klaida: pop specifikacija netinkama"
 
-#: ../roundup/scripts/roundup_mailgw.py:258
+#: ../roundup/scripts/roundup_mailgw.py:254
 #, fuzzy
 msgid ""
 "\n"
@@ -2889,7 +2904,7 @@
 msgid "WARNING: generating temporary SSL certificate"
 msgstr ""
 
-#: ../roundup/scripts/roundup_server.py:329
+#: ../roundup/scripts/roundup_server.py:331
 msgid ""
 "<html><head><title>Roundup trackers index</title></head>\n"
 "<body><h1>Roundup trackers index</h1><ol>\n"
@@ -2897,58 +2912,58 @@
 "<html><head><title>Roundup tracker'io indeksas</title></head>\n"
 "<body><h1>Roundup tracker'io indeksas</h1><ol>\n"
 
-#: ../roundup/scripts/roundup_server.py:549
+#: ../roundup/scripts/roundup_server.py:551
 #, fuzzy, python-format
 msgid "Error: %(type)s: %(value)s"
 msgstr "%(key)s: %(value)s"
 
-#: ../roundup/scripts/roundup_server.py:561
+#: ../roundup/scripts/roundup_server.py:563
 msgid "WARNING: ignoring \"-g\" argument, not root"
 msgstr "PERSPĖJIMAS: \"-g\" argumentas ignoruojamas, nėra root teisių"
 
-#: ../roundup/scripts/roundup_server.py:567
+#: ../roundup/scripts/roundup_server.py:569
 msgid "Can't change groups - no grp module"
 msgstr "Negaliu pakeisti grupių -- nėra grp modulio"
 
-#: ../roundup/scripts/roundup_server.py:576
+#: ../roundup/scripts/roundup_server.py:578
 #, python-format
 msgid "Group %(group)s doesn't exist"
 msgstr "Grupės %(group)s nėra"
 
-#: ../roundup/scripts/roundup_server.py:588
+#: ../roundup/scripts/roundup_server.py:590
 msgid "Can't run as root!"
 msgstr "Negaliu paleisti root teisėmis!"
 
-#: ../roundup/scripts/roundup_server.py:591
+#: ../roundup/scripts/roundup_server.py:593
 msgid "WARNING: ignoring \"-u\" argument, not root"
 msgstr "PERSPĖJIMAS: \"-u\" argumentas ignoruojamas, nėra root teisių"
 
-#: ../roundup/scripts/roundup_server.py:597
+#: ../roundup/scripts/roundup_server.py:599
 msgid "Can't change users - no pwd module"
 msgstr "Negaliu pakesiti vartotojų - nėra pwd modulio"
 
-#: ../roundup/scripts/roundup_server.py:606
+#: ../roundup/scripts/roundup_server.py:608
 #, python-format
 msgid "User %(user)s doesn't exist"
 msgstr "Vartotojo %(user)s nėra"
 
-#: ../roundup/scripts/roundup_server.py:803
+#: ../roundup/scripts/roundup_server.py:805
 #, python-format
 msgid "Multiprocess mode \"%s\" is not available, switching to single-process"
 msgstr "Multiprocesinė aplinka \"%s\" neprieinama, perjungiu į vienprocesinę"
 
-#: ../roundup/scripts/roundup_server.py:830
+#: ../roundup/scripts/roundup_server.py:832
 #, python-format
 msgid "Unable to bind to port %s, port already in use."
 msgstr "Negaliu prijungti prie jungties %s, jungtis jau naudojama."
 
-#: ../roundup/scripts/roundup_server.py:834
+#: ../roundup/scripts/roundup_server.py:836
 #, fuzzy, python-format
 msgid ""
 "Unable to bind to port %(port)s, access not allowed, errno: %(errno)s %(msg)s"
 msgstr "Negaliu prijungti prie jungties %s, jungtis jau naudojama."
 
-#: ../roundup/scripts/roundup_server.py:913
+#: ../roundup/scripts/roundup_server.py:915
 msgid ""
 " -c <Command>  Windows Service options.\n"
 "               If you want to run the server as a Windows Service, you\n"
@@ -2965,7 +2980,7 @@
 "               Įvedę \"roundup-server -c help\" pamatysite Windows Services\n"
 "               specifiką."
 
-#: ../roundup/scripts/roundup_server.py:920
+#: ../roundup/scripts/roundup_server.py:922
 msgid ""
 " -u <UID>      runs the Roundup web server as this UID\n"
 " -g <GID>      runs the Roundup web server as this GID\n"
@@ -2979,7 +2994,7 @@
 "               nurodytą PIDfaile. Parinktis -l *privalo* būti nurodyta\n"
 "               jei naudojama -d."
 
-#: ../roundup/scripts/roundup_server.py:927
+#: ../roundup/scripts/roundup_server.py:929
 #, fuzzy, python-format
 msgid ""
 "\n"
@@ -3099,21 +3114,21 @@
 "   nesupras.\n"
 "\n"
 
-#: ../roundup/scripts/roundup_server.py:1103
+#: ../roundup/scripts/roundup_server.py:1105
 msgid "Instances must be name=home"
 msgstr "Egzempliorius turi būti nurodomas taip: vardas=namų_direktorija"
 
-#: ../roundup/scripts/roundup_server.py:1117
+#: ../roundup/scripts/roundup_server.py:1119
 #, python-format
 msgid "Configuration saved to %s"
 msgstr "Konfigūracija išsaugota %s"
 
-#: ../roundup/scripts/roundup_server.py:1135
+#: ../roundup/scripts/roundup_server.py:1137
 msgid "Sorry, you can't run the server as a daemon on this Operating System"
 msgstr ""
 "Jūs negalite paleisti serverio kaip daemon'o šioje operacinėje sistemoje"
 
-#: ../roundup/scripts/roundup_server.py:1155
+#: ../roundup/scripts/roundup_server.py:1157
 #, python-format
 msgid "Roundup server started on %(HOST)s:%(PORT)s"
 msgstr "Roundup serveris paleistas ant %(HOST)s:%(PORT)s"
@@ -5599,6 +5614,9 @@
 msgid "Password"
 msgstr "Prisijungimo slaptažodis"
 
+#~ msgid "roundup> "
+#~ msgstr "roundup> "
+
 #, fuzzy
 #~ msgid ""
 #~ "Usage: %(program)s [-v] [-c class] [[-C class] -S field=value]* [instance "
--- a/locale/roundup.pot	Wed Mar 01 10:43:54 2023 -0500
+++ b/locale/roundup.pot	Wed Mar 01 10:51:37 2023 -0500
@@ -8,7 +8,7 @@
 msgstr ""
 "Project-Id-Version: Roundup 2.2.0\n"
 "Report-Msgid-Bugs-To: roundup-devel@lists.sourceforge.net\n"
-"POT-Creation-Date: 2022-11-23 22:28-0500\n"
+"POT-Creation-Date: 2023-03-01 10:35-0500\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -23,29 +23,29 @@
 msgid "You do not have permission to retire or restore the %(classname)s class."
 msgstr ""
 
-#: ../roundup/actions.py:64 ../roundup/cgi/actions.py:240
+#: ../roundup/actions.py:65 ../roundup/cgi/actions.py:240
 msgid "You may not retire the admin or anonymous user"
 msgstr ""
 
-#: ../roundup/admin.py:106 ../roundup/admin.py:1259 ../roundup/admin.py:1314
-#: ../roundup/admin.py:1341 ../roundup/admin.py:106:1259 :1314:1341
+#: ../roundup/admin.py:112 ../roundup/admin.py:1295 ../roundup/admin.py:1350
+#: ../roundup/admin.py:1377 ../roundup/admin.py:112:1295 :1350:1377
 #, python-format
 msgid "no such class \"%(classname)s\""
 msgstr ""
 
-#: ../roundup/admin.py:118
+#: ../roundup/admin.py:124
 #, python-format
 msgid "argument \"%(arg)s\" not propname=value"
 msgstr ""
 
-#: ../roundup/admin.py:131
+#: ../roundup/admin.py:137
 #, python-format
 msgid ""
 "Problem: %(message)s\n"
 "\n"
 msgstr ""
 
-#: ../roundup/admin.py:132
+#: ../roundup/admin.py:138
 #, python-format
 msgid ""
 "%(message)sUsage: roundup-admin [options] [<command> <arguments>]\n"
@@ -73,17 +73,17 @@
 " roundup-admin help all                   -- all available help\n"
 msgstr ""
 
-#: ../roundup/admin.py:159
+#: ../roundup/admin.py:165
 msgid "Commands: "
 msgstr ""
 
-#: ../roundup/admin.py:166
+#: ../roundup/admin.py:172
 msgid ""
 "Commands may be abbreviated as long as the abbreviation\n"
 "matches only one command, e.g. l == li == lis == list."
 msgstr ""
 
-#: ../roundup/admin.py:195
+#: ../roundup/admin.py:201
 msgid ""
 "\n"
 "All commands (except help) require a tracker specifier. This is just\n"
@@ -133,7 +133,7 @@
 " . ROUNDUP_LOGIN environment variable\n"
 " . the -u command-line option\n"
 "If either the name or password is not supplied, they are obtained from the\n"
-"command-line.\n"
+"command-line. (See admin guide before using -u.)\n"
 "\n"
 "Date format examples:\n"
 "  \"2000-04-17.03:45\" means <Date 2000-04-17.08:45:00>\n"
@@ -148,12 +148,12 @@
 "Command help:\n"
 msgstr ""
 
-#: ../roundup/admin.py:258
+#: ../roundup/admin.py:264
 #, python-format
 msgid "%s:"
 msgstr ""
 
-#: ../roundup/admin.py:265
+#: ../roundup/admin.py:271
 msgid ""
 "Usage: help topic\n"
 "        Give help about topic.\n"
@@ -165,20 +165,20 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:287
+#: ../roundup/admin.py:293
 #, python-format
 msgid "Sorry, no help for \"%(topic)s\""
 msgstr ""
 
-#: ../roundup/admin.py:402 ../roundup/admin.py:458 ../roundup/admin.py:402:458
+#: ../roundup/admin.py:408 ../roundup/admin.py:464 ../roundup/admin.py:408:464
 msgid "Templates:"
 msgstr ""
 
-#: ../roundup/admin.py:405 ../roundup/admin.py:468 ../roundup/admin.py:405:468
+#: ../roundup/admin.py:411 ../roundup/admin.py:474 ../roundup/admin.py:411:474
 msgid "Back ends:"
 msgstr ""
 
-#: ../roundup/admin.py:408
+#: ../roundup/admin.py:414
 msgid ""
 "Usage: install [template [backend [key=val[,key=val]]]]\n"
 "        Install a new Roundup tracker.\n"
@@ -204,22 +204,22 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:431 ../roundup/admin.py:562 ../roundup/admin.py:635
-#: ../roundup/admin.py:728 ../roundup/admin.py:786 ../roundup/admin.py:872
-#: ../roundup/admin.py:931 ../roundup/admin.py:958 ../roundup/admin.py:985
-#: ../roundup/admin.py:1062 ../roundup/admin.py:1157 ../roundup/admin.py:1243
-#: ../roundup/admin.py:1304 ../roundup/admin.py:1331 ../roundup/admin.py:1367
-#: ../roundup/admin.py:1495 ../roundup/admin.py:1579 ../roundup/admin.py:431:562
-#: :1157 :1243:1304 :1331:1367 :1495:1579 :635:728 :786:872 :931:958 :985:1062
+#: ../roundup/admin.py:437 ../roundup/admin.py:568 ../roundup/admin.py:671
+#: ../roundup/admin.py:764 ../roundup/admin.py:822 ../roundup/admin.py:908
+#: ../roundup/admin.py:967 ../roundup/admin.py:994 ../roundup/admin.py:1021
+#: ../roundup/admin.py:1098 ../roundup/admin.py:1193 ../roundup/admin.py:1279
+#: ../roundup/admin.py:1340 ../roundup/admin.py:1367 ../roundup/admin.py:1403
+#: ../roundup/admin.py:1531 ../roundup/admin.py:1615 ../roundup/admin.py:437:568
+#: :1021:1098 :1193 :1279:1340 :1367:1403 :1531:1615 :671:764 :822:908 :967:994
 msgid "Not enough arguments supplied"
 msgstr ""
 
-#: ../roundup/admin.py:437
+#: ../roundup/admin.py:443
 #, python-format
 msgid "Instance home parent directory \"%(parent)s\" does not exist"
 msgstr ""
 
-#: ../roundup/admin.py:446
+#: ../roundup/admin.py:452
 #, python-format
 msgid ""
 "WARNING: There appears to be a tracker in \"%(tracker_home)s\"!\n"
@@ -227,20 +227,20 @@
 "Erase it? Y/N: "
 msgstr ""
 
-#: ../roundup/admin.py:459
+#: ../roundup/admin.py:465
 msgid "Select template"
 msgstr ""
 
-#: ../roundup/admin.py:469
+#: ../roundup/admin.py:475
 msgid "Select backend"
 msgstr ""
 
-#: ../roundup/admin.py:480
+#: ../roundup/admin.py:486
 #, python-format
 msgid "Error in configuration settings: \"%s\""
 msgstr ""
 
-#: ../roundup/admin.py:511
+#: ../roundup/admin.py:517
 #, python-format
 msgid ""
 "\n"
@@ -249,11 +249,11 @@
 "   %(config_file)s"
 msgstr ""
 
-#: ../roundup/admin.py:521
+#: ../roundup/admin.py:527
 msgid " ... at a minimum, you must set following options:"
 msgstr ""
 
-#: ../roundup/admin.py:526
+#: ../roundup/admin.py:532
 #, python-format
 msgid ""
 "\n"
@@ -269,7 +269,7 @@
 "---------------------------------------------------------------------------\n"
 msgstr ""
 
-#: ../roundup/admin.py:557
+#: ../roundup/admin.py:563
 msgid ""
 "Usage: genconfig <filename>\n"
 "        Generate a new tracker config file (ini style) with default\n"
@@ -277,7 +277,22 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:572
+#: ../roundup/admin.py:581
+#, python-format
+msgid ""
+"Changing option\n"
+"   'password_pbkdf2_default_rounds'\n"
+"from old default of %(old_number)s to new default of %(new_number)s."
+msgstr ""
+
+#: ../roundup/admin.py:593
+#, python-format
+msgid ""
+"Update 'password_pbkdf2_default_rounds'to a number equal to or larger\n"
+"than %s."
+msgstr ""
+
+#: ../roundup/admin.py:604
 msgid ""
 "Usage: updateconfig <filename>\n"
 "        Generate an updated tracker config file (ini style) in\n"
@@ -287,7 +302,7 @@
 msgstr ""
 
 #. password
-#: ../roundup/admin.py:580
+#: ../roundup/admin.py:612
 msgid ""
 "Usage: initialise [adminpw]\n"
 "        Initialise a new Roundup tracker.\n"
@@ -298,30 +313,30 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:594
+#: ../roundup/admin.py:626
 msgid "Admin Password: "
 msgstr ""
 
-#: ../roundup/admin.py:595
+#: ../roundup/admin.py:627
 msgid "       Confirm: "
 msgstr ""
 
-#: ../roundup/admin.py:599
+#: ../roundup/admin.py:631
 msgid "Instance home does not exist"
 msgstr ""
 
-#: ../roundup/admin.py:603
+#: ../roundup/admin.py:635
 msgid "Instance has not been installed"
 msgstr ""
 
-#: ../roundup/admin.py:609
+#: ../roundup/admin.py:641
 msgid ""
 "WARNING: The database is already initialised!\n"
 "If you re-initialise it, you will lose all the data!\n"
 "Erase it? Y/N: "
 msgstr ""
 
-#: ../roundup/admin.py:625
+#: ../roundup/admin.py:661
 msgid ""
 "Usage: get property designator[,designator]*\n"
 "        Get the given property of one or more designator(s).\n"
@@ -334,23 +349,23 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:669 ../roundup/admin.py:687 ../roundup/admin.py:669:687
+#: ../roundup/admin.py:705 ../roundup/admin.py:723 ../roundup/admin.py:705:723
 #, python-format
 msgid "property %s is not of type Multilink or Link so -d flag does not apply."
 msgstr ""
 
-#: ../roundup/admin.py:697 ../roundup/admin.py:1261 ../roundup/admin.py:1316
-#: ../roundup/admin.py:697:1261 :1316
+#: ../roundup/admin.py:733 ../roundup/admin.py:1297 ../roundup/admin.py:1352
+#: ../roundup/admin.py:733:1297 :1352
 #, python-format
 msgid "no such %(classname)s node \"%(nodeid)s\""
 msgstr ""
 
-#: ../roundup/admin.py:700
+#: ../roundup/admin.py:736
 #, python-format
 msgid "no such %(classname)s property \"%(propname)s\""
 msgstr ""
 
-#: ../roundup/admin.py:708
+#: ../roundup/admin.py:744
 msgid ""
 "Usage: set items property=value property=value ...\n"
 "        Set the given properties of one or more items(s).\n"
@@ -371,7 +386,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:776
+#: ../roundup/admin.py:812
 msgid ""
 "Usage: filter classname propname=value ...\n"
 "        Find the nodes of the given class with a given property value.\n"
@@ -384,19 +399,19 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:819
+#: ../roundup/admin.py:855
 #, python-format
 msgid "Class %(curclassname)s has no property %(pn)s in %(propname)s."
 msgstr ""
 
-#: ../roundup/admin.py:857 ../roundup/admin.py:918 ../roundup/admin.py:1082
-#: ../roundup/admin.py:1094 ../roundup/admin.py:1177 ../roundup/admin.py:857:918
-#: :1082:1094 :1177
+#: ../roundup/admin.py:893 ../roundup/admin.py:954 ../roundup/admin.py:1118
+#: ../roundup/admin.py:1130 ../roundup/admin.py:1213 ../roundup/admin.py:893:954
+#: :1118:1130 :1213
 #, python-format
 msgid "%(classname)s has no property \"%(propname)s\""
 msgstr ""
 
-#: ../roundup/admin.py:864
+#: ../roundup/admin.py:900
 msgid ""
 "Usage: find classname propname=value ...\n"
 "        Find the nodes of the given class with a given link property value.\n"
@@ -407,7 +422,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:925
+#: ../roundup/admin.py:961
 msgid ""
 "Usage: specification classname\n"
 "        Show the properties for a classname.\n"
@@ -416,17 +431,17 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:941
+#: ../roundup/admin.py:977
 #, python-format
 msgid "%(key)s: %(value)s (key property)\n"
 msgstr ""
 
-#: ../roundup/admin.py:944
+#: ../roundup/admin.py:980
 #, python-format
 msgid "%(key)s: %(value)s\n"
 msgstr ""
 
-#: ../roundup/admin.py:947
+#: ../roundup/admin.py:983
 msgid ""
 "Usage: display designator[,designator]*\n"
 "\n"
@@ -440,12 +455,12 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:974
+#: ../roundup/admin.py:1010
 #, python-format
 msgid "%(key)s: %(value)s"
 msgstr ""
 
-#: ../roundup/admin.py:977
+#: ../roundup/admin.py:1013
 msgid ""
 "Usage: create classname property=value ...\n"
 "        Create a new entry of a given class.\n"
@@ -457,31 +472,31 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1005
+#: ../roundup/admin.py:1041
 #, python-format
 msgid "%(propname)s (Password): "
 msgstr ""
 
-#: ../roundup/admin.py:1008
+#: ../roundup/admin.py:1044
 #, python-format
 msgid "   %(propname)s (Again): "
 msgstr ""
 
-#: ../roundup/admin.py:1012
+#: ../roundup/admin.py:1048
 msgid "Sorry, try again..."
 msgstr ""
 
-#: ../roundup/admin.py:1016
+#: ../roundup/admin.py:1052
 #, python-format
 msgid "%(propname)s (%(proptype)s): "
 msgstr ""
 
-#: ../roundup/admin.py:1035
+#: ../roundup/admin.py:1071
 #, python-format
 msgid "you must provide the \"%(propname)s\" property."
 msgstr ""
 
-#: ../roundup/admin.py:1047
+#: ../roundup/admin.py:1083
 msgid ""
 "Usage: list classname [property]\n"
 "        List the instances of a class.\n"
@@ -497,16 +512,16 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1060
+#: ../roundup/admin.py:1096
 msgid "Too many arguments supplied"
 msgstr ""
 
-#: ../roundup/admin.py:1096
+#: ../roundup/admin.py:1132
 #, python-format
 msgid "%(nodeid)4s: %(value)s"
 msgstr ""
 
-#: ../roundup/admin.py:1100
+#: ../roundup/admin.py:1136
 msgid ""
 "Usage: templates [trace_search]\n"
 "        List templates and their installed directories.\n"
@@ -516,7 +531,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1128
+#: ../roundup/admin.py:1164
 msgid ""
 "Usage: table classname [property[,property]*]\n"
 "        List the instances of a class in tabular form.\n"
@@ -548,17 +563,17 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1172
+#: ../roundup/admin.py:1208
 #, python-format
 msgid "\"%(spec)s\" not name:width"
 msgstr ""
 
-#: ../roundup/admin.py:1194
-#, python-format
-msgid "\"%(spec)s\" does not have an integer width: \"%(width)s\""
-msgstr ""
-
 #: ../roundup/admin.py:1230
+#, python-format
+msgid "\"%(spec)s\" does not have an integer width: \"%(width)s\""
+msgstr ""
+
+#: ../roundup/admin.py:1266
 msgid ""
 "Usage: history designator [skipquiet]\n"
 "        Show the history entries of a designator.\n"
@@ -573,7 +588,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1266
+#: ../roundup/admin.py:1302
 msgid ""
 "Usage: commit\n"
 "        Commit changes made to the database during an interactive session.\n"
@@ -587,7 +602,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1281
+#: ../roundup/admin.py:1317
 msgid ""
 "Usage: rollback\n"
 "        Undo all changes that are pending commit to the database.\n"
@@ -599,7 +614,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1294
+#: ../roundup/admin.py:1330
 msgid ""
 "Usage: retire designator[,designator]*\n"
 "        Retire the node specified by designator.\n"
@@ -612,7 +627,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1322
+#: ../roundup/admin.py:1358
 msgid ""
 "Usage: restore designator[,designator]*\n"
 "        Restore the retired node specified by designator.\n"
@@ -624,12 +639,12 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1347
+#: ../roundup/admin.py:1383
 msgid "no such %(classname)s node \" % (nodeid)s\""
 msgstr ""
 
 #. grab the directory to export to
-#: ../roundup/admin.py:1353
+#: ../roundup/admin.py:1389
 msgid ""
 "Usage: export [[-]class[,class]] export_dir\n"
 "        Export the database to colon-separated-value files.\n"
@@ -645,7 +660,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1460
+#: ../roundup/admin.py:1496
 msgid ""
 "Usage: exporttables [[-]class[,class]] export_dir\n"
 "        Export the database to colon-separated-value files, excluding the\n"
@@ -662,7 +677,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1475
+#: ../roundup/admin.py:1511
 msgid ""
 "Usage: import import_dir\n"
 "        Import a database from the directory containing CSV files,\n"
@@ -685,7 +700,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1554
+#: ../roundup/admin.py:1590
 msgid ""
 "Usage: importtables export_dir\n"
 "\n"
@@ -693,7 +708,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1561
+#: ../roundup/admin.py:1597
 msgid ""
 "Usage: pack period | date\n"
 "\n"
@@ -715,11 +730,11 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1589
+#: ../roundup/admin.py:1625
 msgid "Invalid format"
 msgstr ""
 
-#: ../roundup/admin.py:1602
+#: ../roundup/admin.py:1638
 msgid ""
 "Usage: reindex [classname|designator]*\n"
 "        Re-generate a tracker's search indexes.\n"
@@ -729,12 +744,12 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1616
+#: ../roundup/admin.py:1652
 #, python-format
 msgid "no such item \"%(designator)s\""
 msgstr ""
 
-#: ../roundup/admin.py:1626
+#: ../roundup/admin.py:1662
 msgid ""
 "Usage: security [Role name]\n"
 "\n"
@@ -742,46 +757,46 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1635
+#: ../roundup/admin.py:1671
 #, python-format
 msgid "No such Role \"%(role)s\"\n"
 msgstr ""
 
-#: ../roundup/admin.py:1641
+#: ../roundup/admin.py:1677
 #, python-format
 msgid "New Web users get the Roles \"%(role)s\"\n"
 msgstr ""
 
-#: ../roundup/admin.py:1644
+#: ../roundup/admin.py:1680
 #, python-format
 msgid "New Web users get the Role \"%(role)s\"\n"
 msgstr ""
 
-#: ../roundup/admin.py:1648
+#: ../roundup/admin.py:1684
 #, python-format
 msgid "New Email users get the Roles \"%(role)s\"\n"
 msgstr ""
 
-#: ../roundup/admin.py:1650
+#: ../roundup/admin.py:1686
 #, python-format
 msgid "New Email users get the Role \"%(role)s\"\n"
 msgstr ""
 
-#: ../roundup/admin.py:1653
+#: ../roundup/admin.py:1689
 #, python-format
 msgid "Role \"%(name)s\":\n"
 msgstr ""
 
-#: ../roundup/admin.py:1659
+#: ../roundup/admin.py:1695
 msgid " %(description)s (%(name)s for \"%(klass)s\""
 msgstr ""
 
-#: ../roundup/admin.py:1659
+#: ../roundup/admin.py:1695
 #, python-format
 msgid " %(description)s (%(name)s for \"%(klass)s\": %(properties)s only)\n"
 msgstr ""
 
-#: ../roundup/admin.py:1672
+#: ../roundup/admin.py:1708
 #, python-format
 msgid ""
 "\n"
@@ -789,17 +804,17 @@
 "\n"
 msgstr ""
 
-#: ../roundup/admin.py:1678
+#: ../roundup/admin.py:1714
 #, python-format
 msgid " %(description)s (%(name)s for \"%(klass)s\" only)\n"
 msgstr ""
 
-#: ../roundup/admin.py:1681
+#: ../roundup/admin.py:1717
 #, python-format
 msgid " %(description)s (%(name)s)\n"
 msgstr ""
 
-#: ../roundup/admin.py:1685
+#: ../roundup/admin.py:1721
 msgid ""
 "Usage: migrate\n"
 "\n"
@@ -823,60 +838,56 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1706
+#: ../roundup/admin.py:1742
 msgid "Tracker updated"
 msgstr ""
 
-#: ../roundup/admin.py:1709
+#: ../roundup/admin.py:1745
 msgid "No migration action required"
 msgstr ""
 
-#: ../roundup/admin.py:1735
+#: ../roundup/admin.py:1771
 #, python-format
 msgid "Unknown command \"%(command)s\" (\"help commands\" for a list)"
 msgstr ""
 
-#: ../roundup/admin.py:1741
+#: ../roundup/admin.py:1777
 #, python-format
 msgid "Multiple commands match \"%(command)s\": %(list)s"
 msgstr ""
 
-#: ../roundup/admin.py:1750
+#: ../roundup/admin.py:1786
 msgid "Enter tracker home: "
 msgstr ""
 
-#: ../roundup/admin.py:1759 ../roundup/admin.py:1765 ../roundup/admin.py:1802
-#: ../roundup/admin.py:1759:1765 :1802
+#: ../roundup/admin.py:1795 ../roundup/admin.py:1801 ../roundup/admin.py:1838
+#: ../roundup/admin.py:1795:1801 :1838
 #, python-format
 msgid "Error: %(message)s"
 msgstr ""
 
-#: ../roundup/admin.py:1775 ../roundup/admin.py:1779
-#: ../roundup/admin.py:1775:1779
+#: ../roundup/admin.py:1811 ../roundup/admin.py:1815
+#: ../roundup/admin.py:1811:1815
 #, python-format
 msgid "Error: Couldn't open tracker: %(message)s"
 msgstr ""
 
-#: ../roundup/admin.py:1815
+#: ../roundup/admin.py:1851
 #, python-format
 msgid ""
 "Roundup %s ready for input.\n"
 "Type \"help\" for help."
 msgstr ""
 
-#: ../roundup/admin.py:1820
+#: ../roundup/admin.py:1856
 msgid "Note: command history and editing not available"
 msgstr ""
 
-#: ../roundup/admin.py:1824
-msgid "roundup> "
-msgstr ""
-
-#: ../roundup/admin.py:1826
+#: ../roundup/admin.py:1862
 msgid "exit..."
 msgstr ""
 
-#: ../roundup/admin.py:1839
+#: ../roundup/admin.py:1875
 msgid "There are unsaved changes. Commit them (y/N)? "
 msgstr ""
 
@@ -982,20 +993,22 @@
 msgid "restored"
 msgstr ""
 
-#: ../roundup/backends/sessions_redis.py:76
-#: ../roundup/backends/sessions_redis.py:95
-#: ../roundup/backends/sessions_redis.py:76:95
+#: ../roundup/backends/sessions_redis.py:78
+#: ../roundup/backends/sessions_redis.py:97
+#: ../roundup/backends/sessions_redis.py:78:97
 #, python-format
 msgid "Key %(key)s not found in %(name)s database."
 msgstr ""
 
-#: ../roundup/backends/sessions_redis.py:191
+#: ../roundup/backends/sessions_redis.py:193
 #, python-format
 msgid "Key %(key)s changed in %(name)s db"
 msgstr ""
 
-#: ../roundup/backends/sessions_redis.py:195
-msgid "Redis set failed afer 3 retries"
+#: ../roundup/backends/sessions_redis.py:203
+#, python-format
+msgid ""
+"Redis set failed after %(retries)d retries for user %(user)s with key %(key)s"
 msgstr ""
 
 #: ../roundup/cgi/actions.py:97
@@ -1295,22 +1308,22 @@
 msgid "Welcome %(username)s!"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1383 ../roundup/cgi/actions.py:1387
-#: ../roundup/cgi/actions.py:1383:1387
+#: ../roundup/cgi/actions.py:1384 ../roundup/cgi/actions.py:1388
+#: ../roundup/cgi/actions.py:1384:1388
 msgid "Invalid login"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1393
+#: ../roundup/cgi/actions.py:1394
 msgid "You do not have permission to login"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1437 ../roundup/cgi/actions.py:1616
-#: ../roundup/cgi/actions.py:1437:1616
+#: ../roundup/cgi/actions.py:1439 ../roundup/cgi/actions.py:1618
+#: ../roundup/cgi/actions.py:1439:1618
 #, python-format
 msgid "Column \"%(column)s\" not found in %(class)s"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1687
+#: ../roundup/cgi/actions.py:1689
 #, python-format
 msgid "You do not have permission to view %(class)s"
 msgstr ""
@@ -1394,153 +1407,154 @@
 "</body></html>"
 msgstr ""
 
-#: ../roundup/cgi/client.py:651
+#: ../roundup/cgi/client.py:670 ../roundup/cgi/client.py:1570
+#: ../roundup/cgi/client.py:670:1570
+msgid "Required Header Missing"
+msgstr ""
+
+#: ../roundup/cgi/client.py:672
 msgid "Client is not allowed to use Rest Interface."
 msgstr ""
 
-#: ../roundup/cgi/client.py:895
+#: ../roundup/cgi/client.py:921
 msgid "Form Error: "
 msgstr ""
 
-#: ../roundup/cgi/client.py:985
+#: ../roundup/cgi/client.py:1011
 #, python-format
 msgid "Unrecognized charset: %r"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1238 ../roundup/cgi/client.py:2196
-#: ../roundup/cgi/client.py:1238:2196
+#: ../roundup/cgi/client.py:1264 ../roundup/cgi/client.py:2250
+#: ../roundup/cgi/client.py:1264:2250
 msgid "broken form: multiple @action values submitted"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1253
+#: ../roundup/cgi/client.py:1279
 msgid "Anonymous users are not allowed to use the web interface"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1376
+#: ../roundup/cgi/client.py:1430
 msgid "Referer header not available."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1380
+#: ../roundup/cgi/client.py:1434
 #, python-format
 msgid "csrf key used with wrong method from: %s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1409
+#: ../roundup/cgi/client.py:1463
 #, python-format
 msgid "csrf header %(header)s required but missing for user%(userid)s."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1413
+#: ../roundup/cgi/client.py:1467
 #, python-format
 msgid "Missing header: %s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1421
+#: ../roundup/cgi/client.py:1475
 #, python-format
 msgid "csrf Referer header check failed for user%(userid)s. Value=%(referer)s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1426
+#: ../roundup/cgi/client.py:1480
 #, python-format
 msgid "Invalid Referer: %s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1441
+#: ../roundup/cgi/client.py:1495
 #, python-format
 msgid "csrf Origin header check failed for user%(userid)s. Value=%(origin)s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1446
+#: ../roundup/cgi/client.py:1500
 #, python-format
 msgid "Invalid Origin %s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1460
+#: ../roundup/cgi/client.py:1514
 #, python-format
 msgid ""
 "csrf X-FORWARDED-HOST header check failed for user%(userid)s. Value=%(host)s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1466
+#: ../roundup/cgi/client.py:1520
 #, python-format
 msgid "Invalid X-FORWARDED-HOST %s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1485
+#: ../roundup/cgi/client.py:1539
 #, python-format
 msgid "csrf HOST header check failed for user%(userid)s. Value=%(host)s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1490
+#: ../roundup/cgi/client.py:1544
 #, python-format
 msgid "Invalid HOST %s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1498
+#: ../roundup/cgi/client.py:1552
 msgid "Csrf: unable to verify sufficient headers"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1499
+#: ../roundup/cgi/client.py:1553
 msgid "Unable to verify sufficient headers"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1513
+#: ../roundup/cgi/client.py:1567
 #, python-format
 msgid "csrf X-REQUESTED-WITH xmlrpc required header check failed for user%s."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1516
-msgid "Required Header Missing"
-msgstr ""
-
-#: ../roundup/cgi/client.py:1554
+#: ../roundup/cgi/client.py:1608
 #, python-format
 msgid "Required csrf field missing for user%s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1556 ../roundup/cgi/client.py:1583
-#: ../roundup/cgi/client.py:1600 ../roundup/cgi/client.py:1556:1583 :1600
+#: ../roundup/cgi/client.py:1610 ../roundup/cgi/client.py:1637
+#: ../roundup/cgi/client.py:1654 ../roundup/cgi/client.py:1610:1637 :1654
 msgid ""
 "We can't validate your session (csrf failure). Re-enter any unsaved data and "
 "try again."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1560
+#: ../roundup/cgi/client.py:1614
 #, python-format
 msgid "csrf field not supplied by user%s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1572
+#: ../roundup/cgi/client.py:1626
 #, python-format
 msgid ""
 "Csrf mismatch user: current user %(user)s != stored user %(stored)s, current "
 "session, stored session: %(cur_sess)s,%(stor_sess)s for key %(key)s."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1590
+#: ../roundup/cgi/client.py:1644
 #, python-format
 msgid ""
 "Csrf mismatch user: current session %(curr_sess)s != stored session "
 "%(stor_sess)s, current user/stored user is: %(user)s for key %(key)s."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1784
+#: ../roundup/cgi/client.py:1838
 msgid "You are not allowed to view this file."
 msgstr ""
 
-#: ../roundup/cgi/client.py:2073
+#: ../roundup/cgi/client.py:2127
 #, python-format
 msgid "%(starttag)sTime elapsed: %(seconds)fs%(endtag)s\n"
 msgstr ""
 
-#: ../roundup/cgi/client.py:2077
+#: ../roundup/cgi/client.py:2131
 #, python-format
 msgid ""
 "%(starttag)sCache hits: %(cache_hits)d, misses %(cache_misses)d. Loading "
 "items: %(get_items)f secs. Filtering: %(filtering)f secs.%(endtag)s\n"
 msgstr ""
 
-#: ../roundup/cgi/client.py:2615
+#: ../roundup/cgi/client.py:2669
 #, python-format
 msgid ""
 "Cache failure: compressed file %(compressed)s is older than its source file "
@@ -1913,28 +1927,28 @@
 msgid "\"%s\" not a node designator"
 msgstr ""
 
-#: ../roundup/hyperdb.py:1492 ../roundup/hyperdb.py:1500
-#: ../roundup/hyperdb.py:1492:1500
+#: ../roundup/hyperdb.py:1493 ../roundup/hyperdb.py:1501
+#: ../roundup/hyperdb.py:1493:1501
 #, python-format
 msgid "Not a property name: %s"
 msgstr ""
 
-#: ../roundup/hyperdb.py:1977
+#: ../roundup/hyperdb.py:1978
 #, python-format
 msgid "property %(property)s: %(value)r is not a %(classname)s."
 msgstr ""
 
-#: ../roundup/hyperdb.py:1983
+#: ../roundup/hyperdb.py:1984
 #, python-format
 msgid "you may only enter ID values for property %s"
 msgstr ""
 
-#: ../roundup/hyperdb.py:2018
+#: ../roundup/hyperdb.py:2019
 #, python-format
 msgid "%(property)r is not a property of %(classname)s"
 msgstr ""
 
-#: ../roundup/init.py:139
+#: ../roundup/init.py:141
 #, python-format
 msgid ""
 "WARNING: directory '%s'\n"
@@ -2154,7 +2168,7 @@
 "  %(errors)s\n"
 msgstr ""
 
-#: ../roundup/mailgw.py:1820
+#: ../roundup/mailgw.py:1821
 #, python-format
 msgid ""
 "\n"
@@ -2177,19 +2191,19 @@
 msgid "Invalid attribute %s"
 msgstr ""
 
-#: ../roundup/rest.py:2078
+#: ../roundup/rest.py:2090
 #, python-format
 msgid "Api rate limits exceeded. Please wait: %s seconds."
 msgstr ""
 
-#: ../roundup/rest.py:2113
+#: ../roundup/rest.py:2125
 #, python-format
 msgid ""
 "Unable to parse Accept Header. %(error)s. Acceptable types: "
 "%(acceptable_types)s"
 msgstr ""
 
-#: ../roundup/rest.py:2262
+#: ../roundup/rest.py:2305
 #, python-format
 msgid ""
 "Unrecognized api version: %s. See /rest without specifying api version for "
@@ -2312,26 +2326,26 @@
 msgid "No tracker templates found in directory %s"
 msgstr ""
 
-#: ../roundup/scripts/roundup_mailgw.py:185
+#: ../roundup/scripts/roundup_mailgw.py:182
 msgid ""
 "\n"
 "Error: The instance home must be specified"
 msgstr ""
 
-#: ../roundup/scripts/roundup_mailgw.py:203
+#: ../roundup/scripts/roundup_mailgw.py:200
 msgid ""
 "\n"
 "Error: not enough source specification information"
 msgstr ""
 
-#: ../roundup/scripts/roundup_mailgw.py:234
+#: ../roundup/scripts/roundup_mailgw.py:231
 #, python-format
 msgid ""
 "\n"
 "Error: %s specification not valid"
 msgstr ""
 
-#: ../roundup/scripts/roundup_mailgw.py:258
+#: ../roundup/scripts/roundup_mailgw.py:254
 msgid ""
 "\n"
 "Error: The source must be either \"mailbox\", \"pop\", \"pops\", \"apop\", "
@@ -2342,64 +2356,64 @@
 msgid "WARNING: generating temporary SSL certificate"
 msgstr ""
 
-#: ../roundup/scripts/roundup_server.py:329
+#: ../roundup/scripts/roundup_server.py:331
 msgid ""
 "<html><head><title>Roundup trackers index</title></head>\n"
 "<body><h1>Roundup trackers index</h1><ol>\n"
 msgstr ""
 
-#: ../roundup/scripts/roundup_server.py:549
+#: ../roundup/scripts/roundup_server.py:551
 #, python-format
 msgid "Error: %(type)s: %(value)s"
 msgstr ""
 
-#: ../roundup/scripts/roundup_server.py:561
+#: ../roundup/scripts/roundup_server.py:563
 msgid "WARNING: ignoring \"-g\" argument, not root"
 msgstr ""
 
-#: ../roundup/scripts/roundup_server.py:567
+#: ../roundup/scripts/roundup_server.py:569
 msgid "Can't change groups - no grp module"
 msgstr ""
 
-#: ../roundup/scripts/roundup_server.py:576
+#: ../roundup/scripts/roundup_server.py:578
 #, python-format
 msgid "Group %(group)s doesn't exist"
 msgstr ""
 
-#: ../roundup/scripts/roundup_server.py:588
+#: ../roundup/scripts/roundup_server.py:590
 msgid "Can't run as root!"
 msgstr ""
 
-#: ../roundup/scripts/roundup_server.py:591
+#: ../roundup/scripts/roundup_server.py:593
 msgid "WARNING: ignoring \"-u\" argument, not root"
 msgstr ""
 
-#: ../roundup/scripts/roundup_server.py:597
+#: ../roundup/scripts/roundup_server.py:599
 msgid "Can't change users - no pwd module"
 msgstr ""
 
-#: ../roundup/scripts/roundup_server.py:606
+#: ../roundup/scripts/roundup_server.py:608
 #, python-format
 msgid "User %(user)s doesn't exist"
 msgstr ""
 
-#: ../roundup/scripts/roundup_server.py:803
+#: ../roundup/scripts/roundup_server.py:805
 #, python-format
 msgid "Multiprocess mode \"%s\" is not available, switching to single-process"
 msgstr ""
 
-#: ../roundup/scripts/roundup_server.py:830
+#: ../roundup/scripts/roundup_server.py:832
 #, python-format
 msgid "Unable to bind to port %s, port already in use."
 msgstr ""
 
-#: ../roundup/scripts/roundup_server.py:834
+#: ../roundup/scripts/roundup_server.py:836
 #, python-format
 msgid ""
 "Unable to bind to port %(port)s, access not allowed, errno: %(errno)s %(msg)s"
 msgstr ""
 
-#: ../roundup/scripts/roundup_server.py:913
+#: ../roundup/scripts/roundup_server.py:915
 msgid ""
 " -c <Command>  Windows Service options.\n"
 "               If you want to run the server as a Windows Service, you\n"
@@ -2409,7 +2423,7 @@
 "               specifics."
 msgstr ""
 
-#: ../roundup/scripts/roundup_server.py:920
+#: ../roundup/scripts/roundup_server.py:922
 msgid ""
 " -u <UID>      runs the Roundup web server as this UID\n"
 " -g <GID>      runs the Roundup web server as this GID\n"
@@ -2418,7 +2432,7 @@
 "               specified if -d is used."
 msgstr ""
 
-#: ../roundup/scripts/roundup_server.py:927
+#: ../roundup/scripts/roundup_server.py:929
 #, python-format
 msgid ""
 "\n"
@@ -2485,20 +2499,20 @@
 "   any url-unsafe characters like spaces, as these confuse IE.\n"
 msgstr ""
 
-#: ../roundup/scripts/roundup_server.py:1103
+#: ../roundup/scripts/roundup_server.py:1105
 msgid "Instances must be name=home"
 msgstr ""
 
-#: ../roundup/scripts/roundup_server.py:1117
+#: ../roundup/scripts/roundup_server.py:1119
 #, python-format
 msgid "Configuration saved to %s"
 msgstr ""
 
-#: ../roundup/scripts/roundup_server.py:1135
+#: ../roundup/scripts/roundup_server.py:1137
 msgid "Sorry, you can't run the server as a daemon on this Operating System"
 msgstr ""
 
-#: ../roundup/scripts/roundup_server.py:1155
+#: ../roundup/scripts/roundup_server.py:1157
 #, python-format
 msgid "Roundup server started on %(HOST)s:%(PORT)s"
 msgstr ""
--- a/locale/ru.po	Wed Mar 01 10:43:54 2023 -0500
+++ b/locale/ru.po	Wed Mar 01 10:51:37 2023 -0500
@@ -7,7 +7,7 @@
 msgstr ""
 "Project-Id-Version: Roundup 2.3.0\n"
 "Report-Msgid-Bugs-To: roundup-devel@lists.sourceforge.net\n"
-"POT-Creation-Date: 2022-11-23 22:28-0500\n"
+"POT-Creation-Date: 2023-03-01 10:35-0500\n"
 "PO-Revision-Date: 2013-10-31 12:21+0100\n"
 "Last-Translator: alexander smishlajev <alex@tycobka.lv>\n"
 "Language-Team: Russian\n"
@@ -25,22 +25,22 @@
 "You do not have permission to retire or restore the %(classname)s class."
 msgstr "    %(action)s   %(classname)s."
 
-#: ../roundup/actions.py:64 ../roundup/cgi/actions.py:240
+#: ../roundup/actions.py:65 ../roundup/cgi/actions.py:240
 msgid "You may not retire the admin or anonymous user"
 msgstr "   admin  anonymous."
 
-#: ../roundup/admin.py:106 ../roundup/admin.py:1259 ../roundup/admin.py:1314
-#: ../roundup/admin.py:1341 ../roundup/admin.py:106:1259 :1314:1341
+#: ../roundup/admin.py:112 ../roundup/admin.py:1295 ../roundup/admin.py:1350
+#: ../roundup/admin.py:1377 ../roundup/admin.py:112:1295 :1350:1377
 #, python-format
 msgid "no such class \"%(classname)s\""
 msgstr " \"%(classname)s\"  "
 
-#: ../roundup/admin.py:118
+#: ../roundup/admin.py:124
 #, python-format
 msgid "argument \"%(arg)s\" not propname=value"
 msgstr " \"%(arg)s\"    ="
 
-#: ../roundup/admin.py:131
+#: ../roundup/admin.py:137
 #, python-format
 msgid ""
 "Problem: %(message)s\n"
@@ -49,7 +49,7 @@
 ": %(message)s\n"
 "\n"
 
-#: ../roundup/admin.py:132
+#: ../roundup/admin.py:138
 #, fuzzy, python-format
 msgid ""
 "%(message)sUsage: roundup-admin [options] [<command> <arguments>]\n"
@@ -98,12 +98,12 @@
 " roundup-admin help <command>             --   \n"
 " roundup-admin help all                   --   \n"
 
-#: ../roundup/admin.py:159
+#: ../roundup/admin.py:165
 #, fuzzy
 msgid "Commands: "
 msgstr ":"
 
-#: ../roundup/admin.py:166
+#: ../roundup/admin.py:172
 msgid ""
 "Commands may be abbreviated as long as the abbreviation\n"
 "matches only one command, e.g. l == li == lis == list."
@@ -117,7 +117,8 @@
 #      .
 #
 #     "  "?
-#: ../roundup/admin.py:195
+#: ../roundup/admin.py:201
+#, fuzzy
 msgid ""
 "\n"
 "All commands (except help) require a tracker specifier. This is just\n"
@@ -169,7 +170,7 @@
 " . ROUNDUP_LOGIN environment variable\n"
 " . the -u command-line option\n"
 "If either the name or password is not supplied, they are obtained from the\n"
-"command-line.\n"
+"command-line. (See admin guide before using -u.)\n"
 "\n"
 "Date format examples:\n"
 "  \"2000-04-17.03:45\" means <Date 2000-04-17.08:45:00>\n"
@@ -248,12 +249,12 @@
 "\n"
 "  :\n"
 
-#: ../roundup/admin.py:258
+#: ../roundup/admin.py:264
 #, python-format
 msgid "%s:"
 msgstr ""
 
-#: ../roundup/admin.py:265
+#: ../roundup/admin.py:271
 msgid ""
 "Usage: help topic\n"
 "        Give help about topic.\n"
@@ -273,20 +274,20 @@
 "        all       --  \n"
 "        "
 
-#: ../roundup/admin.py:287
+#: ../roundup/admin.py:293
 #, python-format
 msgid "Sorry, no help for \"%(topic)s\""
 msgstr ",  \"%(topic)s\"  ."
 
-#: ../roundup/admin.py:402 ../roundup/admin.py:458 ../roundup/admin.py:402:458
+#: ../roundup/admin.py:408 ../roundup/admin.py:464 ../roundup/admin.py:408:464
 msgid "Templates:"
 msgstr ":"
 
-#: ../roundup/admin.py:405 ../roundup/admin.py:468 ../roundup/admin.py:405:468
+#: ../roundup/admin.py:411 ../roundup/admin.py:474 ../roundup/admin.py:411:474
 msgid "Back ends:"
 msgstr ":"
 
-#: ../roundup/admin.py:408
+#: ../roundup/admin.py:414
 msgid ""
 "Usage: install [template [backend [key=val[,key=val]]]]\n"
 "        Install a new Roundup tracker.\n"
@@ -338,23 +339,23 @@
 "        . \"help initopts\".\n"
 "        "
 
-#: ../roundup/admin.py:431 ../roundup/admin.py:562 ../roundup/admin.py:635
-#: ../roundup/admin.py:728 ../roundup/admin.py:786 ../roundup/admin.py:872
-#: ../roundup/admin.py:931 ../roundup/admin.py:958 ../roundup/admin.py:985
-#: ../roundup/admin.py:1062 ../roundup/admin.py:1157 ../roundup/admin.py:1243
-#: ../roundup/admin.py:1304 ../roundup/admin.py:1331 ../roundup/admin.py:1367
-#: ../roundup/admin.py:1495 ../roundup/admin.py:1579
-#: ../roundup/admin.py:431:562 :1157 :1243:1304 :1331:1367 :1495:1579 :635:728
-#: :786:872 :931:958 :985:1062
+#: ../roundup/admin.py:437 ../roundup/admin.py:568 ../roundup/admin.py:671
+#: ../roundup/admin.py:764 ../roundup/admin.py:822 ../roundup/admin.py:908
+#: ../roundup/admin.py:967 ../roundup/admin.py:994 ../roundup/admin.py:1021
+#: ../roundup/admin.py:1098 ../roundup/admin.py:1193 ../roundup/admin.py:1279
+#: ../roundup/admin.py:1340 ../roundup/admin.py:1367 ../roundup/admin.py:1403
+#: ../roundup/admin.py:1531 ../roundup/admin.py:1615
+#: ../roundup/admin.py:437:568 :1021:1098:1193 :1279:1340 :1367:1403 :1531:1615
+#: :671:764 :822:908 :967:994
 msgid "Not enough arguments supplied"
 msgstr " "
 
-#: ../roundup/admin.py:437
+#: ../roundup/admin.py:443
 #, python-format
 msgid "Instance home parent directory \"%(parent)s\" does not exist"
 msgstr " \"%(parent)s\"  "
 
-#: ../roundup/admin.py:446
+#: ../roundup/admin.py:452
 #, python-format
 msgid ""
 "WARNING: There appears to be a tracker in \"%(tracker_home)s\"!\n"
@@ -365,22 +366,22 @@
 "     !\n"
 "  ? Y/N: "
 
-#: ../roundup/admin.py:459
+#: ../roundup/admin.py:465
 #, fuzzy
 msgid "Select template"
 msgstr "  [classic]: "
 
-#: ../roundup/admin.py:469
+#: ../roundup/admin.py:475
 #, fuzzy
 msgid "Select backend"
 msgstr "  [anydbm]: "
 
-#: ../roundup/admin.py:480
+#: ../roundup/admin.py:486
 #, python-format
 msgid "Error in configuration settings: \"%s\""
 msgstr "   : \"%s\""
 
-#: ../roundup/admin.py:511
+#: ../roundup/admin.py:517
 #, python-format
 msgid ""
 "\n"
@@ -393,12 +394,12 @@
 "       :\n"
 "   %(config_file)s"
 
-#: ../roundup/admin.py:521
+#: ../roundup/admin.py:527
 msgid " ... at a minimum, you must set following options:"
 msgstr " ...  ,    :"
 
 #    
-#: ../roundup/admin.py:526
+#: ../roundup/admin.py:532
 #, python-format
 msgid ""
 "\n"
@@ -425,7 +426,7 @@
 "       \"roundup-admin initialise\".\n"
 "---------------------------------------------------------------------------\n"
 
-#: ../roundup/admin.py:557
+#: ../roundup/admin.py:563
 #, fuzzy
 msgid ""
 "Usage: genconfig <filename>\n"
@@ -438,7 +439,22 @@
 "           .\n"
 "        "
 
-#: ../roundup/admin.py:572
+#: ../roundup/admin.py:581
+#, python-format
+msgid ""
+"Changing option\n"
+"   'password_pbkdf2_default_rounds'\n"
+"from old default of %(old_number)s to new default of %(new_number)s."
+msgstr ""
+
+#: ../roundup/admin.py:593
+#, python-format
+msgid ""
+"Update 'password_pbkdf2_default_rounds'to a number equal to or larger\n"
+"than %s."
+msgstr ""
+
+#: ../roundup/admin.py:604
 #, fuzzy
 msgid ""
 "Usage: updateconfig <filename>\n"
@@ -454,7 +470,7 @@
 
 #  password
 #. password
-#: ../roundup/admin.py:580
+#: ../roundup/admin.py:612
 msgid ""
 "Usage: initialise [adminpw]\n"
 "        Initialise a new Roundup tracker.\n"
@@ -472,23 +488,23 @@
 "            dbinit.init()\n"
 "        "
 
-#: ../roundup/admin.py:594
+#: ../roundup/admin.py:626
 msgid "Admin Password: "
 msgstr " : "
 
-#: ../roundup/admin.py:595
+#: ../roundup/admin.py:627
 msgid "       Confirm: "
 msgstr "               : "
 
-#: ../roundup/admin.py:599
+#: ../roundup/admin.py:631
 msgid "Instance home does not exist"
 msgstr "    "
 
-#: ../roundup/admin.py:603
+#: ../roundup/admin.py:635
 msgid "Instance has not been installed"
 msgstr "  "
 
-#: ../roundup/admin.py:609
+#: ../roundup/admin.py:641
 msgid ""
 "WARNING: The database is already initialised!\n"
 "If you re-initialise it, you will lose all the data!\n"
@@ -498,7 +514,7 @@
 "     !\n"
 "  ? Y/N: "
 
-#: ../roundup/admin.py:625
+#: ../roundup/admin.py:661
 #, fuzzy
 msgid ""
 "Usage: get property designator[,designator]*\n"
@@ -519,24 +535,24 @@
 "           .\n"
 "        "
 
-#: ../roundup/admin.py:669 ../roundup/admin.py:687 ../roundup/admin.py:669:687
+#: ../roundup/admin.py:705 ../roundup/admin.py:723 ../roundup/admin.py:705:723
 #, python-format
 msgid "property %s is not of type Multilink or Link so -d flag does not apply."
 msgstr ""
 " '-d' ,     %s -  Link   Multilink"
 
-#: ../roundup/admin.py:697 ../roundup/admin.py:1261 ../roundup/admin.py:1316
-#: ../roundup/admin.py:697:1261:1316
+#: ../roundup/admin.py:733 ../roundup/admin.py:1297 ../roundup/admin.py:1352
+#: ../roundup/admin.py:733:1297:1352
 #, python-format
 msgid "no such %(classname)s node \"%(nodeid)s\""
 msgstr "  %(classname)s   \"%(nodeid)s\""
 
-#: ../roundup/admin.py:700
+#: ../roundup/admin.py:736
 #, python-format
 msgid "no such %(classname)s property \"%(propname)s\""
 msgstr "  %(classname)s   \"%(propname)s\""
 
-#: ../roundup/admin.py:708
+#: ../roundup/admin.py:744
 #, fuzzy
 msgid ""
 "Usage: set items property=value property=value ...\n"
@@ -571,7 +587,7 @@
 "        .  (, \"1,2,3\".)\n"
 "        "
 
-#: ../roundup/admin.py:776
+#: ../roundup/admin.py:812
 #, fuzzy
 msgid ""
 "Usage: filter classname propname=value ...\n"
@@ -592,19 +608,19 @@
 "          ,    .\n"
 "        "
 
-#: ../roundup/admin.py:819
+#: ../roundup/admin.py:855
 #, fuzzy, python-format
 msgid "Class %(curclassname)s has no property %(pn)s in %(propname)s."
 msgstr " %(classname)s    \"%(propname)s\""
 
-#: ../roundup/admin.py:857 ../roundup/admin.py:918 ../roundup/admin.py:1082
-#: ../roundup/admin.py:1094 ../roundup/admin.py:1177
-#: ../roundup/admin.py:857:918 :1082:1094:1177
+#: ../roundup/admin.py:893 ../roundup/admin.py:954 ../roundup/admin.py:1118
+#: ../roundup/admin.py:1130 ../roundup/admin.py:1213
+#: ../roundup/admin.py:893:954 :1118:1130:1213
 #, python-format
 msgid "%(classname)s has no property \"%(propname)s\""
 msgstr " %(classname)s    \"%(propname)s\""
 
-#: ../roundup/admin.py:864
+#: ../roundup/admin.py:900
 msgid ""
 "Usage: find classname propname=value ...\n"
 "        Find the nodes of the given class with a given link property value.\n"
@@ -622,7 +638,7 @@
 "          ,    .\n"
 "        "
 
-#: ../roundup/admin.py:925
+#: ../roundup/admin.py:961
 msgid ""
 "Usage: specification classname\n"
 "        Show the properties for a classname.\n"
@@ -636,17 +652,17 @@
 "            .\n"
 "        "
 
-#: ../roundup/admin.py:941
+#: ../roundup/admin.py:977
 #, fuzzy, python-format
 msgid "%(key)s: %(value)s (key property)\n"
 msgstr "%(key)s: %(value)s ( )"
 
-#: ../roundup/admin.py:944
+#: ../roundup/admin.py:980
 #, fuzzy, python-format
 msgid "%(key)s: %(value)s\n"
 msgstr "%(key)s: %(value)s ( )"
 
-#: ../roundup/admin.py:947
+#: ../roundup/admin.py:983
 #, fuzzy
 msgid ""
 "Usage: display designator[,designator]*\n"
@@ -667,12 +683,12 @@
 "         .\n"
 "        "
 
-#: ../roundup/admin.py:974
+#: ../roundup/admin.py:1010
 #, python-format
 msgid "%(key)s: %(value)s"
 msgstr ""
 
-#: ../roundup/admin.py:977
+#: ../roundup/admin.py:1013
 msgid ""
 "Usage: create classname property=value ...\n"
 "        Create a new entry of a given class.\n"
@@ -690,31 +706,31 @@
 "           .\n"
 "        "
 
-#: ../roundup/admin.py:1005
+#: ../roundup/admin.py:1041
 #, python-format
 msgid "%(propname)s (Password): "
 msgstr " %(propname)s (): "
 
-#: ../roundup/admin.py:1008
+#: ../roundup/admin.py:1044
 #, python-format
 msgid "   %(propname)s (Again): "
 msgstr "%(propname)s ( ): "
 
-#: ../roundup/admin.py:1012
+#: ../roundup/admin.py:1048
 msgid "Sorry, try again..."
 msgstr "  .    ."
 
-#: ../roundup/admin.py:1016
+#: ../roundup/admin.py:1052
 #, python-format
 msgid "%(propname)s (%(proptype)s): "
 msgstr ""
 
-#: ../roundup/admin.py:1035
+#: ../roundup/admin.py:1071
 #, python-format
 msgid "you must provide the \"%(propname)s\" property."
 msgstr " \"%(propname)s\"   ."
 
-#: ../roundup/admin.py:1047
+#: ../roundup/admin.py:1083
 msgid ""
 "Usage: list classname [property]\n"
 "        List the instances of a class.\n"
@@ -743,16 +759,16 @@
 "            .\n"
 "        "
 
-#: ../roundup/admin.py:1060
+#: ../roundup/admin.py:1096
 msgid "Too many arguments supplied"
 msgstr "   "
 
-#: ../roundup/admin.py:1096
+#: ../roundup/admin.py:1132
 #, python-format
 msgid "%(nodeid)4s: %(value)s"
 msgstr ""
 
-#: ../roundup/admin.py:1100
+#: ../roundup/admin.py:1136
 msgid ""
 "Usage: templates [trace_search]\n"
 "        List templates and their installed directories.\n"
@@ -762,7 +778,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1128
+#: ../roundup/admin.py:1164
 msgid ""
 "Usage: table classname [property[,property]*]\n"
 "        List the instances of a class in tabular form.\n"
@@ -822,17 +838,17 @@
 "           \"Name\"   .\n"
 "        "
 
-#: ../roundup/admin.py:1172
+#: ../roundup/admin.py:1208
 #, python-format
 msgid "\"%(spec)s\" not name:width"
 msgstr " \"%(spec)s\"     :"
 
-#: ../roundup/admin.py:1194
+#: ../roundup/admin.py:1230
 #, python-format
 msgid "\"%(spec)s\" does not have an integer width: \"%(width)s\""
 msgstr ""
 
-#: ../roundup/admin.py:1230
+#: ../roundup/admin.py:1266
 msgid ""
 "Usage: history designator [skipquiet]\n"
 "        Show the history entries of a designator.\n"
@@ -847,7 +863,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1266
+#: ../roundup/admin.py:1302
 msgid ""
 "Usage: commit\n"
 "        Commit changes made to the database during an interactive session.\n"
@@ -871,7 +887,7 @@
 "        ,       .\n"
 "        "
 
-#: ../roundup/admin.py:1281
+#: ../roundup/admin.py:1317
 msgid ""
 "Usage: rollback\n"
 "        Undo all changes that are pending commit to the database.\n"
@@ -892,7 +908,7 @@
 "            .\n"
 "        "
 
-#: ../roundup/admin.py:1294
+#: ../roundup/admin.py:1330
 #, fuzzy
 msgid ""
 "Usage: retire designator[,designator]*\n"
@@ -914,7 +930,7 @@
 "           .\n"
 "        "
 
-#: ../roundup/admin.py:1322
+#: ../roundup/admin.py:1358
 #, fuzzy
 msgid ""
 "Usage: restore designator[,designator]*\n"
@@ -933,13 +949,13 @@
 "          .\n"
 "        "
 
-#: ../roundup/admin.py:1347
+#: ../roundup/admin.py:1383
 #, fuzzy
 msgid "no such %(classname)s node \" % (nodeid)s\""
 msgstr "  %(classname)s   \"%(nodeid)s\""
 
 #. grab the directory to export to
-#: ../roundup/admin.py:1353
+#: ../roundup/admin.py:1389
 msgid ""
 "Usage: export [[-]class[,class]] export_dir\n"
 "        Export the database to colon-separated-value files.\n"
@@ -976,7 +992,7 @@
 "        exporttables.\n"
 "        "
 
-#: ../roundup/admin.py:1460
+#: ../roundup/admin.py:1496
 msgid ""
 "Usage: exporttables [[-]class[,class]] export_dir\n"
 "        Export the database to colon-separated-value files, excluding the\n"
@@ -1014,7 +1030,7 @@
 "        ,   export.\n"
 "        "
 
-#: ../roundup/admin.py:1475
+#: ../roundup/admin.py:1511
 msgid ""
 "Usage: import import_dir\n"
 "        Import a database from the directory containing CSV files,\n"
@@ -1058,7 +1074,7 @@
 "            ).\n"
 "        "
 
-#: ../roundup/admin.py:1554
+#: ../roundup/admin.py:1590
 msgid ""
 "Usage: importtables export_dir\n"
 "\n"
@@ -1066,7 +1082,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1561
+#: ../roundup/admin.py:1597
 msgid ""
 "Usage: pack period | date\n"
 "\n"
@@ -1106,11 +1122,11 @@
 "\n"
 "        "
 
-#: ../roundup/admin.py:1589
+#: ../roundup/admin.py:1625
 msgid "Invalid format"
 msgstr " "
 
-#: ../roundup/admin.py:1602
+#: ../roundup/admin.py:1638
 msgid ""
 "Usage: reindex [classname|designator]*\n"
 "        Re-generate a tracker's search indexes.\n"
@@ -1126,12 +1142,12 @@
 "        .      .\n"
 "        "
 
-#: ../roundup/admin.py:1616
+#: ../roundup/admin.py:1652
 #, python-format
 msgid "no such item \"%(designator)s\""
 msgstr " \"%(designator)s\"  "
 
-#: ../roundup/admin.py:1626
+#: ../roundup/admin.py:1662
 #, fuzzy
 msgid ""
 "Usage: security [Role name]\n"
@@ -1144,49 +1160,49 @@
 "        .\n"
 "        "
 
-#: ../roundup/admin.py:1635
+#: ../roundup/admin.py:1671
 #, fuzzy, python-format
 msgid "No such Role \"%(role)s\"\n"
 msgstr " \"%(role)s\"  "
 
-#: ../roundup/admin.py:1641
+#: ../roundup/admin.py:1677
 #, fuzzy, python-format
 msgid "New Web users get the Roles \"%(role)s\"\n"
 msgstr "  web   \"%(role)s\""
 
-#: ../roundup/admin.py:1644
+#: ../roundup/admin.py:1680
 #, fuzzy, python-format
 msgid "New Web users get the Role \"%(role)s\"\n"
 msgstr "  web   \"%(role)s\""
 
-#: ../roundup/admin.py:1648
+#: ../roundup/admin.py:1684
 #, fuzzy, python-format
 msgid "New Email users get the Roles \"%(role)s\"\n"
 msgstr "  email   \"%(role)s\""
 
-#: ../roundup/admin.py:1650
+#: ../roundup/admin.py:1686
 #, fuzzy, python-format
 msgid "New Email users get the Role \"%(role)s\"\n"
 msgstr "  email   \"%(role)s\""
 
-#: ../roundup/admin.py:1653
+#: ../roundup/admin.py:1689
 #, fuzzy, python-format
 msgid "Role \"%(name)s\":\n"
 msgstr " \"%(name)s\":"
 
-#: ../roundup/admin.py:1659
+#: ../roundup/admin.py:1695
 #, fuzzy
 msgid " %(description)s (%(name)s for \"%(klass)s\""
 msgstr " %(description)s (%(name)s    \"%(klass)s\")"
 
-#: ../roundup/admin.py:1659
+#: ../roundup/admin.py:1695
 #, fuzzy, python-format
 msgid " %(description)s (%(name)s for \"%(klass)s\": %(properties)s only)\n"
 msgstr ""
 " %(description)s (%(name)s   \"%(klass)s\":   "
 "%(properties)s)"
 
-#: ../roundup/admin.py:1672
+#: ../roundup/admin.py:1708
 #, python-format
 msgid ""
 "\n"
@@ -1194,17 +1210,17 @@
 "\n"
 msgstr ""
 
-#: ../roundup/admin.py:1678
+#: ../roundup/admin.py:1714
 #, fuzzy, python-format
 msgid " %(description)s (%(name)s for \"%(klass)s\" only)\n"
 msgstr " %(description)s (%(name)s    \"%(klass)s\")"
 
-#: ../roundup/admin.py:1681
+#: ../roundup/admin.py:1717
 #, fuzzy, python-format
 msgid " %(description)s (%(name)s)\n"
 msgstr " %(description)s (%(name)s    \"%(klass)s\")"
 
-#: ../roundup/admin.py:1685
+#: ../roundup/admin.py:1721
 msgid ""
 "Usage: migrate\n"
 "\n"
@@ -1228,43 +1244,43 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1706
+#: ../roundup/admin.py:1742
 #, fuzzy
 msgid "Tracker updated"
 msgstr "  "
 
-#: ../roundup/admin.py:1709
+#: ../roundup/admin.py:1745
 msgid "No migration action required"
 msgstr ""
 
-#: ../roundup/admin.py:1735
+#: ../roundup/admin.py:1771
 #, python-format
 msgid "Unknown command \"%(command)s\" (\"help commands\" for a list)"
 msgstr ""
 " \"%(command)s\" . (\"help commands\"   )"
 
-#: ../roundup/admin.py:1741
+#: ../roundup/admin.py:1777
 #, python-format
 msgid "Multiple commands match \"%(command)s\": %(list)s"
 msgstr "\"%(command)s\"   : %(list)s"
 
-#: ../roundup/admin.py:1750
+#: ../roundup/admin.py:1786
 msgid "Enter tracker home: "
 msgstr "  : "
 
-#: ../roundup/admin.py:1759 ../roundup/admin.py:1765 ../roundup/admin.py:1802
-#: ../roundup/admin.py:1759:1765:1802
+#: ../roundup/admin.py:1795 ../roundup/admin.py:1801 ../roundup/admin.py:1838
+#: ../roundup/admin.py:1795:1801:1838
 #, python-format
 msgid "Error: %(message)s"
 msgstr ": %(message)s"
 
-#: ../roundup/admin.py:1775 ../roundup/admin.py:1779
-#: ../roundup/admin.py:1775:1779
+#: ../roundup/admin.py:1811 ../roundup/admin.py:1815
+#: ../roundup/admin.py:1811:1815
 #, python-format
 msgid "Error: Couldn't open tracker: %(message)s"
 msgstr ":   : %(message)s"
 
-#: ../roundup/admin.py:1815
+#: ../roundup/admin.py:1851
 #, python-format
 msgid ""
 "Roundup %s ready for input.\n"
@@ -1273,19 +1289,15 @@
 "Roundup %s   .\n"
 " \"help\"  ."
 
-#: ../roundup/admin.py:1820
+#: ../roundup/admin.py:1856
 msgid "Note: command history and editing not available"
 msgstr ":     "
 
-#: ../roundup/admin.py:1824
-msgid "roundup> "
-msgstr ""
-
-#: ../roundup/admin.py:1826
+#: ../roundup/admin.py:1862
 msgid "exit..."
 msgstr "   ..."
 
-#: ../roundup/admin.py:1839
+#: ../roundup/admin.py:1875
 msgid "There are unsaved changes. Commit them (y/N)? "
 msgstr ",   .     (y/N)? "
 
@@ -1393,20 +1405,22 @@
 msgid "restored"
 msgstr ""
 
-#: ../roundup/backends/sessions_redis.py:76
-#: ../roundup/backends/sessions_redis.py:95
-#: ../roundup/backends/sessions_redis.py:76:95
+#: ../roundup/backends/sessions_redis.py:78
+#: ../roundup/backends/sessions_redis.py:97
+#: ../roundup/backends/sessions_redis.py:78:97
 #, python-format
 msgid "Key %(key)s not found in %(name)s database."
 msgstr ""
 
-#: ../roundup/backends/sessions_redis.py:191
+#: ../roundup/backends/sessions_redis.py:193
 #, python-format
 msgid "Key %(key)s changed in %(name)s db"
 msgstr ""
 
-#: ../roundup/backends/sessions_redis.py:195
-msgid "Redis set failed afer 3 retries"
+#: ../roundup/backends/sessions_redis.py:203
+#, python-format
+msgid ""
+"Redis set failed after %(retries)d retries for user %(user)s with key %(key)s"
 msgstr ""
 
 #: ../roundup/cgi/actions.py:97
@@ -1719,22 +1733,22 @@
 msgid "Welcome %(username)s!"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1383 ../roundup/cgi/actions.py:1387
-#: ../roundup/cgi/actions.py:1383:1387
+#: ../roundup/cgi/actions.py:1384 ../roundup/cgi/actions.py:1388
+#: ../roundup/cgi/actions.py:1384:1388
 msgid "Invalid login"
 msgstr "    ."
 
-#: ../roundup/cgi/actions.py:1393
+#: ../roundup/cgi/actions.py:1394
 msgid "You do not have permission to login"
 msgstr "       "
 
-#: ../roundup/cgi/actions.py:1437 ../roundup/cgi/actions.py:1616
-#: ../roundup/cgi/actions.py:1437:1616
+#: ../roundup/cgi/actions.py:1439 ../roundup/cgi/actions.py:1618
+#: ../roundup/cgi/actions.py:1439:1618
 #, python-format
 msgid "Column \"%(column)s\" not found in %(class)s"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1687
+#: ../roundup/cgi/actions.py:1689
 #, fuzzy, python-format
 msgid "You do not have permission to view %(class)s"
 msgstr "     %(class)s"
@@ -1840,147 +1854,148 @@
 "     .</p>\n"
 "</body></html>"
 
-#: ../roundup/cgi/client.py:651
+#: ../roundup/cgi/client.py:670 ../roundup/cgi/client.py:1570
+#: ../roundup/cgi/client.py:670:1570
+msgid "Required Header Missing"
+msgstr ""
+
+#: ../roundup/cgi/client.py:672
 #, fuzzy
 msgid "Client is not allowed to use Rest Interface."
 msgstr "     -."
 
-#: ../roundup/cgi/client.py:895
+#: ../roundup/cgi/client.py:921
 msgid "Form Error: "
 msgstr " : "
 
-#: ../roundup/cgi/client.py:985
+#: ../roundup/cgi/client.py:1011
 #, python-format
 msgid "Unrecognized charset: %r"
 msgstr " %r  "
 
-#: ../roundup/cgi/client.py:1238 ../roundup/cgi/client.py:2196
-#: ../roundup/cgi/client.py:1238:2196
+#: ../roundup/cgi/client.py:1264 ../roundup/cgi/client.py:2250
+#: ../roundup/cgi/client.py:1264:2250
 msgid "broken form: multiple @action values submitted"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1253
+#: ../roundup/cgi/client.py:1279
 msgid "Anonymous users are not allowed to use the web interface"
 msgstr "     -."
 
-#: ../roundup/cgi/client.py:1376
+#: ../roundup/cgi/client.py:1430
 msgid "Referer header not available."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1380
+#: ../roundup/cgi/client.py:1434
 #, python-format
 msgid "csrf key used with wrong method from: %s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1409
+#: ../roundup/cgi/client.py:1463
 #, python-format
 msgid "csrf header %(header)s required but missing for user%(userid)s."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1413
+#: ../roundup/cgi/client.py:1467
 #, python-format
 msgid "Missing header: %s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1421
+#: ../roundup/cgi/client.py:1475
 #, python-format
 msgid "csrf Referer header check failed for user%(userid)s. Value=%(referer)s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1426
+#: ../roundup/cgi/client.py:1480
 #, fuzzy, python-format
 msgid "Invalid Referer: %s"
 msgstr "    ."
 
-#: ../roundup/cgi/client.py:1441
+#: ../roundup/cgi/client.py:1495
 #, python-format
 msgid "csrf Origin header check failed for user%(userid)s. Value=%(origin)s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1446
+#: ../roundup/cgi/client.py:1500
 #, fuzzy, python-format
 msgid "Invalid Origin %s"
 msgstr "    ."
 
-#: ../roundup/cgi/client.py:1460
+#: ../roundup/cgi/client.py:1514
 #, python-format
 msgid ""
 "csrf X-FORWARDED-HOST header check failed for user%(userid)s. Value=%(host)s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1466
+#: ../roundup/cgi/client.py:1520
 #, python-format
 msgid "Invalid X-FORWARDED-HOST %s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1485
+#: ../roundup/cgi/client.py:1539
 #, python-format
 msgid "csrf HOST header check failed for user%(userid)s. Value=%(host)s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1490
+#: ../roundup/cgi/client.py:1544
 #, python-format
 msgid "Invalid HOST %s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1498
+#: ../roundup/cgi/client.py:1552
 msgid "Csrf: unable to verify sufficient headers"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1499
+#: ../roundup/cgi/client.py:1553
 msgid "Unable to verify sufficient headers"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1513
+#: ../roundup/cgi/client.py:1567
 #, python-format
 msgid "csrf X-REQUESTED-WITH xmlrpc required header check failed for user%s."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1516
-msgid "Required Header Missing"
-msgstr ""
-
-#: ../roundup/cgi/client.py:1554
+#: ../roundup/cgi/client.py:1608
 #, python-format
 msgid "Required csrf field missing for user%s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1556 ../roundup/cgi/client.py:1583
-#: ../roundup/cgi/client.py:1600 ../roundup/cgi/client.py:1556:1583:1600
+#: ../roundup/cgi/client.py:1610 ../roundup/cgi/client.py:1637
+#: ../roundup/cgi/client.py:1654 ../roundup/cgi/client.py:1610:1637:1654
 msgid ""
 "We can't validate your session (csrf failure). Re-enter any unsaved data and "
 "try again."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1560
+#: ../roundup/cgi/client.py:1614
 #, python-format
 msgid "csrf field not supplied by user%s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1572
+#: ../roundup/cgi/client.py:1626
 #, python-format
 msgid ""
 "Csrf mismatch user: current user %(user)s != stored user %(stored)s, current "
 "session, stored session: %(cur_sess)s,%(stor_sess)s for key %(key)s."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1590
+#: ../roundup/cgi/client.py:1644
 #, python-format
 msgid ""
 "Csrf mismatch user: current session %(curr_sess)s != stored session "
 "%(stor_sess)s, current user/stored user is: %(user)s for key %(key)s."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1784
+#: ../roundup/cgi/client.py:1838
 msgid "You are not allowed to view this file."
 msgstr "       ."
 
-#: ../roundup/cgi/client.py:2073
+#: ../roundup/cgi/client.py:2127
 #, python-format
 msgid "%(starttag)sTime elapsed: %(seconds)fs%(endtag)s\n"
 msgstr "%(starttag)s : %(seconds)fs%(endtag)s\n"
 
-#: ../roundup/cgi/client.py:2077
+#: ../roundup/cgi/client.py:2131
 #, python-format
 msgid ""
 "%(starttag)sCache hits: %(cache_hits)d, misses %(cache_misses)d. Loading "
@@ -1990,7 +2005,7 @@
 "%(cache_misses)d.  : %(get_items)f . : "
 "%(filtering)f .%(endtag)s\n"
 
-#: ../roundup/cgi/client.py:2615
+#: ../roundup/cgi/client.py:2669
 #, python-format
 msgid ""
 "Cache failure: compressed file %(compressed)s is older than its source file "
@@ -2393,28 +2408,28 @@
 msgid "\"%s\" not a node designator"
 msgstr ""
 
-#: ../roundup/hyperdb.py:1492 ../roundup/hyperdb.py:1500
-#: ../roundup/hyperdb.py:1492:1500
+#: ../roundup/hyperdb.py:1493 ../roundup/hyperdb.py:1501
+#: ../roundup/hyperdb.py:1493:1501
 #, python-format
 msgid "Not a property name: %s"
 msgstr ""
 
-#: ../roundup/hyperdb.py:1977
+#: ../roundup/hyperdb.py:1978
 #, fuzzy, python-format
 msgid "property %(property)s: %(value)r is not a %(classname)s."
 msgstr " \"%(propname)s\":  \"%(value)s\"   "
 
-#: ../roundup/hyperdb.py:1983
+#: ../roundup/hyperdb.py:1984
 #, python-format
 msgid "you may only enter ID values for property %s"
 msgstr ""
 
-#: ../roundup/hyperdb.py:2018
+#: ../roundup/hyperdb.py:2019
 #, python-format
 msgid "%(property)r is not a property of %(classname)s"
 msgstr ""
 
-#: ../roundup/init.py:139
+#: ../roundup/init.py:141
 #, python-format
 msgid ""
 "WARNING: directory '%s'\n"
@@ -2707,7 +2722,7 @@
 "   :\n"
 "  %(errors)s\n"
 
-#: ../roundup/mailgw.py:1820
+#: ../roundup/mailgw.py:1821
 #, fuzzy, python-format
 msgid ""
 "\n"
@@ -2737,19 +2752,19 @@
 msgid "Invalid attribute %s"
 msgstr "    ."
 
-#: ../roundup/rest.py:2078
+#: ../roundup/rest.py:2090
 #, python-format
 msgid "Api rate limits exceeded. Please wait: %s seconds."
 msgstr ""
 
-#: ../roundup/rest.py:2113
+#: ../roundup/rest.py:2125
 #, python-format
 msgid ""
 "Unable to parse Accept Header. %(error)s. Acceptable types: "
 "%(acceptable_types)s"
 msgstr ""
 
-#: ../roundup/rest.py:2262
+#: ../roundup/rest.py:2305
 #, python-format
 msgid ""
 "Unrecognized api version: %s. See /rest without specifying api version for "
@@ -2878,27 +2893,27 @@
 msgid "No tracker templates found in directory %s"
 msgstr "  %s      "
 
-#: ../roundup/scripts/roundup_mailgw.py:185
+#: ../roundup/scripts/roundup_mailgw.py:182
 msgid ""
 "\n"
 "Error: The instance home must be specified"
 msgstr ""
 
-#: ../roundup/scripts/roundup_mailgw.py:203
+#: ../roundup/scripts/roundup_mailgw.py:200
 #, fuzzy
 msgid ""
 "\n"
 "Error: not enough source specification information"
 msgstr ":      "
 
-#: ../roundup/scripts/roundup_mailgw.py:234
+#: ../roundup/scripts/roundup_mailgw.py:231
 #, fuzzy, python-format
 msgid ""
 "\n"
 "Error: %s specification not valid"
 msgstr ":   pop-"
 
-#: ../roundup/scripts/roundup_mailgw.py:258
+#: ../roundup/scripts/roundup_mailgw.py:254
 #, fuzzy
 msgid ""
 "\n"
@@ -2912,7 +2927,7 @@
 msgid "WARNING: generating temporary SSL certificate"
 msgstr ":     SSL"
 
-#: ../roundup/scripts/roundup_server.py:329
+#: ../roundup/scripts/roundup_server.py:331
 msgid ""
 "<html><head><title>Roundup trackers index</title></head>\n"
 "<body><h1>Roundup trackers index</h1><ol>\n"
@@ -2920,62 +2935,62 @@
 "<html><head><title>  Roundup</title></head>\n"
 "<body><h1>  Roundup</h1><ol>\n"
 
-#: ../roundup/scripts/roundup_server.py:549
+#: ../roundup/scripts/roundup_server.py:551
 #, fuzzy, python-format
 msgid "Error: %(type)s: %(value)s"
 msgstr "%(key)s: %(value)s ( )"
 
-#: ../roundup/scripts/roundup_server.py:561
+#: ../roundup/scripts/roundup_server.py:563
 msgid "WARNING: ignoring \"-g\" argument, not root"
 msgstr ""
 ":  \"-g\"  ,     "
 " root"
 
-#: ../roundup/scripts/roundup_server.py:567
+#: ../roundup/scripts/roundup_server.py:569
 msgid "Can't change groups - no grp module"
 msgstr "   -   grp"
 
-#: ../roundup/scripts/roundup_server.py:576
+#: ../roundup/scripts/roundup_server.py:578
 #, python-format
 msgid "Group %(group)s doesn't exist"
 msgstr " %(group)s  "
 
-#: ../roundup/scripts/roundup_server.py:588
+#: ../roundup/scripts/roundup_server.py:590
 msgid "Can't run as root!"
 msgstr "     root !"
 
-#: ../roundup/scripts/roundup_server.py:591
+#: ../roundup/scripts/roundup_server.py:593
 msgid "WARNING: ignoring \"-u\" argument, not root"
 msgstr ""
 ":  \"-u\"  ,     "
 " root"
 
-#: ../roundup/scripts/roundup_server.py:597
+#: ../roundup/scripts/roundup_server.py:599
 msgid "Can't change users - no pwd module"
 msgstr "   -   pwd"
 
-#: ../roundup/scripts/roundup_server.py:606
+#: ../roundup/scripts/roundup_server.py:608
 #, python-format
 msgid "User %(user)s doesn't exist"
 msgstr " %(user)s  "
 
-#: ../roundup/scripts/roundup_server.py:803
+#: ../roundup/scripts/roundup_server.py:805
 #, python-format
 msgid "Multiprocess mode \"%s\" is not available, switching to single-process"
 msgstr " \"%s\" ,    "
 
-#: ../roundup/scripts/roundup_server.py:830
+#: ../roundup/scripts/roundup_server.py:832
 #, python-format
 msgid "Unable to bind to port %s, port already in use."
 msgstr "     %s,   ."
 
-#: ../roundup/scripts/roundup_server.py:834
+#: ../roundup/scripts/roundup_server.py:836
 #, fuzzy, python-format
 msgid ""
 "Unable to bind to port %(port)s, access not allowed, errno: %(errno)s %(msg)s"
 msgstr "     %s,   ."
 
-#: ../roundup/scripts/roundup_server.py:913
+#: ../roundup/scripts/roundup_server.py:915
 msgid ""
 " -c <Command>  Windows Service options.\n"
 "               If you want to run the server as a Windows Service, you\n"
@@ -2992,7 +3007,7 @@
 "                .   'roundup-server -c help'\n"
 "                     Windows."
 
-#: ../roundup/scripts/roundup_server.py:920
+#: ../roundup/scripts/roundup_server.py:922
 msgid ""
 " -u <UID>      runs the Roundup web server as this UID\n"
 " -g <GID>      runs the Roundup web server as this GID\n"
@@ -3006,7 +3021,7 @@
 "                    .    \"-d\",\n"
 "                 **     \"-l\""
 
-#: ../roundup/scripts/roundup_server.py:927
+#: ../roundup/scripts/roundup_server.py:929
 #, fuzzy, python-format
 msgid ""
 "\n"
@@ -3129,21 +3144,21 @@
 "       URL (,    .),\n"
 "             IE.\n"
 
-#: ../roundup/scripts/roundup_server.py:1103
+#: ../roundup/scripts/roundup_server.py:1105
 msgid "Instances must be name=home"
 msgstr "      ="
 
-#: ../roundup/scripts/roundup_server.py:1117
+#: ../roundup/scripts/roundup_server.py:1119
 #, python-format
 msgid "Configuration saved to %s"
 msgstr "   %s"
 
-#: ../roundup/scripts/roundup_server.py:1135
+#: ../roundup/scripts/roundup_server.py:1137
 msgid "Sorry, you can't run the server as a daemon on this Operating System"
 msgstr ""
 ",         "
 
-#: ../roundup/scripts/roundup_server.py:1155
+#: ../roundup/scripts/roundup_server.py:1157
 #, python-format
 msgid "Roundup server started on %(HOST)s:%(PORT)s"
 msgstr " Roundup      %(HOST)s:%(PORT)s"
--- a/locale/zh_CN.po	Wed Mar 01 10:43:54 2023 -0500
+++ b/locale/zh_CN.po	Wed Mar 01 10:51:37 2023 -0500
@@ -8,7 +8,7 @@
 msgstr ""
 "Project-Id-Version: Roundup 2.3.0\n"
 "Report-Msgid-Bugs-To: roundup-devel@lists.sourceforge.net\n"
-"POT-Creation-Date: 2022-11-23 22:28-0500\n"
+"POT-Creation-Date: 2023-03-01 10:35-0500\n"
 "PO-Revision-Date: 2013-10-31 12:22+0100\n"
 "Last-Translator: Cheer Xiao <xiaqqaix@gmail.com>\n"
 "Language-Team: Chinese Simplified <limodou@gmail.com>\n"
@@ -26,24 +26,24 @@
 "You do not have permission to retire or restore the %(classname)s class."
 msgstr "你 %(action)s %(classname)s 类型的权限。"
 
-#: ../roundup/actions.py:64 ../roundup/cgi/actions.py:240
+#: ../roundup/actions.py:65 ../roundup/cgi/actions.py:240
 msgid "You may not retire the admin or anonymous user"
 msgstr "你不能撤除管理员或匿名用户"
 
 # ../roundup/admin.py:84 :943 :992 :1014
-#: ../roundup/admin.py:106 ../roundup/admin.py:1259 ../roundup/admin.py:1314
-#: ../roundup/admin.py:1341 ../roundup/admin.py:106:1259 :1314:1341
+#: ../roundup/admin.py:112 ../roundup/admin.py:1295 ../roundup/admin.py:1350
+#: ../roundup/admin.py:1377 ../roundup/admin.py:112:1295 :1350:1377
 #, python-format
 msgid "no such class \"%(classname)s\""
 msgstr "无此类别 \"%(classname)s\""
 
 # ../roundup/admin.py:94 :98
-#: ../roundup/admin.py:118
+#: ../roundup/admin.py:124
 #, python-format
 msgid "argument \"%(arg)s\" not propname=value"
 msgstr "参数 \"%(arg)s\" 不是 propname=value 的形式"
 
-#: ../roundup/admin.py:131
+#: ../roundup/admin.py:137
 #, python-format
 msgid ""
 "Problem: %(message)s\n"
@@ -52,7 +52,7 @@
 "问题: %(message)s\n"
 "\n"
 
-#: ../roundup/admin.py:132
+#: ../roundup/admin.py:138
 #, fuzzy, python-format
 msgid ""
 "%(message)sUsage: roundup-admin [options] [<command> <arguments>]\n"
@@ -99,12 +99,12 @@
 " roundup-admin help <command>             -- 命令详解帮助\n"
 " roundup-admin help all                   -- 所有可用的帮助\n"
 
-#: ../roundup/admin.py:159
+#: ../roundup/admin.py:165
 #, fuzzy
 msgid "Commands: "
 msgstr "命令:"
 
-#: ../roundup/admin.py:166
+#: ../roundup/admin.py:172
 msgid ""
 "Commands may be abbreviated as long as the abbreviation\n"
 "matches only one command, e.g. l == li == lis == list."
@@ -112,7 +112,8 @@
 "命令可以被缩写,只要缩写只有一个命令可以匹配上,\n"
 "如:l == li == lis == list."
 
-#: ../roundup/admin.py:195
+#: ../roundup/admin.py:201
+#, fuzzy
 msgid ""
 "\n"
 "All commands (except help) require a tracker specifier. This is just\n"
@@ -164,7 +165,7 @@
 " . ROUNDUP_LOGIN environment variable\n"
 " . the -u command-line option\n"
 "If either the name or password is not supplied, they are obtained from the\n"
-"command-line.\n"
+"command-line. (See admin guide before using -u.)\n"
 "\n"
 "Date format examples:\n"
 "  \"2000-04-17.03:45\" means <Date 2000-04-17.08:45:00>\n"
@@ -235,12 +236,12 @@
 "\n"
 "使用帮助:\n"
 
-#: ../roundup/admin.py:258
+#: ../roundup/admin.py:264
 #, python-format
 msgid "%s:"
 msgstr "%s:"
 
-#: ../roundup/admin.py:265
+#: ../roundup/admin.py:271
 msgid ""
 "Usage: help topic\n"
 "        Give help about topic.\n"
@@ -260,22 +261,22 @@
 "        all       -- 所有可用的帮助\n"
 "        "
 
-#: ../roundup/admin.py:287
+#: ../roundup/admin.py:293
 #, python-format
 msgid "Sorry, no help for \"%(topic)s\""
 msgstr "抱歉,没有“%(topic)s”的帮助信息"
 
 # ../roundup/admin.py:337 :387
-#: ../roundup/admin.py:402 ../roundup/admin.py:458 ../roundup/admin.py:402:458
+#: ../roundup/admin.py:408 ../roundup/admin.py:464 ../roundup/admin.py:408:464
 msgid "Templates:"
 msgstr "模板:"
 
 # ../roundup/admin.py:340 :398
-#: ../roundup/admin.py:405 ../roundup/admin.py:468 ../roundup/admin.py:405:468
+#: ../roundup/admin.py:411 ../roundup/admin.py:474 ../roundup/admin.py:411:474
 msgid "Back ends:"
 msgstr "后端:"
 
-#: ../roundup/admin.py:408
+#: ../roundup/admin.py:414
 #, fuzzy
 msgid ""
 "Usage: install [template [backend [key=val[,key=val]]]]\n"
@@ -317,23 +318,23 @@
 
 # ../roundup/admin.py:359 :494 :573 :623 :676 :697 :725 :796 :863 :934 :982
 # :1004 :1031 :1093 :1159
-#: ../roundup/admin.py:431 ../roundup/admin.py:562 ../roundup/admin.py:635
-#: ../roundup/admin.py:728 ../roundup/admin.py:786 ../roundup/admin.py:872
-#: ../roundup/admin.py:931 ../roundup/admin.py:958 ../roundup/admin.py:985
-#: ../roundup/admin.py:1062 ../roundup/admin.py:1157 ../roundup/admin.py:1243
-#: ../roundup/admin.py:1304 ../roundup/admin.py:1331 ../roundup/admin.py:1367
-#: ../roundup/admin.py:1495 ../roundup/admin.py:1579
-#: ../roundup/admin.py:431:562 :1157 :1243:1304 :1331:1367 :1495:1579 :635:728
-#: :786:872 :931:958 :985:1062
+#: ../roundup/admin.py:437 ../roundup/admin.py:568 ../roundup/admin.py:671
+#: ../roundup/admin.py:764 ../roundup/admin.py:822 ../roundup/admin.py:908
+#: ../roundup/admin.py:967 ../roundup/admin.py:994 ../roundup/admin.py:1021
+#: ../roundup/admin.py:1098 ../roundup/admin.py:1193 ../roundup/admin.py:1279
+#: ../roundup/admin.py:1340 ../roundup/admin.py:1367 ../roundup/admin.py:1403
+#: ../roundup/admin.py:1531 ../roundup/admin.py:1615
+#: ../roundup/admin.py:437:568 :1021:1098:1193 :1279:1340 :1367:1403 :1531:1615
+#: :671:764 :822:908 :967:994
 msgid "Not enough arguments supplied"
 msgstr "未提供足够的参数"
 
-#: ../roundup/admin.py:437
+#: ../roundup/admin.py:443
 #, python-format
 msgid "Instance home parent directory \"%(parent)s\" does not exist"
 msgstr "实例目录的父目录 \"%(parent)s\" 不存在"
 
-#: ../roundup/admin.py:446
+#: ../roundup/admin.py:452
 #, python-format
 msgid ""
 "WARNING: There appears to be a tracker in \"%(tracker_home)s\"!\n"
@@ -344,22 +345,22 @@
 "如果你重新安装,所有的数据将会丢失!\n"
 "删除它吗?Y/N: "
 
-#: ../roundup/admin.py:459
+#: ../roundup/admin.py:465
 #, fuzzy
 msgid "Select template"
 msgstr "选择模板 [classic]:"
 
-#: ../roundup/admin.py:469
+#: ../roundup/admin.py:475
 #, fuzzy
 msgid "Select backend"
 msgstr "选择后端 [anydbm]:"
 
-#: ../roundup/admin.py:480
+#: ../roundup/admin.py:486
 #, python-format
 msgid "Error in configuration settings: \"%s\""
 msgstr "配置设定有错: “%s”"
 
-#: ../roundup/admin.py:511
+#: ../roundup/admin.py:517
 #, fuzzy, python-format
 msgid ""
 "\n"
@@ -371,11 +372,11 @@
 " 现在你应该修改tracker的配置文件:\n"
 "   %(config_file)s"
 
-#: ../roundup/admin.py:521
+#: ../roundup/admin.py:527
 msgid " ... at a minimum, you must set following options:"
 msgstr " ... 至少,你必须设置以下选项:"
 
-#: ../roundup/admin.py:526
+#: ../roundup/admin.py:532
 #, fuzzy, python-format
 msgid ""
 "\n"
@@ -399,7 +400,7 @@
 "   %(database_init_file)s\n"
 " ... 查看关于客户化的文档来了解更多的信息。\n"
 
-#: ../roundup/admin.py:557
+#: ../roundup/admin.py:563
 msgid ""
 "Usage: genconfig <filename>\n"
 "        Generate a new tracker config file (ini style) with default\n"
@@ -407,7 +408,22 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:572
+#: ../roundup/admin.py:581
+#, python-format
+msgid ""
+"Changing option\n"
+"   'password_pbkdf2_default_rounds'\n"
+"from old default of %(old_number)s to new default of %(new_number)s."
+msgstr ""
+
+#: ../roundup/admin.py:593
+#, python-format
+msgid ""
+"Update 'password_pbkdf2_default_rounds'to a number equal to or larger\n"
+"than %s."
+msgstr ""
+
+#: ../roundup/admin.py:604
 msgid ""
 "Usage: updateconfig <filename>\n"
 "        Generate an updated tracker config file (ini style) in\n"
@@ -417,7 +433,7 @@
 msgstr ""
 
 #. password
-#: ../roundup/admin.py:580
+#: ../roundup/admin.py:612
 msgid ""
 "Usage: initialise [adminpw]\n"
 "        Initialise a new Roundup tracker.\n"
@@ -435,23 +451,23 @@
 "        执行tracker的初始化函数 dbinit.init()\n"
 "        "
 
-#: ../roundup/admin.py:594
+#: ../roundup/admin.py:626
 msgid "Admin Password: "
 msgstr "管理员密码:"
 
-#: ../roundup/admin.py:595
+#: ../roundup/admin.py:627
 msgid "       Confirm: "
 msgstr "       确认:"
 
-#: ../roundup/admin.py:599
+#: ../roundup/admin.py:631
 msgid "Instance home does not exist"
 msgstr "实例目录不存在"
 
-#: ../roundup/admin.py:603
+#: ../roundup/admin.py:635
 msgid "Instance has not been installed"
 msgstr "实例还没有安装"
 
-#: ../roundup/admin.py:609
+#: ../roundup/admin.py:641
 msgid ""
 "WARNING: The database is already initialised!\n"
 "If you re-initialise it, you will lose all the data!\n"
@@ -461,7 +477,7 @@
 "如果你重新初始化它,所有的数据将会丢失!\n"
 "删除它吗?Y/N: "
 
-#: ../roundup/admin.py:625
+#: ../roundup/admin.py:661
 #, fuzzy
 msgid ""
 "Usage: get property designator[,designator]*\n"
@@ -481,24 +497,24 @@
 "        "
 
 # ../roundup/admin.py:527 :542
-#: ../roundup/admin.py:669 ../roundup/admin.py:687 ../roundup/admin.py:669:687
+#: ../roundup/admin.py:705 ../roundup/admin.py:723 ../roundup/admin.py:705:723
 #, python-format
 msgid "property %s is not of type Multilink or Link so -d flag does not apply."
 msgstr "属性 %s 不是 Multilink 或 Link 类型,所以 -d 标志不能应用。"
 
 # ../roundup/admin.py:550 :945 :994 :1016
-#: ../roundup/admin.py:697 ../roundup/admin.py:1261 ../roundup/admin.py:1316
-#: ../roundup/admin.py:697:1261:1316
+#: ../roundup/admin.py:733 ../roundup/admin.py:1297 ../roundup/admin.py:1352
+#: ../roundup/admin.py:733:1297:1352
 #, python-format
 msgid "no such %(classname)s node \"%(nodeid)s\""
 msgstr "没有这样的 %(classname)s 结点 \"%(nodeid)s\""
 
-#: ../roundup/admin.py:700
+#: ../roundup/admin.py:736
 #, python-format
 msgid "no such %(classname)s property \"%(propname)s\""
 msgstr "没有这样的 %(classname)s 属性 \"%(propname)s\""
 
-#: ../roundup/admin.py:708
+#: ../roundup/admin.py:744
 #, fuzzy
 msgid ""
 "Usage: set items property=value property=value ...\n"
@@ -531,7 +547,7 @@
 "        你需要为多链接提供用逗号分隔的数字(例如 \"1,2,3\")。\n"
 "        "
 
-#: ../roundup/admin.py:776
+#: ../roundup/admin.py:812
 #, fuzzy
 msgid ""
 "Usage: filter classname propname=value ...\n"
@@ -553,20 +569,20 @@
 "        "
 
 # ../roundup/admin.py:663 :816 :828 :882
-#: ../roundup/admin.py:819
+#: ../roundup/admin.py:855
 #, fuzzy, python-format
 msgid "Class %(curclassname)s has no property %(pn)s in %(propname)s."
 msgstr "%(classname)s 没有 \"%(propname)s\" 属性"
 
 # ../roundup/admin.py:663 :816 :828 :882
-#: ../roundup/admin.py:857 ../roundup/admin.py:918 ../roundup/admin.py:1082
-#: ../roundup/admin.py:1094 ../roundup/admin.py:1177
-#: ../roundup/admin.py:857:918 :1082:1094:1177
+#: ../roundup/admin.py:893 ../roundup/admin.py:954 ../roundup/admin.py:1118
+#: ../roundup/admin.py:1130 ../roundup/admin.py:1213
+#: ../roundup/admin.py:893:954 :1118:1130:1213
 #, python-format
 msgid "%(classname)s has no property \"%(propname)s\""
 msgstr "%(classname)s 没有 \"%(propname)s\" 属性"
 
-#: ../roundup/admin.py:864
+#: ../roundup/admin.py:900
 msgid ""
 "Usage: find classname propname=value ...\n"
 "        Find the nodes of the given class with a given link property value.\n"
@@ -584,7 +600,7 @@
 "        或者是结点的键值。\n"
 "        "
 
-#: ../roundup/admin.py:925
+#: ../roundup/admin.py:961
 msgid ""
 "Usage: specification classname\n"
 "        Show the properties for a classname.\n"
@@ -598,17 +614,17 @@
 "        会列出给定类型的属性。\n"
 "        "
 
-#: ../roundup/admin.py:941
+#: ../roundup/admin.py:977
 #, fuzzy, python-format
 msgid "%(key)s: %(value)s (key property)\n"
 msgstr "%(key)s: %(value)s (关键属性)"
 
-#: ../roundup/admin.py:944
+#: ../roundup/admin.py:980
 #, fuzzy, python-format
 msgid "%(key)s: %(value)s\n"
 msgstr "%(key)s: %(value)s"
 
-#: ../roundup/admin.py:947
+#: ../roundup/admin.py:983
 #, fuzzy
 msgid ""
 "Usage: display designator[,designator]*\n"
@@ -628,12 +644,12 @@
 "        将显示给出结点的属性和相应的值。\n"
 "        "
 
-#: ../roundup/admin.py:974
+#: ../roundup/admin.py:1010
 #, python-format
 msgid "%(key)s: %(value)s"
 msgstr "%(key)s: %(value)s"
 
-#: ../roundup/admin.py:977
+#: ../roundup/admin.py:1013
 msgid ""
 "Usage: create classname property=value ...\n"
 "        Create a new entry of a given class.\n"
@@ -651,31 +667,31 @@
 "name=value 参数。\n"
 "        "
 
-#: ../roundup/admin.py:1005
+#: ../roundup/admin.py:1041
 #, python-format
 msgid "%(propname)s (Password): "
 msgstr "%(propname)s (密码):"
 
-#: ../roundup/admin.py:1008
+#: ../roundup/admin.py:1044
 #, python-format
 msgid "   %(propname)s (Again): "
 msgstr "   %(propname)s (再次):"
 
-#: ../roundup/admin.py:1012
+#: ../roundup/admin.py:1048
 msgid "Sorry, try again..."
 msgstr "抱歉,再试一次..."
 
-#: ../roundup/admin.py:1016
+#: ../roundup/admin.py:1052
 #, python-format
 msgid "%(propname)s (%(proptype)s): "
 msgstr ""
 
-#: ../roundup/admin.py:1035
+#: ../roundup/admin.py:1071
 #, python-format
 msgid "you must provide the \"%(propname)s\" property."
 msgstr "你必须提供 \"%(propname)s\" 属性。"
 
-#: ../roundup/admin.py:1047
+#: ../roundup/admin.py:1083
 msgid ""
 "Usage: list classname [property]\n"
 "        List the instances of a class.\n"
@@ -701,16 +717,16 @@
 "        定了属性,对每个类型实例会打印出这个属性。\n"
 "        "
 
-#: ../roundup/admin.py:1060
+#: ../roundup/admin.py:1096
 msgid "Too many arguments supplied"
 msgstr "提供了太多的参数了"
 
-#: ../roundup/admin.py:1096
+#: ../roundup/admin.py:1132
 #, python-format
 msgid "%(nodeid)4s: %(value)s"
 msgstr "%(nodeid)4s: %(value)s"
 
-#: ../roundup/admin.py:1100
+#: ../roundup/admin.py:1136
 msgid ""
 "Usage: templates [trace_search]\n"
 "        List templates and their installed directories.\n"
@@ -720,7 +736,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1128
+#: ../roundup/admin.py:1164
 msgid ""
 "Usage: table classname [property[,property]*]\n"
 "        List the instances of a class in tabular form.\n"
@@ -778,17 +794,17 @@
 "        将生成4个字符宽的 \"Name\" 列。\n"
 "        "
 
-#: ../roundup/admin.py:1172
+#: ../roundup/admin.py:1208
 #, python-format
 msgid "\"%(spec)s\" not name:width"
 msgstr "\"%(spec)s\" 不是 名字:宽度"
 
-#: ../roundup/admin.py:1194
+#: ../roundup/admin.py:1230
 #, python-format
 msgid "\"%(spec)s\" does not have an integer width: \"%(width)s\""
 msgstr ""
 
-#: ../roundup/admin.py:1230
+#: ../roundup/admin.py:1266
 msgid ""
 "Usage: history designator [skipquiet]\n"
 "        Show the history entries of a designator.\n"
@@ -803,7 +819,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1266
+#: ../roundup/admin.py:1302
 msgid ""
 "Usage: commit\n"
 "        Commit changes made to the database during an interactive session.\n"
@@ -824,7 +840,7 @@
 "        在命令行中的 One-off 命令如果成功会被自动提交。\n"
 "        "
 
-#: ../roundup/admin.py:1281
+#: ../roundup/admin.py:1317
 msgid ""
 "Usage: rollback\n"
 "        Undo all changes that are pending commit to the database.\n"
@@ -843,7 +859,7 @@
 "        产生变化。\n"
 "        "
 
-#: ../roundup/admin.py:1294
+#: ../roundup/admin.py:1330
 #, fuzzy
 msgid ""
 "Usage: retire designator[,designator]*\n"
@@ -863,7 +879,7 @@
 "        它的键值可以被重用。\n"
 "        "
 
-#: ../roundup/admin.py:1322
+#: ../roundup/admin.py:1358
 #, fuzzy
 msgid ""
 "Usage: restore designator[,designator]*\n"
@@ -882,13 +898,13 @@
 "        "
 
 # ../roundup/admin.py:550 :945 :994 :1016
-#: ../roundup/admin.py:1347
+#: ../roundup/admin.py:1383
 #, fuzzy
 msgid "no such %(classname)s node \" % (nodeid)s\""
 msgstr "没有这样的 %(classname)s 结点 \"%(nodeid)s\""
 
 #. grab the directory to export to
-#: ../roundup/admin.py:1353
+#: ../roundup/admin.py:1389
 #, fuzzy
 msgid ""
 "Usage: export [[-]class[,class]] export_dir\n"
@@ -913,7 +929,7 @@
 "        放在指定的目标目录中。\n"
 "        "
 
-#: ../roundup/admin.py:1460
+#: ../roundup/admin.py:1496
 #, fuzzy
 msgid ""
 "Usage: exporttables [[-]class[,class]] export_dir\n"
@@ -939,7 +955,7 @@
 "        放在指定的目标目录中。\n"
 "        "
 
-#: ../roundup/admin.py:1475
+#: ../roundup/admin.py:1511
 msgid ""
 "Usage: import import_dir\n"
 "        Import a database from the directory containing CSV files,\n"
@@ -979,7 +995,7 @@
 "        旧数据。)\n"
 "        "
 
-#: ../roundup/admin.py:1554
+#: ../roundup/admin.py:1590
 msgid ""
 "Usage: importtables export_dir\n"
 "\n"
@@ -987,7 +1003,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1561
+#: ../roundup/admin.py:1597
 msgid ""
 "Usage: pack period | date\n"
 "\n"
@@ -1025,11 +1041,11 @@
 "\n"
 "        "
 
-#: ../roundup/admin.py:1589
+#: ../roundup/admin.py:1625
 msgid "Invalid format"
 msgstr "无效的格式"
 
-#: ../roundup/admin.py:1602
+#: ../roundup/admin.py:1638
 msgid ""
 "Usage: reindex [classname|designator]*\n"
 "        Re-generate a tracker's search indexes.\n"
@@ -1044,12 +1060,12 @@
 "        重新生成 tracker 的搜索索引,它将自动进行。\n"
 "        "
 
-#: ../roundup/admin.py:1616
+#: ../roundup/admin.py:1652
 #, python-format
 msgid "no such item \"%(designator)s\""
 msgstr "没有这样的条目 \"%(designator)s\""
 
-#: ../roundup/admin.py:1626
+#: ../roundup/admin.py:1662
 #, fuzzy
 msgid ""
 "Usage: security [Role name]\n"
@@ -1061,47 +1077,47 @@
 "        显示一个或多个角色的权限。\n"
 "        "
 
-#: ../roundup/admin.py:1635
+#: ../roundup/admin.py:1671
 #, fuzzy, python-format
 msgid "No such Role \"%(role)s\"\n"
 msgstr "没有这样的角色 \"%(role)s\""
 
-#: ../roundup/admin.py:1641
+#: ../roundup/admin.py:1677
 #, fuzzy, python-format
 msgid "New Web users get the Roles \"%(role)s\"\n"
 msgstr "新Web用户得到角色 \"%(role)s\""
 
-#: ../roundup/admin.py:1644
+#: ../roundup/admin.py:1680
 #, fuzzy, python-format
 msgid "New Web users get the Role \"%(role)s\"\n"
 msgstr "新Web用户得到角色 \"%(role)s\""
 
-#: ../roundup/admin.py:1648
+#: ../roundup/admin.py:1684
 #, fuzzy, python-format
 msgid "New Email users get the Roles \"%(role)s\"\n"
 msgstr "新邮件用户得到角色 \"%(role)s\""
 
-#: ../roundup/admin.py:1650
+#: ../roundup/admin.py:1686
 #, fuzzy, python-format
 msgid "New Email users get the Role \"%(role)s\"\n"
 msgstr "新邮件用户得到角色 \"%(role)s\""
 
-#: ../roundup/admin.py:1653
+#: ../roundup/admin.py:1689
 #, fuzzy, python-format
 msgid "Role \"%(name)s\":\n"
 msgstr "角色 \"%(name)s\":"
 
-#: ../roundup/admin.py:1659
+#: ../roundup/admin.py:1695
 #, fuzzy
 msgid " %(description)s (%(name)s for \"%(klass)s\""
 msgstr " %(description)s (%(name)s 仅用于 \"%(klass)s\")"
 
-#: ../roundup/admin.py:1659
+#: ../roundup/admin.py:1695
 #, fuzzy, python-format
 msgid " %(description)s (%(name)s for \"%(klass)s\": %(properties)s only)\n"
 msgstr " %(description)s (%(name)s 仅用于 \"%(klass)s\")"
 
-#: ../roundup/admin.py:1672
+#: ../roundup/admin.py:1708
 #, python-format
 msgid ""
 "\n"
@@ -1109,17 +1125,17 @@
 "\n"
 msgstr ""
 
-#: ../roundup/admin.py:1678
+#: ../roundup/admin.py:1714
 #, fuzzy, python-format
 msgid " %(description)s (%(name)s for \"%(klass)s\" only)\n"
 msgstr " %(description)s (%(name)s 仅用于 \"%(klass)s\")"
 
-#: ../roundup/admin.py:1681
+#: ../roundup/admin.py:1717
 #, fuzzy, python-format
 msgid " %(description)s (%(name)s)\n"
 msgstr " %(description)s (%(name)s)"
 
-#: ../roundup/admin.py:1685
+#: ../roundup/admin.py:1721
 msgid ""
 "Usage: migrate\n"
 "\n"
@@ -1143,42 +1159,42 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1706
+#: ../roundup/admin.py:1742
 msgid "Tracker updated"
 msgstr "Tracker 已经更新"
 
-#: ../roundup/admin.py:1709
+#: ../roundup/admin.py:1745
 msgid "No migration action required"
 msgstr "不必执行迁移"
 
-#: ../roundup/admin.py:1735
+#: ../roundup/admin.py:1771
 #, python-format
 msgid "Unknown command \"%(command)s\" (\"help commands\" for a list)"
 msgstr "未知命令 \"%(command)s\" (\"help commands\" 查看命令列表)"
 
-#: ../roundup/admin.py:1741
+#: ../roundup/admin.py:1777
 #, python-format
 msgid "Multiple commands match \"%(command)s\": %(list)s"
 msgstr "多命令匹配 \"%(command)s\": %(list)s"
 
-#: ../roundup/admin.py:1750
+#: ../roundup/admin.py:1786
 msgid "Enter tracker home: "
 msgstr "输入tracker起始目录:"
 
 # ../roundup/admin.py:1279 :1285 :1305
-#: ../roundup/admin.py:1759 ../roundup/admin.py:1765 ../roundup/admin.py:1802
-#: ../roundup/admin.py:1759:1765:1802
+#: ../roundup/admin.py:1795 ../roundup/admin.py:1801 ../roundup/admin.py:1838
+#: ../roundup/admin.py:1795:1801:1838
 #, python-format
 msgid "Error: %(message)s"
 msgstr "错误:%(message)s"
 
-#: ../roundup/admin.py:1775 ../roundup/admin.py:1779
-#: ../roundup/admin.py:1775:1779
+#: ../roundup/admin.py:1811 ../roundup/admin.py:1815
+#: ../roundup/admin.py:1811:1815
 #, python-format
 msgid "Error: Couldn't open tracker: %(message)s"
 msgstr "错误:不能打开tracker:%(message)s"
 
-#: ../roundup/admin.py:1815
+#: ../roundup/admin.py:1851
 #, python-format
 msgid ""
 "Roundup %s ready for input.\n"
@@ -1187,19 +1203,15 @@
 "Roundup %s 输入就绪。\n"
 "敲入 \"help\" 获得帮助。"
 
-#: ../roundup/admin.py:1820
+#: ../roundup/admin.py:1856
 msgid "Note: command history and editing not available"
 msgstr "注意:命令历史和编辑无效"
 
-#: ../roundup/admin.py:1824
-msgid "roundup> "
-msgstr "roundup>"
-
-#: ../roundup/admin.py:1826
+#: ../roundup/admin.py:1862
 msgid "exit..."
 msgstr "退出..."
 
-#: ../roundup/admin.py:1839
+#: ../roundup/admin.py:1875
 msgid "There are unsaved changes. Commit them (y/N)? "
 msgstr "存在未被保存的改动。提交吗(y/N)?"
 
@@ -1307,20 +1319,22 @@
 msgid "restored"
 msgstr "恢复"
 
-#: ../roundup/backends/sessions_redis.py:76
-#: ../roundup/backends/sessions_redis.py:95
-#: ../roundup/backends/sessions_redis.py:76:95
+#: ../roundup/backends/sessions_redis.py:78
+#: ../roundup/backends/sessions_redis.py:97
+#: ../roundup/backends/sessions_redis.py:78:97
 #, python-format
 msgid "Key %(key)s not found in %(name)s database."
 msgstr ""
 
-#: ../roundup/backends/sessions_redis.py:191
+#: ../roundup/backends/sessions_redis.py:193
 #, python-format
 msgid "Key %(key)s changed in %(name)s db"
 msgstr ""
 
-#: ../roundup/backends/sessions_redis.py:195
-msgid "Redis set failed afer 3 retries"
+#: ../roundup/backends/sessions_redis.py:203
+#, python-format
+msgid ""
+"Redis set failed after %(retries)d retries for user %(user)s with key %(key)s"
 msgstr ""
 
 #: ../roundup/cgi/actions.py:97
@@ -1627,22 +1641,22 @@
 msgid "Welcome %(username)s!"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1383 ../roundup/cgi/actions.py:1387
-#: ../roundup/cgi/actions.py:1383:1387
+#: ../roundup/cgi/actions.py:1384 ../roundup/cgi/actions.py:1388
+#: ../roundup/cgi/actions.py:1384:1388
 msgid "Invalid login"
 msgstr "无效登录"
 
-#: ../roundup/cgi/actions.py:1393
+#: ../roundup/cgi/actions.py:1394
 msgid "You do not have permission to login"
 msgstr "你没有登录的权限"
 
-#: ../roundup/cgi/actions.py:1437 ../roundup/cgi/actions.py:1616
-#: ../roundup/cgi/actions.py:1437:1616
+#: ../roundup/cgi/actions.py:1439 ../roundup/cgi/actions.py:1618
+#: ../roundup/cgi/actions.py:1439:1618
 #, python-format
 msgid "Column \"%(column)s\" not found in %(class)s"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1687
+#: ../roundup/cgi/actions.py:1689
 #, python-format
 msgid "You do not have permission to view %(class)s"
 msgstr "你没有查看 %(class)s 的权限"
@@ -1739,154 +1753,155 @@
 "</body></html>"
 msgstr ""
 
-#: ../roundup/cgi/client.py:651
+#: ../roundup/cgi/client.py:670 ../roundup/cgi/client.py:1570
+#: ../roundup/cgi/client.py:670:1570
+msgid "Required Header Missing"
+msgstr ""
+
+#: ../roundup/cgi/client.py:672
 #, fuzzy
 msgid "Client is not allowed to use Rest Interface."
 msgstr "匿名用户不允许使用 web 界面"
 
-#: ../roundup/cgi/client.py:895
+#: ../roundup/cgi/client.py:921
 msgid "Form Error: "
 msgstr "表格错误:"
 
-#: ../roundup/cgi/client.py:985
+#: ../roundup/cgi/client.py:1011
 #, python-format
 msgid "Unrecognized charset: %r"
 msgstr "无法识别的字符集:%r"
 
-#: ../roundup/cgi/client.py:1238 ../roundup/cgi/client.py:2196
-#: ../roundup/cgi/client.py:1238:2196
+#: ../roundup/cgi/client.py:1264 ../roundup/cgi/client.py:2250
+#: ../roundup/cgi/client.py:1264:2250
 msgid "broken form: multiple @action values submitted"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1253
+#: ../roundup/cgi/client.py:1279
 msgid "Anonymous users are not allowed to use the web interface"
 msgstr "匿名用户不允许使用 web 界面"
 
-#: ../roundup/cgi/client.py:1376
+#: ../roundup/cgi/client.py:1430
 msgid "Referer header not available."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1380
+#: ../roundup/cgi/client.py:1434
 #, python-format
 msgid "csrf key used with wrong method from: %s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1409
+#: ../roundup/cgi/client.py:1463
 #, python-format
 msgid "csrf header %(header)s required but missing for user%(userid)s."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1413
+#: ../roundup/cgi/client.py:1467
 #, python-format
 msgid "Missing header: %s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1421
+#: ../roundup/cgi/client.py:1475
 #, python-format
 msgid "csrf Referer header check failed for user%(userid)s. Value=%(referer)s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1426
+#: ../roundup/cgi/client.py:1480
 #, fuzzy, python-format
 msgid "Invalid Referer: %s"
 msgstr "无效登录"
 
-#: ../roundup/cgi/client.py:1441
+#: ../roundup/cgi/client.py:1495
 #, python-format
 msgid "csrf Origin header check failed for user%(userid)s. Value=%(origin)s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1446
+#: ../roundup/cgi/client.py:1500
 #, fuzzy, python-format
 msgid "Invalid Origin %s"
 msgstr "无效登录"
 
-#: ../roundup/cgi/client.py:1460
+#: ../roundup/cgi/client.py:1514
 #, python-format
 msgid ""
 "csrf X-FORWARDED-HOST header check failed for user%(userid)s. Value=%(host)s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1466
+#: ../roundup/cgi/client.py:1520
 #, python-format
 msgid "Invalid X-FORWARDED-HOST %s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1485
+#: ../roundup/cgi/client.py:1539
 #, python-format
 msgid "csrf HOST header check failed for user%(userid)s. Value=%(host)s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1490
+#: ../roundup/cgi/client.py:1544
 #, fuzzy, python-format
 msgid "Invalid HOST %s"
 msgstr "无效请求"
 
-#: ../roundup/cgi/client.py:1498
+#: ../roundup/cgi/client.py:1552
 msgid "Csrf: unable to verify sufficient headers"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1499
+#: ../roundup/cgi/client.py:1553
 msgid "Unable to verify sufficient headers"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1513
+#: ../roundup/cgi/client.py:1567
 #, python-format
 msgid "csrf X-REQUESTED-WITH xmlrpc required header check failed for user%s."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1516
-msgid "Required Header Missing"
-msgstr ""
-
-#: ../roundup/cgi/client.py:1554
+#: ../roundup/cgi/client.py:1608
 #, python-format
 msgid "Required csrf field missing for user%s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1556 ../roundup/cgi/client.py:1583
-#: ../roundup/cgi/client.py:1600 ../roundup/cgi/client.py:1556:1583:1600
+#: ../roundup/cgi/client.py:1610 ../roundup/cgi/client.py:1637
+#: ../roundup/cgi/client.py:1654 ../roundup/cgi/client.py:1610:1637:1654
 msgid ""
 "We can't validate your session (csrf failure). Re-enter any unsaved data and "
 "try again."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1560
+#: ../roundup/cgi/client.py:1614
 #, python-format
 msgid "csrf field not supplied by user%s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1572
+#: ../roundup/cgi/client.py:1626
 #, python-format
 msgid ""
 "Csrf mismatch user: current user %(user)s != stored user %(stored)s, current "
 "session, stored session: %(cur_sess)s,%(stor_sess)s for key %(key)s."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1590
+#: ../roundup/cgi/client.py:1644
 #, python-format
 msgid ""
 "Csrf mismatch user: current session %(curr_sess)s != stored session "
 "%(stor_sess)s, current user/stored user is: %(user)s for key %(key)s."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1784
+#: ../roundup/cgi/client.py:1838
 msgid "You are not allowed to view this file."
 msgstr "你没有查看此文件的权限"
 
-#: ../roundup/cgi/client.py:2073
+#: ../roundup/cgi/client.py:2127
 #, python-format
 msgid "%(starttag)sTime elapsed: %(seconds)fs%(endtag)s\n"
 msgstr ""
 
-#: ../roundup/cgi/client.py:2077
+#: ../roundup/cgi/client.py:2131
 #, python-format
 msgid ""
 "%(starttag)sCache hits: %(cache_hits)d, misses %(cache_misses)d. Loading "
 "items: %(get_items)f secs. Filtering: %(filtering)f secs.%(endtag)s\n"
 msgstr ""
 
-#: ../roundup/cgi/client.py:2615
+#: ../roundup/cgi/client.py:2669
 #, python-format
 msgid ""
 "Cache failure: compressed file %(compressed)s is older than its source file "
@@ -2256,28 +2271,28 @@
 msgid "\"%s\" not a node designator"
 msgstr ""
 
-#: ../roundup/hyperdb.py:1492 ../roundup/hyperdb.py:1500
-#: ../roundup/hyperdb.py:1492:1500
+#: ../roundup/hyperdb.py:1493 ../roundup/hyperdb.py:1501
+#: ../roundup/hyperdb.py:1493:1501
 #, python-format
 msgid "Not a property name: %s"
 msgstr "不是属性名: %s"
 
-#: ../roundup/hyperdb.py:1977
+#: ../roundup/hyperdb.py:1978
 #, fuzzy, python-format
 msgid "property %(property)s: %(value)r is not a %(classname)s."
 msgstr "属性 \"%(propname)s\": \"%(value)s\" 当前不在列表中"
 
-#: ../roundup/hyperdb.py:1983
+#: ../roundup/hyperdb.py:1984
 #, python-format
 msgid "you may only enter ID values for property %s"
 msgstr ""
 
-#: ../roundup/hyperdb.py:2018
+#: ../roundup/hyperdb.py:2019
 #, python-format
 msgid "%(property)r is not a property of %(classname)s"
 msgstr ""
 
-#: ../roundup/init.py:139
+#: ../roundup/init.py:141
 #, python-format
 msgid ""
 "WARNING: directory '%s'\n"
@@ -2498,7 +2513,7 @@
 "  %(errors)s\n"
 msgstr ""
 
-#: ../roundup/mailgw.py:1820
+#: ../roundup/mailgw.py:1821
 #, python-format
 msgid ""
 "\n"
@@ -2521,19 +2536,19 @@
 msgid "Invalid attribute %s"
 msgstr "无效登录"
 
-#: ../roundup/rest.py:2078
+#: ../roundup/rest.py:2090
 #, python-format
 msgid "Api rate limits exceeded. Please wait: %s seconds."
 msgstr ""
 
-#: ../roundup/rest.py:2113
+#: ../roundup/rest.py:2125
 #, python-format
 msgid ""
 "Unable to parse Accept Header. %(error)s. Acceptable types: "
 "%(acceptable_types)s"
 msgstr ""
 
-#: ../roundup/rest.py:2262
+#: ../roundup/rest.py:2305
 #, python-format
 msgid ""
 "Unrecognized api version: %s. See /rest without specifying api version for "
@@ -2656,27 +2671,27 @@
 msgid "No tracker templates found in directory %s"
 msgstr ""
 
-#: ../roundup/scripts/roundup_mailgw.py:185
+#: ../roundup/scripts/roundup_mailgw.py:182
 msgid ""
 "\n"
 "Error: The instance home must be specified"
 msgstr ""
 
-#: ../roundup/scripts/roundup_mailgw.py:203
+#: ../roundup/scripts/roundup_mailgw.py:200
 #, fuzzy
 msgid ""
 "\n"
 "Error: not enough source specification information"
 msgstr "错误:没有足够的源协议信息"
 
-#: ../roundup/scripts/roundup_mailgw.py:234
+#: ../roundup/scripts/roundup_mailgw.py:231
 #, fuzzy, python-format
 msgid ""
 "\n"
 "Error: %s specification not valid"
 msgstr "错误:pop协议无效"
 
-#: ../roundup/scripts/roundup_mailgw.py:258
+#: ../roundup/scripts/roundup_mailgw.py:254
 #, fuzzy
 msgid ""
 "\n"
@@ -2689,7 +2704,7 @@
 msgid "WARNING: generating temporary SSL certificate"
 msgstr ""
 
-#: ../roundup/scripts/roundup_server.py:329
+#: ../roundup/scripts/roundup_server.py:331
 msgid ""
 "<html><head><title>Roundup trackers index</title></head>\n"
 "<body><h1>Roundup trackers index</h1><ol>\n"
@@ -2697,58 +2712,58 @@
 "<html><head><title>Roundup tracker 索引</title></head>\n"
 "<body><h1>Roundup tracker 索引</h1><ol>\n"
 
-#: ../roundup/scripts/roundup_server.py:549
+#: ../roundup/scripts/roundup_server.py:551
 #, fuzzy, python-format
 msgid "Error: %(type)s: %(value)s"
 msgstr "%(key)s: %(value)s"
 
-#: ../roundup/scripts/roundup_server.py:561
+#: ../roundup/scripts/roundup_server.py:563
 msgid "WARNING: ignoring \"-g\" argument, not root"
 msgstr "警告:忽略 \"-g\" 参数,不是 root"
 
-#: ../roundup/scripts/roundup_server.py:567
+#: ../roundup/scripts/roundup_server.py:569
 msgid "Can't change groups - no grp module"
 msgstr "不能修改组 - 无 grp 模块"
 
-#: ../roundup/scripts/roundup_server.py:576
+#: ../roundup/scripts/roundup_server.py:578
 #, python-format
 msgid "Group %(group)s doesn't exist"
 msgstr "组 %(group)s 不存在"
 
-#: ../roundup/scripts/roundup_server.py:588
+#: ../roundup/scripts/roundup_server.py:590
 msgid "Can't run as root!"
 msgstr "不能以 root 运行!"
 
-#: ../roundup/scripts/roundup_server.py:591
+#: ../roundup/scripts/roundup_server.py:593
 msgid "WARNING: ignoring \"-u\" argument, not root"
 msgstr "警告:忽略 \"-u\" 参数,不是 root"
 
-#: ../roundup/scripts/roundup_server.py:597
+#: ../roundup/scripts/roundup_server.py:599
 msgid "Can't change users - no pwd module"
 msgstr "不能修改用户 - 无 pwd 模块"
 
-#: ../roundup/scripts/roundup_server.py:606
+#: ../roundup/scripts/roundup_server.py:608
 #, python-format
 msgid "User %(user)s doesn't exist"
 msgstr "用户 %(user)s 不存在"
 
-#: ../roundup/scripts/roundup_server.py:803
+#: ../roundup/scripts/roundup_server.py:805
 #, python-format
 msgid "Multiprocess mode \"%s\" is not available, switching to single-process"
 msgstr ""
 
-#: ../roundup/scripts/roundup_server.py:830
+#: ../roundup/scripts/roundup_server.py:832
 #, python-format
 msgid "Unable to bind to port %s, port already in use."
 msgstr "无法绑定到端口 %s, 端口已经被占用。"
 
-#: ../roundup/scripts/roundup_server.py:834
+#: ../roundup/scripts/roundup_server.py:836
 #, fuzzy, python-format
 msgid ""
 "Unable to bind to port %(port)s, access not allowed, errno: %(errno)s %(msg)s"
 msgstr "无法绑定到端口 %s, 端口已经被占用。"
 
-#: ../roundup/scripts/roundup_server.py:913
+#: ../roundup/scripts/roundup_server.py:915
 #, fuzzy
 msgid ""
 " -c <Command>  Windows Service options.\n"
@@ -2765,7 +2780,7 @@
 "               变量上配置一个tracker。这个选项与其经选项是互斥的。打入\n"
 "               \"roundup-server -c help\" 来了解Windows服务的规范。"
 
-#: ../roundup/scripts/roundup_server.py:920
+#: ../roundup/scripts/roundup_server.py:922
 msgid ""
 " -u <UID>      runs the Roundup web server as this UID\n"
 " -g <GID>      runs the Roundup web server as this GID\n"
@@ -2779,7 +2794,7 @@
 "去。\n"
 "               如果使用了 -d 选项,则 -l 选项 *必须* 要指定。"
 
-#: ../roundup/scripts/roundup_server.py:927
+#: ../roundup/scripts/roundup_server.py:929
 #, fuzzy, python-format
 msgid ""
 "\n"
@@ -2875,20 +2890,20 @@
 "   意数量的 name=home 对。要确保 name 部分不能包括任何非url安全的\n"
 "   字符,象空格,因为它们会把IE搞乱。\n"
 
-#: ../roundup/scripts/roundup_server.py:1103
+#: ../roundup/scripts/roundup_server.py:1105
 msgid "Instances must be name=home"
 msgstr "实例必须是 实例名=实例路径"
 
-#: ../roundup/scripts/roundup_server.py:1117
+#: ../roundup/scripts/roundup_server.py:1119
 #, python-format
 msgid "Configuration saved to %s"
 msgstr "配置保存到 %s"
 
-#: ../roundup/scripts/roundup_server.py:1135
+#: ../roundup/scripts/roundup_server.py:1137
 msgid "Sorry, you can't run the server as a daemon on this Operating System"
 msgstr "抱歉,在这个操作系统上不能以守护进程的方式来运行服务"
 
-#: ../roundup/scripts/roundup_server.py:1155
+#: ../roundup/scripts/roundup_server.py:1157
 #, python-format
 msgid "Roundup server started on %(HOST)s:%(PORT)s"
 msgstr "Roundup server 启动于 %(HOST)s:%(PORT)s"
@@ -5344,6 +5359,9 @@
 msgid "Password"
 msgstr "登录密码"
 
+#~ msgid "roundup> "
+#~ msgstr "roundup>"
+
 #, fuzzy
 #~ msgid ""
 #~ "Usage: %(program)s [-v] [-c class] [[-C class] -S field=value]* [instance "
--- a/locale/zh_TW.po	Wed Mar 01 10:43:54 2023 -0500
+++ b/locale/zh_TW.po	Wed Mar 01 10:51:37 2023 -0500
@@ -7,7 +7,7 @@
 msgstr ""
 "Project-Id-Version: Roundup 2.3.0\n"
 "Report-Msgid-Bugs-To: roundup-devel@lists.sourceforge.net\n"
-"POT-Creation-Date: 2022-11-23 22:28-0500\n"
+"POT-Creation-Date: 2023-03-01 10:35-0500\n"
 "PO-Revision-Date: 2013-10-31 12:23+0100\n"
 "Last-Translator: Fred Lin <gasolin@gmail>\n"
 "Language-Team: Chinese Traditional <gasolin@gmail.com>\n"
@@ -25,24 +25,24 @@
 "You do not have permission to retire or restore the %(classname)s class."
 msgstr "你沒有權限來 %(action)s %(classname)s 類型。"
 
-#: ../roundup/actions.py:64 ../roundup/cgi/actions.py:240
+#: ../roundup/actions.py:65 ../roundup/cgi/actions.py:240
 msgid "You may not retire the admin or anonymous user"
 msgstr "你不能刪除管理員或匿名用戶"
 
 # ../roundup/admin.py:84 :943 :992 :1014
-#: ../roundup/admin.py:106 ../roundup/admin.py:1259 ../roundup/admin.py:1314
-#: ../roundup/admin.py:1341 ../roundup/admin.py:106:1259 :1314:1341
+#: ../roundup/admin.py:112 ../roundup/admin.py:1295 ../roundup/admin.py:1350
+#: ../roundup/admin.py:1377 ../roundup/admin.py:112:1295 :1350:1377
 #, python-format
 msgid "no such class \"%(classname)s\""
 msgstr "無此類別 \"%(classname)s\""
 
 # ../roundup/admin.py:94 :98
-#: ../roundup/admin.py:118
+#: ../roundup/admin.py:124
 #, python-format
 msgid "argument \"%(arg)s\" not propname=value"
 msgstr "參數 \"%(arg)s\" 不是 propname=value 的形式"
 
-#: ../roundup/admin.py:131
+#: ../roundup/admin.py:137
 #, python-format
 msgid ""
 "Problem: %(message)s\n"
@@ -51,7 +51,7 @@
 "問題: %(message)s\n"
 "\n"
 
-#: ../roundup/admin.py:132
+#: ../roundup/admin.py:138
 #, fuzzy, python-format
 msgid ""
 "%(message)sUsage: roundup-admin [options] [<command> <arguments>]\n"
@@ -98,12 +98,12 @@
 " roundup-admin help <command>             -- 命令詳解說明\n"
 " roundup-admin help all                   -- 所有可用的說明\n"
 
-#: ../roundup/admin.py:159
+#: ../roundup/admin.py:165
 #, fuzzy
 msgid "Commands: "
 msgstr "命令:"
 
-#: ../roundup/admin.py:166
+#: ../roundup/admin.py:172
 msgid ""
 "Commands may be abbreviated as long as the abbreviation\n"
 "matches only one command, e.g. l == li == lis == list."
@@ -111,7 +111,8 @@
 "命令可以被縮寫,只要縮寫只有一個命令可以匹配上,\n"
 "如:l == li == lis == list."
 
-#: ../roundup/admin.py:195
+#: ../roundup/admin.py:201
+#, fuzzy
 msgid ""
 "\n"
 "All commands (except help) require a tracker specifier. This is just\n"
@@ -163,7 +164,7 @@
 " . ROUNDUP_LOGIN environment variable\n"
 " . the -u command-line option\n"
 "If either the name or password is not supplied, they are obtained from the\n"
-"command-line.\n"
+"command-line. (See admin guide before using -u.)\n"
 "\n"
 "Date format examples:\n"
 "  \"2000-04-17.03:45\" means <Date 2000-04-17.08:45:00>\n"
@@ -233,12 +234,12 @@
 "\n"
 "使用說明:\n"
 
-#: ../roundup/admin.py:258
+#: ../roundup/admin.py:264
 #, python-format
 msgid "%s:"
 msgstr ""
 
-#: ../roundup/admin.py:265
+#: ../roundup/admin.py:271
 msgid ""
 "Usage: help topic\n"
 "        Give help about topic.\n"
@@ -258,22 +259,22 @@
 "        all       -- 所有可用的說明\n"
 "        "
 
-#: ../roundup/admin.py:287
+#: ../roundup/admin.py:293
 #, python-format
 msgid "Sorry, no help for \"%(topic)s\""
 msgstr "抱歉,沒有對 \"%(topic)s\" 的說明信息"
 
 # ../roundup/admin.py:337 :387
-#: ../roundup/admin.py:402 ../roundup/admin.py:458 ../roundup/admin.py:402:458
+#: ../roundup/admin.py:408 ../roundup/admin.py:464 ../roundup/admin.py:408:464
 msgid "Templates:"
 msgstr "模板:"
 
 # ../roundup/admin.py:340 :398
-#: ../roundup/admin.py:405 ../roundup/admin.py:468 ../roundup/admin.py:405:468
+#: ../roundup/admin.py:411 ../roundup/admin.py:474 ../roundup/admin.py:411:474
 msgid "Back ends:"
 msgstr "後端:"
 
-#: ../roundup/admin.py:408
+#: ../roundup/admin.py:414
 #, fuzzy
 msgid ""
 "Usage: install [template [backend [key=val[,key=val]]]]\n"
@@ -315,23 +316,23 @@
 
 # ../roundup/admin.py:359 :494 :573 :623 :676 :697 :725 :796 :863 :934 :982
 # :1004 :1031 :1093 :1159
-#: ../roundup/admin.py:431 ../roundup/admin.py:562 ../roundup/admin.py:635
-#: ../roundup/admin.py:728 ../roundup/admin.py:786 ../roundup/admin.py:872
-#: ../roundup/admin.py:931 ../roundup/admin.py:958 ../roundup/admin.py:985
-#: ../roundup/admin.py:1062 ../roundup/admin.py:1157 ../roundup/admin.py:1243
-#: ../roundup/admin.py:1304 ../roundup/admin.py:1331 ../roundup/admin.py:1367
-#: ../roundup/admin.py:1495 ../roundup/admin.py:1579
-#: ../roundup/admin.py:431:562 :1157 :1243:1304 :1331:1367 :1495:1579 :635:728
-#: :786:872 :931:958 :985:1062
+#: ../roundup/admin.py:437 ../roundup/admin.py:568 ../roundup/admin.py:671
+#: ../roundup/admin.py:764 ../roundup/admin.py:822 ../roundup/admin.py:908
+#: ../roundup/admin.py:967 ../roundup/admin.py:994 ../roundup/admin.py:1021
+#: ../roundup/admin.py:1098 ../roundup/admin.py:1193 ../roundup/admin.py:1279
+#: ../roundup/admin.py:1340 ../roundup/admin.py:1367 ../roundup/admin.py:1403
+#: ../roundup/admin.py:1531 ../roundup/admin.py:1615
+#: ../roundup/admin.py:437:568 :1021:1098:1193 :1279:1340 :1367:1403 :1531:1615
+#: :671:764 :822:908 :967:994
 msgid "Not enough arguments supplied"
 msgstr "未提供足夠的參數"
 
-#: ../roundup/admin.py:437
+#: ../roundup/admin.py:443
 #, python-format
 msgid "Instance home parent directory \"%(parent)s\" does not exist"
 msgstr "實例目錄的父目錄 \"%(parent)s\" 不存在"
 
-#: ../roundup/admin.py:446
+#: ../roundup/admin.py:452
 #, python-format
 msgid ""
 "WARNING: There appears to be a tracker in \"%(tracker_home)s\"!\n"
@@ -342,22 +343,22 @@
 "如果你打算重新安裝它,所有的數據將會丟失!\n"
 "刪除它嗎?Y/N: "
 
-#: ../roundup/admin.py:459
+#: ../roundup/admin.py:465
 #, fuzzy
 msgid "Select template"
 msgstr "選擇模板 [classic]:"
 
-#: ../roundup/admin.py:469
+#: ../roundup/admin.py:475
 #, fuzzy
 msgid "Select backend"
 msgstr "選擇後端 [anydbm]:"
 
-#: ../roundup/admin.py:480
+#: ../roundup/admin.py:486
 #, fuzzy, python-format
 msgid "Error in configuration settings: \"%s\""
 msgstr "配置保存到 %s"
 
-#: ../roundup/admin.py:511
+#: ../roundup/admin.py:517
 #, fuzzy, python-format
 msgid ""
 "\n"
@@ -369,11 +370,11 @@
 " 現在你應該修改tracker的配置文件:\n"
 "   %(config_file)s"
 
-#: ../roundup/admin.py:521
+#: ../roundup/admin.py:527
 msgid " ... at a minimum, you must set following options:"
 msgstr " ... 至少,你必須設置以下選項:"
 
-#: ../roundup/admin.py:526
+#: ../roundup/admin.py:532
 #, fuzzy, python-format
 msgid ""
 "\n"
@@ -397,7 +398,7 @@
 "   %(database_init_file)s\n"
 " ... 查看關於客戶化的文檔來瞭解更多的信息。\n"
 
-#: ../roundup/admin.py:557
+#: ../roundup/admin.py:563
 msgid ""
 "Usage: genconfig <filename>\n"
 "        Generate a new tracker config file (ini style) with default\n"
@@ -405,7 +406,22 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:572
+#: ../roundup/admin.py:581
+#, python-format
+msgid ""
+"Changing option\n"
+"   'password_pbkdf2_default_rounds'\n"
+"from old default of %(old_number)s to new default of %(new_number)s."
+msgstr ""
+
+#: ../roundup/admin.py:593
+#, python-format
+msgid ""
+"Update 'password_pbkdf2_default_rounds'to a number equal to or larger\n"
+"than %s."
+msgstr ""
+
+#: ../roundup/admin.py:604
 msgid ""
 "Usage: updateconfig <filename>\n"
 "        Generate an updated tracker config file (ini style) in\n"
@@ -415,7 +431,7 @@
 msgstr ""
 
 #. password
-#: ../roundup/admin.py:580
+#: ../roundup/admin.py:612
 msgid ""
 "Usage: initialise [adminpw]\n"
 "        Initialise a new Roundup tracker.\n"
@@ -433,23 +449,23 @@
 "        執行tracker的初始化函數 dbinit.init()\n"
 "        "
 
-#: ../roundup/admin.py:594
+#: ../roundup/admin.py:626
 msgid "Admin Password: "
 msgstr "管理員口令:"
 
-#: ../roundup/admin.py:595
+#: ../roundup/admin.py:627
 msgid "       Confirm: "
 msgstr "       確認:"
 
-#: ../roundup/admin.py:599
+#: ../roundup/admin.py:631
 msgid "Instance home does not exist"
 msgstr "實例目錄不存在"
 
-#: ../roundup/admin.py:603
+#: ../roundup/admin.py:635
 msgid "Instance has not been installed"
 msgstr "實例還沒有安裝"
 
-#: ../roundup/admin.py:609
+#: ../roundup/admin.py:641
 msgid ""
 "WARNING: The database is already initialised!\n"
 "If you re-initialise it, you will lose all the data!\n"
@@ -459,7 +475,7 @@
 "如果你重新初始化它,所有的數據將會丟失!\n"
 "刪除它嗎?Y/N: "
 
-#: ../roundup/admin.py:625
+#: ../roundup/admin.py:661
 #, fuzzy
 msgid ""
 "Usage: get property designator[,designator]*\n"
@@ -479,24 +495,24 @@
 "        "
 
 # ../roundup/admin.py:527 :542
-#: ../roundup/admin.py:669 ../roundup/admin.py:687 ../roundup/admin.py:669:687
+#: ../roundup/admin.py:705 ../roundup/admin.py:723 ../roundup/admin.py:705:723
 #, python-format
 msgid "property %s is not of type Multilink or Link so -d flag does not apply."
 msgstr "屬性 %s 不是 Multilink 或 Link 類型,所以 -d 標誌不能應用。"
 
 # ../roundup/admin.py:550 :945 :994 :1016
-#: ../roundup/admin.py:697 ../roundup/admin.py:1261 ../roundup/admin.py:1316
-#: ../roundup/admin.py:697:1261:1316
+#: ../roundup/admin.py:733 ../roundup/admin.py:1297 ../roundup/admin.py:1352
+#: ../roundup/admin.py:733:1297:1352
 #, python-format
 msgid "no such %(classname)s node \"%(nodeid)s\""
 msgstr "沒有這樣的 %(classname)s 結點 \"%(nodeid)s\""
 
-#: ../roundup/admin.py:700
+#: ../roundup/admin.py:736
 #, python-format
 msgid "no such %(classname)s property \"%(propname)s\""
 msgstr "沒有這樣的 %(classname)s 屬性 \"%(propname)s\""
 
-#: ../roundup/admin.py:708
+#: ../roundup/admin.py:744
 #, fuzzy
 msgid ""
 "Usage: set items property=value property=value ...\n"
@@ -529,7 +545,7 @@
 "        你需要為多鏈接提供用逗號分隔的數字(例如 \"1,2,3\")。\n"
 "        "
 
-#: ../roundup/admin.py:776
+#: ../roundup/admin.py:812
 #, fuzzy
 msgid ""
 "Usage: filter classname propname=value ...\n"
@@ -551,20 +567,20 @@
 "        "
 
 # ../roundup/admin.py:663 :816 :828 :882
-#: ../roundup/admin.py:819
+#: ../roundup/admin.py:855
 #, fuzzy, python-format
 msgid "Class %(curclassname)s has no property %(pn)s in %(propname)s."
 msgstr "%(classname)s 沒有 \"%(propname)s\" 屬性"
 
 # ../roundup/admin.py:663 :816 :828 :882
-#: ../roundup/admin.py:857 ../roundup/admin.py:918 ../roundup/admin.py:1082
-#: ../roundup/admin.py:1094 ../roundup/admin.py:1177
-#: ../roundup/admin.py:857:918 :1082:1094:1177
+#: ../roundup/admin.py:893 ../roundup/admin.py:954 ../roundup/admin.py:1118
+#: ../roundup/admin.py:1130 ../roundup/admin.py:1213
+#: ../roundup/admin.py:893:954 :1118:1130:1213
 #, python-format
 msgid "%(classname)s has no property \"%(propname)s\""
 msgstr "%(classname)s 沒有 \"%(propname)s\" 屬性"
 
-#: ../roundup/admin.py:864
+#: ../roundup/admin.py:900
 msgid ""
 "Usage: find classname propname=value ...\n"
 "        Find the nodes of the given class with a given link property value.\n"
@@ -582,7 +598,7 @@
 "        或者是結點的鍵值。\n"
 "        "
 
-#: ../roundup/admin.py:925
+#: ../roundup/admin.py:961
 msgid ""
 "Usage: specification classname\n"
 "        Show the properties for a classname.\n"
@@ -596,17 +612,17 @@
 "        會列出給定類型的屬性。\n"
 "        "
 
-#: ../roundup/admin.py:941
+#: ../roundup/admin.py:977
 #, fuzzy, python-format
 msgid "%(key)s: %(value)s (key property)\n"
 msgstr "%(key)s: %(value)s (關鍵屬性)"
 
-#: ../roundup/admin.py:944
+#: ../roundup/admin.py:980
 #, fuzzy, python-format
 msgid "%(key)s: %(value)s\n"
 msgstr "%(key)s: %(value)s (關鍵屬性)"
 
-#: ../roundup/admin.py:947
+#: ../roundup/admin.py:983
 #, fuzzy
 msgid ""
 "Usage: display designator[,designator]*\n"
@@ -626,12 +642,12 @@
 "        將顯示給出結點的屬性和相應的值。\n"
 "        "
 
-#: ../roundup/admin.py:974
+#: ../roundup/admin.py:1010
 #, python-format
 msgid "%(key)s: %(value)s"
 msgstr ""
 
-#: ../roundup/admin.py:977
+#: ../roundup/admin.py:1013
 msgid ""
 "Usage: create classname property=value ...\n"
 "        Create a new entry of a given class.\n"
@@ -649,31 +665,31 @@
 "name=value 參數。\n"
 "        "
 
-#: ../roundup/admin.py:1005
+#: ../roundup/admin.py:1041
 #, python-format
 msgid "%(propname)s (Password): "
 msgstr "%(propname)s (口令):"
 
-#: ../roundup/admin.py:1008
+#: ../roundup/admin.py:1044
 #, python-format
 msgid "   %(propname)s (Again): "
 msgstr "   %(propname)s (再次):"
 
-#: ../roundup/admin.py:1012
+#: ../roundup/admin.py:1048
 msgid "Sorry, try again..."
 msgstr "抱歉,再試一次..."
 
-#: ../roundup/admin.py:1016
+#: ../roundup/admin.py:1052
 #, python-format
 msgid "%(propname)s (%(proptype)s): "
 msgstr ""
 
-#: ../roundup/admin.py:1035
+#: ../roundup/admin.py:1071
 #, python-format
 msgid "you must provide the \"%(propname)s\" property."
 msgstr "你必須提供 \"%(propname)s\" 屬性。"
 
-#: ../roundup/admin.py:1047
+#: ../roundup/admin.py:1083
 msgid ""
 "Usage: list classname [property]\n"
 "        List the instances of a class.\n"
@@ -699,16 +715,16 @@
 "        定了屬性,對每個類型實例會列印出這個屬性。\n"
 "        "
 
-#: ../roundup/admin.py:1060
+#: ../roundup/admin.py:1096
 msgid "Too many arguments supplied"
 msgstr "提供了太多的參數了"
 
-#: ../roundup/admin.py:1096
+#: ../roundup/admin.py:1132
 #, python-format
 msgid "%(nodeid)4s: %(value)s"
 msgstr ""
 
-#: ../roundup/admin.py:1100
+#: ../roundup/admin.py:1136
 msgid ""
 "Usage: templates [trace_search]\n"
 "        List templates and their installed directories.\n"
@@ -718,7 +734,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1128
+#: ../roundup/admin.py:1164
 msgid ""
 "Usage: table classname [property[,property]*]\n"
 "        List the instances of a class in tabular form.\n"
@@ -776,17 +792,17 @@
 "        將生成4個字符寬的 \"Name\" 列。\n"
 "        "
 
-#: ../roundup/admin.py:1172
+#: ../roundup/admin.py:1208
 #, python-format
 msgid "\"%(spec)s\" not name:width"
 msgstr "\"%(spec)s\" 不是 名字:寬度"
 
-#: ../roundup/admin.py:1194
+#: ../roundup/admin.py:1230
 #, python-format
 msgid "\"%(spec)s\" does not have an integer width: \"%(width)s\""
 msgstr ""
 
-#: ../roundup/admin.py:1230
+#: ../roundup/admin.py:1266
 msgid ""
 "Usage: history designator [skipquiet]\n"
 "        Show the history entries of a designator.\n"
@@ -801,7 +817,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1266
+#: ../roundup/admin.py:1302
 msgid ""
 "Usage: commit\n"
 "        Commit changes made to the database during an interactive session.\n"
@@ -822,7 +838,7 @@
 "        在命令行中的 One-off 命令如果成功會被自動提交。\n"
 "        "
 
-#: ../roundup/admin.py:1281
+#: ../roundup/admin.py:1317
 msgid ""
 "Usage: rollback\n"
 "        Undo all changes that are pending commit to the database.\n"
@@ -841,7 +857,7 @@
 "        產生變化。\n"
 "        "
 
-#: ../roundup/admin.py:1294
+#: ../roundup/admin.py:1330
 #, fuzzy
 msgid ""
 "Usage: retire designator[,designator]*\n"
@@ -861,7 +877,7 @@
 "        它的鍵值可以被重用。\n"
 "        "
 
-#: ../roundup/admin.py:1322
+#: ../roundup/admin.py:1358
 #, fuzzy
 msgid ""
 "Usage: restore designator[,designator]*\n"
@@ -880,13 +896,13 @@
 "        "
 
 # ../roundup/admin.py:550 :945 :994 :1016
-#: ../roundup/admin.py:1347
+#: ../roundup/admin.py:1383
 #, fuzzy
 msgid "no such %(classname)s node \" % (nodeid)s\""
 msgstr "沒有這樣的 %(classname)s 結點 \"%(nodeid)s\""
 
 #. grab the directory to export to
-#: ../roundup/admin.py:1353
+#: ../roundup/admin.py:1389
 #, fuzzy
 msgid ""
 "Usage: export [[-]class[,class]] export_dir\n"
@@ -911,7 +927,7 @@
 "        放在指定的目標目錄中。\n"
 "        "
 
-#: ../roundup/admin.py:1460
+#: ../roundup/admin.py:1496
 #, fuzzy
 msgid ""
 "Usage: exporttables [[-]class[,class]] export_dir\n"
@@ -937,7 +953,7 @@
 "        放在指定的目標目錄中。\n"
 "        "
 
-#: ../roundup/admin.py:1475
+#: ../roundup/admin.py:1511
 msgid ""
 "Usage: import import_dir\n"
 "        Import a database from the directory containing CSV files,\n"
@@ -977,7 +993,7 @@
 "        舊數據。)\n"
 "        "
 
-#: ../roundup/admin.py:1554
+#: ../roundup/admin.py:1590
 msgid ""
 "Usage: importtables export_dir\n"
 "\n"
@@ -985,7 +1001,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1561
+#: ../roundup/admin.py:1597
 msgid ""
 "Usage: pack period | date\n"
 "\n"
@@ -1023,11 +1039,11 @@
 "\n"
 "        "
 
-#: ../roundup/admin.py:1589
+#: ../roundup/admin.py:1625
 msgid "Invalid format"
 msgstr "無效的格式"
 
-#: ../roundup/admin.py:1602
+#: ../roundup/admin.py:1638
 msgid ""
 "Usage: reindex [classname|designator]*\n"
 "        Re-generate a tracker's search indexes.\n"
@@ -1042,12 +1058,12 @@
 "        重新生成 tracker 的搜索索引,它將自動進行。\n"
 "        "
 
-#: ../roundup/admin.py:1616
+#: ../roundup/admin.py:1652
 #, python-format
 msgid "no such item \"%(designator)s\""
 msgstr "沒有這樣的條目 \"%(designator)s\""
 
-#: ../roundup/admin.py:1626
+#: ../roundup/admin.py:1662
 #, fuzzy
 msgid ""
 "Usage: security [Role name]\n"
@@ -1059,47 +1075,47 @@
 "        顯示一個或多個角色的權限。\n"
 "        "
 
-#: ../roundup/admin.py:1635
+#: ../roundup/admin.py:1671
 #, fuzzy, python-format
 msgid "No such Role \"%(role)s\"\n"
 msgstr "沒有這樣的角色 \"%(role)s\""
 
-#: ../roundup/admin.py:1641
+#: ../roundup/admin.py:1677
 #, fuzzy, python-format
 msgid "New Web users get the Roles \"%(role)s\"\n"
 msgstr "新Web用戶得到角色 \"%(role)s\""
 
-#: ../roundup/admin.py:1644
+#: ../roundup/admin.py:1680
 #, fuzzy, python-format
 msgid "New Web users get the Role \"%(role)s\"\n"
 msgstr "新Web用戶得到角色 \"%(role)s\""
 
-#: ../roundup/admin.py:1648
+#: ../roundup/admin.py:1684
 #, fuzzy, python-format
 msgid "New Email users get the Roles \"%(role)s\"\n"
 msgstr "新郵件用戶得到角色 \"%(role)s\""
 
-#: ../roundup/admin.py:1650
+#: ../roundup/admin.py:1686
 #, fuzzy, python-format
 msgid "New Email users get the Role \"%(role)s\"\n"
 msgstr "新郵件用戶得到角色 \"%(role)s\""
 
-#: ../roundup/admin.py:1653
+#: ../roundup/admin.py:1689
 #, fuzzy, python-format
 msgid "Role \"%(name)s\":\n"
 msgstr "角色 \"%(name)s\":"
 
-#: ../roundup/admin.py:1659
+#: ../roundup/admin.py:1695
 #, fuzzy
 msgid " %(description)s (%(name)s for \"%(klass)s\""
 msgstr " %(description)s (%(name)s 僅用於 \"%(klass)s\")"
 
-#: ../roundup/admin.py:1659
+#: ../roundup/admin.py:1695
 #, fuzzy, python-format
 msgid " %(description)s (%(name)s for \"%(klass)s\": %(properties)s only)\n"
 msgstr " %(description)s (%(name)s 僅用於 \"%(klass)s\")"
 
-#: ../roundup/admin.py:1672
+#: ../roundup/admin.py:1708
 #, python-format
 msgid ""
 "\n"
@@ -1107,17 +1123,17 @@
 "\n"
 msgstr ""
 
-#: ../roundup/admin.py:1678
+#: ../roundup/admin.py:1714
 #, fuzzy, python-format
 msgid " %(description)s (%(name)s for \"%(klass)s\" only)\n"
 msgstr " %(description)s (%(name)s 僅用於 \"%(klass)s\")"
 
-#: ../roundup/admin.py:1681
+#: ../roundup/admin.py:1717
 #, fuzzy, python-format
 msgid " %(description)s (%(name)s)\n"
 msgstr " %(description)s (%(name)s 僅用於 \"%(klass)s\")"
 
-#: ../roundup/admin.py:1685
+#: ../roundup/admin.py:1721
 msgid ""
 "Usage: migrate\n"
 "\n"
@@ -1141,43 +1157,43 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1706
+#: ../roundup/admin.py:1742
 #, fuzzy
 msgid "Tracker updated"
 msgstr "Tracker根目錄"
 
-#: ../roundup/admin.py:1709
+#: ../roundup/admin.py:1745
 msgid "No migration action required"
 msgstr ""
 
-#: ../roundup/admin.py:1735
+#: ../roundup/admin.py:1771
 #, python-format
 msgid "Unknown command \"%(command)s\" (\"help commands\" for a list)"
 msgstr "未知命令 \"%(command)s\" (\"help commands\" 查看命令列表)"
 
-#: ../roundup/admin.py:1741
+#: ../roundup/admin.py:1777
 #, python-format
 msgid "Multiple commands match \"%(command)s\": %(list)s"
 msgstr "多命令匹配 \"%(command)s\": %(list)s"
 
-#: ../roundup/admin.py:1750
+#: ../roundup/admin.py:1786
 msgid "Enter tracker home: "
 msgstr "輸入tracker起始目錄:"
 
 # ../roundup/admin.py:1279 :1285 :1305
-#: ../roundup/admin.py:1759 ../roundup/admin.py:1765 ../roundup/admin.py:1802
-#: ../roundup/admin.py:1759:1765:1802
+#: ../roundup/admin.py:1795 ../roundup/admin.py:1801 ../roundup/admin.py:1838
+#: ../roundup/admin.py:1795:1801:1838
 #, python-format
 msgid "Error: %(message)s"
 msgstr "錯誤:%(message)s"
 
-#: ../roundup/admin.py:1775 ../roundup/admin.py:1779
-#: ../roundup/admin.py:1775:1779
+#: ../roundup/admin.py:1811 ../roundup/admin.py:1815
+#: ../roundup/admin.py:1811:1815
 #, python-format
 msgid "Error: Couldn't open tracker: %(message)s"
 msgstr "錯誤:不能打開tracker:%(message)s"
 
-#: ../roundup/admin.py:1815
+#: ../roundup/admin.py:1851
 #, python-format
 msgid ""
 "Roundup %s ready for input.\n"
@@ -1186,19 +1202,15 @@
 "Roundup %s 輸入就緒。\n"
 "敲入 \"help\" 獲得說明。"
 
-#: ../roundup/admin.py:1820
+#: ../roundup/admin.py:1856
 msgid "Note: command history and editing not available"
 msgstr "注意:命令歷史和編輯無效"
 
-#: ../roundup/admin.py:1824
-msgid "roundup> "
-msgstr ""
-
-#: ../roundup/admin.py:1826
+#: ../roundup/admin.py:1862
 msgid "exit..."
 msgstr "退出..."
 
-#: ../roundup/admin.py:1839
+#: ../roundup/admin.py:1875
 msgid "There are unsaved changes. Commit them (y/N)? "
 msgstr "存在未被保存的改動。提交嗎(y/N)?"
 
@@ -1306,20 +1318,22 @@
 msgid "restored"
 msgstr "恢復"
 
-#: ../roundup/backends/sessions_redis.py:76
-#: ../roundup/backends/sessions_redis.py:95
-#: ../roundup/backends/sessions_redis.py:76:95
+#: ../roundup/backends/sessions_redis.py:78
+#: ../roundup/backends/sessions_redis.py:97
+#: ../roundup/backends/sessions_redis.py:78:97
 #, python-format
 msgid "Key %(key)s not found in %(name)s database."
 msgstr ""
 
-#: ../roundup/backends/sessions_redis.py:191
+#: ../roundup/backends/sessions_redis.py:193
 #, python-format
 msgid "Key %(key)s changed in %(name)s db"
 msgstr ""
 
-#: ../roundup/backends/sessions_redis.py:195
-msgid "Redis set failed afer 3 retries"
+#: ../roundup/backends/sessions_redis.py:203
+#, python-format
+msgid ""
+"Redis set failed after %(retries)d retries for user %(user)s with key %(key)s"
 msgstr ""
 
 #: ../roundup/cgi/actions.py:97
@@ -1629,22 +1643,22 @@
 msgid "Welcome %(username)s!"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1383 ../roundup/cgi/actions.py:1387
-#: ../roundup/cgi/actions.py:1383:1387
+#: ../roundup/cgi/actions.py:1384 ../roundup/cgi/actions.py:1388
+#: ../roundup/cgi/actions.py:1384:1388
 msgid "Invalid login"
 msgstr "無效登錄"
 
-#: ../roundup/cgi/actions.py:1393
+#: ../roundup/cgi/actions.py:1394
 msgid "You do not have permission to login"
 msgstr "你沒有登錄的權限"
 
-#: ../roundup/cgi/actions.py:1437 ../roundup/cgi/actions.py:1616
-#: ../roundup/cgi/actions.py:1437:1616
+#: ../roundup/cgi/actions.py:1439 ../roundup/cgi/actions.py:1618
+#: ../roundup/cgi/actions.py:1439:1618
 #, python-format
 msgid "Column \"%(column)s\" not found in %(class)s"
 msgstr ""
 
-#: ../roundup/cgi/actions.py:1687
+#: ../roundup/cgi/actions.py:1689
 #, fuzzy, python-format
 msgid "You do not have permission to view %(class)s"
 msgstr "你沒有權限來編輯 %(class)s"
@@ -1741,155 +1755,156 @@
 "</body></html>"
 msgstr ""
 
-#: ../roundup/cgi/client.py:651
+#: ../roundup/cgi/client.py:670 ../roundup/cgi/client.py:1570
+#: ../roundup/cgi/client.py:670:1570
+msgid "Required Header Missing"
+msgstr ""
+
+#: ../roundup/cgi/client.py:672
 #, fuzzy
 msgid "Client is not allowed to use Rest Interface."
 msgstr "匿名用戶不允許使用web界面"
 
-#: ../roundup/cgi/client.py:895
+#: ../roundup/cgi/client.py:921
 msgid "Form Error: "
 msgstr "表格錯誤:"
 
-#: ../roundup/cgi/client.py:985
+#: ../roundup/cgi/client.py:1011
 #, python-format
 msgid "Unrecognized charset: %r"
 msgstr "無法識別的字符集:%r"
 
-#: ../roundup/cgi/client.py:1238 ../roundup/cgi/client.py:2196
-#: ../roundup/cgi/client.py:1238:2196
+#: ../roundup/cgi/client.py:1264 ../roundup/cgi/client.py:2250
+#: ../roundup/cgi/client.py:1264:2250
 msgid "broken form: multiple @action values submitted"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1253
+#: ../roundup/cgi/client.py:1279
 msgid "Anonymous users are not allowed to use the web interface"
 msgstr "匿名用戶不允許使用web界面"
 
-#: ../roundup/cgi/client.py:1376
+#: ../roundup/cgi/client.py:1430
 msgid "Referer header not available."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1380
+#: ../roundup/cgi/client.py:1434
 #, python-format
 msgid "csrf key used with wrong method from: %s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1409
+#: ../roundup/cgi/client.py:1463
 #, python-format
 msgid "csrf header %(header)s required but missing for user%(userid)s."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1413
+#: ../roundup/cgi/client.py:1467
 #, python-format
 msgid "Missing header: %s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1421
+#: ../roundup/cgi/client.py:1475
 #, python-format
 msgid "csrf Referer header check failed for user%(userid)s. Value=%(referer)s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1426
+#: ../roundup/cgi/client.py:1480
 #, fuzzy, python-format
 msgid "Invalid Referer: %s"
 msgstr "無效登錄"
 
-#: ../roundup/cgi/client.py:1441
+#: ../roundup/cgi/client.py:1495
 #, python-format
 msgid "csrf Origin header check failed for user%(userid)s. Value=%(origin)s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1446
+#: ../roundup/cgi/client.py:1500
 #, fuzzy, python-format
 msgid "Invalid Origin %s"
 msgstr "無效登錄"
 
-#: ../roundup/cgi/client.py:1460
+#: ../roundup/cgi/client.py:1514
 #, python-format
 msgid ""
 "csrf X-FORWARDED-HOST header check failed for user%(userid)s. Value=%(host)s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1466
+#: ../roundup/cgi/client.py:1520
 #, python-format
 msgid "Invalid X-FORWARDED-HOST %s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1485
+#: ../roundup/cgi/client.py:1539
 #, python-format
 msgid "csrf HOST header check failed for user%(userid)s. Value=%(host)s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1490
+#: ../roundup/cgi/client.py:1544
 #, python-format
 msgid "Invalid HOST %s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1498
+#: ../roundup/cgi/client.py:1552
 msgid "Csrf: unable to verify sufficient headers"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1499
+#: ../roundup/cgi/client.py:1553
 msgid "Unable to verify sufficient headers"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1513
+#: ../roundup/cgi/client.py:1567
 #, python-format
 msgid "csrf X-REQUESTED-WITH xmlrpc required header check failed for user%s."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1516
-msgid "Required Header Missing"
-msgstr ""
-
-#: ../roundup/cgi/client.py:1554
+#: ../roundup/cgi/client.py:1608
 #, python-format
 msgid "Required csrf field missing for user%s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1556 ../roundup/cgi/client.py:1583
-#: ../roundup/cgi/client.py:1600 ../roundup/cgi/client.py:1556:1583:1600
+#: ../roundup/cgi/client.py:1610 ../roundup/cgi/client.py:1637
+#: ../roundup/cgi/client.py:1654 ../roundup/cgi/client.py:1610:1637:1654
 msgid ""
 "We can't validate your session (csrf failure). Re-enter any unsaved data and "
 "try again."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1560
+#: ../roundup/cgi/client.py:1614
 #, python-format
 msgid "csrf field not supplied by user%s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1572
+#: ../roundup/cgi/client.py:1626
 #, python-format
 msgid ""
 "Csrf mismatch user: current user %(user)s != stored user %(stored)s, current "
 "session, stored session: %(cur_sess)s,%(stor_sess)s for key %(key)s."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1590
+#: ../roundup/cgi/client.py:1644
 #, python-format
 msgid ""
 "Csrf mismatch user: current session %(curr_sess)s != stored session "
 "%(stor_sess)s, current user/stored user is: %(user)s for key %(key)s."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1784
+#: ../roundup/cgi/client.py:1838
 #, fuzzy
 msgid "You are not allowed to view this file."
 msgstr "你不允許查看此頁"
 
-#: ../roundup/cgi/client.py:2073
+#: ../roundup/cgi/client.py:2127
 #, python-format
 msgid "%(starttag)sTime elapsed: %(seconds)fs%(endtag)s\n"
 msgstr ""
 
-#: ../roundup/cgi/client.py:2077
+#: ../roundup/cgi/client.py:2131
 #, python-format
 msgid ""
 "%(starttag)sCache hits: %(cache_hits)d, misses %(cache_misses)d. Loading "
 "items: %(get_items)f secs. Filtering: %(filtering)f secs.%(endtag)s\n"
 msgstr ""
 
-#: ../roundup/cgi/client.py:2615
+#: ../roundup/cgi/client.py:2669
 #, python-format
 msgid ""
 "Cache failure: compressed file %(compressed)s is older than its source file "
@@ -2259,28 +2274,28 @@
 msgid "\"%s\" not a node designator"
 msgstr ""
 
-#: ../roundup/hyperdb.py:1492 ../roundup/hyperdb.py:1500
-#: ../roundup/hyperdb.py:1492:1500
+#: ../roundup/hyperdb.py:1493 ../roundup/hyperdb.py:1501
+#: ../roundup/hyperdb.py:1493:1501
 #, fuzzy, python-format
 msgid "Not a property name: %s"
 msgstr "不是日期格式:%s"
 
-#: ../roundup/hyperdb.py:1977
+#: ../roundup/hyperdb.py:1978
 #, fuzzy, python-format
 msgid "property %(property)s: %(value)r is not a %(classname)s."
 msgstr "屬性 \"%(propname)s\": \"%(value)s\" 當前不在列表中"
 
-#: ../roundup/hyperdb.py:1983
+#: ../roundup/hyperdb.py:1984
 #, python-format
 msgid "you may only enter ID values for property %s"
 msgstr ""
 
-#: ../roundup/hyperdb.py:2018
+#: ../roundup/hyperdb.py:2019
 #, python-format
 msgid "%(property)r is not a property of %(classname)s"
 msgstr ""
 
-#: ../roundup/init.py:139
+#: ../roundup/init.py:141
 #, python-format
 msgid ""
 "WARNING: directory '%s'\n"
@@ -2504,7 +2519,7 @@
 "  %(errors)s\n"
 msgstr ""
 
-#: ../roundup/mailgw.py:1820
+#: ../roundup/mailgw.py:1821
 #, python-format
 msgid ""
 "\n"
@@ -2527,19 +2542,19 @@
 msgid "Invalid attribute %s"
 msgstr "無效登錄"
 
-#: ../roundup/rest.py:2078
+#: ../roundup/rest.py:2090
 #, python-format
 msgid "Api rate limits exceeded. Please wait: %s seconds."
 msgstr ""
 
-#: ../roundup/rest.py:2113
+#: ../roundup/rest.py:2125
 #, python-format
 msgid ""
 "Unable to parse Accept Header. %(error)s. Acceptable types: "
 "%(acceptable_types)s"
 msgstr ""
 
-#: ../roundup/rest.py:2262
+#: ../roundup/rest.py:2305
 #, python-format
 msgid ""
 "Unrecognized api version: %s. See /rest without specifying api version for "
@@ -2663,27 +2678,27 @@
 msgid "No tracker templates found in directory %s"
 msgstr ""
 
-#: ../roundup/scripts/roundup_mailgw.py:185
+#: ../roundup/scripts/roundup_mailgw.py:182
 msgid ""
 "\n"
 "Error: The instance home must be specified"
 msgstr ""
 
-#: ../roundup/scripts/roundup_mailgw.py:203
+#: ../roundup/scripts/roundup_mailgw.py:200
 #, fuzzy
 msgid ""
 "\n"
 "Error: not enough source specification information"
 msgstr "錯誤:沒有足夠的源協議資訊"
 
-#: ../roundup/scripts/roundup_mailgw.py:234
+#: ../roundup/scripts/roundup_mailgw.py:231
 #, fuzzy, python-format
 msgid ""
 "\n"
 "Error: %s specification not valid"
 msgstr "錯誤:pop協議無效"
 
-#: ../roundup/scripts/roundup_mailgw.py:258
+#: ../roundup/scripts/roundup_mailgw.py:254
 #, fuzzy
 msgid ""
 "\n"
@@ -2696,7 +2711,7 @@
 msgid "WARNING: generating temporary SSL certificate"
 msgstr ""
 
-#: ../roundup/scripts/roundup_server.py:329
+#: ../roundup/scripts/roundup_server.py:331
 msgid ""
 "<html><head><title>Roundup trackers index</title></head>\n"
 "<body><h1>Roundup trackers index</h1><ol>\n"
@@ -2704,58 +2719,58 @@
 "<html><head><title>Roundup tracker 索引</title></head>\n"
 "<body><h1>Roundup tracker 索引</h1><ol>\n"
 
-#: ../roundup/scripts/roundup_server.py:549
+#: ../roundup/scripts/roundup_server.py:551
 #, fuzzy, python-format
 msgid "Error: %(type)s: %(value)s"
 msgstr "%(key)s: %(value)s (關鍵屬性)"
 
-#: ../roundup/scripts/roundup_server.py:561
+#: ../roundup/scripts/roundup_server.py:563
 msgid "WARNING: ignoring \"-g\" argument, not root"
 msgstr "警告:忽略 \"-g\" 參數,不是 root"
 
-#: ../roundup/scripts/roundup_server.py:567
+#: ../roundup/scripts/roundup_server.py:569
 msgid "Can't change groups - no grp module"
 msgstr "不能修改組 - 無 grp 模塊"
 
-#: ../roundup/scripts/roundup_server.py:576
+#: ../roundup/scripts/roundup_server.py:578
 #, python-format
 msgid "Group %(group)s doesn't exist"
 msgstr "組 %(group)s 不存在"
 
-#: ../roundup/scripts/roundup_server.py:588
+#: ../roundup/scripts/roundup_server.py:590
 msgid "Can't run as root!"
 msgstr "不能以 root 運行!"
 
-#: ../roundup/scripts/roundup_server.py:591
+#: ../roundup/scripts/roundup_server.py:593
 msgid "WARNING: ignoring \"-u\" argument, not root"
 msgstr "警告:忽略 \"-u\" 參數,不是 root"
 
-#: ../roundup/scripts/roundup_server.py:597
+#: ../roundup/scripts/roundup_server.py:599
 msgid "Can't change users - no pwd module"
 msgstr "不能修改用戶 - 無 pwd 模塊"
 
-#: ../roundup/scripts/roundup_server.py:606
+#: ../roundup/scripts/roundup_server.py:608
 #, python-format
 msgid "User %(user)s doesn't exist"
 msgstr "用戶 %(user)s 不存在"
 
-#: ../roundup/scripts/roundup_server.py:803
+#: ../roundup/scripts/roundup_server.py:805
 #, python-format
 msgid "Multiprocess mode \"%s\" is not available, switching to single-process"
 msgstr ""
 
-#: ../roundup/scripts/roundup_server.py:830
+#: ../roundup/scripts/roundup_server.py:832
 #, python-format
 msgid "Unable to bind to port %s, port already in use."
 msgstr "無法綁定到端口 %s, 端口已經被佔用。"
 
-#: ../roundup/scripts/roundup_server.py:834
+#: ../roundup/scripts/roundup_server.py:836
 #, fuzzy, python-format
 msgid ""
 "Unable to bind to port %(port)s, access not allowed, errno: %(errno)s %(msg)s"
 msgstr "無法綁定到端口 %s, 端口已經被佔用。"
 
-#: ../roundup/scripts/roundup_server.py:913
+#: ../roundup/scripts/roundup_server.py:915
 #, fuzzy
 msgid ""
 " -c <Command>  Windows Service options.\n"
@@ -2772,7 +2787,7 @@
 "               變量上配置一個tracker。這個選項與其經選項是互斥的。打入\n"
 "               \"roundup-server -c help\" 來瞭解Windows服務的規範。"
 
-#: ../roundup/scripts/roundup_server.py:920
+#: ../roundup/scripts/roundup_server.py:922
 msgid ""
 " -u <UID>      runs the Roundup web server as this UID\n"
 " -g <GID>      runs the Roundup web server as this GID\n"
@@ -2786,7 +2801,7 @@
 "去。\n"
 "               如果使用了 -d 選項,則 -l 選項 *必須* 要指定。"
 
-#: ../roundup/scripts/roundup_server.py:927
+#: ../roundup/scripts/roundup_server.py:929
 #, fuzzy, python-format
 msgid ""
 "\n"
@@ -2882,20 +2897,20 @@
 "   意數量的 name=home 對。要確保 name 部分不能包括任何非url安全的\n"
 "   字符,像空格,因為它們會把IE搞亂。\n"
 
-#: ../roundup/scripts/roundup_server.py:1103
+#: ../roundup/scripts/roundup_server.py:1105
 msgid "Instances must be name=home"
 msgstr "實例必須是 實例名=實例路徑"
 
-#: ../roundup/scripts/roundup_server.py:1117
+#: ../roundup/scripts/roundup_server.py:1119
 #, python-format
 msgid "Configuration saved to %s"
 msgstr "配置保存到 %s"
 
-#: ../roundup/scripts/roundup_server.py:1135
+#: ../roundup/scripts/roundup_server.py:1137
 msgid "Sorry, you can't run the server as a daemon on this Operating System"
 msgstr "抱歉,在這個操作系統上不能以守護進程的方式來運行服務"
 
-#: ../roundup/scripts/roundup_server.py:1155
+#: ../roundup/scripts/roundup_server.py:1157
 #, python-format
 msgid "Roundup server started on %(HOST)s:%(PORT)s"
 msgstr "Roundup server 啟動於 %(HOST)s:%(PORT)s"
--- a/roundup/admin.py	Wed Mar 01 10:43:54 2023 -0500
+++ b/roundup/admin.py	Wed Mar 01 10:51:37 2023 -0500
@@ -566,12 +566,38 @@
         """
         if len(args) < 1:
             raise UsageError(_('Not enough arguments supplied'))
+
         if update:
             # load current config for writing
             config = CoreConfig(self.tracker_home)
+
+            # change config to update settings to new defaults
+            # where prior defaults were chosen
+            default_ppdr = config._get_option(
+                'PASSWORD_PBKDF2_DEFAULT_ROUNDS')._default_value
+
+            print("")  # put a blank line before feedback
+            if config.PASSWORD_PBKDF2_DEFAULT_ROUNDS in [10000]:
+                print(_("Changing option\n"
+                        "   'password_pbkdf2_default_rounds'\n"
+                        "from old default of %(old_number)s to new "
+                        "default of %(new_number)s.") % {
+                            "old_number":
+                            config.PASSWORD_PBKDF2_DEFAULT_ROUNDS,
+                            "new_number": default_ppdr
+                        }
+                )
+                config.PASSWORD_PBKDF2_DEFAULT_ROUNDS = default_ppdr
+
+            if config.PASSWORD_PBKDF2_DEFAULT_ROUNDS < default_ppdr:
+                print(_("Update "
+                        "'password_pbkdf2_default_rounds'"
+                        "to a number equal to or larger\nthan %s.") %
+                      default_ppdr)
         else:
             # generate default config
             config = CoreConfig()
+
         config.save(args[0])
 
     def do_updateconfig(self, args):

Roundup Issue Tracker: http://roundup-tracker.org/