changeset 8109:cd642eaf358e

fix: remove duplicate source sring after fix to admin.py. Update to new roundup.pot extraction
author John Rouillard <rouilj@ieee.org>
date Wed, 07 Aug 2024 21:52:58 -0400
parents 78bca158e1e6
children 1f0038623c33
files 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/nb.po locale/roundup.pot locale/ru.po locale/zh_CN.po locale/zh_TW.po
diffstat 13 files changed, 4757 insertions(+), 3848 deletions(-) [+]
line wrap: on
line diff
--- a/locale/de.po	Wed Aug 07 21:43:40 2024 -0400
+++ b/locale/de.po	Wed Aug 07 21:52:58 2024 -0400
@@ -7,7 +7,7 @@
 msgstr ""
 "Project-Id-Version: Roundup 2.4.0\n"
 "Report-Msgid-Bugs-To: roundup-devel@lists.sourceforge.net\n"
-"POT-Creation-Date: 2024-07-09 15:12-0400\n"
+"POT-Creation-Date: 2024-08-07 21:43-0400\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"
@@ -30,19 +30,19 @@
 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:130
+#: ../roundup/admin.py:131
 msgid ""
 "Have 'display designator[,designator*]' show header inside\n"
 "      []'s before items. Includes retired/active status.\n"
 msgstr ""
 
-#: ../roundup/admin.py:134
+#: ../roundup/admin.py:135
 msgid ""
 "Have 'display designator' and 'specification class' show\n"
 "      protected fields: creator, id etc.\n"
 msgstr ""
 
-#: ../roundup/admin.py:138
+#: ../roundup/admin.py:139
 msgid ""
 "Controls history options. It is a bitstring where setting\n"
 "      the bit disables the feature. A value of 0 (default)\n"
@@ -53,51 +53,51 @@
 "      history.\n"
 msgstr ""
 
-#: ../roundup/admin.py:147
+#: ../roundup/admin.py:148
 msgid ""
 "Set the number of lines of history to keep for this session.\n"
 "      -1 is infinite.\n"
 msgstr ""
 
-#: ../roundup/admin.py:151
+#: ../roundup/admin.py:152
 msgid "Set indexer to use when running 'reindex' NYI\n"
 msgstr ""
 
-#: ../roundup/admin.py:154
+#: ../roundup/admin.py:155
 msgid "Force reopening of tracker when running each command.\n"
 msgstr ""
 
-#: ../roundup/admin.py:157
+#: ../roundup/admin.py:158
 msgid ""
 "set the number of rows imported before a database commit is\n"
 "      done. Used only for imports on PostgreSQL.\n"
 msgstr ""
 
-#: ../roundup/admin.py:159
+#: ../roundup/admin.py:160
 msgid "Show retired items in table, list etc. One of 'no', 'only', 'both'\n"
 msgstr ""
 
-#: ../roundup/admin.py:161
-msgid "internal mapping for show_retired.\n"
-msgstr ""
-
 #: ../roundup/admin.py:162
+msgid "internal mapping for show_retired.\n"
+msgstr ""
+
+#: ../roundup/admin.py:163
 msgid "Enable verbose output: tracing, descriptions...\n"
 msgstr ""
 
-#: ../roundup/admin.py:174 ../roundup/admin.py:1179 ../roundup/admin.py:1824
-#: ../roundup/admin.py:1856 ../roundup/admin.py:174:1179 :1824:1856
+#: ../roundup/admin.py:175 ../roundup/admin.py:1188 ../roundup/admin.py:1836
+#: ../roundup/admin.py:1868 ../roundup/admin.py:175:1188 :1836:1868
 #, python-format
 msgid "no such class \"%(classname)s\""
 msgstr "Die Klasse \"%(classname)s\" existiert nicht"
 
 # ../roundup/admin.py:93 :97
-#: ../roundup/admin.py:187
+#: ../roundup/admin.py:188
 #, python-format
 msgid "argument \"%(arg)s\" not propname=value"
 msgstr "Der Parameter \"%(arg)s\" entspricht nicht dem Format Eigenschaft=Wert"
 
-#: ../roundup/admin.py:200
+#: ../roundup/admin.py:201
 #, python-format
 msgid ""
 "Problem: %(message)s\n"
@@ -106,7 +106,7 @@
 "Problem: %(message)s\n"
 "\n"
 
-#: ../roundup/admin.py:201
+#: ../roundup/admin.py:202
 #, fuzzy, python-format
 msgid ""
 "%(message)sUsage: roundup-admin [options] [<command> <arguments>]\n"
@@ -158,12 +158,12 @@
 " roundup-admin help <Befehl>              -- Hilfe zu einem Befehl anzeigen\n"
 " roundup-admin help all                   -- sämtliche Hilfen anzeigen\n"
 
-#: ../roundup/admin.py:230
+#: ../roundup/admin.py:231
 #, fuzzy
 msgid "Commands: "
 msgstr "Befehle:"
 
-#: ../roundup/admin.py:237
+#: ../roundup/admin.py:238
 msgid ""
 "Commands may be abbreviated as long as the abbreviation\n"
 "matches only one command, e.g. l == li == lis == list."
@@ -171,7 +171,7 @@
 "Befehle können abgekürzt werden, solange sie eindeutig bleiben, \n"
 "z.B. l == li == lis == list."
 
-#: ../roundup/admin.py:266
+#: ../roundup/admin.py:270
 #, fuzzy
 msgid ""
 "\n"
@@ -299,25 +299,25 @@
 "\n"
 "Befehlshilfe:\n"
 
-#: ../roundup/admin.py:330
+#: ../roundup/admin.py:334
 #, python-format
 msgid "%s:"
 msgstr "%s:"
 
 # ../roundup/admin.py:336 :382
-#: ../roundup/admin.py:435 ../roundup/admin.py:1384
-#: ../roundup/admin.py:435:1384
+#: ../roundup/admin.py:439 ../roundup/admin.py:1396
+#: ../roundup/admin.py:439:1396
 msgid "Templates:"
 msgstr "Vorlagen:"
 
 # ../roundup/admin.py:339 :393
-#: ../roundup/admin.py:438 ../roundup/admin.py:1394
-#: ../roundup/admin.py:438:1394
+#: ../roundup/admin.py:442 ../roundup/admin.py:1406
+#: ../roundup/admin.py:442:1406
 msgid "Back ends:"
 msgstr "Datenbanken:"
 
 #. noqa: ARG002
-#: ../roundup/admin.py:455
+#: ../roundup/admin.py:459
 msgid ""
 "Usage: commit\n"
 "        Commit changes made to the database during an interactive session.\n"
@@ -342,7 +342,7 @@
 "        geschrieben.\n"
 "        "
 
-#: ../roundup/admin.py:470
+#: ../roundup/admin.py:474
 msgid ""
 "Usage: create classname property=value ...\n"
 "        Create a new entry of a given class.\n"
@@ -362,46 +362,45 @@
 
 # ../roundup/admin.py:358 :483 :562 :612 :682 :703 :731 :802 :869 :940 :988
 # :1010 :1037 :1098 :1156
-#: ../roundup/admin.py:478 ../roundup/admin.py:552 ../roundup/admin.py:600
-#: ../roundup/admin.py:723 ../roundup/admin.py:796 ../roundup/admin.py:842
-#: ../roundup/admin.py:893 ../roundup/admin.py:990 ../roundup/admin.py:1206
-#: ../roundup/admin.py:1357 ../roundup/admin.py:1485 ../roundup/admin.py:1571
-#: ../roundup/admin.py:1691 ../roundup/admin.py:1814 ../roundup/admin.py:1846
-#: ../roundup/admin.py:1962 ../roundup/admin.py:2016 ../roundup/admin.py:2064
-#: ../roundup/admin.py:478:552 :1206:1357:1485 :1571:1691 :1814:1846 :1962:2016
-#: :2064 :600:723 :796:842 :893:990
+#: ../roundup/admin.py:482 ../roundup/admin.py:555 ../roundup/admin.py:606
+#: ../roundup/admin.py:733 ../roundup/admin.py:806 ../roundup/admin.py:851
+#: ../roundup/admin.py:902 ../roundup/admin.py:999 ../roundup/admin.py:1216
+#: ../roundup/admin.py:1369 ../roundup/admin.py:1497 ../roundup/admin.py:1580
+#: ../roundup/admin.py:1703 ../roundup/admin.py:1826 ../roundup/admin.py:1858
+#: ../roundup/admin.py:1974 ../roundup/admin.py:2028 ../roundup/admin.py:2076
+#: ../roundup/admin.py:482:555 :1216:1369:1497 :1580:1703 :1826:1858 :1974:2028
+#: :2076 :606:733 :806:851 :902:999
 msgid "Not enough arguments supplied"
 msgstr "Zu wenig Parameter übergeben"
 
-#: ../roundup/admin.py:498
+#: ../roundup/admin.py:502
 #, python-format
 msgid "%(propname)s (Password): "
 msgstr "%(propname)s (Passwort):"
 
-#: ../roundup/admin.py:501
+#: ../roundup/admin.py:505
 #, python-format
 msgid "   %(propname)s (Again): "
 msgstr "   %(propname)s (Wiederholen):"
 
-#: ../roundup/admin.py:505
+#: ../roundup/admin.py:509
 msgid "Sorry, try again..."
 msgstr "Bitte erneut versuchen..."
 
-#: ../roundup/admin.py:510
+#: ../roundup/admin.py:514
 #, python-format
 msgid "%(propname)s (%(proptype)s): "
 msgstr "%(propname)s (%(proptype)s): "
 
-#: ../roundup/admin.py:529
+#: ../roundup/admin.py:533
 #, python-format
 msgid "you must provide the \"%(propname)s\" property."
 msgstr "Sie müssen einen Wert für \"%(propname)s\" angeben."
 
-#: ../roundup/admin.py:541
+#: ../roundup/admin.py:545
 #, fuzzy
 msgid ""
 "Usage: display designator[,designator]*\n"
-"\n"
 "        Show the property values for the given node(s).\n"
 "\n"
 "        A designator is a classname and a nodeid concatenated,\n"
@@ -418,25 +417,29 @@
 "        gewählten Eintrags an.\n"
 "        "
 
-#: ../roundup/admin.py:583
+#: ../roundup/admin.py:586
 #, fuzzy, python-format
 msgid "%(protected)s%(key)s: %(value)s"
 msgstr "%(protected)s%(key)s: %(value)s"
 
 #. grab the directory to export to
-#: ../roundup/admin.py:586
+#: ../roundup/admin.py:589
+#, fuzzy
 msgid ""
 "Usage: export [[-]class[,class]] export_dir\n"
-"        Export the database to colon-separated-value files.\n"
+"        Export the database and file content.\n"
+"\n"
+"        Database content is exported to colon separated files.\n"
 "        To exclude the files (e.g. for the msg or file class),\n"
 "        use the exporttables command.\n"
 "\n"
 "        Optionally limit the export to just the named classes\n"
-"        or exclude the named classes, if the 1st argument starts with '-'.\n"
+"        or exclude the named classes, if the 1st argument\n"
+"        starts with '-'.\n"
 "\n"
 "        This action exports the current data from the database into\n"
 "        colon-separated-value files that are placed in the nominated\n"
-"        destination directory.\n"
+"        export_dir directory.\n"
 "        "
 msgstr ""
 "Verwendung: export [Klasse[,Klasse]] Exportverzeichnis\n"
@@ -453,19 +456,23 @@
 "        Exportverzeichnis geschrieben.\n"
 "        "
 
-#: ../roundup/admin.py:698
+#: ../roundup/admin.py:704
+#, fuzzy
 msgid ""
 "Usage: exporttables [[-]class[,class]] export_dir\n"
-"        Export the database to colon-separated-value files, excluding the\n"
-"        files below $TRACKER_HOME/db/files/ (which can be archived "
-"separately).\n"
+"        Export only the database to files, no file content.\n"
+"\n"
+"        Database content is exported to colon separated files.\n"
+"        The files below $TRACKER_HOME/db/files/ (which can be\n"
+"        archived separately) are not part of the export.\n"
 "        To include the files, use the export command.\n"
 "\n"
 "        Optionally limit the export to just the named classes\n"
-"        or exclude the named classes, if the 1st argument starts with '-'.\n"
+"        or exclude the named classes, if the 1st argument\n"
+"        starts with '-'.\n"
 "\n"
 "        This action exports the current data from the database into\n"
-"        colon-separated-value files that are placed in the nominated\n"
+"        colon-separated-value files that are placed in the export_dir\n"
 "        destination directory.\n"
 "        "
 msgstr ""
@@ -484,7 +491,7 @@
 "        Exportverzeichnis geschrieben.\n"
 "        "
 
-#: ../roundup/admin.py:713
+#: ../roundup/admin.py:723
 #, fuzzy
 msgid ""
 "Usage: filter classname propname=value ...\n"
@@ -506,20 +513,20 @@
 "        "
 
 # ../roundup/admin.py:631 :669 :822 :834 :888
-#: ../roundup/admin.py:754
+#: ../roundup/admin.py:764
 #, fuzzy, python-format
 msgid "Class %(curclassname)s has no property %(pn)s in %(propname)s."
 msgstr "Die Klasse \"%(curclassname)s\" hat keine Eigenschaft \"%(propname)s\""
 
 # ../roundup/admin.py:631 :669 :822 :834 :888
-#: ../roundup/admin.py:781 ../roundup/admin.py:830 ../roundup/admin.py:1505
-#: ../roundup/admin.py:1518 ../roundup/admin.py:2086
-#: ../roundup/admin.py:781:830 :1505:1518:2086
+#: ../roundup/admin.py:791 ../roundup/admin.py:840 ../roundup/admin.py:1517
+#: ../roundup/admin.py:1530 ../roundup/admin.py:2098
+#: ../roundup/admin.py:791:840 :1517:1530:2098
 #, python-format
 msgid "%(classname)s has no property \"%(propname)s\""
 msgstr "Die Klasse \"%(classname)s\" hat keine Eigenschaft \"%(propname)s\""
 
-#: ../roundup/admin.py:788
+#: ../roundup/admin.py:798
 msgid ""
 "Usage: find classname propname=value ...\n"
 "        Find the nodes of the given class with a given link property value.\n"
@@ -537,12 +544,11 @@
 "        als ID oder als Bezeichner (\"msg23\") spezifiziert werden.\n"
 "        "
 
-#: ../roundup/admin.py:837
+#: ../roundup/admin.py:847
 #, fuzzy
 msgid ""
-"Usage: genconfig <filename>\n"
-"        Generate a new tracker config file (ini style) with default\n"
-"        values in <filename>.\n"
+"Usage: genconfig filename\n"
+"        Create a new tracker config file with default values in filename.\n"
 "        "
 msgstr ""
 "Verwendung: genconfig <filename>\n"
@@ -550,7 +556,7 @@
 "        Standardwerten in die Datei <filename>.\n"
 "        "
 
-#: ../roundup/admin.py:855
+#: ../roundup/admin.py:864
 #, python-format
 msgid ""
 "Changing option\n"
@@ -558,20 +564,20 @@
 "from old default of %(old_number)s to new default of %(new_number)s."
 msgstr ""
 
-#: ../roundup/admin.py:866
+#: ../roundup/admin.py:875
 #, python-format
 msgid ""
 "Update 'password_pbkdf2_default_rounds' to a number equal to or larger\n"
 "  than %s.\n"
 msgstr ""
 
-#: ../roundup/admin.py:873
+#: ../roundup/admin.py:882
 msgid ""
 "Check the rdbms mysql_* settings. Your charset and collations may need\n"
 "  to be changed. See upgrading instructions.\n"
 msgstr ""
 
-#: ../roundup/admin.py:883
+#: ../roundup/admin.py:892
 #, fuzzy
 msgid ""
 "Usage: get property designator[,designator]*\n"
@@ -592,7 +598,7 @@
 "        "
 
 # ../roundup/admin.py:516 :531
-#: ../roundup/admin.py:916
+#: ../roundup/admin.py:925
 #, python-format
 msgid "property %s is not of type Multilink or Link so -d flag does not apply."
 msgstr ""
@@ -600,21 +606,21 @@
 "hier nicht ausgewertet."
 
 # ../roundup/admin.py:539 :951 :1000 :1022
-#: ../roundup/admin.py:933 ../roundup/admin.py:1181 ../roundup/admin.py:1858
-#: ../roundup/admin.py:933:1181:1858
+#: ../roundup/admin.py:942 ../roundup/admin.py:1190 ../roundup/admin.py:1842
+#: ../roundup/admin.py:1870 ../roundup/admin.py:942:1190 :1842:1870
 #, 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:936
+#: ../roundup/admin.py:945
 #, 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:941
+#: ../roundup/admin.py:950
 msgid ""
 "Usage: help topic\n"
 "        Give help about topic.\n"
@@ -634,12 +640,12 @@
 "        all       -- sämtlichen Hilfetext anzeigen\n"
 "        "
 
-#: ../roundup/admin.py:960
+#: ../roundup/admin.py:969
 #, python-format
 msgid "Sorry, no help for \"%(topic)s\""
 msgstr "Zum Thema \"%(topic)s\" existiert leider kein Hilfetext"
 
-#: ../roundup/admin.py:977
+#: ../roundup/admin.py:986
 #, fuzzy
 msgid ""
 "Usage: history designator [skipquiet] [raw]\n"
@@ -662,27 +668,27 @@
 "        kann zudem wiederverwendet werden.\n"
 "        "
 
-#: ../roundup/admin.py:1002
+#: ../roundup/admin.py:1011
 #, python-format
 msgid "Unexpected argument(s): %s. Expected 'skipquiet' or 'raw'."
 msgstr ""
 
-#: ../roundup/admin.py:1053
+#: ../roundup/admin.py:1062
 #, fuzzy
 msgid "removed"
 msgstr "verbergen"
 
-#: ../roundup/admin.py:1055
+#: ../roundup/admin.py:1064
 msgid "added"
 msgstr ""
 
-#: ../roundup/admin.py:1057
+#: ../roundup/admin.py:1066
 #, python-format
 msgid "Unknown history set operation '%s'. Expected +/-."
 msgstr ""
 
 #. .Hint added issue23 to superseder
-#: ../roundup/admin.py:1082
+#: ../roundup/admin.py:1091
 #, fuzzy, python-format
 msgid "added %(class)s%(item_id)s to %(propname)s"
 msgstr "Eigenschaft \"%(propname)s\" bei \"%(class)s %(item_id)s\" bearbeitet"
@@ -690,34 +696,36 @@
 #. .Hint read as: assignedto was admin(1)
 #. where assignedto is the property
 #. admin is the key name for value 1
-#: ../roundup/admin.py:1103
+#: ../roundup/admin.py:1112
 #, fuzzy, python-format
 msgid "%(prop)s was %(name)s(%(value)s)"
 msgstr "%(propname)s (%(proptype)s): "
 
-#: ../roundup/admin.py:1109 ../roundup/admin.py:1138
-#: ../roundup/admin.py:1109:1138
+#: ../roundup/admin.py:1118 ../roundup/admin.py:1147
+#: ../roundup/admin.py:1118:1147
 #, fuzzy, python-format
 msgid "%(prop)s was %(value)s"
 msgstr "%(prop)s: %(value)s"
 
-#: ../roundup/admin.py:1128
+#: ../roundup/admin.py:1137
 #, python-format
 msgid "%(prop)s was [%(value_list)s]"
 msgstr ""
 
 #. .Hint modified nosy: added demo(3)
-#: ../roundup/admin.py:1135
+#: ../roundup/admin.py:1144
 #, python-format
 msgid "modified %(prop)s: %(how)s"
 msgstr ""
 
-#: ../roundup/admin.py:1186
+#: ../roundup/admin.py:1195
+#, fuzzy
 msgid ""
 "Usage: import import_dir\n"
-"        Import a database from the directory containing CSV files,\n"
-"        two per class to import.\n"
-"\n"
+"        Import a database and file contents from the directory.\n"
+"\n"
+"        The directory should have the same format as one containing\n"
+"        the output of export. There are two files imported per class.\n"
 "        The files used in the import are:\n"
 "\n"
 "        <class>.csv\n"
@@ -756,16 +764,17 @@
 "        verbergen).\n"
 "        "
 
-#: ../roundup/admin.py:1276
+#: ../roundup/admin.py:1287
 msgid ""
 "Usage: importtables export_dir\n"
-"\n"
 "        This imports the database tables exported using exporttables.\n"
+"\n"
+"        It does not import the content of files like msgs and files.\n"
 "        "
 msgstr ""
 
 #. password
-#: ../roundup/admin.py:1283
+#: ../roundup/admin.py:1295
 msgid ""
 "Usage: initialise [adminpw]\n"
 "        Initialise a new Roundup tracker.\n"
@@ -783,23 +792,23 @@
 "        Die Funktion dbinit.init() wird aufgerufen\n"
 "        "
 
-#: ../roundup/admin.py:1297
+#: ../roundup/admin.py:1309
 msgid "Admin Password: "
 msgstr "Administratorpasswort: "
 
-#: ../roundup/admin.py:1298
+#: ../roundup/admin.py:1310
 msgid "       Confirm: "
 msgstr "  Wiederholen: "
 
-#: ../roundup/admin.py:1302
+#: ../roundup/admin.py:1314
 msgid "Instance home does not exist"
 msgstr "Tracker-Verzeichnis existiert nicht"
 
-#: ../roundup/admin.py:1306
+#: ../roundup/admin.py:1318
 msgid "Instance has not been installed"
 msgstr "Tracker-Instanz wurde nicht installiert"
 
-#: ../roundup/admin.py:1314
+#: ../roundup/admin.py:1326
 msgid ""
 "WARNING: The database is already initialised!\n"
 "If you re-initialise it, you will lose all the data!\n"
@@ -809,7 +818,7 @@
 "Eine erneute Initialisierung löscht sämtliche Daten!\n"
 "Wirklich löschen? Y/N: "
 
-#: ../roundup/admin.py:1334
+#: ../roundup/admin.py:1346
 msgid ""
 "Usage: install [template [backend [key=val[,key=val]]]]\n"
 "        Install a new Roundup tracker.\n"
@@ -862,12 +871,12 @@
 "        Siehe auch unter dem Hilfethema \"initopts\".\n"
 "        "
 
-#: ../roundup/admin.py:1363
+#: ../roundup/admin.py:1375
 #, python-format
 msgid "Instance home parent directory \"%(parent)s\" does not exist"
 msgstr "Das angegebene Tracker-Verzeichnis \"%(parent)s\" existiert nicht"
 
-#: ../roundup/admin.py:1372
+#: ../roundup/admin.py:1384
 #, python-format
 msgid ""
 "WARNING: There appears to be a tracker in \"%(tracker_home)s\"!\n"
@@ -878,22 +887,22 @@
 "installiert zu sein! Eine erneute Installation löscht sämtliche Daten!\n"
 "Wirklich löschen? Y/N: "
 
-#: ../roundup/admin.py:1385
+#: ../roundup/admin.py:1397
 #, fuzzy
 msgid "Select template"
 msgstr "Vorlagensatz auswählen [classic]:"
 
-#: ../roundup/admin.py:1395
+#: ../roundup/admin.py:1407
 #, fuzzy
 msgid "Select backend"
 msgstr "Datenbank auswählen [anydbm]"
 
-#: ../roundup/admin.py:1406
+#: ../roundup/admin.py:1418
 #, python-format
 msgid "Error in configuration settings: \"%s\""
 msgstr "Fehler in der Konfiguration: \"%s\""
 
-#: ../roundup/admin.py:1439
+#: ../roundup/admin.py:1451
 #, fuzzy, python-format
 msgid ""
 "\n"
@@ -905,11 +914,11 @@
 " Sie sollten nun die Konfigurationsdatei des Trackers bearbeiten:\n"
 "   %(config_file)s"
 
-#: ../roundup/admin.py:1449
+#: ../roundup/admin.py:1461
 msgid " ... at a minimum, you must set following options:"
 msgstr " ... passen sie zumindest folgende Optionen an:"
 
-#: ../roundup/admin.py:1454
+#: ../roundup/admin.py:1466
 #, python-format
 msgid ""
 "\n"
@@ -935,7 +944,7 @@
 " Anschließend MÜSSEN Sie \"roundup-admin initialise\" ausführen.\n"
 "---------------------------------------------------------------------------\n"
 
-#: ../roundup/admin.py:1470
+#: ../roundup/admin.py:1482
 msgid ""
 "Usage: list classname [property]\n"
 "        List the instances of a class.\n"
@@ -966,21 +975,20 @@
 "aufgelistet.\n"
 "        "
 
-#: ../roundup/admin.py:1483
+#: ../roundup/admin.py:1495
 msgid "Too many arguments supplied"
 msgstr "Sie haben zuviele Argumente übergeben"
 
-#: ../roundup/admin.py:1516
+#: ../roundup/admin.py:1528
 #, python-format
 msgid "%(nodeid)4s: %(value)s"
 msgstr "%(nodeid)4s: %(value)s"
 
 #. noqa: ARG002  - args unused
-#: ../roundup/admin.py:1523
+#: ../roundup/admin.py:1535
 #, fuzzy
 msgid ""
 "Usage: migrate\n"
-"\n"
 "        Update a tracker's database to be compatible with the Roundup\n"
 "        codebase.\n"
 "\n"
@@ -1020,22 +1028,21 @@
 "        es nicht nötig ist; also gewöhnen Sie es sich einfach an.\n"
 "        "
 
-#: ../roundup/admin.py:1544
+#: ../roundup/admin.py:1555
 #, python-format
 msgid "Tracker updated to schema version %s."
 msgstr ""
 
-#: ../roundup/admin.py:1548
+#: ../roundup/admin.py:1559
 #, fuzzy, python-format
 msgid "No migration action required. At schema version %s."
 msgstr "Keine Migration notwendig"
 
-#: ../roundup/admin.py:1553
+#: ../roundup/admin.py:1564
+#, fuzzy
 msgid ""
 "Usage: pack period | date\n"
-"\n"
-"        Remove journal entries older than a period of time specified or\n"
-"        before a certain date.\n"
+"        Remove journal entries older than the date/period.\n"
 "\n"
 "        A period is specified using the suffixes \"y\", \"m\", and \"d\". "
 "The\n"
@@ -1069,15 +1076,16 @@
 "\n"
 "        "
 
-#: ../roundup/admin.py:1581
+#: ../roundup/admin.py:1590
 msgid "Invalid format"
 msgstr "Ungültiges Format"
 
-#: ../roundup/admin.py:1592
+#: ../roundup/admin.py:1601
 msgid ""
 "Usage: perftest [mode] [arguments]*\n"
-"\n"
-"        Time operations in Roundup. Supported arguments:\n"
+"        Time operations in Roundup.\n"
+"\n"
+"        Supported arguments:\n"
 "\n"
 "            [password] [rounds=<integer>] [scheme=<scheme>]\n"
 "\n"
@@ -1090,28 +1098,30 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1625
+#: ../roundup/admin.py:1635
 msgid "Invalid 'rounds'. Must be larger than 999."
 msgstr ""
 
-#: ../roundup/admin.py:1629
+#: ../roundup/admin.py:1639
 #, python-format
 msgid "Invalid 'rounds'. It must be an integer not: %s"
 msgstr ""
 
-#: ../roundup/admin.py:1656
+#: ../roundup/admin.py:1666
 msgid "scheme does not support rounds."
 msgstr ""
 
-#: ../roundup/admin.py:1659
+#: ../roundup/admin.py:1669
 #, python-format
 msgid "Hash time: %(time)0.9f seconds, scheme: %(scheme)s, rounds: %(rounds)s"
 msgstr ""
 
-#: ../roundup/admin.py:1665
+#: ../roundup/admin.py:1675
 msgid ""
 "Usage: pragma setting=value | 'list'\n"
-"        Set internal admin settings to a value. E.G.\n"
+"        Set internal admin settings to a value.\n"
+"\n"
+"        For example:\n"
 "\n"
 "            pragma verbose=True\n"
 "            pragma verbose=yes\n"
@@ -1135,49 +1145,49 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1698
+#: ../roundup/admin.py:1710
 #, python-format
 msgid "Argument must be setting=value, was given: %s."
 msgstr ""
 
-#: ../roundup/admin.py:1701
+#: ../roundup/admin.py:1713
 msgid "Current settings and values (NYI - not yet implemented):"
 msgstr ""
 
-#: ../roundup/admin.py:1712
+#: ../roundup/admin.py:1724
 msgid ""
 "      Help for this pragma is missing. Please report it to the Roundup "
 "project.\n"
 msgstr ""
 
-#: ../roundup/admin.py:1718
+#: ../roundup/admin.py:1730
 #, fuzzy, python-format
 msgid "Unknown setting %s. Try \"pragma list\"."
 msgstr "Benutzername unbekannt"
 
-#: ../roundup/admin.py:1728
+#: ../roundup/admin.py:1740
 #, python-format
 msgid "Incorrect value for boolean setting %(setting)s: %(value)s."
 msgstr ""
 
-#: ../roundup/admin.py:1735
+#: ../roundup/admin.py:1747
 #, python-format
 msgid "Incorrect value for integer setting %(setting)s: %(value)s."
 msgstr ""
 
-#: ../roundup/admin.py:1742
+#: ../roundup/admin.py:1754
 #, python-format
 msgid ""
 "Incorrect value for setting %(setting)s: %(value)s. Should be no, both, or "
 "only."
 msgstr ""
 
-#: ../roundup/admin.py:1752
+#: ../roundup/admin.py:1764
 #, python-format
 msgid "Internal error: pragma can not handle values of type: %s"
 msgstr ""
 
-#: ../roundup/admin.py:1761
+#: ../roundup/admin.py:1773
 #, fuzzy
 msgid ""
 "Usage: reindex [classname|classname:#-#|designator]*\n"
@@ -1201,17 +1211,17 @@
 "        normalerweise automatisch.\n"
 "        "
 
-#: ../roundup/admin.py:1783
+#: ../roundup/admin.py:1795
 #, python-format
 msgid "no such item \"%(designator)s\""
 msgstr "Der Eintrag \"%(designator)s\" existiert nicht"
 
-#: ../roundup/admin.py:1793
+#: ../roundup/admin.py:1805
 #, fuzzy, python-format
 msgid "no such item \"%(class)s%(id)s\""
 msgstr "Der Eintrag \"%(class)s%(id)s\" existiert nicht"
 
-#: ../roundup/admin.py:1805
+#: ../roundup/admin.py:1817
 #, fuzzy
 msgid ""
 "Usage: restore designator[,designator]*\n"
@@ -1230,14 +1240,7 @@
 "        für die Benutzer wieder sichtbar.\n"
 "        "
 
-# ../roundup/admin.py:539 :951 :1000 :1022
-#: ../roundup/admin.py:1830
-#, fuzzy
-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:1836
+#: ../roundup/admin.py:1848
 #, fuzzy
 msgid ""
 "Usage: retire designator[,designator]*\n"
@@ -1259,7 +1262,7 @@
 "        "
 
 #. noqa: ARG002 - args unused
-#: ../roundup/admin.py:1864
+#: ../roundup/admin.py:1876
 msgid ""
 "Usage: rollback\n"
 "        Undo all changes that are pending commit to the database.\n"
@@ -1278,61 +1281,61 @@
 "        verworfen.\n"
 "        "
 
-#: ../roundup/admin.py:1877
+#: ../roundup/admin.py:1889
 msgid ""
 "Usage: security [Role name]\n"
-"\n"
-"             Display the Permissions available to one or all Roles.\n"
-"             Also validates that any properties defined in a\n"
-"             permission are valid.\n"
-"\n"
-"             Run this after changing your permissions to catch\n"
-"             typos.\n"
+"        Display the Permissions available to one or all Roles.\n"
+"\n"
+"        Also validates that any properties defined in a\n"
+"        permission are valid.\n"
+"\n"
+"        Run this after changing your permissions to catch\n"
+"        typos.\n"
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1892
+#: ../roundup/admin.py:1904
 #, fuzzy, python-format
 msgid "No such Role \"%(role)s\"\n"
 msgstr "Die Rolle \"%(role)s\" existiert nicht "
 
-#: ../roundup/admin.py:1898
+#: ../roundup/admin.py:1910
 #, 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:1901
+#: ../roundup/admin.py:1913
 #, 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:1905
+#: ../roundup/admin.py:1917
 #, 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:1907
+#: ../roundup/admin.py:1919
 #, 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:1910
+#: ../roundup/admin.py:1922
 #, fuzzy, python-format
 msgid "Role \"%(name)s\":\n"
 msgstr "Rolle \"%(name)s\":"
 
-#: ../roundup/admin.py:1916
+#: ../roundup/admin.py:1928
 #, fuzzy
 msgid " %(description)s (%(name)s for \"%(klass)s\""
 msgstr "%(description)s (%(name)s einzig für \"%(klass)s\")"
 
-#: ../roundup/admin.py:1916
+#: ../roundup/admin.py:1928
 #, 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:1929
+#: ../roundup/admin.py:1941
 #, python-format
 msgid ""
 "\n"
@@ -1340,17 +1343,17 @@
 "\n"
 msgstr ""
 
-#: ../roundup/admin.py:1935
+#: ../roundup/admin.py:1947
 #, 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:1938
+#: ../roundup/admin.py:1950
 #, fuzzy, python-format
 msgid " %(description)s (%(name)s)\n"
 msgstr " %(description)s (%(name)s)"
 
-#: ../roundup/admin.py:1942
+#: ../roundup/admin.py:1954
 #, fuzzy
 msgid ""
 "Usage: set items property=value [property=value ...]\n"
@@ -1387,7 +1390,7 @@
 "(\"1,2,3\").\n"
 "        "
 
-#: ../roundup/admin.py:2010
+#: ../roundup/admin.py:2022
 msgid ""
 "Usage: specification classname\n"
 "        Show the properties for a classname.\n"
@@ -1401,17 +1404,17 @@
 "        Zeigt sämtliche Eigenschaften der Klasse auf.\n"
 "        "
 
-#: ../roundup/admin.py:2029
+#: ../roundup/admin.py:2041
 #, fuzzy, python-format
 msgid "%(key)s: %(value)s (key property)\n"
 msgstr "%(key)s: %(value)s (Schlüsseleigenschaft)"
 
-#: ../roundup/admin.py:2032
+#: ../roundup/admin.py:2044
 #, fuzzy, python-format
 msgid "%(key)s: %(value)s\n"
 msgstr "%(key)s: %(value)s"
 
-#: ../roundup/admin.py:2035
+#: ../roundup/admin.py:2047
 msgid ""
 "Usage: table classname [property[,property]*]\n"
 "        List the instances of a class in tabular form.\n"
@@ -1474,17 +1477,17 @@
 "\n"
 "        "
 
-#: ../roundup/admin.py:2081
+#: ../roundup/admin.py:2093
 #, python-format
 msgid "\"%(spec)s\" not name:width"
 msgstr "\"%(spec)s\" entspricht nicht dem Format Eigenschaft:Breite"
 
-#: ../roundup/admin.py:2103
+#: ../roundup/admin.py:2115
 #, python-format
 msgid "\"%(spec)s\" does not have an integer width: \"%(width)s\""
 msgstr ""
 
-#: ../roundup/admin.py:2139
+#: ../roundup/admin.py:2151
 msgid ""
 "Usage: templates [trace_search]\n"
 "        List templates and their installed directories.\n"
@@ -1494,13 +1497,14 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:2167
+#: ../roundup/admin.py:2179
 #, fuzzy
 msgid ""
 "Usage: updateconfig <filename>\n"
-"        Generate an updated tracker config file (ini style) in\n"
-"        <filename>. Use current settings from existing roundup\n"
-"        tracker in tracker home.\n"
+"        Merge existing tracker config with new settings.\n"
+"\n"
+"        Output the updated config file to <filename>. Use current\n"
+"        settings from existing roundup tracker in tracker home.\n"
 "        "
 msgstr ""
 "Verwendung: genconfig <filename>\n"
@@ -1509,34 +1513,34 @@
 "        "
 
 # ../roundup/cgi/actions.py:546 :556
-#: ../roundup/admin.py:2175 ../roundup/cgi/actions.py:886
+#: ../roundup/admin.py:2188 ../roundup/cgi/actions.py:886
 #: ../roundup/cgi/actions.py:897 ../roundup/cgi/actions.py:1099
 #: ../roundup/cgi/actions.py:1113 ../roundup/cgi/actions.py:886:897 :1099:1113
 #, python-format
 msgid "Error: %s"
 msgstr "Fehler: %s"
 
-#: ../roundup/admin.py:2207
+#: ../roundup/admin.py:2220
 #, 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:2213
+#: ../roundup/admin.py:2226
 #, python-format
 msgid "Multiple commands match \"%(command)s\": %(list)s"
 msgstr "Zur Abkürzung \"%(command)s\" passen mehrere Befehle: %(list)s"
 
-#: ../roundup/admin.py:2228
+#: ../roundup/admin.py:2241
 msgid "Enter tracker home: "
 msgstr "Tracker-Verzeichnis: "
 
-#: ../roundup/admin.py:2257 ../roundup/admin.py:2261
-#: ../roundup/admin.py:2257:2261
+#: ../roundup/admin.py:2270 ../roundup/admin.py:2274
+#: ../roundup/admin.py:2270:2274
 #, 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:2309
+#: ../roundup/admin.py:2322
 #, python-format
 msgid ""
 "Roundup %s ready for input.\n"
@@ -1545,15 +1549,15 @@
 "Roundup %s ist bereit.\n"
 "Schreiben Sie \"help\", um zur Hilfe zu gelangen."
 
-#: ../roundup/admin.py:2342
+#: ../roundup/admin.py:2355
 msgid "Note: command history and editing not available"
 msgstr "Bemerkung: Befehlsverlauf/-bearbeitung möglicherweise nicht verfügbar"
 
-#: ../roundup/admin.py:2348
+#: ../roundup/admin.py:2361
 msgid "exit..."
 msgstr "beenden..."
 
-#: ../roundup/admin.py:2361
+#: ../roundup/admin.py:2374
 msgid "There are unsaved changes. Commit them (y/N)? "
 msgstr "Es gibt noch ungespeicherte Änderungen. Änderungen speichern (y/N)?"
 
@@ -2099,7 +2103,7 @@
 msgid "<em>undefined</em>"
 msgstr "<em>nicht definiert</em>"
 
-#: ../roundup/cgi/client.py:90
+#: ../roundup/cgi/client.py:105
 msgid ""
 "<html><head><title>An error has occurred</title></head>\n"
 "<body><h1>An error has occurred</h1>\n"
@@ -2113,148 +2117,148 @@
 "Admistratoren wurden benachrichtigt.</p>\n"
 "</body></html>"
 
-#: ../roundup/cgi/client.py:702 ../roundup/cgi/client.py:1622
-#: ../roundup/cgi/client.py:702:1622
+#: ../roundup/cgi/client.py:717 ../roundup/cgi/client.py:1635
+#: ../roundup/cgi/client.py:717:1635
 msgid "Required Header Missing"
 msgstr ""
 
-#: ../roundup/cgi/client.py:704
+#: ../roundup/cgi/client.py:719
 #, 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:956
+#: ../roundup/cgi/client.py:971
 msgid "Form Error: "
 msgstr "Formular-Fehler: "
 
-#: ../roundup/cgi/client.py:1049
+#: ../roundup/cgi/client.py:1064
 #, python-format
 msgid "Unrecognized charset: %r"
 msgstr "Zeichensatz nicht erkannt: %r"
 
-#: ../roundup/cgi/client.py:1318 ../roundup/cgi/client.py:2281
-#: ../roundup/cgi/client.py:1318:2281
+#: ../roundup/cgi/client.py:1331 ../roundup/cgi/client.py:2294
+#: ../roundup/cgi/client.py:1331:2294
 msgid "broken form: multiple @action values submitted"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1335
+#: ../roundup/cgi/client.py:1348
 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:1483
+#: ../roundup/cgi/client.py:1496
 msgid "Referer header not available."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1487
+#: ../roundup/cgi/client.py:1500
 #, python-format
 msgid "csrf key used with wrong method from: %s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1516
+#: ../roundup/cgi/client.py:1529
 #, python-format
 msgid "csrf header %(header)s required but missing for user%(userid)s."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1520
-#, python-format
-msgid "Missing header: %s"
-msgstr ""
-
-#: ../roundup/cgi/client.py:1528
-#, python-format
-msgid "csrf Referer header check failed for user%(userid)s. Value=%(referer)s"
-msgstr ""
-
 #: ../roundup/cgi/client.py:1533
+#, python-format
+msgid "Missing header: %s"
+msgstr ""
+
+#: ../roundup/cgi/client.py:1541
+#, python-format
+msgid "csrf Referer header check failed for user%(userid)s. Value=%(referer)s"
+msgstr ""
+
+#: ../roundup/cgi/client.py:1546
 #, fuzzy, python-format
 msgid "Invalid Referer: %s"
 msgstr "Ungültiger Benutzername %s"
 
-#: ../roundup/cgi/client.py:1548
+#: ../roundup/cgi/client.py:1561
 #, python-format
 msgid "csrf Origin header check failed for user%(userid)s. Value=%(origin)s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1553
+#: ../roundup/cgi/client.py:1566
 #, fuzzy, python-format
 msgid "Invalid Origin %s"
 msgstr "Ungültiger Benutzername %s"
 
-#: ../roundup/cgi/client.py:1567
+#: ../roundup/cgi/client.py:1580
 #, python-format
 msgid ""
 "csrf X-FORWARDED-HOST header check failed for user%(userid)s. Value=%(host)s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1573
+#: ../roundup/cgi/client.py:1586
 #, python-format
 msgid "Invalid X-FORWARDED-HOST %s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1592
+#: ../roundup/cgi/client.py:1605
 #, python-format
 msgid "csrf HOST header check failed for user%(userid)s. Value=%(host)s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1597
+#: ../roundup/cgi/client.py:1610
 #, fuzzy, python-format
 msgid "Invalid HOST %s"
 msgstr "Ungültige Anforderung %s"
 
-#: ../roundup/cgi/client.py:1605
+#: ../roundup/cgi/client.py:1618
 msgid "Csrf: unable to verify sufficient headers"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1606
-msgid "Unable to verify sufficient headers"
-msgstr ""
-
 #: ../roundup/cgi/client.py:1619
+msgid "Unable to verify sufficient headers"
+msgstr ""
+
+#: ../roundup/cgi/client.py:1632
 #, python-format
 msgid "csrf X-REQUESTED-WITH xmlrpc required header check failed for user%s."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1660
+#: ../roundup/cgi/client.py:1673
 #, python-format
 msgid "Required csrf field missing for user%s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1662 ../roundup/cgi/client.py:1689
-#: ../roundup/cgi/client.py:1706 ../roundup/cgi/client.py:1662:1689:1706
+#: ../roundup/cgi/client.py:1675 ../roundup/cgi/client.py:1702
+#: ../roundup/cgi/client.py:1719 ../roundup/cgi/client.py:1675:1702:1719
 msgid ""
 "We can't validate your session (csrf failure). Re-enter any unsaved data and "
 "try again."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1666
+#: ../roundup/cgi/client.py:1679
 #, python-format
 msgid "csrf field not supplied by user%s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1678
+#: ../roundup/cgi/client.py:1691
 #, 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:1696
+#: ../roundup/cgi/client.py:1709
 #, 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:1888
+#: ../roundup/cgi/client.py:1901
 msgid "You are not allowed to view this file."
 msgstr "Sie sind nicht berechtigt, diese Seite anzuzeigen."
 
-#: ../roundup/cgi/client.py:2159
+#: ../roundup/cgi/client.py:2172
 #, 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:2163
+#: ../roundup/cgi/client.py:2176
 #, python-format
 msgid ""
 "%(starttag)sCache hits: %(cache_hits)d, misses %(cache_misses)d. Loading "
@@ -2263,7 +2267,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:2703
+#: ../roundup/cgi/client.py:2716
 #, python-format
 msgid ""
 "Cache failure: compressed file %(compressed)s is older than its source file "
@@ -2329,72 +2333,72 @@
 "Die Eigenschaften \"%(property)s\" müssen für die Klasse \"%(class)s\" "
 "angegeben werden"
 
-#: ../roundup/cgi/templating.py:277
+#: ../roundup/cgi/templating.py:278
 #, python-format
 msgid "You are not allowed to %(action)s items of class %(class)s"
 msgstr ""
 "Sie sind nicht berechtigt, die Aktion  \"%(action)s\" auf Einträge der "
 "Klasse \"%(class)s\" anzuwenden"
 
-#: ../roundup/cgi/templating.py:914
+#: ../roundup/cgi/templating.py:916
 msgid "(list)"
 msgstr "(Liste)"
 
-#: ../roundup/cgi/templating.py:989
+#: ../roundup/cgi/templating.py:991
 msgid "Submit New Entry"
 msgstr "Eintrag speichern"
 
-#: ../roundup/cgi/templating.py:1011 ../roundup/cgi/templating.py:1187
-#: ../roundup/cgi/templating.py:1822 ../roundup/cgi/templating.py:1853
-#: ../roundup/cgi/templating.py:1874 ../roundup/cgi/templating.py:1912
-#: ../roundup/cgi/templating.py:1965 ../roundup/cgi/templating.py:1989
-#: ../roundup/cgi/templating.py:1996 ../roundup/cgi/templating.py:2033
-#: ../roundup/cgi/templating.py:2086 ../roundup/cgi/templating.py:2119
-#: ../roundup/cgi/templating.py:2214 ../roundup/cgi/templating.py:2235
-#: ../roundup/cgi/templating.py:2326 ../roundup/cgi/templating.py:2346
-#: ../roundup/cgi/templating.py:2368 ../roundup/cgi/templating.py:2411
-#: ../roundup/cgi/templating.py:2421 ../roundup/cgi/templating.py:2486
-#: ../roundup/cgi/templating.py:2789 ../roundup/cgi/templating.py:1011:1187
-#: :1822:1853 :1874:1912 :1965:1989 :1996:2033 :2086:2119 :2214:2235 :2326:2346
-#: :2368:2411 :2421:2486:2789
+#: ../roundup/cgi/templating.py:1013 ../roundup/cgi/templating.py:1189
+#: ../roundup/cgi/templating.py:1824 ../roundup/cgi/templating.py:1855
+#: ../roundup/cgi/templating.py:1876 ../roundup/cgi/templating.py:1914
+#: ../roundup/cgi/templating.py:1967 ../roundup/cgi/templating.py:1991
+#: ../roundup/cgi/templating.py:1998 ../roundup/cgi/templating.py:2035
+#: ../roundup/cgi/templating.py:2088 ../roundup/cgi/templating.py:2121
+#: ../roundup/cgi/templating.py:2216 ../roundup/cgi/templating.py:2237
+#: ../roundup/cgi/templating.py:2328 ../roundup/cgi/templating.py:2348
+#: ../roundup/cgi/templating.py:2370 ../roundup/cgi/templating.py:2413
+#: ../roundup/cgi/templating.py:2423 ../roundup/cgi/templating.py:2488
+#: ../roundup/cgi/templating.py:2791 ../roundup/cgi/templating.py:1013:1189
+#: :1824:1855 :1876:1914 :1967:1991 :1998:2035 :2088:2121 :2216:2237 :2328:2348
+#: :2370:2413 :2423:2488:2791
 msgid "[hidden]"
 msgstr "[verborgen]"
 
-#: ../roundup/cgi/templating.py:1012
+#: ../roundup/cgi/templating.py:1014
 msgid "New node - no history"
 msgstr "Neuer Eintrag - Noch kein Verlauf"
 
-#: ../roundup/cgi/templating.py:1152
+#: ../roundup/cgi/templating.py:1154
 msgid "Submit Changes"
 msgstr "Speichern"
 
-#: ../roundup/cgi/templating.py:1230
+#: ../roundup/cgi/templating.py:1232
 msgid "<em>The indicated property no longer exists</em>"
 msgstr "<em>Die gewählte Eigenschaft existiert nicht mehr</em>"
 
-#: ../roundup/cgi/templating.py:1266
+#: ../roundup/cgi/templating.py:1268
 #, python-format
 msgid "The linked class %(classname)s no longer exists"
 msgstr "Die verlinkte Klasse \"%(classname)s\" existiert nicht mehr"
 
-#: ../roundup/cgi/templating.py:1303 ../roundup/cgi/templating.py:1333
-#: ../roundup/cgi/templating.py:2495 ../roundup/cgi/templating.py:2798
-#: ../roundup/cgi/templating.py:1303:1333 :2495:2798
+#: ../roundup/cgi/templating.py:1305 ../roundup/cgi/templating.py:1335
+#: ../roundup/cgi/templating.py:2497 ../roundup/cgi/templating.py:2800
+#: ../roundup/cgi/templating.py:1305:1335 :2497:2800
 msgid "[label is missing]"
 msgstr ""
 
 # ../roundup/cgi/templating.py:905 :926
-#: ../roundup/cgi/templating.py:1307 ../roundup/cgi/templating.py:1336
-#: ../roundup/cgi/templating.py:1307:1336
+#: ../roundup/cgi/templating.py:1309 ../roundup/cgi/templating.py:1338
+#: ../roundup/cgi/templating.py:1309:1338
 msgid "<strike>The linked node no longer exists</strike>"
 msgstr "<strike>Der verknüpfte Eintrag existiert nicht mehr</strike>"
 
-#: ../roundup/cgi/templating.py:1398
+#: ../roundup/cgi/templating.py:1400
 #, python-format
 msgid "%s: (no value)"
 msgstr "%s: (kein Wert)"
 
-#: ../roundup/cgi/templating.py:1414
+#: ../roundup/cgi/templating.py:1416
 #, fuzzy, python-format
 msgid ""
 "<strong><em>This event %s is not handled by the history display!</em></"
@@ -2403,46 +2407,46 @@
 "<strong><em>Dieses Ereignis kann nicht im Verlauf angezeigt werden!</em></"
 "strong>"
 
-#: ../roundup/cgi/templating.py:1427
+#: ../roundup/cgi/templating.py:1429
 msgid "<tr><td colspan=4><strong>Note:</strong></td></tr>"
 msgstr "<tr><td colspan=\"4\"><strong>Bitte beachten:</strong></td></tr>"
 
-#: ../roundup/cgi/templating.py:1436
+#: ../roundup/cgi/templating.py:1438
 msgid "History"
 msgstr "Verlauf"
 
-#: ../roundup/cgi/templating.py:1438
+#: ../roundup/cgi/templating.py:1440
 msgid "<th>Date</th>"
 msgstr "<th>Datum</th>"
 
-#: ../roundup/cgi/templating.py:1439
+#: ../roundup/cgi/templating.py:1441
 msgid "<th>User</th>"
 msgstr "<th>Benutzer</th>"
 
-#: ../roundup/cgi/templating.py:1440
+#: ../roundup/cgi/templating.py:1442
 msgid "<th>Action</th>"
 msgstr "<th>Aktion</th>"
 
-#: ../roundup/cgi/templating.py:1441
+#: ../roundup/cgi/templating.py:1443
 msgid "<th>Args</th>"
 msgstr "<th>Argumente</th>"
 
-#: ../roundup/cgi/templating.py:1492
+#: ../roundup/cgi/templating.py:1494
 #, python-format
 msgid "Copy of %(class)s %(id)s"
 msgstr "Kopie von %(class)s %(id)s"
 
-#: ../roundup/cgi/templating.py:2123 ../roundup/cgi/templating.py:2158
-#: ../roundup/cgi/templating.py:1380:2123:2158
+#: ../roundup/cgi/templating.py:2125 ../roundup/cgi/templating.py:2160
+#: ../roundup/cgi/templating.py:1382:2125:2160
 msgid "No"
 msgstr "Nein"
 
-#: ../roundup/cgi/templating.py:2123 ../roundup/cgi/templating.py:2152
-#: ../roundup/cgi/templating.py:1380:2123:2152
+#: ../roundup/cgi/templating.py:2125 ../roundup/cgi/templating.py:2154
+#: ../roundup/cgi/templating.py:1382:2125:2154
 msgid "Yes"
 msgstr "Ja"
 
-#: ../roundup/cgi/templating.py:2284
+#: ../roundup/cgi/templating.py:2286
 msgid ""
 "default value for DateHTMLProperty must be either DateHTMLProperty or string "
 "date representation."
@@ -2450,29 +2454,29 @@
 "Der voreingestellte Wert einer DateHTML-Eigenschaft muss entweder ein\n"
 "DateHTML-Objekt sein oder ein Datum repräsentieren."
 
-#: ../roundup/cgi/templating.py:2466
+#: ../roundup/cgi/templating.py:2468
 #, python-format
 msgid "Attempt to look up %(attr)s on a missing value"
 msgstr ""
 "Versuch, das Attribut %(attr)s eines nicht vorhandenen Werts abzufragen"
 
-#: ../roundup/cgi/templating.py:2477
+#: ../roundup/cgi/templating.py:2479
 #, fuzzy, python-format
 msgid "Attempt to look up %(item)s on a missing value"
 msgstr ""
 "Versuch, das Attribut %(item)s eines nicht vorhandenen Werts abzufragen"
 
-#: ../roundup/cgi/templating.py:2582
+#: ../roundup/cgi/templating.py:2584
 #, python-format
 msgid "<option %svalue=\"-1\">- no selection -</option>"
 msgstr "<option %svalue=\"-1\">- nichts ausgewählt -</option>"
 
-#: ../roundup/cgi/templating.py:3743
+#: ../roundup/cgi/templating.py:3745
 #, python-format
 msgid "Unable to read or expand file '%(name)s' in template '%(template)s'."
 msgstr ""
 
-#: ../roundup/cgi/templating.py:3793
+#: ../roundup/cgi/templating.py:3795
 #, python-format
 msgid ""
 "Found an incorrect token when expandfile applied string subsitution on "
@@ -2538,8 +2542,8 @@
 "Not an interval spec: \"%s\" ([+-] [#y] [#m] [#w] [#d] [[[H]H:MM]:SS] [date "
 "spec])"
 msgstr ""
-"Keine gültige Intervall-Angabe: \"%s\" [+-] [#y] [#m] [#w] [#d] [[[H]H:MM]:SS] "
-"[Datum]"
+"Keine gültige Intervall-Angabe: \"%s\" [+-] [#y] [#m] [#w] [#d] [[[H]H:MM]:"
+"SS] [Datum]"
 
 #: ../roundup/date.py:870
 #, fuzzy, python-format
@@ -3019,6 +3023,63 @@
 msgid "not of form [arg=value,value,...;arg=value,value,...]"
 msgstr "entspricht nicht der Form [arg=wert,wert,...;arg=wert,wert,...]"
 
+#: ../roundup/pygettext.py:401
+#, python-format
+msgid "*** %(file)s:%(lineno)s: Seen unexpected token \"%(token)s\""
+msgstr ""
+
+#: ../roundup/pygettext.py:457
+#, python-format
+msgid "# File: %(filename)s, line: %(lineno)d"
+msgstr ""
+
+#: ../roundup/pygettext.py:464
+#, python-format
+msgid " %(filename)s:%(lineno)d"
+msgstr ""
+
+#: ../roundup/pygettext.py:540
+#, fuzzy, python-format
+msgid "Invalid value for --style: %s"
+msgstr "Ungültiger Benutzername %s"
+
+#: ../roundup/pygettext.py:548
+#, python-format
+msgid "pygettext.py (xgettext for Python) %s"
+msgstr ""
+
+#: ../roundup/pygettext.py:554
+#, python-format
+msgid "--width argument must be an integer: %s"
+msgstr ""
+
+#: ../roundup/pygettext.py:582
+#, python-format
+msgid "Can't read --exclude-file: %s"
+msgstr ""
+
+#: ../roundup/pygettext.py:601
+msgid "Reading standard input"
+msgstr ""
+
+#: ../roundup/pygettext.py:606
+#, python-format
+msgid "Working on %s"
+msgstr ""
+
+#: ../roundup/pygettext.py:640
+msgid "a unicode string"
+msgstr ""
+
+#: ../roundup/pygettext.py:642
+#, python-format
+msgid "*** Seen unexpected token \"%(token)s\""
+msgstr ""
+
+#: ../roundup/pygettext.py:643
+msgid "morethanonestring"
+msgstr ""
+
 #: ../roundup/rest.py:410
 #, python-format
 msgid "Method %(m)s not allowed. Allowed: %(a)s"
@@ -3048,7 +3109,7 @@
 "%(acceptable_types)s"
 msgstr ""
 
-#: ../roundup/rest.py:2437
+#: ../roundup/rest.py:2441
 #, python-format
 msgid ""
 "Unrecognized api version: %s. See /rest without specifying api version for "
@@ -3156,24 +3217,33 @@
 "Vorher:\n"
 "%(old)s"
 
-#: ../roundup/scripts/roundup_demo.py:151
-#, python-format
-msgid "Enter directory path to create demo tracker [%s]: "
-msgstr "Verzeichnis für Tracker-Demo eingeben [%s]: "
-
-#: ../roundup/scripts/roundup_demo.py:170
+#: ../roundup/scripts/roundup_demo.py:50
 #, python-format
 msgid ""
 "Enter tracker template to use (one of (%(template_list)s)) "
 "[%(default_template)s]: "
 msgstr ""
 
-#: ../roundup/scripts/roundup_gettext.py:35
+#: ../roundup/scripts/roundup_demo.py:166
+#, python-format
+msgid "Enter directory path to create demo tracker [%s]: "
+msgstr "Verzeichnis für Tracker-Demo eingeben [%s]: "
+
+#: ../roundup/scripts/roundup_gettext.py:33
+msgid ""
+"\n"
+"Extracting translatable strings only from html templates.\n"
+"Because the 'polib' module is missing, unable to extract\n"
+"translations from detectors or extensions.\n"
+"The 'polib' module can be installed with pip.\n"
+msgstr ""
+
+#: ../roundup/scripts/roundup_gettext.py:71
 #, python-format
 msgid "Usage: %(program)s <tracker home>"
 msgstr "Verwendung: %(program)s <Tracker-Verzeichnis>"
 
-#: ../roundup/scripts/roundup_gettext.py:51
+#: ../roundup/scripts/roundup_gettext.py:89
 #, python-format
 msgid "No tracker templates found in directory %s"
 msgstr "Keine Tracker-Vorlage gefunden im Verzeichnis %s"
--- a/locale/en.po	Wed Aug 07 21:43:40 2024 -0400
+++ b/locale/en.po	Wed Aug 07 21:52:58 2024 -0400
@@ -11,7 +11,7 @@
 msgstr ""
 "Project-Id-Version: Roundup 2.4.0\n"
 "Report-Msgid-Bugs-To: roundup-devel@lists.sourceforge.net\n"
-"POT-Creation-Date: 2024-07-09 15:12-0400\n"
+"POT-Creation-Date: 2024-08-07 21:43-0400\n"
 "PO-Revision-Date: 2004-11-20 13:47+0200\n"
 "Last-Translator: Not applicable\n"
 "Language-Team: English\n"
@@ -30,19 +30,19 @@
 msgid "You may not retire the admin or anonymous user"
 msgstr ""
 
-#: ../roundup/admin.py:130
+#: ../roundup/admin.py:131
 msgid ""
 "Have 'display designator[,designator*]' show header inside\n"
 "      []'s before items. Includes retired/active status.\n"
 msgstr ""
 
-#: ../roundup/admin.py:134
+#: ../roundup/admin.py:135
 msgid ""
 "Have 'display designator' and 'specification class' show\n"
 "      protected fields: creator, id etc.\n"
 msgstr ""
 
-#: ../roundup/admin.py:138
+#: ../roundup/admin.py:139
 msgid ""
 "Controls history options. It is a bitstring where setting\n"
 "      the bit disables the feature. A value of 0 (default)\n"
@@ -53,57 +53,57 @@
 "      history.\n"
 msgstr ""
 
-#: ../roundup/admin.py:147
+#: ../roundup/admin.py:148
 msgid ""
 "Set the number of lines of history to keep for this session.\n"
 "      -1 is infinite.\n"
 msgstr ""
 
-#: ../roundup/admin.py:151
+#: ../roundup/admin.py:152
 msgid "Set indexer to use when running 'reindex' NYI\n"
 msgstr ""
 
-#: ../roundup/admin.py:154
+#: ../roundup/admin.py:155
 msgid "Force reopening of tracker when running each command.\n"
 msgstr ""
 
-#: ../roundup/admin.py:157
+#: ../roundup/admin.py:158
 msgid ""
 "set the number of rows imported before a database commit is\n"
 "      done. Used only for imports on PostgreSQL.\n"
 msgstr ""
 
-#: ../roundup/admin.py:159
+#: ../roundup/admin.py:160
 msgid "Show retired items in table, list etc. One of 'no', 'only', 'both'\n"
 msgstr ""
 
-#: ../roundup/admin.py:161
-msgid "internal mapping for show_retired.\n"
-msgstr ""
-
 #: ../roundup/admin.py:162
+msgid "internal mapping for show_retired.\n"
+msgstr ""
+
+#: ../roundup/admin.py:163
 msgid "Enable verbose output: tracing, descriptions...\n"
 msgstr ""
 
-#: ../roundup/admin.py:174 ../roundup/admin.py:1179 ../roundup/admin.py:1824
-#: ../roundup/admin.py:1856 ../roundup/admin.py:174:1179 :1824:1856
+#: ../roundup/admin.py:175 ../roundup/admin.py:1188 ../roundup/admin.py:1836
+#: ../roundup/admin.py:1868 ../roundup/admin.py:175:1188 :1836:1868
 #, python-format
 msgid "no such class \"%(classname)s\""
 msgstr ""
 
-#: ../roundup/admin.py:187
+#: ../roundup/admin.py:188
 #, python-format
 msgid "argument \"%(arg)s\" not propname=value"
 msgstr ""
 
-#: ../roundup/admin.py:200
+#: ../roundup/admin.py:201
 #, python-format
 msgid ""
 "Problem: %(message)s\n"
 "\n"
 msgstr ""
 
-#: ../roundup/admin.py:201
+#: ../roundup/admin.py:202
 #, python-format
 msgid ""
 "%(message)sUsage: roundup-admin [options] [<command> <arguments>]\n"
@@ -134,17 +134,17 @@
 " roundup-admin help all                   -- all available help\n"
 msgstr ""
 
-#: ../roundup/admin.py:230
+#: ../roundup/admin.py:231
 msgid "Commands: "
 msgstr ""
 
-#: ../roundup/admin.py:237
+#: ../roundup/admin.py:238
 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:266
+#: ../roundup/admin.py:270
 msgid ""
 "\n"
 "All commands (except help) require a tracker specifier. This is just\n"
@@ -212,23 +212,23 @@
 "Command help:\n"
 msgstr ""
 
-#: ../roundup/admin.py:330
+#: ../roundup/admin.py:334
 #, python-format
 msgid "%s:"
 msgstr ""
 
-#: ../roundup/admin.py:435 ../roundup/admin.py:1384
-#: ../roundup/admin.py:435:1384
+#: ../roundup/admin.py:439 ../roundup/admin.py:1396
+#: ../roundup/admin.py:439:1396
 msgid "Templates:"
 msgstr ""
 
-#: ../roundup/admin.py:438 ../roundup/admin.py:1394
-#: ../roundup/admin.py:438:1394
+#: ../roundup/admin.py:442 ../roundup/admin.py:1406
+#: ../roundup/admin.py:442:1406
 msgid "Back ends:"
 msgstr ""
 
 #. noqa: ARG002
-#: ../roundup/admin.py:455
+#: ../roundup/admin.py:459
 msgid ""
 "Usage: commit\n"
 "        Commit changes made to the database during an interactive session.\n"
@@ -242,7 +242,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:470
+#: ../roundup/admin.py:474
 msgid ""
 "Usage: create classname property=value ...\n"
 "        Create a new entry of a given class.\n"
@@ -254,45 +254,44 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:478 ../roundup/admin.py:552 ../roundup/admin.py:600
-#: ../roundup/admin.py:723 ../roundup/admin.py:796 ../roundup/admin.py:842
-#: ../roundup/admin.py:893 ../roundup/admin.py:990 ../roundup/admin.py:1206
-#: ../roundup/admin.py:1357 ../roundup/admin.py:1485 ../roundup/admin.py:1571
-#: ../roundup/admin.py:1691 ../roundup/admin.py:1814 ../roundup/admin.py:1846
-#: ../roundup/admin.py:1962 ../roundup/admin.py:2016 ../roundup/admin.py:2064
-#: ../roundup/admin.py:478:552 :1206:1357:1485 :1571:1691 :1814:1846 :1962:2016
-#: :2064 :600:723 :796:842 :893:990
+#: ../roundup/admin.py:482 ../roundup/admin.py:555 ../roundup/admin.py:606
+#: ../roundup/admin.py:733 ../roundup/admin.py:806 ../roundup/admin.py:851
+#: ../roundup/admin.py:902 ../roundup/admin.py:999 ../roundup/admin.py:1216
+#: ../roundup/admin.py:1369 ../roundup/admin.py:1497 ../roundup/admin.py:1580
+#: ../roundup/admin.py:1703 ../roundup/admin.py:1826 ../roundup/admin.py:1858
+#: ../roundup/admin.py:1974 ../roundup/admin.py:2028 ../roundup/admin.py:2076
+#: ../roundup/admin.py:482:555 :1216:1369:1497 :1580:1703 :1826:1858 :1974:2028
+#: :2076 :606:733 :806:851 :902:999
 msgid "Not enough arguments supplied"
 msgstr ""
 
-#: ../roundup/admin.py:498
+#: ../roundup/admin.py:502
 #, python-format
 msgid "%(propname)s (Password): "
 msgstr ""
 
-#: ../roundup/admin.py:501
-#, python-format
-msgid "   %(propname)s (Again): "
-msgstr ""
-
 #: ../roundup/admin.py:505
+#, python-format
+msgid "   %(propname)s (Again): "
+msgstr ""
+
+#: ../roundup/admin.py:509
 msgid "Sorry, try again..."
 msgstr ""
 
-#: ../roundup/admin.py:510
+#: ../roundup/admin.py:514
 #, python-format
 msgid "%(propname)s (%(proptype)s): "
 msgstr ""
 
-#: ../roundup/admin.py:529
+#: ../roundup/admin.py:533
 #, python-format
 msgid "you must provide the \"%(propname)s\" property."
 msgstr ""
 
-#: ../roundup/admin.py:541
+#: ../roundup/admin.py:545
 msgid ""
 "Usage: display designator[,designator]*\n"
-"\n"
 "        Show the property values for the given node(s).\n"
 "\n"
 "        A designator is a classname and a nodeid concatenated,\n"
@@ -303,46 +302,52 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:583
+#: ../roundup/admin.py:586
 #, python-format
 msgid "%(protected)s%(key)s: %(value)s"
 msgstr ""
 
 #. grab the directory to export to
-#: ../roundup/admin.py:586
+#: ../roundup/admin.py:589
 msgid ""
 "Usage: export [[-]class[,class]] export_dir\n"
-"        Export the database to colon-separated-value files.\n"
+"        Export the database and file content.\n"
+"\n"
+"        Database content is exported to colon separated files.\n"
 "        To exclude the files (e.g. for the msg or file class),\n"
 "        use the exporttables command.\n"
 "\n"
 "        Optionally limit the export to just the named classes\n"
-"        or exclude the named classes, if the 1st argument starts with '-'.\n"
+"        or exclude the named classes, if the 1st argument\n"
+"        starts with '-'.\n"
 "\n"
 "        This action exports the current data from the database into\n"
 "        colon-separated-value files that are placed in the nominated\n"
-"        destination directory.\n"
+"        export_dir directory.\n"
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:698
+#: ../roundup/admin.py:704
 msgid ""
 "Usage: exporttables [[-]class[,class]] export_dir\n"
-"        Export the database to colon-separated-value files, excluding the\n"
-"        files below $TRACKER_HOME/db/files/ (which can be archived "
-"separately).\n"
+"        Export only the database to files, no file content.\n"
+"\n"
+"        Database content is exported to colon separated files.\n"
+"        The files below $TRACKER_HOME/db/files/ (which can be\n"
+"        archived separately) are not part of the export.\n"
 "        To include the files, use the export command.\n"
 "\n"
 "        Optionally limit the export to just the named classes\n"
-"        or exclude the named classes, if the 1st argument starts with '-'.\n"
+"        or exclude the named classes, if the 1st argument\n"
+"        starts with '-'.\n"
 "\n"
 "        This action exports the current data from the database into\n"
-"        colon-separated-value files that are placed in the nominated\n"
+"        colon-separated-value files that are placed in the export_dir\n"
 "        destination directory.\n"
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:713
+#: ../roundup/admin.py:723
 msgid ""
 "Usage: filter classname propname=value ...\n"
 "        Find the nodes of the given class with a given property value.\n"
@@ -355,19 +360,19 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:754
+#: ../roundup/admin.py:764
 #, python-format
 msgid "Class %(curclassname)s has no property %(pn)s in %(propname)s."
 msgstr ""
 
-#: ../roundup/admin.py:781 ../roundup/admin.py:830 ../roundup/admin.py:1505
-#: ../roundup/admin.py:1518 ../roundup/admin.py:2086
-#: ../roundup/admin.py:781:830 :1505:1518:2086
+#: ../roundup/admin.py:791 ../roundup/admin.py:840 ../roundup/admin.py:1517
+#: ../roundup/admin.py:1530 ../roundup/admin.py:2098
+#: ../roundup/admin.py:791:840 :1517:1530:2098
 #, python-format
 msgid "%(classname)s has no property \"%(propname)s\""
 msgstr ""
 
-#: ../roundup/admin.py:788
+#: ../roundup/admin.py:798
 msgid ""
 "Usage: find classname propname=value ...\n"
 "        Find the nodes of the given class with a given link property value.\n"
@@ -378,15 +383,14 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:837
+#: ../roundup/admin.py:847
 msgid ""
-"Usage: genconfig <filename>\n"
-"        Generate a new tracker config file (ini style) with default\n"
-"        values in <filename>.\n"
+"Usage: genconfig filename\n"
+"        Create a new tracker config file with default values in filename.\n"
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:855
+#: ../roundup/admin.py:864
 #, python-format
 msgid ""
 "Changing option\n"
@@ -394,20 +398,20 @@
 "from old default of %(old_number)s to new default of %(new_number)s."
 msgstr ""
 
-#: ../roundup/admin.py:866
+#: ../roundup/admin.py:875
 #, python-format
 msgid ""
 "Update 'password_pbkdf2_default_rounds' to a number equal to or larger\n"
 "  than %s.\n"
 msgstr ""
 
-#: ../roundup/admin.py:873
+#: ../roundup/admin.py:882
 msgid ""
 "Check the rdbms mysql_* settings. Your charset and collations may need\n"
 "  to be changed. See upgrading instructions.\n"
 msgstr ""
 
-#: ../roundup/admin.py:883
+#: ../roundup/admin.py:892
 msgid ""
 "Usage: get property designator[,designator]*\n"
 "        Get the given property of one or more designator(s).\n"
@@ -420,23 +424,23 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:916
+#: ../roundup/admin.py:925
 #, python-format
 msgid "property %s is not of type Multilink or Link so -d flag does not apply."
 msgstr ""
 
-#: ../roundup/admin.py:933 ../roundup/admin.py:1181 ../roundup/admin.py:1858
-#: ../roundup/admin.py:933:1181:1858
+#: ../roundup/admin.py:942 ../roundup/admin.py:1190 ../roundup/admin.py:1842
+#: ../roundup/admin.py:1870 ../roundup/admin.py:942:1190 :1842:1870
 #, python-format
 msgid "no such %(classname)s node \"%(nodeid)s\""
 msgstr ""
 
-#: ../roundup/admin.py:936
+#: ../roundup/admin.py:945
 #, python-format
 msgid "no such %(classname)s property \"%(propname)s\""
 msgstr ""
 
-#: ../roundup/admin.py:941
+#: ../roundup/admin.py:950
 msgid ""
 "Usage: help topic\n"
 "        Give help about topic.\n"
@@ -448,12 +452,12 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:960
+#: ../roundup/admin.py:969
 #, python-format
 msgid "Sorry, no help for \"%(topic)s\""
 msgstr ""
 
-#: ../roundup/admin.py:977
+#: ../roundup/admin.py:986
 msgid ""
 "Usage: history designator [skipquiet] [raw]\n"
 "        Show the history entries of a designator.\n"
@@ -468,26 +472,26 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1002
+#: ../roundup/admin.py:1011
 #, python-format
 msgid "Unexpected argument(s): %s. Expected 'skipquiet' or 'raw'."
 msgstr ""
 
-#: ../roundup/admin.py:1053
+#: ../roundup/admin.py:1062
 msgid "removed"
 msgstr ""
 
-#: ../roundup/admin.py:1055
+#: ../roundup/admin.py:1064
 msgid "added"
 msgstr ""
 
-#: ../roundup/admin.py:1057
+#: ../roundup/admin.py:1066
 #, python-format
 msgid "Unknown history set operation '%s'. Expected +/-."
 msgstr ""
 
 #. .Hint added issue23 to superseder
-#: ../roundup/admin.py:1082
+#: ../roundup/admin.py:1091
 #, python-format
 msgid "added %(class)s%(item_id)s to %(propname)s"
 msgstr ""
@@ -495,34 +499,35 @@
 #. .Hint read as: assignedto was admin(1)
 #. where assignedto is the property
 #. admin is the key name for value 1
-#: ../roundup/admin.py:1103
+#: ../roundup/admin.py:1112
 #, python-format
 msgid "%(prop)s was %(name)s(%(value)s)"
 msgstr ""
 
-#: ../roundup/admin.py:1109 ../roundup/admin.py:1138
-#: ../roundup/admin.py:1109:1138
+#: ../roundup/admin.py:1118 ../roundup/admin.py:1147
+#: ../roundup/admin.py:1118:1147
 #, python-format
 msgid "%(prop)s was %(value)s"
 msgstr ""
 
-#: ../roundup/admin.py:1128
+#: ../roundup/admin.py:1137
 #, python-format
 msgid "%(prop)s was [%(value_list)s]"
 msgstr ""
 
 #. .Hint modified nosy: added demo(3)
-#: ../roundup/admin.py:1135
+#: ../roundup/admin.py:1144
 #, python-format
 msgid "modified %(prop)s: %(how)s"
 msgstr ""
 
-#: ../roundup/admin.py:1186
+#: ../roundup/admin.py:1195
 msgid ""
 "Usage: import import_dir\n"
-"        Import a database from the directory containing CSV files,\n"
-"        two per class to import.\n"
+"        Import a database and file contents from the directory.\n"
 "\n"
+"        The directory should have the same format as one containing\n"
+"        the output of export. There are two files imported per class.\n"
 "        The files used in the import are:\n"
 "\n"
 "        <class>.csv\n"
@@ -540,16 +545,17 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1276
+#: ../roundup/admin.py:1287
 msgid ""
 "Usage: importtables export_dir\n"
+"        This imports the database tables exported using exporttables.\n"
 "\n"
-"        This imports the database tables exported using exporttables.\n"
+"        It does not import the content of files like msgs and files.\n"
 "        "
 msgstr ""
 
 #. password
-#: ../roundup/admin.py:1283
+#: ../roundup/admin.py:1295
 msgid ""
 "Usage: initialise [adminpw]\n"
 "        Initialise a new Roundup tracker.\n"
@@ -560,30 +566,30 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1297
+#: ../roundup/admin.py:1309
 msgid "Admin Password: "
 msgstr ""
 
-#: ../roundup/admin.py:1298
+#: ../roundup/admin.py:1310
 msgid "       Confirm: "
 msgstr ""
 
-#: ../roundup/admin.py:1302
-msgid "Instance home does not exist"
-msgstr ""
-
-#: ../roundup/admin.py:1306
-msgid "Instance has not been installed"
-msgstr ""
-
 #: ../roundup/admin.py:1314
+msgid "Instance home does not exist"
+msgstr ""
+
+#: ../roundup/admin.py:1318
+msgid "Instance has not been installed"
+msgstr ""
+
+#: ../roundup/admin.py:1326
 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:1334
+#: ../roundup/admin.py:1346
 msgid ""
 "Usage: install [template [backend [key=val[,key=val]]]]\n"
 "        Install a new Roundup tracker.\n"
@@ -609,12 +615,12 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1363
+#: ../roundup/admin.py:1375
 #, python-format
 msgid "Instance home parent directory \"%(parent)s\" does not exist"
 msgstr ""
 
-#: ../roundup/admin.py:1372
+#: ../roundup/admin.py:1384
 #, python-format
 msgid ""
 "WARNING: There appears to be a tracker in \"%(tracker_home)s\"!\n"
@@ -622,20 +628,20 @@
 "Erase it? Y/N: "
 msgstr ""
 
-#: ../roundup/admin.py:1385
+#: ../roundup/admin.py:1397
 msgid "Select template"
 msgstr ""
 
-#: ../roundup/admin.py:1395
+#: ../roundup/admin.py:1407
 msgid "Select backend"
 msgstr ""
 
-#: ../roundup/admin.py:1406
+#: ../roundup/admin.py:1418
 #, python-format
 msgid "Error in configuration settings: \"%s\""
 msgstr ""
 
-#: ../roundup/admin.py:1439
+#: ../roundup/admin.py:1451
 #, python-format
 msgid ""
 "\n"
@@ -644,11 +650,11 @@
 "   %(config_file)s"
 msgstr ""
 
-#: ../roundup/admin.py:1449
+#: ../roundup/admin.py:1461
 msgid " ... at a minimum, you must set following options:"
 msgstr ""
 
-#: ../roundup/admin.py:1454
+#: ../roundup/admin.py:1466
 #, python-format
 msgid ""
 "\n"
@@ -665,7 +671,7 @@
 "---------------------------------------------------------------------------\n"
 msgstr ""
 
-#: ../roundup/admin.py:1470
+#: ../roundup/admin.py:1482
 msgid ""
 "Usage: list classname [property]\n"
 "        List the instances of a class.\n"
@@ -681,20 +687,19 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1483
+#: ../roundup/admin.py:1495
 msgid "Too many arguments supplied"
 msgstr ""
 
-#: ../roundup/admin.py:1516
+#: ../roundup/admin.py:1528
 #, python-format
 msgid "%(nodeid)4s: %(value)s"
 msgstr ""
 
 #. noqa: ARG002  - args unused
-#: ../roundup/admin.py:1523
+#: ../roundup/admin.py:1535
 msgid ""
 "Usage: migrate\n"
-"\n"
 "        Update a tracker's database to be compatible with the Roundup\n"
 "        codebase.\n"
 "\n"
@@ -715,22 +720,20 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1544
+#: ../roundup/admin.py:1555
 #, python-format
 msgid "Tracker updated to schema version %s."
 msgstr ""
 
-#: ../roundup/admin.py:1548
+#: ../roundup/admin.py:1559
 #, python-format
 msgid "No migration action required. At schema version %s."
 msgstr ""
 
-#: ../roundup/admin.py:1553
+#: ../roundup/admin.py:1564
 msgid ""
 "Usage: pack period | date\n"
-"\n"
-"        Remove journal entries older than a period of time specified or\n"
-"        before a certain date.\n"
+"        Remove journal entries older than the date/period.\n"
 "\n"
 "        A period is specified using the suffixes \"y\", \"m\", and \"d\". "
 "The\n"
@@ -747,15 +750,16 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1581
+#: ../roundup/admin.py:1590
 msgid "Invalid format"
 msgstr ""
 
-#: ../roundup/admin.py:1592
+#: ../roundup/admin.py:1601
 msgid ""
 "Usage: perftest [mode] [arguments]*\n"
+"        Time operations in Roundup.\n"
 "\n"
-"        Time operations in Roundup. Supported arguments:\n"
+"        Supported arguments:\n"
 "\n"
 "            [password] [rounds=<integer>] [scheme=<scheme>]\n"
 "\n"
@@ -768,28 +772,30 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1625
+#: ../roundup/admin.py:1635
 msgid "Invalid 'rounds'. Must be larger than 999."
 msgstr ""
 
-#: ../roundup/admin.py:1629
+#: ../roundup/admin.py:1639
 #, python-format
 msgid "Invalid 'rounds'. It must be an integer not: %s"
 msgstr ""
 
-#: ../roundup/admin.py:1656
+#: ../roundup/admin.py:1666
 msgid "scheme does not support rounds."
 msgstr ""
 
-#: ../roundup/admin.py:1659
+#: ../roundup/admin.py:1669
 #, python-format
 msgid "Hash time: %(time)0.9f seconds, scheme: %(scheme)s, rounds: %(rounds)s"
 msgstr ""
 
-#: ../roundup/admin.py:1665
+#: ../roundup/admin.py:1675
 msgid ""
 "Usage: pragma setting=value | 'list'\n"
-"        Set internal admin settings to a value. E.G.\n"
+"        Set internal admin settings to a value.\n"
+"\n"
+"        For example:\n"
 "\n"
 "            pragma verbose=True\n"
 "            pragma verbose=yes\n"
@@ -813,49 +819,49 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1698
+#: ../roundup/admin.py:1710
 #, python-format
 msgid "Argument must be setting=value, was given: %s."
 msgstr ""
 
-#: ../roundup/admin.py:1701
+#: ../roundup/admin.py:1713
 msgid "Current settings and values (NYI - not yet implemented):"
 msgstr ""
 
-#: ../roundup/admin.py:1712
+#: ../roundup/admin.py:1724
 msgid ""
 "      Help for this pragma is missing. Please report it to the Roundup "
 "project.\n"
 msgstr ""
 
-#: ../roundup/admin.py:1718
+#: ../roundup/admin.py:1730
 #, python-format
 msgid "Unknown setting %s. Try \"pragma list\"."
 msgstr ""
 
-#: ../roundup/admin.py:1728
+#: ../roundup/admin.py:1740
 #, python-format
 msgid "Incorrect value for boolean setting %(setting)s: %(value)s."
 msgstr ""
 
-#: ../roundup/admin.py:1735
+#: ../roundup/admin.py:1747
 #, python-format
 msgid "Incorrect value for integer setting %(setting)s: %(value)s."
 msgstr ""
 
-#: ../roundup/admin.py:1742
+#: ../roundup/admin.py:1754
 #, python-format
 msgid ""
 "Incorrect value for setting %(setting)s: %(value)s. Should be no, both, or "
 "only."
 msgstr ""
 
-#: ../roundup/admin.py:1752
+#: ../roundup/admin.py:1764
 #, python-format
 msgid "Internal error: pragma can not handle values of type: %s"
 msgstr ""
 
-#: ../roundup/admin.py:1761
+#: ../roundup/admin.py:1773
 msgid ""
 "Usage: reindex [classname|classname:#-#|designator]*\n"
 "        Re-generate a tracker's search indexes.\n"
@@ -872,17 +878,17 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1783
+#: ../roundup/admin.py:1795
 #, python-format
 msgid "no such item \"%(designator)s\""
 msgstr ""
 
-#: ../roundup/admin.py:1793
-#, python-format
-msgid "no such item \"%(class)s%(id)s\""
-msgstr ""
-
 #: ../roundup/admin.py:1805
+#, python-format
+msgid "no such item \"%(class)s%(id)s\""
+msgstr ""
+
+#: ../roundup/admin.py:1817
 msgid ""
 "Usage: restore designator[,designator]*\n"
 "        Restore the retired node specified by designator.\n"
@@ -894,11 +900,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1830
-msgid "no such %(classname)s node \"%(nodeid)s\""
-msgstr ""
-
-#: ../roundup/admin.py:1836
+#: ../roundup/admin.py:1848
 msgid ""
 "Usage: retire designator[,designator]*\n"
 "        Retire the node specified by designator.\n"
@@ -912,7 +914,7 @@
 msgstr ""
 
 #. noqa: ARG002 - args unused
-#: ../roundup/admin.py:1864
+#: ../roundup/admin.py:1876
 msgid ""
 "Usage: rollback\n"
 "        Undo all changes that are pending commit to the database.\n"
@@ -924,59 +926,59 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1877
+#: ../roundup/admin.py:1889
 msgid ""
 "Usage: security [Role name]\n"
+"        Display the Permissions available to one or all Roles.\n"
 "\n"
-"             Display the Permissions available to one or all Roles.\n"
-"             Also validates that any properties defined in a\n"
-"             permission are valid.\n"
+"        Also validates that any properties defined in a\n"
+"        permission are valid.\n"
 "\n"
-"             Run this after changing your permissions to catch\n"
-"             typos.\n"
+"        Run this after changing your permissions to catch\n"
+"        typos.\n"
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1892
+#: ../roundup/admin.py:1904
 #, python-format
 msgid "No such Role \"%(role)s\"\n"
 msgstr ""
 
-#: ../roundup/admin.py:1898
-#, python-format
-msgid "New Web users get the Roles \"%(role)s\"\n"
-msgstr ""
-
-#: ../roundup/admin.py:1901
-#, python-format
-msgid "New Web users get the Role \"%(role)s\"\n"
-msgstr ""
-
-#: ../roundup/admin.py:1905
-#, python-format
-msgid "New Email users get the Roles \"%(role)s\"\n"
-msgstr ""
-
-#: ../roundup/admin.py:1907
-#, python-format
-msgid "New Email users get the Role \"%(role)s\"\n"
-msgstr ""
-
 #: ../roundup/admin.py:1910
 #, python-format
+msgid "New Web users get the Roles \"%(role)s\"\n"
+msgstr ""
+
+#: ../roundup/admin.py:1913
+#, python-format
+msgid "New Web users get the Role \"%(role)s\"\n"
+msgstr ""
+
+#: ../roundup/admin.py:1917
+#, python-format
+msgid "New Email users get the Roles \"%(role)s\"\n"
+msgstr ""
+
+#: ../roundup/admin.py:1919
+#, python-format
+msgid "New Email users get the Role \"%(role)s\"\n"
+msgstr ""
+
+#: ../roundup/admin.py:1922
+#, python-format
 msgid "Role \"%(name)s\":\n"
 msgstr ""
 
-#: ../roundup/admin.py:1916
+#: ../roundup/admin.py:1928
 msgid " %(description)s (%(name)s for \"%(klass)s\""
 msgstr ""
 
-#: ../roundup/admin.py:1916
+#: ../roundup/admin.py:1928
 #, python-format
 msgid " %(description)s (%(name)s for \"%(klass)s\": %(properties)s only)\n"
 msgstr ""
 
-#: ../roundup/admin.py:1929
+#: ../roundup/admin.py:1941
 #, python-format
 msgid ""
 "\n"
@@ -984,17 +986,17 @@
 "\n"
 msgstr ""
 
-#: ../roundup/admin.py:1935
+#: ../roundup/admin.py:1947
 #, python-format
 msgid " %(description)s (%(name)s for \"%(klass)s\" only)\n"
 msgstr ""
 
-#: ../roundup/admin.py:1938
+#: ../roundup/admin.py:1950
 #, python-format
 msgid " %(description)s (%(name)s)\n"
 msgstr ""
 
-#: ../roundup/admin.py:1942
+#: ../roundup/admin.py:1954
 msgid ""
 "Usage: set items property=value [property=value ...]\n"
 "        Set the given properties of one or more items(s).\n"
@@ -1015,7 +1017,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:2010
+#: ../roundup/admin.py:2022
 msgid ""
 "Usage: specification classname\n"
 "        Show the properties for a classname.\n"
@@ -1024,17 +1026,17 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:2029
+#: ../roundup/admin.py:2041
 #, python-format
 msgid "%(key)s: %(value)s (key property)\n"
 msgstr ""
 
-#: ../roundup/admin.py:2032
+#: ../roundup/admin.py:2044
 #, python-format
 msgid "%(key)s: %(value)s\n"
 msgstr ""
 
-#: ../roundup/admin.py:2035
+#: ../roundup/admin.py:2047
 msgid ""
 "Usage: table classname [property[,property]*]\n"
 "        List the instances of a class in tabular form.\n"
@@ -1066,17 +1068,17 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:2081
+#: ../roundup/admin.py:2093
 #, python-format
 msgid "\"%(spec)s\" not name:width"
 msgstr ""
 
-#: ../roundup/admin.py:2103
+#: ../roundup/admin.py:2115
 #, python-format
 msgid "\"%(spec)s\" does not have an integer width: \"%(width)s\""
 msgstr ""
 
-#: ../roundup/admin.py:2139
+#: ../roundup/admin.py:2151
 msgid ""
 "Usage: templates [trace_search]\n"
 "        List templates and their installed directories.\n"
@@ -1086,58 +1088,59 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:2167
+#: ../roundup/admin.py:2179
 msgid ""
 "Usage: updateconfig <filename>\n"
-"        Generate an updated tracker config file (ini style) in\n"
-"        <filename>. Use current settings from existing roundup\n"
-"        tracker in tracker home.\n"
+"        Merge existing tracker config with new settings.\n"
+"\n"
+"        Output the updated config file to <filename>. Use current\n"
+"        settings from existing roundup tracker in tracker home.\n"
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:2175 ../roundup/cgi/actions.py:886
+#: ../roundup/admin.py:2188 ../roundup/cgi/actions.py:886
 #: ../roundup/cgi/actions.py:897 ../roundup/cgi/actions.py:1099
 #: ../roundup/cgi/actions.py:1113 ../roundup/cgi/actions.py:886:897 :1099:1113
 #, python-format
 msgid "Error: %s"
 msgstr ""
 
-#: ../roundup/admin.py:2207
+#: ../roundup/admin.py:2220
 #, python-format
 msgid "Unknown command \"%(command)s\" (\"help commands\" for a list)"
 msgstr ""
 
-#: ../roundup/admin.py:2213
+#: ../roundup/admin.py:2226
 #, python-format
 msgid "Multiple commands match \"%(command)s\": %(list)s"
 msgstr ""
 
-#: ../roundup/admin.py:2228
+#: ../roundup/admin.py:2241
 msgid "Enter tracker home: "
 msgstr ""
 
-#: ../roundup/admin.py:2257 ../roundup/admin.py:2261
-#: ../roundup/admin.py:2257:2261
+#: ../roundup/admin.py:2270 ../roundup/admin.py:2274
+#: ../roundup/admin.py:2270:2274
 #, python-format
 msgid "Error: Couldn't open tracker: %(message)s"
 msgstr ""
 
-#: ../roundup/admin.py:2309
+#: ../roundup/admin.py:2322
 #, python-format
 msgid ""
 "Roundup %s ready for input.\n"
 "Type \"help\" for help."
 msgstr ""
 
-#: ../roundup/admin.py:2342
+#: ../roundup/admin.py:2355
 msgid "Note: command history and editing not available"
 msgstr ""
 
-#: ../roundup/admin.py:2348
-msgid "exit..."
-msgstr ""
-
 #: ../roundup/admin.py:2361
+msgid "exit..."
+msgstr ""
+
+#: ../roundup/admin.py:2374
 msgid "There are unsaved changes. Commit them (y/N)? "
 msgstr ""
 
@@ -1646,7 +1649,7 @@
 msgid "<em>undefined</em>"
 msgstr ""
 
-#: ../roundup/cgi/client.py:90
+#: ../roundup/cgi/client.py:105
 msgid ""
 "<html><head><title>An error has occurred</title></head>\n"
 "<body><h1>An error has occurred</h1>\n"
@@ -1655,154 +1658,154 @@
 "</body></html>"
 msgstr ""
 
-#: ../roundup/cgi/client.py:702 ../roundup/cgi/client.py:1622
-#: ../roundup/cgi/client.py:702:1622
+#: ../roundup/cgi/client.py:717 ../roundup/cgi/client.py:1635
+#: ../roundup/cgi/client.py:717:1635
 msgid "Required Header Missing"
 msgstr ""
 
-#: ../roundup/cgi/client.py:704
+#: ../roundup/cgi/client.py:719
 msgid "Client is not allowed to use Rest Interface."
 msgstr ""
 
-#: ../roundup/cgi/client.py:956
+#: ../roundup/cgi/client.py:971
 msgid "Form Error: "
 msgstr ""
 
-#: ../roundup/cgi/client.py:1049
+#: ../roundup/cgi/client.py:1064
 #, python-format
 msgid "Unrecognized charset: %r"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1318 ../roundup/cgi/client.py:2281
-#: ../roundup/cgi/client.py:1318:2281
+#: ../roundup/cgi/client.py:1331 ../roundup/cgi/client.py:2294
+#: ../roundup/cgi/client.py:1331:2294
 msgid "broken form: multiple @action values submitted"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1335
+#: ../roundup/cgi/client.py:1348
 msgid "Anonymous users are not allowed to use the web interface"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1483
+#: ../roundup/cgi/client.py:1496
 msgid "Referer header not available."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1487
+#: ../roundup/cgi/client.py:1500
 #, python-format
 msgid "csrf key used with wrong method from: %s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1516
+#: ../roundup/cgi/client.py:1529
 #, python-format
 msgid "csrf header %(header)s required but missing for user%(userid)s."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1520
-#, python-format
-msgid "Missing header: %s"
-msgstr ""
-
-#: ../roundup/cgi/client.py:1528
-#, python-format
-msgid "csrf Referer header check failed for user%(userid)s. Value=%(referer)s"
-msgstr ""
-
 #: ../roundup/cgi/client.py:1533
 #, python-format
+msgid "Missing header: %s"
+msgstr ""
+
+#: ../roundup/cgi/client.py:1541
+#, python-format
+msgid "csrf Referer header check failed for user%(userid)s. Value=%(referer)s"
+msgstr ""
+
+#: ../roundup/cgi/client.py:1546
+#, python-format
 msgid "Invalid Referer: %s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1548
+#: ../roundup/cgi/client.py:1561
 #, python-format
 msgid "csrf Origin header check failed for user%(userid)s. Value=%(origin)s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1553
+#: ../roundup/cgi/client.py:1566
 #, python-format
 msgid "Invalid Origin %s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1567
+#: ../roundup/cgi/client.py:1580
 #, python-format
 msgid ""
 "csrf X-FORWARDED-HOST header check failed for user%(userid)s. Value=%(host)s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1573
+#: ../roundup/cgi/client.py:1586
 #, python-format
 msgid "Invalid X-FORWARDED-HOST %s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1592
-#, python-format
-msgid "csrf HOST header check failed for user%(userid)s. Value=%(host)s"
-msgstr ""
-
-#: ../roundup/cgi/client.py:1597
-#, python-format
-msgid "Invalid HOST %s"
-msgstr ""
-
 #: ../roundup/cgi/client.py:1605
+#, python-format
+msgid "csrf HOST header check failed for user%(userid)s. Value=%(host)s"
+msgstr ""
+
+#: ../roundup/cgi/client.py:1610
+#, python-format
+msgid "Invalid HOST %s"
+msgstr ""
+
+#: ../roundup/cgi/client.py:1618
 msgid "Csrf: unable to verify sufficient headers"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1606
-msgid "Unable to verify sufficient headers"
-msgstr ""
-
 #: ../roundup/cgi/client.py:1619
+msgid "Unable to verify sufficient headers"
+msgstr ""
+
+#: ../roundup/cgi/client.py:1632
 #, python-format
 msgid "csrf X-REQUESTED-WITH xmlrpc required header check failed for user%s."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1660
+#: ../roundup/cgi/client.py:1673
 #, python-format
 msgid "Required csrf field missing for user%s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1662 ../roundup/cgi/client.py:1689
-#: ../roundup/cgi/client.py:1706 ../roundup/cgi/client.py:1662:1689:1706
+#: ../roundup/cgi/client.py:1675 ../roundup/cgi/client.py:1702
+#: ../roundup/cgi/client.py:1719 ../roundup/cgi/client.py:1675:1702:1719
 msgid ""
 "We can't validate your session (csrf failure). Re-enter any unsaved data and "
 "try again."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1666
+#: ../roundup/cgi/client.py:1679
 #, python-format
 msgid "csrf field not supplied by user%s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1678
+#: ../roundup/cgi/client.py:1691
 #, 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:1696
+#: ../roundup/cgi/client.py:1709
 #, 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:1888
+#: ../roundup/cgi/client.py:1901
 msgid "You are not allowed to view this file."
 msgstr ""
 
-#: ../roundup/cgi/client.py:2159
+#: ../roundup/cgi/client.py:2172
 #, python-format
 msgid "%(starttag)sTime elapsed: %(seconds)fs%(endtag)s\n"
 msgstr ""
 
-#: ../roundup/cgi/client.py:2163
+#: ../roundup/cgi/client.py:2176
 #, 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:2703
+#: ../roundup/cgi/client.py:2716
 #, python-format
 msgid ""
 "Cache failure: compressed file %(compressed)s is older than its source file "
@@ -1860,141 +1863,141 @@
 msgstr[0] ""
 msgstr[1] ""
 
-#: ../roundup/cgi/templating.py:277
+#: ../roundup/cgi/templating.py:278
 #, python-format
 msgid "You are not allowed to %(action)s items of class %(class)s"
 msgstr ""
 
-#: ../roundup/cgi/templating.py:914
+#: ../roundup/cgi/templating.py:916
 msgid "(list)"
 msgstr ""
 
-#: ../roundup/cgi/templating.py:989
+#: ../roundup/cgi/templating.py:991
 msgid "Submit New Entry"
 msgstr ""
 
-#: ../roundup/cgi/templating.py:1011 ../roundup/cgi/templating.py:1187
-#: ../roundup/cgi/templating.py:1822 ../roundup/cgi/templating.py:1853
-#: ../roundup/cgi/templating.py:1874 ../roundup/cgi/templating.py:1912
-#: ../roundup/cgi/templating.py:1965 ../roundup/cgi/templating.py:1989
-#: ../roundup/cgi/templating.py:1996 ../roundup/cgi/templating.py:2033
-#: ../roundup/cgi/templating.py:2086 ../roundup/cgi/templating.py:2119
-#: ../roundup/cgi/templating.py:2214 ../roundup/cgi/templating.py:2235
-#: ../roundup/cgi/templating.py:2326 ../roundup/cgi/templating.py:2346
-#: ../roundup/cgi/templating.py:2368 ../roundup/cgi/templating.py:2411
-#: ../roundup/cgi/templating.py:2421 ../roundup/cgi/templating.py:2486
-#: ../roundup/cgi/templating.py:2789 ../roundup/cgi/templating.py:1011:1187
-#: :1822:1853 :1874:1912 :1965:1989 :1996:2033 :2086:2119 :2214:2235 :2326:2346
-#: :2368:2411 :2421:2486:2789
+#: ../roundup/cgi/templating.py:1013 ../roundup/cgi/templating.py:1189
+#: ../roundup/cgi/templating.py:1824 ../roundup/cgi/templating.py:1855
+#: ../roundup/cgi/templating.py:1876 ../roundup/cgi/templating.py:1914
+#: ../roundup/cgi/templating.py:1967 ../roundup/cgi/templating.py:1991
+#: ../roundup/cgi/templating.py:1998 ../roundup/cgi/templating.py:2035
+#: ../roundup/cgi/templating.py:2088 ../roundup/cgi/templating.py:2121
+#: ../roundup/cgi/templating.py:2216 ../roundup/cgi/templating.py:2237
+#: ../roundup/cgi/templating.py:2328 ../roundup/cgi/templating.py:2348
+#: ../roundup/cgi/templating.py:2370 ../roundup/cgi/templating.py:2413
+#: ../roundup/cgi/templating.py:2423 ../roundup/cgi/templating.py:2488
+#: ../roundup/cgi/templating.py:2791 ../roundup/cgi/templating.py:1013:1189
+#: :1824:1855 :1876:1914 :1967:1991 :1998:2035 :2088:2121 :2216:2237 :2328:2348
+#: :2370:2413 :2423:2488:2791
 msgid "[hidden]"
 msgstr ""
 
-#: ../roundup/cgi/templating.py:1012
+#: ../roundup/cgi/templating.py:1014
 msgid "New node - no history"
 msgstr ""
 
-#: ../roundup/cgi/templating.py:1152
+#: ../roundup/cgi/templating.py:1154
 msgid "Submit Changes"
 msgstr ""
 
-#: ../roundup/cgi/templating.py:1230
+#: ../roundup/cgi/templating.py:1232
 msgid "<em>The indicated property no longer exists</em>"
 msgstr ""
 
-#: ../roundup/cgi/templating.py:1266
+#: ../roundup/cgi/templating.py:1268
 #, python-format
 msgid "The linked class %(classname)s no longer exists"
 msgstr ""
 
-#: ../roundup/cgi/templating.py:1303 ../roundup/cgi/templating.py:1333
-#: ../roundup/cgi/templating.py:2495 ../roundup/cgi/templating.py:2798
-#: ../roundup/cgi/templating.py:1303:1333 :2495:2798
+#: ../roundup/cgi/templating.py:1305 ../roundup/cgi/templating.py:1335
+#: ../roundup/cgi/templating.py:2497 ../roundup/cgi/templating.py:2800
+#: ../roundup/cgi/templating.py:1305:1335 :2497:2800
 msgid "[label is missing]"
 msgstr ""
 
-#: ../roundup/cgi/templating.py:1307 ../roundup/cgi/templating.py:1336
-#: ../roundup/cgi/templating.py:1307:1336
+#: ../roundup/cgi/templating.py:1309 ../roundup/cgi/templating.py:1338
+#: ../roundup/cgi/templating.py:1309:1338
 msgid "<strike>The linked node no longer exists</strike>"
 msgstr ""
 
-#: ../roundup/cgi/templating.py:1398
+#: ../roundup/cgi/templating.py:1400
 #, python-format
 msgid "%s: (no value)"
 msgstr ""
 
-#: ../roundup/cgi/templating.py:1414
+#: ../roundup/cgi/templating.py:1416
 #, python-format
 msgid ""
 "<strong><em>This event %s is not handled by the history display!</em></"
 "strong>"
 msgstr ""
 
-#: ../roundup/cgi/templating.py:1427
+#: ../roundup/cgi/templating.py:1429
 msgid "<tr><td colspan=4><strong>Note:</strong></td></tr>"
 msgstr ""
 
-#: ../roundup/cgi/templating.py:1436
-msgid "History"
-msgstr ""
-
 #: ../roundup/cgi/templating.py:1438
-msgid "<th>Date</th>"
-msgstr ""
-
-#: ../roundup/cgi/templating.py:1439
-msgid "<th>User</th>"
+msgid "History"
 msgstr ""
 
 #: ../roundup/cgi/templating.py:1440
-msgid "<th>Action</th>"
+msgid "<th>Date</th>"
 msgstr ""
 
 #: ../roundup/cgi/templating.py:1441
+msgid "<th>User</th>"
+msgstr ""
+
+#: ../roundup/cgi/templating.py:1442
+msgid "<th>Action</th>"
+msgstr ""
+
+#: ../roundup/cgi/templating.py:1443
 msgid "<th>Args</th>"
 msgstr ""
 
-#: ../roundup/cgi/templating.py:1492
+#: ../roundup/cgi/templating.py:1494
 #, python-format
 msgid "Copy of %(class)s %(id)s"
 msgstr ""
 
-#: ../roundup/cgi/templating.py:2123 ../roundup/cgi/templating.py:2158
-#: ../roundup/cgi/templating.py:1380:2123:2158
+#: ../roundup/cgi/templating.py:2125 ../roundup/cgi/templating.py:2160
+#: ../roundup/cgi/templating.py:1382:2125:2160
 msgid "No"
 msgstr ""
 
-#: ../roundup/cgi/templating.py:2123 ../roundup/cgi/templating.py:2152
-#: ../roundup/cgi/templating.py:1380:2123:2152
+#: ../roundup/cgi/templating.py:2125 ../roundup/cgi/templating.py:2154
+#: ../roundup/cgi/templating.py:1382:2125:2154
 msgid "Yes"
 msgstr ""
 
-#: ../roundup/cgi/templating.py:2284
+#: ../roundup/cgi/templating.py:2286
 msgid ""
 "default value for DateHTMLProperty must be either DateHTMLProperty or string "
 "date representation."
 msgstr ""
 
-#: ../roundup/cgi/templating.py:2466
+#: ../roundup/cgi/templating.py:2468
 #, python-format
 msgid "Attempt to look up %(attr)s on a missing value"
 msgstr ""
 
-#: ../roundup/cgi/templating.py:2477
+#: ../roundup/cgi/templating.py:2479
 #, python-format
 msgid "Attempt to look up %(item)s on a missing value"
 msgstr ""
 
-#: ../roundup/cgi/templating.py:2582
+#: ../roundup/cgi/templating.py:2584
 #, python-format
 msgid "<option %svalue=\"-1\">- no selection -</option>"
 msgstr ""
 
-#: ../roundup/cgi/templating.py:3743
+#: ../roundup/cgi/templating.py:3745
 #, python-format
 msgid "Unable to read or expand file '%(name)s' in template '%(template)s'."
 msgstr ""
 
-#: ../roundup/cgi/templating.py:3793
+#: ../roundup/cgi/templating.py:3795
 #, python-format
 msgid ""
 "Found an incorrect token when expandfile applied string subsitution on "
@@ -2443,6 +2446,63 @@
 msgid "not of form [arg=value,value,...;arg=value,value,...]"
 msgstr ""
 
+#: ../roundup/pygettext.py:401
+#, python-format
+msgid "*** %(file)s:%(lineno)s: Seen unexpected token \"%(token)s\""
+msgstr ""
+
+#: ../roundup/pygettext.py:457
+#, python-format
+msgid "# File: %(filename)s, line: %(lineno)d"
+msgstr ""
+
+#: ../roundup/pygettext.py:464
+#, python-format
+msgid " %(filename)s:%(lineno)d"
+msgstr ""
+
+#: ../roundup/pygettext.py:540
+#, python-format
+msgid "Invalid value for --style: %s"
+msgstr ""
+
+#: ../roundup/pygettext.py:548
+#, python-format
+msgid "pygettext.py (xgettext for Python) %s"
+msgstr ""
+
+#: ../roundup/pygettext.py:554
+#, python-format
+msgid "--width argument must be an integer: %s"
+msgstr ""
+
+#: ../roundup/pygettext.py:582
+#, python-format
+msgid "Can't read --exclude-file: %s"
+msgstr ""
+
+#: ../roundup/pygettext.py:601
+msgid "Reading standard input"
+msgstr ""
+
+#: ../roundup/pygettext.py:606
+#, python-format
+msgid "Working on %s"
+msgstr ""
+
+#: ../roundup/pygettext.py:640
+msgid "a unicode string"
+msgstr ""
+
+#: ../roundup/pygettext.py:642
+#, python-format
+msgid "*** Seen unexpected token \"%(token)s\""
+msgstr ""
+
+#: ../roundup/pygettext.py:643
+msgid "morethanonestring"
+msgstr ""
+
 #: ../roundup/rest.py:410
 #, python-format
 msgid "Method %(m)s not allowed. Allowed: %(a)s"
@@ -2472,7 +2532,7 @@
 "%(acceptable_types)s"
 msgstr ""
 
-#: ../roundup/rest.py:2437
+#: ../roundup/rest.py:2441
 #, python-format
 msgid ""
 "Unrecognized api version: %s. See /rest without specifying api version for "
@@ -2573,24 +2633,33 @@
 "%(old)s"
 msgstr ""
 
-#: ../roundup/scripts/roundup_demo.py:151
-#, python-format
-msgid "Enter directory path to create demo tracker [%s]: "
-msgstr ""
-
-#: ../roundup/scripts/roundup_demo.py:170
+#: ../roundup/scripts/roundup_demo.py:50
 #, python-format
 msgid ""
 "Enter tracker template to use (one of (%(template_list)s)) "
 "[%(default_template)s]: "
 msgstr ""
 
-#: ../roundup/scripts/roundup_gettext.py:35
+#: ../roundup/scripts/roundup_demo.py:166
+#, python-format
+msgid "Enter directory path to create demo tracker [%s]: "
+msgstr ""
+
+#: ../roundup/scripts/roundup_gettext.py:33
+msgid ""
+"\n"
+"Extracting translatable strings only from html templates.\n"
+"Because the 'polib' module is missing, unable to extract\n"
+"translations from detectors or extensions.\n"
+"The 'polib' module can be installed with pip.\n"
+msgstr ""
+
+#: ../roundup/scripts/roundup_gettext.py:71
 #, python-format
 msgid "Usage: %(program)s <tracker home>"
 msgstr ""
 
-#: ../roundup/scripts/roundup_gettext.py:51
+#: ../roundup/scripts/roundup_gettext.py:89
 #, python-format
 msgid "No tracker templates found in directory %s"
 msgstr ""
--- a/locale/es.po	Wed Aug 07 21:43:40 2024 -0400
+++ b/locale/es.po	Wed Aug 07 21:52:58 2024 -0400
@@ -7,7 +7,7 @@
 msgstr ""
 "Project-Id-Version: Roundup 2.4.0\n"
 "Report-Msgid-Bugs-To: roundup-devel@lists.sourceforge.net\n"
-"POT-Creation-Date: 2024-07-09 15:12-0400\n"
+"POT-Creation-Date: 2024-08-07 21:43-0400\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"
@@ -28,19 +28,19 @@
 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:130
+#: ../roundup/admin.py:131
 msgid ""
 "Have 'display designator[,designator*]' show header inside\n"
 "      []'s before items. Includes retired/active status.\n"
 msgstr ""
 
-#: ../roundup/admin.py:134
+#: ../roundup/admin.py:135
 msgid ""
 "Have 'display designator' and 'specification class' show\n"
 "      protected fields: creator, id etc.\n"
 msgstr ""
 
-#: ../roundup/admin.py:138
+#: ../roundup/admin.py:139
 msgid ""
 "Controls history options. It is a bitstring where setting\n"
 "      the bit disables the feature. A value of 0 (default)\n"
@@ -51,52 +51,52 @@
 "      history.\n"
 msgstr ""
 
-#: ../roundup/admin.py:147
+#: ../roundup/admin.py:148
 msgid ""
 "Set the number of lines of history to keep for this session.\n"
 "      -1 is infinite.\n"
 msgstr ""
 
-#: ../roundup/admin.py:151
+#: ../roundup/admin.py:152
 msgid "Set indexer to use when running 'reindex' NYI\n"
 msgstr ""
 
-#: ../roundup/admin.py:154
+#: ../roundup/admin.py:155
 msgid "Force reopening of tracker when running each command.\n"
 msgstr ""
 
-#: ../roundup/admin.py:157
+#: ../roundup/admin.py:158
 msgid ""
 "set the number of rows imported before a database commit is\n"
 "      done. Used only for imports on PostgreSQL.\n"
 msgstr ""
 
-#: ../roundup/admin.py:159
+#: ../roundup/admin.py:160
 msgid "Show retired items in table, list etc. One of 'no', 'only', 'both'\n"
 msgstr ""
 
-#: ../roundup/admin.py:161
-msgid "internal mapping for show_retired.\n"
-msgstr ""
-
 #: ../roundup/admin.py:162
+msgid "internal mapping for show_retired.\n"
+msgstr ""
+
+#: ../roundup/admin.py:163
 msgid "Enable verbose output: tracing, descriptions...\n"
 msgstr ""
 
 # ../roundup/admin.py:85 :955 :1004 :1026
-#: ../roundup/admin.py:174 ../roundup/admin.py:1179 ../roundup/admin.py:1824
-#: ../roundup/admin.py:1856 ../roundup/admin.py:174:1179 :1824:1856
+#: ../roundup/admin.py:175 ../roundup/admin.py:1188 ../roundup/admin.py:1836
+#: ../roundup/admin.py:1868 ../roundup/admin.py:175:1188 :1836:1868
 #, python-format
 msgid "no such class \"%(classname)s\""
 msgstr "la clase \"%(classname)s\" no existe"
 
 # ../roundup/admin.py:95 :99
-#: ../roundup/admin.py:187
+#: ../roundup/admin.py:188
 #, python-format
 msgid "argument \"%(arg)s\" not propname=value"
 msgstr "el argumento \"%(arg)s\" no es de la forma nombrepropiedad=valor"
 
-#: ../roundup/admin.py:200
+#: ../roundup/admin.py:201
 #, python-format
 msgid ""
 "Problem: %(message)s\n"
@@ -105,7 +105,7 @@
 "Problema: %(message)s\n"
 "\n"
 
-#: ../roundup/admin.py:201
+#: ../roundup/admin.py:202
 #, fuzzy, python-format
 msgid ""
 "%(message)sUsage: roundup-admin [options] [<command> <arguments>]\n"
@@ -164,12 +164,12 @@
 " roundup-admin help <comando>             -- ayuda especfica a un comando\n"
 " roundup-admin help all                   -- toda la ayuda disponible\n"
 
-#: ../roundup/admin.py:230
+#: ../roundup/admin.py:231
 #, fuzzy
 msgid "Commands: "
 msgstr "Comandos:"
 
-#: ../roundup/admin.py:237
+#: ../roundup/admin.py:238
 msgid ""
 "Commands may be abbreviated as long as the abbreviation\n"
 "matches only one command, e.g. l == li == lis == list."
@@ -177,7 +177,7 @@
 "Los comandos pueden ser abreviados siempre y cuando la abreviacin\n"
 "coincida con slo un comando, ej. l == li == lis == list."
 
-#: ../roundup/admin.py:266
+#: ../roundup/admin.py:270
 #, fuzzy
 msgid ""
 "\n"
@@ -324,25 +324,25 @@
 "\n"
 "Ayuda sobre comandos:\n"
 
-#: ../roundup/admin.py:330
+#: ../roundup/admin.py:334
 #, python-format
 msgid "%s:"
 msgstr "%s:"
 
 # ../roundup/admin.py:338 :387
-#: ../roundup/admin.py:435 ../roundup/admin.py:1384
-#: ../roundup/admin.py:435:1384
+#: ../roundup/admin.py:439 ../roundup/admin.py:1396
+#: ../roundup/admin.py:439:1396
 msgid "Templates:"
 msgstr "Plantillas:"
 
 # ../roundup/admin.py:341 :398
-#: ../roundup/admin.py:438 ../roundup/admin.py:1394
-#: ../roundup/admin.py:438:1394
+#: ../roundup/admin.py:442 ../roundup/admin.py:1406
+#: ../roundup/admin.py:442:1406
 msgid "Back ends:"
 msgstr "Motor de almacenamiento"
 
 #. noqa: ARG002
-#: ../roundup/admin.py:455
+#: ../roundup/admin.py:459
 msgid ""
 "Usage: commit\n"
 "        Commit changes made to the database during an interactive session.\n"
@@ -367,7 +367,7 @@
 "        son automticamente escritos si resultan exitosos.\n"
 "        "
 
-#: ../roundup/admin.py:470
+#: ../roundup/admin.py:474
 msgid ""
 "Usage: create classname property=value ...\n"
 "        Create a new entry of a given class.\n"
@@ -388,46 +388,45 @@
 
 # ../roundup/admin.py:360 :442 :503 :582 :632 :688 :709 :737 :808 :875 :946
 # :994 :1016 :1043 :1106 :1173
-#: ../roundup/admin.py:478 ../roundup/admin.py:552 ../roundup/admin.py:600
-#: ../roundup/admin.py:723 ../roundup/admin.py:796 ../roundup/admin.py:842
-#: ../roundup/admin.py:893 ../roundup/admin.py:990 ../roundup/admin.py:1206
-#: ../roundup/admin.py:1357 ../roundup/admin.py:1485 ../roundup/admin.py:1571
-#: ../roundup/admin.py:1691 ../roundup/admin.py:1814 ../roundup/admin.py:1846
-#: ../roundup/admin.py:1962 ../roundup/admin.py:2016 ../roundup/admin.py:2064
-#: ../roundup/admin.py:478:552 :1206:1357:1485 :1571:1691 :1814:1846 :1962:2016
-#: :2064 :600:723 :796:842 :893:990
+#: ../roundup/admin.py:482 ../roundup/admin.py:555 ../roundup/admin.py:606
+#: ../roundup/admin.py:733 ../roundup/admin.py:806 ../roundup/admin.py:851
+#: ../roundup/admin.py:902 ../roundup/admin.py:999 ../roundup/admin.py:1216
+#: ../roundup/admin.py:1369 ../roundup/admin.py:1497 ../roundup/admin.py:1580
+#: ../roundup/admin.py:1703 ../roundup/admin.py:1826 ../roundup/admin.py:1858
+#: ../roundup/admin.py:1974 ../roundup/admin.py:2028 ../roundup/admin.py:2076
+#: ../roundup/admin.py:482:555 :1216:1369:1497 :1580:1703 :1826:1858 :1974:2028
+#: :2076 :606:733 :806:851 :902:999
 msgid "Not enough arguments supplied"
 msgstr "No se provey una cantidad suficiente de argumentos"
 
-#: ../roundup/admin.py:498
+#: ../roundup/admin.py:502
 #, python-format
 msgid "%(propname)s (Password): "
 msgstr "%(propname)s (Contrasea): "
 
-#: ../roundup/admin.py:501
+#: ../roundup/admin.py:505
 #, python-format
 msgid "   %(propname)s (Again): "
 msgstr "   %(propname)s (Nuevamente): "
 
-#: ../roundup/admin.py:505
+#: ../roundup/admin.py:509
 msgid "Sorry, try again..."
 msgstr "Lo lamento, intente nuevamente..."
 
-#: ../roundup/admin.py:510
+#: ../roundup/admin.py:514
 #, python-format
 msgid "%(propname)s (%(proptype)s): "
 msgstr "%(propname)s (%(proptype)s): "
 
-#: ../roundup/admin.py:529
+#: ../roundup/admin.py:533
 #, python-format
 msgid "you must provide the \"%(propname)s\" property."
 msgstr "debe proveer la propiedad \"%(propname)s\"."
 
-#: ../roundup/admin.py:541
+#: ../roundup/admin.py:545
 #, fuzzy
 msgid ""
 "Usage: display designator[,designator]*\n"
-"\n"
 "        Show the property values for the given node(s).\n"
 "\n"
 "        A designator is a classname and a nodeid concatenated,\n"
@@ -444,25 +443,29 @@
 "especificado.\n"
 "        "
 
-#: ../roundup/admin.py:583
+#: ../roundup/admin.py:586
 #, fuzzy, python-format
 msgid "%(protected)s%(key)s: %(value)s"
 msgstr "%(key)s: %(value)s"
 
 #. grab the directory to export to
-#: ../roundup/admin.py:586
+#: ../roundup/admin.py:589
+#, fuzzy
 msgid ""
 "Usage: export [[-]class[,class]] export_dir\n"
-"        Export the database to colon-separated-value files.\n"
+"        Export the database and file content.\n"
+"\n"
+"        Database content is exported to colon separated files.\n"
 "        To exclude the files (e.g. for the msg or file class),\n"
 "        use the exporttables command.\n"
 "\n"
 "        Optionally limit the export to just the named classes\n"
-"        or exclude the named classes, if the 1st argument starts with '-'.\n"
+"        or exclude the named classes, if the 1st argument\n"
+"        starts with '-'.\n"
 "\n"
 "        This action exports the current data from the database into\n"
 "        colon-separated-value files that are placed in the nominated\n"
-"        destination directory.\n"
+"        export_dir directory.\n"
 "        "
 msgstr ""
 "Uso:   export [[-]clase[,clase]] dir_exportacin\n"
@@ -478,19 +481,23 @@
 "        directorio de destino especificado (dir_exportacin).\n"
 "        "
 
-#: ../roundup/admin.py:698
+#: ../roundup/admin.py:704
+#, fuzzy
 msgid ""
 "Usage: exporttables [[-]class[,class]] export_dir\n"
-"        Export the database to colon-separated-value files, excluding the\n"
-"        files below $TRACKER_HOME/db/files/ (which can be archived "
-"separately).\n"
+"        Export only the database to files, no file content.\n"
+"\n"
+"        Database content is exported to colon separated files.\n"
+"        The files below $TRACKER_HOME/db/files/ (which can be\n"
+"        archived separately) are not part of the export.\n"
 "        To include the files, use the export command.\n"
 "\n"
 "        Optionally limit the export to just the named classes\n"
-"        or exclude the named classes, if the 1st argument starts with '-'.\n"
+"        or exclude the named classes, if the 1st argument\n"
+"        starts with '-'.\n"
 "\n"
 "        This action exports the current data from the database into\n"
-"        colon-separated-value files that are placed in the nominated\n"
+"        colon-separated-value files that are placed in the export_dir\n"
 "        destination directory.\n"
 "        "
 msgstr ""
@@ -507,7 +514,7 @@
 "        directorio de destino especificado.\n"
 "        "
 
-#: ../roundup/admin.py:713
+#: ../roundup/admin.py:723
 #, fuzzy
 msgid ""
 "Usage: filter classname propname=value ...\n"
@@ -532,20 +539,20 @@
 "        "
 
 # ../roundup/admin.py:675 :828 :840 :894
-#: ../roundup/admin.py:754
+#: ../roundup/admin.py:764
 #, 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:781 ../roundup/admin.py:830 ../roundup/admin.py:1505
-#: ../roundup/admin.py:1518 ../roundup/admin.py:2086
-#: ../roundup/admin.py:781:830 :1505:1518:2086
+#: ../roundup/admin.py:791 ../roundup/admin.py:840 ../roundup/admin.py:1517
+#: ../roundup/admin.py:1530 ../roundup/admin.py:2098
+#: ../roundup/admin.py:791:840 :1517:1530:2098
 #, python-format
 msgid "%(classname)s has no property \"%(propname)s\""
 msgstr "%(classname)s no posee la propiedad \"%(propname)s\""
 
-#: ../roundup/admin.py:788
+#: ../roundup/admin.py:798
 msgid ""
 "Usage: find classname propname=value ...\n"
 "        Find the nodes of the given class with a given link property value.\n"
@@ -566,12 +573,11 @@
 "        enlazado o su valor clave.\n"
 "        "
 
-#: ../roundup/admin.py:837
+#: ../roundup/admin.py:847
 #, fuzzy
 msgid ""
-"Usage: genconfig <filename>\n"
-"        Generate a new tracker config file (ini style) with default\n"
-"        values in <filename>.\n"
+"Usage: genconfig filename\n"
+"        Create a new tracker config file with default values in filename.\n"
 "        "
 msgstr ""
 "Uso:   genconfig <fichero>\n"
@@ -580,7 +586,7 @@
 "        con valores por defecto en el fichero <fichero>.\n"
 "        "
 
-#: ../roundup/admin.py:855
+#: ../roundup/admin.py:864
 #, python-format
 msgid ""
 "Changing option\n"
@@ -588,20 +594,20 @@
 "from old default of %(old_number)s to new default of %(new_number)s."
 msgstr ""
 
-#: ../roundup/admin.py:866
+#: ../roundup/admin.py:875
 #, python-format
 msgid ""
 "Update 'password_pbkdf2_default_rounds' to a number equal to or larger\n"
 "  than %s.\n"
 msgstr ""
 
-#: ../roundup/admin.py:873
+#: ../roundup/admin.py:882
 msgid ""
 "Check the rdbms mysql_* settings. Your charset and collations may need\n"
 "  to be changed. See upgrading instructions.\n"
 msgstr ""
 
-#: ../roundup/admin.py:883
+#: ../roundup/admin.py:892
 #, fuzzy
 msgid ""
 "Usage: get property designator[,designator]*\n"
@@ -622,7 +628,7 @@
 "        "
 
 # ../roundup/admin.py:536 :551
-#: ../roundup/admin.py:916
+#: ../roundup/admin.py:925
 #, python-format
 msgid "property %s is not of type Multilink or Link so -d flag does not apply."
 msgstr ""
@@ -630,18 +636,18 @@
 "no puede usarse."
 
 # ../roundup/admin.py:559 :957 :1006 :1028
-#: ../roundup/admin.py:933 ../roundup/admin.py:1181 ../roundup/admin.py:1858
-#: ../roundup/admin.py:933:1181:1858
+#: ../roundup/admin.py:942 ../roundup/admin.py:1190 ../roundup/admin.py:1842
+#: ../roundup/admin.py:1870 ../roundup/admin.py:942:1190 :1842:1870
 #, python-format
 msgid "no such %(classname)s node \"%(nodeid)s\""
 msgstr "no existe nodo de clase %(classname)s llamado  \"%(nodeid)s\""
 
-#: ../roundup/admin.py:936
+#: ../roundup/admin.py:945
 #, python-format
 msgid "no such %(classname)s property \"%(propname)s\""
 msgstr "no existe propiedad de clase %(classname)s llamado  \"%(propname)s\""
 
-#: ../roundup/admin.py:941
+#: ../roundup/admin.py:950
 msgid ""
 "Usage: help topic\n"
 "        Give help about topic.\n"
@@ -661,12 +667,12 @@
 "        all       -- toda la ayuda disponible\n"
 "        "
 
-#: ../roundup/admin.py:960
+#: ../roundup/admin.py:969
 #, python-format
 msgid "Sorry, no help for \"%(topic)s\""
 msgstr "Lo siento, no hay ayuda para \"%(topic)s\""
 
-#: ../roundup/admin.py:977
+#: ../roundup/admin.py:986
 #, fuzzy
 msgid ""
 "Usage: history designator [skipquiet] [raw]\n"
@@ -689,27 +695,27 @@
 "        reusado.\n"
 "        "
 
-#: ../roundup/admin.py:1002
+#: ../roundup/admin.py:1011
 #, python-format
 msgid "Unexpected argument(s): %s. Expected 'skipquiet' or 'raw'."
 msgstr ""
 
-#: ../roundup/admin.py:1053
+#: ../roundup/admin.py:1062
 #, fuzzy
 msgid "removed"
 msgstr "eliminar"
 
-#: ../roundup/admin.py:1055
+#: ../roundup/admin.py:1064
 msgid "added"
 msgstr ""
 
-#: ../roundup/admin.py:1057
+#: ../roundup/admin.py:1066
 #, python-format
 msgid "Unknown history set operation '%s'. Expected +/-."
 msgstr ""
 
 #. .Hint added issue23 to superseder
-#: ../roundup/admin.py:1082
+#: ../roundup/admin.py:1091
 #, fuzzy, python-format
 msgid "added %(class)s%(item_id)s to %(propname)s"
 msgstr "Edicin exitosa de %(properties)s de %(class)s %(id)s"
@@ -717,34 +723,36 @@
 #. .Hint read as: assignedto was admin(1)
 #. where assignedto is the property
 #. admin is the key name for value 1
-#: ../roundup/admin.py:1103
+#: ../roundup/admin.py:1112
 #, fuzzy, python-format
 msgid "%(prop)s was %(name)s(%(value)s)"
 msgstr "%(propname)s (%(proptype)s): "
 
-#: ../roundup/admin.py:1109 ../roundup/admin.py:1138
-#: ../roundup/admin.py:1109:1138
+#: ../roundup/admin.py:1118 ../roundup/admin.py:1147
+#: ../roundup/admin.py:1118:1147
 #, fuzzy, python-format
 msgid "%(prop)s was %(value)s"
 msgstr "%(key)s: %(value)s"
 
-#: ../roundup/admin.py:1128
+#: ../roundup/admin.py:1137
 #, python-format
 msgid "%(prop)s was [%(value_list)s]"
 msgstr ""
 
 #. .Hint modified nosy: added demo(3)
-#: ../roundup/admin.py:1135
+#: ../roundup/admin.py:1144
 #, python-format
 msgid "modified %(prop)s: %(how)s"
 msgstr ""
 
-#: ../roundup/admin.py:1186
+#: ../roundup/admin.py:1195
+#, fuzzy
 msgid ""
 "Usage: import import_dir\n"
-"        Import a database from the directory containing CSV files,\n"
-"        two per class to import.\n"
-"\n"
+"        Import a database and file contents from the directory.\n"
+"\n"
+"        The directory should have the same format as one containing\n"
+"        the output of export. There are two files imported per class.\n"
 "        The files used in the import are:\n"
 "\n"
 "        <class>.csv\n"
@@ -784,16 +792,17 @@
 "        tediosamente, retirar toda los datos viejos.)\n"
 "        "
 
-#: ../roundup/admin.py:1276
+#: ../roundup/admin.py:1287
 msgid ""
 "Usage: importtables export_dir\n"
-"\n"
 "        This imports the database tables exported using exporttables.\n"
+"\n"
+"        It does not import the content of files like msgs and files.\n"
 "        "
 msgstr ""
 
 #. password
-#: ../roundup/admin.py:1283
+#: ../roundup/admin.py:1295
 msgid ""
 "Usage: initialise [adminpw]\n"
 "        Initialise a new Roundup tracker.\n"
@@ -812,23 +821,23 @@
 "        Ejecuta la funcin de inicializacin dbinit.init() del tracker\n"
 "        "
 
-#: ../roundup/admin.py:1297
+#: ../roundup/admin.py:1309
 msgid "Admin Password: "
 msgstr "Contrasea de administracin: "
 
-#: ../roundup/admin.py:1298
+#: ../roundup/admin.py:1310
 msgid "       Confirm: "
 msgstr "       Confirmar: "
 
-#: ../roundup/admin.py:1302
+#: ../roundup/admin.py:1314
 msgid "Instance home does not exist"
 msgstr "El directorio base de la instancia no existe"
 
-#: ../roundup/admin.py:1306
+#: ../roundup/admin.py:1318
 msgid "Instance has not been installed"
 msgstr "La instancia no ha sido instalada"
 
-#: ../roundup/admin.py:1314
+#: ../roundup/admin.py:1326
 msgid ""
 "WARNING: The database is already initialised!\n"
 "If you re-initialise it, you will lose all the data!\n"
@@ -838,7 +847,7 @@
 "Si la reinicializa, perder toda la informacin!\n"
 "Eliminar la misma? Y/N: "
 
-#: ../roundup/admin.py:1334
+#: ../roundup/admin.py:1346
 msgid ""
 "Usage: install [template [backend [key=val[,key=val]]]]\n"
 "        Install a new Roundup tracker.\n"
@@ -894,14 +903,14 @@
 "        Vea tambin initopts help.\n"
 "        "
 
-#: ../roundup/admin.py:1363
+#: ../roundup/admin.py:1375
 #, 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:1372
+#: ../roundup/admin.py:1384
 #, python-format
 msgid ""
 "WARNING: There appears to be a tracker in \"%(tracker_home)s\"!\n"
@@ -912,22 +921,22 @@
 "Si Ud. lo reinstala, perder toda la informacin relacionada al mismo!\n"
 "Elimino la misma? Y/N: "
 
-#: ../roundup/admin.py:1385
+#: ../roundup/admin.py:1397
 #, fuzzy
 msgid "Select template"
 msgstr "Seleccione la plantilla [classic]: "
 
-#: ../roundup/admin.py:1395
+#: ../roundup/admin.py:1407
 #, fuzzy
 msgid "Select backend"
 msgstr "Selecccione el motor de almacenamiento [anydbm]: "
 
-#: ../roundup/admin.py:1406
+#: ../roundup/admin.py:1418
 #, python-format
 msgid "Error in configuration settings: \"%s\""
 msgstr "Error en opciones de configuracin: \"%s\""
 
-#: ../roundup/admin.py:1439
+#: ../roundup/admin.py:1451
 #, python-format
 msgid ""
 "\n"
@@ -940,11 +949,11 @@
 " Ud. debe ahora editar el fichero de configuracin del tracker:\n"
 "   %(config_file)s"
 
-#: ../roundup/admin.py:1449
+#: ../roundup/admin.py:1461
 msgid " ... at a minimum, you must set following options:"
 msgstr " ... como mnimo, debe configurar las siguientes opciones:"
 
-#: ../roundup/admin.py:1454
+#: ../roundup/admin.py:1466
 #, python-format
 msgid ""
 "\n"
@@ -972,7 +981,7 @@
 " completado los pasos arriba descriptos.\n"
 "---------------------------------------------------------------------------\n"
 
-#: ../roundup/admin.py:1470
+#: ../roundup/admin.py:1482
 msgid ""
 "Usage: list classname [property]\n"
 "        List the instances of a class.\n"
@@ -1002,20 +1011,19 @@
 "clase.\n"
 "        "
 
-#: ../roundup/admin.py:1483
+#: ../roundup/admin.py:1495
 msgid "Too many arguments supplied"
 msgstr "Demasiados argumentos"
 
-#: ../roundup/admin.py:1516
+#: ../roundup/admin.py:1528
 #, python-format
 msgid "%(nodeid)4s: %(value)s"
 msgstr "%(nodeid)4s: %(value)s"
 
 #. noqa: ARG002  - args unused
-#: ../roundup/admin.py:1523
+#: ../roundup/admin.py:1535
 msgid ""
 "Usage: migrate\n"
-"\n"
 "        Update a tracker's database to be compatible with the Roundup\n"
 "        codebase.\n"
 "\n"
@@ -1036,22 +1044,21 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1544
+#: ../roundup/admin.py:1555
 #, python-format
 msgid "Tracker updated to schema version %s."
 msgstr ""
 
-#: ../roundup/admin.py:1548
+#: ../roundup/admin.py:1559
 #, python-format
 msgid "No migration action required. At schema version %s."
 msgstr ""
 
-#: ../roundup/admin.py:1553
+#: ../roundup/admin.py:1564
+#, fuzzy
 msgid ""
 "Usage: pack period | date\n"
-"\n"
-"        Remove journal entries older than a period of time specified or\n"
-"        before a certain date.\n"
+"        Remove journal entries older than the date/period.\n"
 "\n"
 "        A period is specified using the suffixes \"y\", \"m\", and \"d\". "
 "The\n"
@@ -1085,15 +1092,16 @@
 "\n"
 "        "
 
-#: ../roundup/admin.py:1581
+#: ../roundup/admin.py:1590
 msgid "Invalid format"
 msgstr "Formato invlido"
 
-#: ../roundup/admin.py:1592
+#: ../roundup/admin.py:1601
 msgid ""
 "Usage: perftest [mode] [arguments]*\n"
-"\n"
-"        Time operations in Roundup. Supported arguments:\n"
+"        Time operations in Roundup.\n"
+"\n"
+"        Supported arguments:\n"
 "\n"
 "            [password] [rounds=<integer>] [scheme=<scheme>]\n"
 "\n"
@@ -1106,28 +1114,30 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1625
+#: ../roundup/admin.py:1635
 msgid "Invalid 'rounds'. Must be larger than 999."
 msgstr ""
 
-#: ../roundup/admin.py:1629
+#: ../roundup/admin.py:1639
 #, python-format
 msgid "Invalid 'rounds'. It must be an integer not: %s"
 msgstr ""
 
-#: ../roundup/admin.py:1656
+#: ../roundup/admin.py:1666
 msgid "scheme does not support rounds."
 msgstr ""
 
-#: ../roundup/admin.py:1659
+#: ../roundup/admin.py:1669
 #, python-format
 msgid "Hash time: %(time)0.9f seconds, scheme: %(scheme)s, rounds: %(rounds)s"
 msgstr ""
 
-#: ../roundup/admin.py:1665
+#: ../roundup/admin.py:1675
 msgid ""
 "Usage: pragma setting=value | 'list'\n"
-"        Set internal admin settings to a value. E.G.\n"
+"        Set internal admin settings to a value.\n"
+"\n"
+"        For example:\n"
 "\n"
 "            pragma verbose=True\n"
 "            pragma verbose=yes\n"
@@ -1151,49 +1161,49 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1698
+#: ../roundup/admin.py:1710
 #, python-format
 msgid "Argument must be setting=value, was given: %s."
 msgstr ""
 
-#: ../roundup/admin.py:1701
+#: ../roundup/admin.py:1713
 msgid "Current settings and values (NYI - not yet implemented):"
 msgstr ""
 
-#: ../roundup/admin.py:1712
+#: ../roundup/admin.py:1724
 msgid ""
 "      Help for this pragma is missing. Please report it to the Roundup "
 "project.\n"
 msgstr ""
 
-#: ../roundup/admin.py:1718
+#: ../roundup/admin.py:1730
 #, fuzzy, python-format
 msgid "Unknown setting %s. Try \"pragma list\"."
 msgstr "Usuario desconocido"
 
-#: ../roundup/admin.py:1728
+#: ../roundup/admin.py:1740
 #, python-format
 msgid "Incorrect value for boolean setting %(setting)s: %(value)s."
 msgstr ""
 
-#: ../roundup/admin.py:1735
+#: ../roundup/admin.py:1747
 #, python-format
 msgid "Incorrect value for integer setting %(setting)s: %(value)s."
 msgstr ""
 
-#: ../roundup/admin.py:1742
+#: ../roundup/admin.py:1754
 #, python-format
 msgid ""
 "Incorrect value for setting %(setting)s: %(value)s. Should be no, both, or "
 "only."
 msgstr ""
 
-#: ../roundup/admin.py:1752
+#: ../roundup/admin.py:1764
 #, python-format
 msgid "Internal error: pragma can not handle values of type: %s"
 msgstr ""
 
-#: ../roundup/admin.py:1761
+#: ../roundup/admin.py:1773
 #, fuzzy
 msgid ""
 "Usage: reindex [classname|classname:#-#|designator]*\n"
@@ -1217,17 +1227,17 @@
 "        Es un comando que por lo general se ejecuta automticamente.\n"
 "        "
 
-#: ../roundup/admin.py:1783
+#: ../roundup/admin.py:1795
 #, python-format
 msgid "no such item \"%(designator)s\""
 msgstr "no existe un tem llamado \"%(designator)s\""
 
-#: ../roundup/admin.py:1793
+#: ../roundup/admin.py:1805
 #, fuzzy, python-format
 msgid "no such item \"%(class)s%(id)s\""
 msgstr "no existe un tem llamado \"%(designator)s\""
 
-#: ../roundup/admin.py:1805
+#: ../roundup/admin.py:1817
 #, fuzzy
 msgid ""
 "Usage: restore designator[,designator]*\n"
@@ -1246,13 +1256,7 @@
 "        para los usuarios.\n"
 "        "
 
-# ../roundup/admin.py:559 :957 :1006 :1028
-#: ../roundup/admin.py:1830
-#, fuzzy
-msgid "no such %(classname)s node \"%(nodeid)s\""
-msgstr "no existe nodo de clase %(classname)s llamado  \"%(nodeid)s\""
-
-#: ../roundup/admin.py:1836
+#: ../roundup/admin.py:1848
 #, fuzzy
 msgid ""
 "Usage: retire designator[,designator]*\n"
@@ -1274,7 +1278,7 @@
 "        "
 
 #. noqa: ARG002 - args unused
-#: ../roundup/admin.py:1864
+#: ../roundup/admin.py:1876
 msgid ""
 "Usage: rollback\n"
 "        Undo all changes that are pending commit to the database.\n"
@@ -1296,62 +1300,62 @@
 "        no introducira cambios en la base de datos.\n"
 "        "
 
-#: ../roundup/admin.py:1877
+#: ../roundup/admin.py:1889
 msgid ""
 "Usage: security [Role name]\n"
-"\n"
-"             Display the Permissions available to one or all Roles.\n"
-"             Also validates that any properties defined in a\n"
-"             permission are valid.\n"
-"\n"
-"             Run this after changing your permissions to catch\n"
-"             typos.\n"
+"        Display the Permissions available to one or all Roles.\n"
+"\n"
+"        Also validates that any properties defined in a\n"
+"        permission are valid.\n"
+"\n"
+"        Run this after changing your permissions to catch\n"
+"        typos.\n"
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1892
+#: ../roundup/admin.py:1904
 #, fuzzy, python-format
 msgid "No such Role \"%(role)s\"\n"
 msgstr "No existe un Rol llamado \"%(role)s\""
 
-#: ../roundup/admin.py:1898
+#: ../roundup/admin.py:1910
 #, 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:1901
+#: ../roundup/admin.py:1913
 #, 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:1905
+#: ../roundup/admin.py:1917
 #, 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:1907
+#: ../roundup/admin.py:1919
 #, 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:1910
+#: ../roundup/admin.py:1922
 #, fuzzy, python-format
 msgid "Role \"%(name)s\":\n"
 msgstr "Rol \"%(name)s\":"
 
-#: ../roundup/admin.py:1916
+#: ../roundup/admin.py:1928
 #, fuzzy
 msgid " %(description)s (%(name)s for \"%(klass)s\""
 msgstr " %(description)s (%(name)s para \"%(klass)s\" solamente)"
 
-#: ../roundup/admin.py:1916
+#: ../roundup/admin.py:1928
 #, 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:1929
+#: ../roundup/admin.py:1941
 #, python-format
 msgid ""
 "\n"
@@ -1359,17 +1363,17 @@
 "\n"
 msgstr ""
 
-#: ../roundup/admin.py:1935
+#: ../roundup/admin.py:1947
 #, 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:1938
+#: ../roundup/admin.py:1950
 #, fuzzy, python-format
 msgid " %(description)s (%(name)s)\n"
 msgstr " %(description)s (%(name)s)"
 
-#: ../roundup/admin.py:1942
+#: ../roundup/admin.py:1954
 #, fuzzy
 msgid ""
 "Usage: set items property=value [property=value ...]\n"
@@ -1404,7 +1408,7 @@
 "        asociados como nmeros separados por comas (\"1,2,3\").\n"
 "        "
 
-#: ../roundup/admin.py:2010
+#: ../roundup/admin.py:2022
 msgid ""
 "Usage: specification classname\n"
 "        Show the properties for a classname.\n"
@@ -1418,17 +1422,17 @@
 "        Visualiza las propiedades para una cierta clase.\n"
 "        "
 
-#: ../roundup/admin.py:2029
+#: ../roundup/admin.py:2041
 #, fuzzy, python-format
 msgid "%(key)s: %(value)s (key property)\n"
 msgstr "%(key)s: %(value)s (propiedad de clave)"
 
-#: ../roundup/admin.py:2032
+#: ../roundup/admin.py:2044
 #, fuzzy, python-format
 msgid "%(key)s: %(value)s\n"
 msgstr "%(key)s: %(value)s"
 
-#: ../roundup/admin.py:2035
+#: ../roundup/admin.py:2047
 msgid ""
 "Usage: table classname [property[,property]*]\n"
 "        List the instances of a class in tabular form.\n"
@@ -1492,17 +1496,17 @@
 "        caracteres.\n"
 "        "
 
-#: ../roundup/admin.py:2081
+#: ../roundup/admin.py:2093
 #, python-format
 msgid "\"%(spec)s\" not name:width"
 msgstr "\"%(spec)s\" no es de la forma nombre:longitud"
 
-#: ../roundup/admin.py:2103
+#: ../roundup/admin.py:2115
 #, python-format
 msgid "\"%(spec)s\" does not have an integer width: \"%(width)s\""
 msgstr ""
 
-#: ../roundup/admin.py:2139
+#: ../roundup/admin.py:2151
 msgid ""
 "Usage: templates [trace_search]\n"
 "        List templates and their installed directories.\n"
@@ -1512,13 +1516,14 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:2167
+#: ../roundup/admin.py:2179
 #, fuzzy
 msgid ""
 "Usage: updateconfig <filename>\n"
-"        Generate an updated tracker config file (ini style) in\n"
-"        <filename>. Use current settings from existing roundup\n"
-"        tracker in tracker home.\n"
+"        Merge existing tracker config with new settings.\n"
+"\n"
+"        Output the updated config file to <filename>. Use current\n"
+"        settings from existing roundup tracker in tracker home.\n"
 "        "
 msgstr ""
 "Uso:   genconfig <fichero>\n"
@@ -1528,36 +1533,36 @@
 "        "
 
 # ../roundup/cgi/actions.py:579 :590 :761 :780
-#: ../roundup/admin.py:2175 ../roundup/cgi/actions.py:886
+#: ../roundup/admin.py:2188 ../roundup/cgi/actions.py:886
 #: ../roundup/cgi/actions.py:897 ../roundup/cgi/actions.py:1099
 #: ../roundup/cgi/actions.py:1113 ../roundup/cgi/actions.py:886:897 :1099:1113
 #, python-format
 msgid "Error: %s"
 msgstr "Error: %s"
 
-#: ../roundup/admin.py:2207
+#: ../roundup/admin.py:2220
 #, 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:2213
+#: ../roundup/admin.py:2226
 #, python-format
 msgid "Multiple commands match \"%(command)s\": %(list)s"
 msgstr "Coinciden mas de un comando \"%(command)s\": %(list)s"
 
-#: ../roundup/admin.py:2228
+#: ../roundup/admin.py:2241
 msgid "Enter tracker home: "
 msgstr "Ingrese directorio base del tracker: "
 
-#: ../roundup/admin.py:2257 ../roundup/admin.py:2261
-#: ../roundup/admin.py:2257:2261
+#: ../roundup/admin.py:2270 ../roundup/admin.py:2274
+#: ../roundup/admin.py:2270:2274
 #, python-format
 msgid "Error: Couldn't open tracker: %(message)s"
 msgstr "Error: No se pudo abrir el tracker: %(message)s"
 
-#: ../roundup/admin.py:2309
+#: ../roundup/admin.py:2322
 #, python-format
 msgid ""
 "Roundup %s ready for input.\n"
@@ -1566,15 +1571,15 @@
 "Roundup %s listo para comandos.\n"
 "Tipee \"help\" para ayuda."
 
-#: ../roundup/admin.py:2342
+#: ../roundup/admin.py:2355
 msgid "Note: command history and editing not available"
 msgstr "Nota: historia y edicin de comandos no disponible"
 
-#: ../roundup/admin.py:2348
+#: ../roundup/admin.py:2361
 msgid "exit..."
 msgstr "salir..."
 
-#: ../roundup/admin.py:2361
+#: ../roundup/admin.py:2374
 msgid "There are unsaved changes. Commit them (y/N)? "
 msgstr "Hay cambios sin guardar. Debo guardar los mismos (y/N)? "
 
@@ -2112,7 +2117,7 @@
 msgid "<em>undefined</em>"
 msgstr "<em>indefinido/a</em>"
 
-#: ../roundup/cgi/client.py:90
+#: ../roundup/cgi/client.py:105
 msgid ""
 "<html><head><title>An error has occurred</title></head>\n"
 "<body><h1>An error has occurred</h1>\n"
@@ -2127,150 +2132,150 @@
 "p>\n"
 "</body></html>"
 
-#: ../roundup/cgi/client.py:702 ../roundup/cgi/client.py:1622
-#: ../roundup/cgi/client.py:702:1622
+#: ../roundup/cgi/client.py:717 ../roundup/cgi/client.py:1635
+#: ../roundup/cgi/client.py:717:1635
 msgid "Required Header Missing"
 msgstr ""
 
-#: ../roundup/cgi/client.py:704
+#: ../roundup/cgi/client.py:719
 #, 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:956
+#: ../roundup/cgi/client.py:971
 msgid "Form Error: "
 msgstr "Error de formulario"
 
-#: ../roundup/cgi/client.py:1049
+#: ../roundup/cgi/client.py:1064
 #, python-format
 msgid "Unrecognized charset: %r"
 msgstr "Conjunto de caracteres desconocido: %r"
 
-#: ../roundup/cgi/client.py:1318 ../roundup/cgi/client.py:2281
-#: ../roundup/cgi/client.py:1318:2281
+#: ../roundup/cgi/client.py:1331 ../roundup/cgi/client.py:2294
+#: ../roundup/cgi/client.py:1331:2294
 msgid "broken form: multiple @action values submitted"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1335
+#: ../roundup/cgi/client.py:1348
 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:1483
+#: ../roundup/cgi/client.py:1496
 msgid "Referer header not available."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1487
+#: ../roundup/cgi/client.py:1500
 #, python-format
 msgid "csrf key used with wrong method from: %s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1516
+#: ../roundup/cgi/client.py:1529
 #, python-format
 msgid "csrf header %(header)s required but missing for user%(userid)s."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1520
+#: ../roundup/cgi/client.py:1533
 #, python-format
 msgid "Missing header: %s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1528
+#: ../roundup/cgi/client.py:1541
 #, 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:1533
+#: ../roundup/cgi/client.py:1546
 #, fuzzy, python-format
 msgid "Invalid Referer: %s"
 msgstr "nombre de usuario  contrasea invlidos"
 
-#: ../roundup/cgi/client.py:1548
+#: ../roundup/cgi/client.py:1561
 #, 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:1553
+#: ../roundup/cgi/client.py:1566
 #, fuzzy, python-format
 msgid "Invalid Origin %s"
 msgstr "nombre de usuario  contrasea invlidos"
 
-#: ../roundup/cgi/client.py:1567
+#: ../roundup/cgi/client.py:1580
 #, python-format
 msgid ""
 "csrf X-FORWARDED-HOST header check failed for user%(userid)s. Value=%(host)s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1573
+#: ../roundup/cgi/client.py:1586
 #, python-format
 msgid "Invalid X-FORWARDED-HOST %s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1592
-#, python-format
-msgid "csrf HOST header check failed for user%(userid)s. Value=%(host)s"
-msgstr ""
-
-#: ../roundup/cgi/client.py:1597
-#, python-format
-msgid "Invalid HOST %s"
-msgstr ""
-
 #: ../roundup/cgi/client.py:1605
+#, python-format
+msgid "csrf HOST header check failed for user%(userid)s. Value=%(host)s"
+msgstr ""
+
+#: ../roundup/cgi/client.py:1610
+#, python-format
+msgid "Invalid HOST %s"
+msgstr ""
+
+#: ../roundup/cgi/client.py:1618
 msgid "Csrf: unable to verify sufficient headers"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1606
-msgid "Unable to verify sufficient headers"
-msgstr ""
-
 #: ../roundup/cgi/client.py:1619
+msgid "Unable to verify sufficient headers"
+msgstr ""
+
+#: ../roundup/cgi/client.py:1632
 #, python-format
 msgid "csrf X-REQUESTED-WITH xmlrpc required header check failed for user%s."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1660
+#: ../roundup/cgi/client.py:1673
 #, python-format
 msgid "Required csrf field missing for user%s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1662 ../roundup/cgi/client.py:1689
-#: ../roundup/cgi/client.py:1706 ../roundup/cgi/client.py:1662:1689:1706
+#: ../roundup/cgi/client.py:1675 ../roundup/cgi/client.py:1702
+#: ../roundup/cgi/client.py:1719 ../roundup/cgi/client.py:1675:1702:1719
 msgid ""
 "We can't validate your session (csrf failure). Re-enter any unsaved data and "
 "try again."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1666
+#: ../roundup/cgi/client.py:1679
 #, python-format
 msgid "csrf field not supplied by user%s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1678
+#: ../roundup/cgi/client.py:1691
 #, 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:1696
+#: ../roundup/cgi/client.py:1709
 #, 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:1888
+#: ../roundup/cgi/client.py:1901
 msgid "You are not allowed to view this file."
 msgstr "Ud. no tiene permitido ver este fichero"
 
-#: ../roundup/cgi/client.py:2159
+#: ../roundup/cgi/client.py:2172
 #, python-format
 msgid "%(starttag)sTime elapsed: %(seconds)fs%(endtag)s\n"
 msgstr "%(starttag)sTiempo transcurrido: %(seconds)fs%(endtag)s\n"
 
-#: ../roundup/cgi/client.py:2163
+#: ../roundup/cgi/client.py:2176
 #, python-format
 msgid ""
 "%(starttag)sCache hits: %(cache_hits)d, misses %(cache_misses)d. Loading "
@@ -2279,7 +2284,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:2703
+#: ../roundup/cgi/client.py:2716
 #, python-format
 msgid ""
 "Cache failure: compressed file %(compressed)s is older than its source file "
@@ -2349,72 +2354,72 @@
 "Las propiedades %(property)s de la clase %(class)s son obligatorias y no se "
 "han provisto"
 
-#: ../roundup/cgi/templating.py:277
+#: ../roundup/cgi/templating.py:278
 #, python-format
 msgid "You are not allowed to %(action)s items of class %(class)s"
 msgstr "Ud. no tiene permitido %(action)s items de la clase %(class)s"
 
-#: ../roundup/cgi/templating.py:914
+#: ../roundup/cgi/templating.py:916
 msgid "(list)"
 msgstr "(lista)"
 
-#: ../roundup/cgi/templating.py:989
+#: ../roundup/cgi/templating.py:991
 msgid "Submit New Entry"
 msgstr "Crear nuevo elemento"
 
 # ../roundup/cgi/templating.py:673 :792 :1166 :1187 :1231 :1253 :1287 :1326
 # :1377 :1394 :1470 :1490 :1503 :1520 :1530 :1580 :1755
-#: ../roundup/cgi/templating.py:1011 ../roundup/cgi/templating.py:1187
-#: ../roundup/cgi/templating.py:1822 ../roundup/cgi/templating.py:1853
-#: ../roundup/cgi/templating.py:1874 ../roundup/cgi/templating.py:1912
-#: ../roundup/cgi/templating.py:1965 ../roundup/cgi/templating.py:1989
-#: ../roundup/cgi/templating.py:1996 ../roundup/cgi/templating.py:2033
-#: ../roundup/cgi/templating.py:2086 ../roundup/cgi/templating.py:2119
-#: ../roundup/cgi/templating.py:2214 ../roundup/cgi/templating.py:2235
-#: ../roundup/cgi/templating.py:2326 ../roundup/cgi/templating.py:2346
-#: ../roundup/cgi/templating.py:2368 ../roundup/cgi/templating.py:2411
-#: ../roundup/cgi/templating.py:2421 ../roundup/cgi/templating.py:2486
-#: ../roundup/cgi/templating.py:2789 ../roundup/cgi/templating.py:1011:1187
-#: :1822:1853 :1874:1912 :1965:1989 :1996:2033 :2086:2119 :2214:2235 :2326:2346
-#: :2368:2411 :2421:2486:2789
+#: ../roundup/cgi/templating.py:1013 ../roundup/cgi/templating.py:1189
+#: ../roundup/cgi/templating.py:1824 ../roundup/cgi/templating.py:1855
+#: ../roundup/cgi/templating.py:1876 ../roundup/cgi/templating.py:1914
+#: ../roundup/cgi/templating.py:1967 ../roundup/cgi/templating.py:1991
+#: ../roundup/cgi/templating.py:1998 ../roundup/cgi/templating.py:2035
+#: ../roundup/cgi/templating.py:2088 ../roundup/cgi/templating.py:2121
+#: ../roundup/cgi/templating.py:2216 ../roundup/cgi/templating.py:2237
+#: ../roundup/cgi/templating.py:2328 ../roundup/cgi/templating.py:2348
+#: ../roundup/cgi/templating.py:2370 ../roundup/cgi/templating.py:2413
+#: ../roundup/cgi/templating.py:2423 ../roundup/cgi/templating.py:2488
+#: ../roundup/cgi/templating.py:2791 ../roundup/cgi/templating.py:1013:1189
+#: :1824:1855 :1876:1914 :1967:1991 :1998:2035 :2088:2121 :2216:2237 :2328:2348
+#: :2370:2413 :2423:2488:2791
 msgid "[hidden]"
 msgstr "[oculto]"
 
-#: ../roundup/cgi/templating.py:1012
+#: ../roundup/cgi/templating.py:1014
 msgid "New node - no history"
 msgstr "Nuevo nodo - sin historia"
 
-#: ../roundup/cgi/templating.py:1152
+#: ../roundup/cgi/templating.py:1154
 msgid "Submit Changes"
 msgstr "Enviar modificaciones"
 
-#: ../roundup/cgi/templating.py:1230
+#: ../roundup/cgi/templating.py:1232
 msgid "<em>The indicated property no longer exists</em>"
 msgstr "<em>La propiedad indicada ya no existe</em>"
 
-#: ../roundup/cgi/templating.py:1266
+#: ../roundup/cgi/templating.py:1268
 #, python-format
 msgid "The linked class %(classname)s no longer exists"
 msgstr "La clase relacionada %(classname)s ya no existe"
 
-#: ../roundup/cgi/templating.py:1303 ../roundup/cgi/templating.py:1333
-#: ../roundup/cgi/templating.py:2495 ../roundup/cgi/templating.py:2798
-#: ../roundup/cgi/templating.py:1303:1333 :2495:2798
+#: ../roundup/cgi/templating.py:1305 ../roundup/cgi/templating.py:1335
+#: ../roundup/cgi/templating.py:2497 ../roundup/cgi/templating.py:2800
+#: ../roundup/cgi/templating.py:1305:1335 :2497:2800
 msgid "[label is missing]"
 msgstr ""
 
 # ../roundup/cgi/templating.py:903 :924
-#: ../roundup/cgi/templating.py:1307 ../roundup/cgi/templating.py:1336
-#: ../roundup/cgi/templating.py:1307:1336
+#: ../roundup/cgi/templating.py:1309 ../roundup/cgi/templating.py:1338
+#: ../roundup/cgi/templating.py:1309:1338
 msgid "<strike>The linked node no longer exists</strike>"
 msgstr "<strike>El nodo relacionado ya no existe</strike>"
 
-#: ../roundup/cgi/templating.py:1398
+#: ../roundup/cgi/templating.py:1400
 #, python-format
 msgid "%s: (no value)"
 msgstr "%s: (sin valor)"
 
-#: ../roundup/cgi/templating.py:1414
+#: ../roundup/cgi/templating.py:1416
 #, fuzzy, python-format
 msgid ""
 "<strong><em>This event %s is not handled by the history display!</em></"
@@ -2423,46 +2428,46 @@
 "<strong><em>Este evento no es soportado por la visualizacin de historia!</"
 "em></strong>"
 
-#: ../roundup/cgi/templating.py:1427
+#: ../roundup/cgi/templating.py:1429
 msgid "<tr><td colspan=4><strong>Note:</strong></td></tr>"
 msgstr "<tr><td colspan=4><strong>Nota:</strong></td></tr>"
 
-#: ../roundup/cgi/templating.py:1436
+#: ../roundup/cgi/templating.py:1438
 msgid "History"
 msgstr "Historia"
 
-#: ../roundup/cgi/templating.py:1438
+#: ../roundup/cgi/templating.py:1440
 msgid "<th>Date</th>"
 msgstr "<th>Fecha</th>"
 
-#: ../roundup/cgi/templating.py:1439
+#: ../roundup/cgi/templating.py:1441
 msgid "<th>User</th>"
 msgstr "<th>Usuario</th>"
 
-#: ../roundup/cgi/templating.py:1440
+#: ../roundup/cgi/templating.py:1442
 msgid "<th>Action</th>"
 msgstr "<th>Accin</th>"
 
-#: ../roundup/cgi/templating.py:1441
+#: ../roundup/cgi/templating.py:1443
 msgid "<th>Args</th>"
 msgstr "<th>Args</th>"
 
-#: ../roundup/cgi/templating.py:1492
+#: ../roundup/cgi/templating.py:1494
 #, python-format
 msgid "Copy of %(class)s %(id)s"
 msgstr "Copia de %(class)s %(id)s"
 
-#: ../roundup/cgi/templating.py:2123 ../roundup/cgi/templating.py:2158
-#: ../roundup/cgi/templating.py:1380:2123:2158
+#: ../roundup/cgi/templating.py:2125 ../roundup/cgi/templating.py:2160
+#: ../roundup/cgi/templating.py:1382:2125:2160
 msgid "No"
 msgstr "No"
 
-#: ../roundup/cgi/templating.py:2123 ../roundup/cgi/templating.py:2152
-#: ../roundup/cgi/templating.py:1380:2123:2152
+#: ../roundup/cgi/templating.py:2125 ../roundup/cgi/templating.py:2154
+#: ../roundup/cgi/templating.py:1382:2125:2154
 msgid "Yes"
 msgstr "Si"
 
-#: ../roundup/cgi/templating.py:2284
+#: ../roundup/cgi/templating.py:2286
 msgid ""
 "default value for DateHTMLProperty must be either DateHTMLProperty or string "
 "date representation."
@@ -2470,27 +2475,27 @@
 "el valor por defecto para DateHTMLProperty debe ser un DateHTMLProperty o "
 "una cadena que represente una fecha."
 
-#: ../roundup/cgi/templating.py:2466
+#: ../roundup/cgi/templating.py:2468
 #, python-format
 msgid "Attempt to look up %(attr)s on a missing value"
 msgstr "Se intent buscar %(attr)s en un valor faltante"
 
-#: ../roundup/cgi/templating.py:2477
+#: ../roundup/cgi/templating.py:2479
 #, fuzzy, python-format
 msgid "Attempt to look up %(item)s on a missing value"
 msgstr "Se intent buscar %(attr)s en un valor faltante"
 
-#: ../roundup/cgi/templating.py:2582
+#: ../roundup/cgi/templating.py:2584
 #, python-format
 msgid "<option %svalue=\"-1\">- no selection -</option>"
 msgstr "<option %svalue=\"-1\">- sin seleccin -</option>"
 
-#: ../roundup/cgi/templating.py:3743
+#: ../roundup/cgi/templating.py:3745
 #, python-format
 msgid "Unable to read or expand file '%(name)s' in template '%(template)s'."
 msgstr ""
 
-#: ../roundup/cgi/templating.py:3793
+#: ../roundup/cgi/templating.py:3795
 #, python-format
 msgid ""
 "Found an incorrect token when expandfile applied string subsitution on "
@@ -3039,6 +3044,64 @@
 msgid "not of form [arg=value,value,...;arg=value,value,...]"
 msgstr "no es de la forma [arg=valor,valor,...;arg=valor,valor,...]"
 
+#: ../roundup/pygettext.py:401
+#, python-format
+msgid "*** %(file)s:%(lineno)s: Seen unexpected token \"%(token)s\""
+msgstr ""
+
+#: ../roundup/pygettext.py:457
+#, python-format
+msgid "# File: %(filename)s, line: %(lineno)d"
+msgstr ""
+
+#: ../roundup/pygettext.py:464
+#, python-format
+msgid " %(filename)s:%(lineno)d"
+msgstr ""
+
+# ../roundup/cgi/actions.py:891 :895
+#: ../roundup/pygettext.py:540
+#, fuzzy, python-format
+msgid "Invalid value for --style: %s"
+msgstr "nombre de usuario  contrasea invlidos"
+
+#: ../roundup/pygettext.py:548
+#, python-format
+msgid "pygettext.py (xgettext for Python) %s"
+msgstr ""
+
+#: ../roundup/pygettext.py:554
+#, python-format
+msgid "--width argument must be an integer: %s"
+msgstr ""
+
+#: ../roundup/pygettext.py:582
+#, python-format
+msgid "Can't read --exclude-file: %s"
+msgstr ""
+
+#: ../roundup/pygettext.py:601
+msgid "Reading standard input"
+msgstr ""
+
+#: ../roundup/pygettext.py:606
+#, python-format
+msgid "Working on %s"
+msgstr ""
+
+#: ../roundup/pygettext.py:640
+msgid "a unicode string"
+msgstr ""
+
+#: ../roundup/pygettext.py:642
+#, python-format
+msgid "*** Seen unexpected token \"%(token)s\""
+msgstr ""
+
+#: ../roundup/pygettext.py:643
+msgid "morethanonestring"
+msgstr ""
+
 #: ../roundup/rest.py:410
 #, python-format
 msgid "Method %(m)s not allowed. Allowed: %(a)s"
@@ -3069,7 +3132,7 @@
 "%(acceptable_types)s"
 msgstr ""
 
-#: ../roundup/rest.py:2437
+#: ../roundup/rest.py:2441
 #, python-format
 msgid ""
 "Unrecognized api version: %s. See /rest without specifying api version for "
@@ -3175,25 +3238,34 @@
 "Antes:\n"
 "%(old)s"
 
-#: ../roundup/scripts/roundup_demo.py:151
+#: ../roundup/scripts/roundup_demo.py:50
+#, python-format
+msgid ""
+"Enter tracker template to use (one of (%(template_list)s)) "
+"[%(default_template)s]: "
+msgstr ""
+
+#: ../roundup/scripts/roundup_demo.py:166
 #, python-format
 msgid "Enter directory path to create demo tracker [%s]: "
 msgstr ""
 "Ingrese la ruta al directorio en el que se crear el tracker demo [%s]: "
 
-#: ../roundup/scripts/roundup_demo.py:170
-#, python-format
+#: ../roundup/scripts/roundup_gettext.py:33
 msgid ""
-"Enter tracker template to use (one of (%(template_list)s)) "
-"[%(default_template)s]: "
-msgstr ""
-
-#: ../roundup/scripts/roundup_gettext.py:35
+"\n"
+"Extracting translatable strings only from html templates.\n"
+"Because the 'polib' module is missing, unable to extract\n"
+"translations from detectors or extensions.\n"
+"The 'polib' module can be installed with pip.\n"
+msgstr ""
+
+#: ../roundup/scripts/roundup_gettext.py:71
 #, python-format
 msgid "Usage: %(program)s <tracker home>"
 msgstr "Uso: %(program)s <directorio base de tracker>"
 
-#: ../roundup/scripts/roundup_gettext.py:51
+#: ../roundup/scripts/roundup_gettext.py:89
 #, python-format
 msgid "No tracker templates found in directory %s"
 msgstr "No se encontraron templates de trackers en el directorio %s"
--- a/locale/fr.po	Wed Aug 07 21:43:40 2024 -0400
+++ b/locale/fr.po	Wed Aug 07 21:52:58 2024 -0400
@@ -10,7 +10,7 @@
 msgstr ""
 "Project-Id-Version: Roundup 2.4.0\n"
 "Report-Msgid-Bugs-To: roundup-devel@lists.sourceforge.net\n"
-"POT-Creation-Date: 2024-07-09 15:12-0400\n"
+"POT-Creation-Date: 2024-08-07 21:43-0400\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"
@@ -31,19 +31,19 @@
 msgid "You may not retire the admin or anonymous user"
 msgstr "Vous ne pouvez pas abandonner les utilisateurs admin ou anonyme"
 
-#: ../roundup/admin.py:130
+#: ../roundup/admin.py:131
 msgid ""
 "Have 'display designator[,designator*]' show header inside\n"
 "      []'s before items. Includes retired/active status.\n"
 msgstr ""
 
-#: ../roundup/admin.py:134
+#: ../roundup/admin.py:135
 msgid ""
 "Have 'display designator' and 'specification class' show\n"
 "      protected fields: creator, id etc.\n"
 msgstr ""
 
-#: ../roundup/admin.py:138
+#: ../roundup/admin.py:139
 msgid ""
 "Controls history options. It is a bitstring where setting\n"
 "      the bit disables the feature. A value of 0 (default)\n"
@@ -54,54 +54,54 @@
 "      history.\n"
 msgstr ""
 
-#: ../roundup/admin.py:147
+#: ../roundup/admin.py:148
 msgid ""
 "Set the number of lines of history to keep for this session.\n"
 "      -1 is infinite.\n"
 msgstr ""
 
-#: ../roundup/admin.py:151
+#: ../roundup/admin.py:152
 msgid "Set indexer to use when running 'reindex' NYI\n"
 msgstr ""
 
-#: ../roundup/admin.py:154
+#: ../roundup/admin.py:155
 msgid "Force reopening of tracker when running each command.\n"
 msgstr ""
 
-#: ../roundup/admin.py:157
+#: ../roundup/admin.py:158
 msgid ""
 "set the number of rows imported before a database commit is\n"
 "      done. Used only for imports on PostgreSQL.\n"
 msgstr ""
 
-#: ../roundup/admin.py:159
+#: ../roundup/admin.py:160
 msgid "Show retired items in table, list etc. One of 'no', 'only', 'both'\n"
 msgstr ""
 
-#: ../roundup/admin.py:161
-msgid "internal mapping for show_retired.\n"
-msgstr ""
-
 #: ../roundup/admin.py:162
+msgid "internal mapping for show_retired.\n"
+msgstr ""
+
+#: ../roundup/admin.py:163
 msgid "Enable verbose output: tracing, descriptions...\n"
 msgstr ""
 
 # ../roundup/admin.py:85 :979 :1028 :1050
 # ../roundup/admin.py:1052 ../roundup/admin.py:85:981 :1030:1052
-#: ../roundup/admin.py:174 ../roundup/admin.py:1179 ../roundup/admin.py:1824
-#: ../roundup/admin.py:1856 ../roundup/admin.py:174:1179 :1824:1856
+#: ../roundup/admin.py:175 ../roundup/admin.py:1188 ../roundup/admin.py:1836
+#: ../roundup/admin.py:1868 ../roundup/admin.py:175:1188 :1836:1868
 #, 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:187
+#: ../roundup/admin.py:188
 #, 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:200
+#: ../roundup/admin.py:201
 #, python-format
 msgid ""
 "Problem: %(message)s\n"
@@ -110,7 +110,7 @@
 "Problme: %(message)s\n"
 "\n"
 
-#: ../roundup/admin.py:201
+#: ../roundup/admin.py:202
 #, fuzzy, python-format
 msgid ""
 "%(message)sUsage: roundup-admin [options] [<command> <arguments>]\n"
@@ -169,12 +169,12 @@
 " roundup-admin help <commande>            -- l'aide sur une commande\n"
 " roundup-admin help all                   -- toute l'aide disponible\n"
 
-#: ../roundup/admin.py:230
+#: ../roundup/admin.py:231
 #, fuzzy
 msgid "Commands: "
 msgstr "Commandes:"
 
-#: ../roundup/admin.py:237
+#: ../roundup/admin.py:238
 msgid ""
 "Commands may be abbreviated as long as the abbreviation\n"
 "matches only one command, e.g. l == li == lis == list."
@@ -183,7 +183,7 @@
 "o l'abrviation ne correspond qu' une seule commande,\n"
 "par ex.: l == li == lis == list."
 
-#: ../roundup/admin.py:266
+#: ../roundup/admin.py:270
 #, fuzzy
 msgid ""
 "\n"
@@ -323,27 +323,27 @@
 "\n"
 "Aide sur les commandes:\n"
 
-#: ../roundup/admin.py:330
+#: ../roundup/admin.py:334
 #, python-format
 msgid "%s:"
 msgstr "%s:"
 
 # ../roundup/admin.py:338 :394
 # ../roundup/admin.py:340 ../roundup/admin.py:396 ../roundup/admin.py:340:396
-#: ../roundup/admin.py:435 ../roundup/admin.py:1384
-#: ../roundup/admin.py:435:1384
+#: ../roundup/admin.py:439 ../roundup/admin.py:1396
+#: ../roundup/admin.py:439:1396
 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:438 ../roundup/admin.py:1394
-#: ../roundup/admin.py:438:1394
+#: ../roundup/admin.py:442 ../roundup/admin.py:1406
+#: ../roundup/admin.py:442:1406
 msgid "Back ends:"
 msgstr "Moteurs de stockage:"
 
 #. noqa: ARG002
-#: ../roundup/admin.py:455
+#: ../roundup/admin.py:459
 msgid ""
 "Usage: commit\n"
 "        Commit changes made to the database during an interactive session.\n"
@@ -368,7 +368,7 @@
 "        automatiquement valides si elles russissent.\n"
 "        "
 
-#: ../roundup/admin.py:470
+#: ../roundup/admin.py:474
 msgid ""
 "Usage: create classname property=value ...\n"
 "        Create a new entry of a given class.\n"
@@ -392,46 +392,45 @@
 # :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:478 ../roundup/admin.py:552 ../roundup/admin.py:600
-#: ../roundup/admin.py:723 ../roundup/admin.py:796 ../roundup/admin.py:842
-#: ../roundup/admin.py:893 ../roundup/admin.py:990 ../roundup/admin.py:1206
-#: ../roundup/admin.py:1357 ../roundup/admin.py:1485 ../roundup/admin.py:1571
-#: ../roundup/admin.py:1691 ../roundup/admin.py:1814 ../roundup/admin.py:1846
-#: ../roundup/admin.py:1962 ../roundup/admin.py:2016 ../roundup/admin.py:2064
-#: ../roundup/admin.py:478:552 :1206:1357:1485 :1571:1691 :1814:1846 :1962:2016
-#: :2064 :600:723 :796:842 :893:990
+#: ../roundup/admin.py:482 ../roundup/admin.py:555 ../roundup/admin.py:606
+#: ../roundup/admin.py:733 ../roundup/admin.py:806 ../roundup/admin.py:851
+#: ../roundup/admin.py:902 ../roundup/admin.py:999 ../roundup/admin.py:1216
+#: ../roundup/admin.py:1369 ../roundup/admin.py:1497 ../roundup/admin.py:1580
+#: ../roundup/admin.py:1703 ../roundup/admin.py:1826 ../roundup/admin.py:1858
+#: ../roundup/admin.py:1974 ../roundup/admin.py:2028 ../roundup/admin.py:2076
+#: ../roundup/admin.py:482:555 :1216:1369:1497 :1580:1703 :1826:1858 :1974:2028
+#: :2076 :606:733 :806:851 :902:999
 msgid "Not enough arguments supplied"
 msgstr "Pas suffisamment d'arguments fournis"
 
-#: ../roundup/admin.py:498
+#: ../roundup/admin.py:502
 #, python-format
 msgid "%(propname)s (Password): "
 msgstr "%(propname)s (mot de passe): "
 
-#: ../roundup/admin.py:501
+#: ../roundup/admin.py:505
 #, python-format
 msgid "   %(propname)s (Again): "
 msgstr "   %(propname)s ( nouveau): "
 
-#: ../roundup/admin.py:505
+#: ../roundup/admin.py:509
 msgid "Sorry, try again..."
 msgstr "Dsol, essayez  nouveau..."
 
-#: ../roundup/admin.py:510
+#: ../roundup/admin.py:514
 #, python-format
 msgid "%(propname)s (%(proptype)s): "
 msgstr "%(propname)s (%(proptype)s): "
 
-#: ../roundup/admin.py:529
+#: ../roundup/admin.py:533
 #, python-format
 msgid "you must provide the \"%(propname)s\" property."
 msgstr "vous devez renseigner la proprit %(propname)s."
 
-#: ../roundup/admin.py:541
+#: ../roundup/admin.py:545
 #, fuzzy
 msgid ""
 "Usage: display designator[,designator]*\n"
-"\n"
 "        Show the property values for the given node(s).\n"
 "\n"
 "        A designator is a classname and a nodeid concatenated,\n"
@@ -448,25 +447,59 @@
 "        des noeuds indiqus.\n"
 "        "
 
-#: ../roundup/admin.py:583
+#: ../roundup/admin.py:586
 #, fuzzy, python-format
 msgid "%(protected)s%(key)s: %(value)s"
 msgstr "%(key)s: %(value)s"
 
 #. grab the directory to export to
-#: ../roundup/admin.py:586
+#: ../roundup/admin.py:589
 #, fuzzy
 msgid ""
 "Usage: export [[-]class[,class]] export_dir\n"
-"        Export the database to colon-separated-value files.\n"
+"        Export the database and file content.\n"
+"\n"
+"        Database content is exported to colon separated files.\n"
 "        To exclude the files (e.g. for the msg or file class),\n"
 "        use the exporttables command.\n"
 "\n"
 "        Optionally limit the export to just the named classes\n"
-"        or exclude the named classes, if the 1st argument starts with '-'.\n"
+"        or exclude the named classes, if the 1st argument\n"
+"        starts with '-'.\n"
 "\n"
 "        This action exports the current data from the database into\n"
 "        colon-separated-value files that are placed in the nominated\n"
+"        export_dir directory.\n"
+"        "
+msgstr ""
+"Utilisation: export [classe[,classe]] rpertoire-d'exportation\n"
+"        Exporte la base de donnes vers des fichiers dans un format\n"
+"        aux valeurs spares par des double-points.\n"
+"\n"
+"        Limite ventuellement l'exportation aux classes indiques.\n"
+"\n"
+"        Cette action exporte les donnes actuelles de la base de donnes,\n"
+"        vers des fichiers placs dans le rpertoire dsign, et dans un \n"
+"        format aux valeurs spares par des doubles-points.\n"
+"        "
+
+#: ../roundup/admin.py:704
+#, fuzzy
+msgid ""
+"Usage: exporttables [[-]class[,class]] export_dir\n"
+"        Export only the database to files, no file content.\n"
+"\n"
+"        Database content is exported to colon separated files.\n"
+"        The files below $TRACKER_HOME/db/files/ (which can be\n"
+"        archived separately) are not part of the export.\n"
+"        To include the files, use the export command.\n"
+"\n"
+"        Optionally limit the export to just the named classes\n"
+"        or exclude the named classes, if the 1st argument\n"
+"        starts with '-'.\n"
+"\n"
+"        This action exports the current data from the database into\n"
+"        colon-separated-value files that are placed in the export_dir\n"
 "        destination directory.\n"
 "        "
 msgstr ""
@@ -481,35 +514,7 @@
 "        format aux valeurs spares par des doubles-points.\n"
 "        "
 
-#: ../roundup/admin.py:698
-#, fuzzy
-msgid ""
-"Usage: exporttables [[-]class[,class]] export_dir\n"
-"        Export the database to colon-separated-value files, excluding the\n"
-"        files below $TRACKER_HOME/db/files/ (which can be archived "
-"separately).\n"
-"        To include the files, use the export command.\n"
-"\n"
-"        Optionally limit the export to just the named classes\n"
-"        or exclude the named classes, if the 1st argument starts with '-'.\n"
-"\n"
-"        This action exports the current data from the database into\n"
-"        colon-separated-value files that are placed in the nominated\n"
-"        destination directory.\n"
-"        "
-msgstr ""
-"Utilisation: export [classe[,classe]] rpertoire-d'exportation\n"
-"        Exporte la base de donnes vers des fichiers dans un format\n"
-"        aux valeurs spares par des double-points.\n"
-"\n"
-"        Limite ventuellement l'exportation aux classes indiques.\n"
-"\n"
-"        Cette action exporte les donnes actuelles de la base de donnes,\n"
-"        vers des fichiers placs dans le rpertoire dsign, et dans un \n"
-"        format aux valeurs spares par des doubles-points.\n"
-"        "
-
-#: ../roundup/admin.py:713
+#: ../roundup/admin.py:723
 #, fuzzy
 msgid ""
 "Usage: filter classname propname=value ...\n"
@@ -533,21 +538,21 @@
 
 # ../roundup/admin.py:699 :852 :864 :918
 # ../roundup/admin.py:920 ../roundup/admin.py:701:854 :866:920
-#: ../roundup/admin.py:754
+#: ../roundup/admin.py:764
 #, 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:781 ../roundup/admin.py:830 ../roundup/admin.py:1505
-#: ../roundup/admin.py:1518 ../roundup/admin.py:2086
-#: ../roundup/admin.py:781:830 :1505:1518:2086
+#: ../roundup/admin.py:791 ../roundup/admin.py:840 ../roundup/admin.py:1517
+#: ../roundup/admin.py:1530 ../roundup/admin.py:2098
+#: ../roundup/admin.py:791:840 :1517:1530:2098
 #, python-format
 msgid "%(classname)s has no property \"%(propname)s\""
 msgstr "%(classname)s n'a pas de proprit %(propname)s"
 
-#: ../roundup/admin.py:788
+#: ../roundup/admin.py:798
 msgid ""
 "Usage: find classname propname=value ...\n"
 "        Find the nodes of the given class with a given link property value.\n"
@@ -566,12 +571,11 @@
 "        noeud li, ou sa valeur de cl.\n"
 "        "
 
-#: ../roundup/admin.py:837
+#: ../roundup/admin.py:847
 #, fuzzy
 msgid ""
-"Usage: genconfig <filename>\n"
-"        Generate a new tracker config file (ini style) with default\n"
-"        values in <filename>.\n"
+"Usage: genconfig filename\n"
+"        Create a new tracker config file with default values in filename.\n"
 "        "
 msgstr ""
 "Utilisation: genconfig <nomfichier>\n"
@@ -579,7 +583,7 @@
 "              (au format ini) avec des valeurs par dfaut dans\n"
 "              <nomfichier>"
 
-#: ../roundup/admin.py:855
+#: ../roundup/admin.py:864
 #, python-format
 msgid ""
 "Changing option\n"
@@ -587,20 +591,20 @@
 "from old default of %(old_number)s to new default of %(new_number)s."
 msgstr ""
 
-#: ../roundup/admin.py:866
+#: ../roundup/admin.py:875
 #, python-format
 msgid ""
 "Update 'password_pbkdf2_default_rounds' to a number equal to or larger\n"
 "  than %s.\n"
 msgstr ""
 
-#: ../roundup/admin.py:873
+#: ../roundup/admin.py:882
 msgid ""
 "Check the rdbms mysql_* settings. Your charset and collations may need\n"
 "  to be changed. See upgrading instructions.\n"
 msgstr ""
 
-#: ../roundup/admin.py:883
+#: ../roundup/admin.py:892
 #, fuzzy
 msgid ""
 "Usage: get property designator[,designator]*\n"
@@ -622,7 +626,7 @@
 
 # ../roundup/admin.py:558 :573
 # ../roundup/admin.py:560 ../roundup/admin.py:575 ../roundup/admin.py:560:575
-#: ../roundup/admin.py:916
+#: ../roundup/admin.py:925
 #, python-format
 msgid "property %s is not of type Multilink or Link so -d flag does not apply."
 msgstr ""
@@ -631,19 +635,19 @@
 
 # ../roundup/admin.py:581 :981 :1030 :1052
 # ../roundup/admin.py:1054 ../roundup/admin.py:583:983 :1032:1054
-#: ../roundup/admin.py:933 ../roundup/admin.py:1181 ../roundup/admin.py:1858
-#: ../roundup/admin.py:933:1181:1858
+#: ../roundup/admin.py:942 ../roundup/admin.py:1190 ../roundup/admin.py:1842
+#: ../roundup/admin.py:1870 ../roundup/admin.py:942:1190 :1842:1870
 #, 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:936
+#: ../roundup/admin.py:945
 #, 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:941
+#: ../roundup/admin.py:950
 msgid ""
 "Usage: help topic\n"
 "        Give help about topic.\n"
@@ -663,12 +667,12 @@
 "        all        -- toute l'aide disponible\n"
 "        "
 
-#: ../roundup/admin.py:960
+#: ../roundup/admin.py:969
 #, python-format
 msgid "Sorry, no help for \"%(topic)s\""
 msgstr "Dsol, aucune aide n'est disponible au sujet de %(topic)s"
 
-#: ../roundup/admin.py:977
+#: ../roundup/admin.py:986
 #, fuzzy
 msgid ""
 "Usage: history designator [skipquiet] [raw]\n"
@@ -691,27 +695,27 @@
 "        valeur de cl peut tre r-utilise.\n"
 "        "
 
-#: ../roundup/admin.py:1002
+#: ../roundup/admin.py:1011
 #, python-format
 msgid "Unexpected argument(s): %s. Expected 'skipquiet' or 'raw'."
 msgstr ""
 
-#: ../roundup/admin.py:1053
+#: ../roundup/admin.py:1062
 #, fuzzy
 msgid "removed"
 msgstr "supprimer"
 
-#: ../roundup/admin.py:1055
+#: ../roundup/admin.py:1064
 msgid "added"
 msgstr ""
 
-#: ../roundup/admin.py:1057
+#: ../roundup/admin.py:1066
 #, python-format
 msgid "Unknown history set operation '%s'. Expected +/-."
 msgstr ""
 
 #. .Hint added issue23 to superseder
-#: ../roundup/admin.py:1082
+#: ../roundup/admin.py:1091
 #, fuzzy, python-format
 msgid "added %(class)s%(item_id)s to %(propname)s"
 msgstr "%(class)s %(id)s %(properties)s modifi(s) avec succs"
@@ -719,34 +723,36 @@
 #. .Hint read as: assignedto was admin(1)
 #. where assignedto is the property
 #. admin is the key name for value 1
-#: ../roundup/admin.py:1103
+#: ../roundup/admin.py:1112
 #, fuzzy, python-format
 msgid "%(prop)s was %(name)s(%(value)s)"
 msgstr "%(propname)s (%(proptype)s): "
 
-#: ../roundup/admin.py:1109 ../roundup/admin.py:1138
-#: ../roundup/admin.py:1109:1138
+#: ../roundup/admin.py:1118 ../roundup/admin.py:1147
+#: ../roundup/admin.py:1118:1147
 #, fuzzy, python-format
 msgid "%(prop)s was %(value)s"
 msgstr "%(key)s: %(value)s"
 
-#: ../roundup/admin.py:1128
+#: ../roundup/admin.py:1137
 #, python-format
 msgid "%(prop)s was [%(value_list)s]"
 msgstr ""
 
 #. .Hint modified nosy: added demo(3)
-#: ../roundup/admin.py:1135
+#: ../roundup/admin.py:1144
 #, python-format
 msgid "modified %(prop)s: %(how)s"
 msgstr ""
 
-#: ../roundup/admin.py:1186
+#: ../roundup/admin.py:1195
+#, fuzzy
 msgid ""
 "Usage: import import_dir\n"
-"        Import a database from the directory containing CSV files,\n"
-"        two per class to import.\n"
-"\n"
+"        Import a database and file contents from the directory.\n"
+"\n"
+"        The directory should have the same format as one containing\n"
+"        the output of export. There are two files imported per class.\n"
 "        The files used in the import are:\n"
 "\n"
 "        <class>.csv\n"
@@ -786,16 +792,17 @@
 "        plus pniblement, abandonnez toutes les anciennes donnes).\n"
 "        "
 
-#: ../roundup/admin.py:1276
+#: ../roundup/admin.py:1287
 msgid ""
 "Usage: importtables export_dir\n"
-"\n"
 "        This imports the database tables exported using exporttables.\n"
+"\n"
+"        It does not import the content of files like msgs and files.\n"
 "        "
 msgstr ""
 
 #. password
-#: ../roundup/admin.py:1283
+#: ../roundup/admin.py:1295
 msgid ""
 "Usage: initialise [adminpw]\n"
 "        Initialise a new Roundup tracker.\n"
@@ -814,23 +821,23 @@
 "        Excute la fonction d'initialisation dbinit.init() du pisteur.\n"
 "        "
 
-#: ../roundup/admin.py:1297
+#: ../roundup/admin.py:1309
 msgid "Admin Password: "
 msgstr "Mot de passe administrateur: "
 
-#: ../roundup/admin.py:1298
+#: ../roundup/admin.py:1310
 msgid "       Confirm: "
 msgstr "       Confirmez: "
 
-#: ../roundup/admin.py:1302
+#: ../roundup/admin.py:1314
 msgid "Instance home does not exist"
 msgstr "Le rpertoire racine de l'instance n'existe pas"
 
-#: ../roundup/admin.py:1306
+#: ../roundup/admin.py:1318
 msgid "Instance has not been installed"
 msgstr "L'instance n'a pas t installe"
 
-#: ../roundup/admin.py:1314
+#: ../roundup/admin.py:1326
 msgid ""
 "WARNING: The database is already initialised!\n"
 "If you re-initialise it, you will lose all the data!\n"
@@ -840,7 +847,7 @@
 "Si vous la rinitialisez, vous perdrez toutes les donnes!\n"
 "Supprimez la base de donnes (Y/N)? "
 
-#: ../roundup/admin.py:1334
+#: ../roundup/admin.py:1346
 #, fuzzy
 msgid ""
 "Usage: install [template [backend [key=val[,key=val]]]]\n"
@@ -895,12 +902,12 @@
 "        Consultez galement l'aide sur initopts.\n"
 "        "
 
-#: ../roundup/admin.py:1363
+#: ../roundup/admin.py:1375
 #, 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:1372
+#: ../roundup/admin.py:1384
 #, python-format
 msgid ""
 "WARNING: There appears to be a tracker in \"%(tracker_home)s\"!\n"
@@ -912,22 +919,22 @@
 "Si vous le rinstallez, vous perdrez toutes les donnes!\n"
 "Supprimer le pisteur (Y/N)? "
 
-#: ../roundup/admin.py:1385
+#: ../roundup/admin.py:1397
 #, fuzzy
 msgid "Select template"
 msgstr "Slection du modle [classic]: "
 
-#: ../roundup/admin.py:1395
+#: ../roundup/admin.py:1407
 #, fuzzy
 msgid "Select backend"
 msgstr "Slection du moteur de stockage [anydbm]: "
 
-#: ../roundup/admin.py:1406
+#: ../roundup/admin.py:1418
 #, python-format
 msgid "Error in configuration settings: \"%s\""
 msgstr "Erreur dans les paramtres de la configuration: %s"
 
-#: ../roundup/admin.py:1439
+#: ../roundup/admin.py:1451
 #, python-format
 msgid ""
 "\n"
@@ -940,11 +947,11 @@
 " Vous devez maintenant modifier le fichier de configuration du pisteur:\n"
 "    %(config_file)s"
 
-#: ../roundup/admin.py:1449
+#: ../roundup/admin.py:1461
 msgid " ... at a minimum, you must set following options:"
 msgstr " ou au minimum, vous devez dfinir les options suivantes:"
 
-#: ../roundup/admin.py:1454
+#: ../roundup/admin.py:1466
 #, python-format
 msgid ""
 "\n"
@@ -976,7 +983,7 @@
 " que vous avez ralis les tapes prcdentes.\n"
 "---------------------------------------------------------------------------\n"
 
-#: ../roundup/admin.py:1470
+#: ../roundup/admin.py:1482
 msgid ""
 "Usage: list classname [property]\n"
 "        List the instances of a class.\n"
@@ -1006,20 +1013,19 @@
 "        proprit pour chaque instance de cette classe.\n"
 "        "
 
-#: ../roundup/admin.py:1483
+#: ../roundup/admin.py:1495
 msgid "Too many arguments supplied"
 msgstr "Trop d'arguments fournis"
 
-#: ../roundup/admin.py:1516
+#: ../roundup/admin.py:1528
 #, python-format
 msgid "%(nodeid)4s: %(value)s"
 msgstr "%(nodeid)4s: %(value)s"
 
 #. noqa: ARG002  - args unused
-#: ../roundup/admin.py:1523
+#: ../roundup/admin.py:1535
 msgid ""
 "Usage: migrate\n"
-"\n"
 "        Update a tracker's database to be compatible with the Roundup\n"
 "        codebase.\n"
 "\n"
@@ -1040,22 +1046,21 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1544
+#: ../roundup/admin.py:1555
 #, python-format
 msgid "Tracker updated to schema version %s."
 msgstr ""
 
-#: ../roundup/admin.py:1548
+#: ../roundup/admin.py:1559
 #, python-format
 msgid "No migration action required. At schema version %s."
 msgstr ""
 
-#: ../roundup/admin.py:1553
+#: ../roundup/admin.py:1564
+#, fuzzy
 msgid ""
 "Usage: pack period | date\n"
-"\n"
-"        Remove journal entries older than a period of time specified or\n"
-"        before a certain date.\n"
+"        Remove journal entries older than the date/period.\n"
 "\n"
 "        A period is specified using the suffixes \"y\", \"m\", and \"d\". "
 "The\n"
@@ -1092,15 +1097,16 @@
 "\n"
 "        "
 
-#: ../roundup/admin.py:1581
+#: ../roundup/admin.py:1590
 msgid "Invalid format"
 msgstr "Format non valide"
 
-#: ../roundup/admin.py:1592
+#: ../roundup/admin.py:1601
 msgid ""
 "Usage: perftest [mode] [arguments]*\n"
-"\n"
-"        Time operations in Roundup. Supported arguments:\n"
+"        Time operations in Roundup.\n"
+"\n"
+"        Supported arguments:\n"
 "\n"
 "            [password] [rounds=<integer>] [scheme=<scheme>]\n"
 "\n"
@@ -1113,28 +1119,30 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1625
+#: ../roundup/admin.py:1635
 msgid "Invalid 'rounds'. Must be larger than 999."
 msgstr ""
 
-#: ../roundup/admin.py:1629
+#: ../roundup/admin.py:1639
 #, python-format
 msgid "Invalid 'rounds'. It must be an integer not: %s"
 msgstr ""
 
-#: ../roundup/admin.py:1656
+#: ../roundup/admin.py:1666
 msgid "scheme does not support rounds."
 msgstr ""
 
-#: ../roundup/admin.py:1659
+#: ../roundup/admin.py:1669
 #, python-format
 msgid "Hash time: %(time)0.9f seconds, scheme: %(scheme)s, rounds: %(rounds)s"
 msgstr ""
 
-#: ../roundup/admin.py:1665
+#: ../roundup/admin.py:1675
 msgid ""
 "Usage: pragma setting=value | 'list'\n"
-"        Set internal admin settings to a value. E.G.\n"
+"        Set internal admin settings to a value.\n"
+"\n"
+"        For example:\n"
 "\n"
 "            pragma verbose=True\n"
 "            pragma verbose=yes\n"
@@ -1158,49 +1166,49 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1698
+#: ../roundup/admin.py:1710
 #, python-format
 msgid "Argument must be setting=value, was given: %s."
 msgstr ""
 
-#: ../roundup/admin.py:1701
+#: ../roundup/admin.py:1713
 msgid "Current settings and values (NYI - not yet implemented):"
 msgstr ""
 
-#: ../roundup/admin.py:1712
+#: ../roundup/admin.py:1724
 msgid ""
 "      Help for this pragma is missing. Please report it to the Roundup "
 "project.\n"
 msgstr ""
 
-#: ../roundup/admin.py:1718
+#: ../roundup/admin.py:1730
 #, fuzzy, python-format
 msgid "Unknown setting %s. Try \"pragma list\"."
 msgstr "Nom d'utilisateur inconnu"
 
-#: ../roundup/admin.py:1728
+#: ../roundup/admin.py:1740
 #, python-format
 msgid "Incorrect value for boolean setting %(setting)s: %(value)s."
 msgstr ""
 
-#: ../roundup/admin.py:1735
+#: ../roundup/admin.py:1747
 #, python-format
 msgid "Incorrect value for integer setting %(setting)s: %(value)s."
 msgstr ""
 
-#: ../roundup/admin.py:1742
+#: ../roundup/admin.py:1754
 #, python-format
 msgid ""
 "Incorrect value for setting %(setting)s: %(value)s. Should be no, both, or "
 "only."
 msgstr ""
 
-#: ../roundup/admin.py:1752
+#: ../roundup/admin.py:1764
 #, python-format
 msgid "Internal error: pragma can not handle values of type: %s"
 msgstr ""
 
-#: ../roundup/admin.py:1761
+#: ../roundup/admin.py:1773
 #, fuzzy
 msgid ""
 "Usage: reindex [classname|classname:#-#|designator]*\n"
@@ -1224,17 +1232,17 @@
 "        Cette opration est normalement effectuer automatiquement.\n"
 "        "
 
-#: ../roundup/admin.py:1783
+#: ../roundup/admin.py:1795
 #, python-format
 msgid "no such item \"%(designator)s\""
 msgstr "pas d'lment %(designator)s"
 
-#: ../roundup/admin.py:1793
+#: ../roundup/admin.py:1805
 #, fuzzy, python-format
 msgid "no such item \"%(class)s%(id)s\""
 msgstr "pas d'lment %(designator)s"
 
-#: ../roundup/admin.py:1805
+#: ../roundup/admin.py:1817
 #, fuzzy
 msgid ""
 "Usage: restore designator[,designator]*\n"
@@ -1254,14 +1262,7 @@
 "        utilisateurs.\n"
 "        "
 
-# ../roundup/admin.py:581 :981 :1030 :1052
-# ../roundup/admin.py:1054 ../roundup/admin.py:583:983 :1032:1054
-#: ../roundup/admin.py:1830
-#, fuzzy
-msgid "no such %(classname)s node \"%(nodeid)s\""
-msgstr "le noeud %(nodeid)s de classe %(classname)s n'existe pas"
-
-#: ../roundup/admin.py:1836
+#: ../roundup/admin.py:1848
 #, fuzzy
 msgid ""
 "Usage: retire designator[,designator]*\n"
@@ -1283,7 +1284,7 @@
 "        "
 
 #. noqa: ARG002 - args unused
-#: ../roundup/admin.py:1864
+#: ../roundup/admin.py:1876
 msgid ""
 "Usage: rollback\n"
 "        Undo all changes that are pending commit to the database.\n"
@@ -1306,61 +1307,61 @@
 "        base de donnes.\n"
 "        "
 
-#: ../roundup/admin.py:1877
+#: ../roundup/admin.py:1889
 msgid ""
 "Usage: security [Role name]\n"
-"\n"
-"             Display the Permissions available to one or all Roles.\n"
-"             Also validates that any properties defined in a\n"
-"             permission are valid.\n"
-"\n"
-"             Run this after changing your permissions to catch\n"
-"             typos.\n"
+"        Display the Permissions available to one or all Roles.\n"
+"\n"
+"        Also validates that any properties defined in a\n"
+"        permission are valid.\n"
+"\n"
+"        Run this after changing your permissions to catch\n"
+"        typos.\n"
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1892
+#: ../roundup/admin.py:1904
 #, fuzzy, python-format
 msgid "No such Role \"%(role)s\"\n"
 msgstr "Ce rle %(role)s n'existe pas"
 
-#: ../roundup/admin.py:1898
+#: ../roundup/admin.py:1910
 #, 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:1901
+#: ../roundup/admin.py:1913
 #, 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:1905
+#: ../roundup/admin.py:1917
 #, 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:1907
+#: ../roundup/admin.py:1919
 #, 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:1910
+#: ../roundup/admin.py:1922
 #, fuzzy, python-format
 msgid "Role \"%(name)s\":\n"
 msgstr "Rle %(name)s:"
 
-#: ../roundup/admin.py:1916
+#: ../roundup/admin.py:1928
 #, fuzzy
 msgid " %(description)s (%(name)s for \"%(klass)s\""
 msgstr " %(description)s (%(name)s pour %(klass)s uniquement)"
 
-#: ../roundup/admin.py:1916
+#: ../roundup/admin.py:1928
 #, 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:1929
+#: ../roundup/admin.py:1941
 #, python-format
 msgid ""
 "\n"
@@ -1368,17 +1369,17 @@
 "\n"
 msgstr ""
 
-#: ../roundup/admin.py:1935
+#: ../roundup/admin.py:1947
 #, 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:1938
+#: ../roundup/admin.py:1950
 #, fuzzy, python-format
 msgid " %(description)s (%(name)s)\n"
 msgstr " %(description)s (%(name)s)"
 
-#: ../roundup/admin.py:1942
+#: ../roundup/admin.py:1954
 #, fuzzy
 msgid ""
 "Usage: set items property=value [property=value ...]\n"
@@ -1413,7 +1414,7 @@
 "        ce lien sont indiqus comme des nombres spars par des\n"
 "        virgules (par ex. 1,2,3)."
 
-#: ../roundup/admin.py:2010
+#: ../roundup/admin.py:2022
 msgid ""
 "Usage: specification classname\n"
 "        Show the properties for a classname.\n"
@@ -1427,17 +1428,17 @@
 "        Cette commande numre les proprits de la classe nomme.\n"
 "        "
 
-#: ../roundup/admin.py:2029
+#: ../roundup/admin.py:2041
 #, fuzzy, python-format
 msgid "%(key)s: %(value)s (key property)\n"
 msgstr "%(key)s: %(value)s (proprit cl)"
 
-#: ../roundup/admin.py:2032
+#: ../roundup/admin.py:2044
 #, fuzzy, python-format
 msgid "%(key)s: %(value)s\n"
 msgstr "%(key)s: %(value)s"
 
-#: ../roundup/admin.py:2035
+#: ../roundup/admin.py:2047
 msgid ""
 "Usage: table classname [property[,property]*]\n"
 "        List the instances of a class in tabular form.\n"
@@ -1499,17 +1500,17 @@
 "        donnera une colonne Name large de 4 caractres.\n"
 "        "
 
-#: ../roundup/admin.py:2081
+#: ../roundup/admin.py:2093
 #, python-format
 msgid "\"%(spec)s\" not name:width"
 msgstr "%(spec)s ne correspond pas au format nom:largeur"
 
-#: ../roundup/admin.py:2103
+#: ../roundup/admin.py:2115
 #, python-format
 msgid "\"%(spec)s\" does not have an integer width: \"%(width)s\""
 msgstr ""
 
-#: ../roundup/admin.py:2139
+#: ../roundup/admin.py:2151
 msgid ""
 "Usage: templates [trace_search]\n"
 "        List templates and their installed directories.\n"
@@ -1519,13 +1520,14 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:2167
+#: ../roundup/admin.py:2179
 #, fuzzy
 msgid ""
 "Usage: updateconfig <filename>\n"
-"        Generate an updated tracker config file (ini style) in\n"
-"        <filename>. Use current settings from existing roundup\n"
-"        tracker in tracker home.\n"
+"        Merge existing tracker config with new settings.\n"
+"\n"
+"        Output the updated config file to <filename>. Use current\n"
+"        settings from existing roundup tracker in tracker home.\n"
 "        "
 msgstr ""
 "Utilisation: genconfig <nomfichier>\n"
@@ -1535,34 +1537,34 @@
 
 # ../roundup/cgi/actions.py:596 :607 :778 :797
 # ../roundup/cgi/actions.py:596:607 :778:797
-#: ../roundup/admin.py:2175 ../roundup/cgi/actions.py:886
+#: ../roundup/admin.py:2188 ../roundup/cgi/actions.py:886
 #: ../roundup/cgi/actions.py:897 ../roundup/cgi/actions.py:1099
 #: ../roundup/cgi/actions.py:1113 ../roundup/cgi/actions.py:886:897 :1099:1113
 #, python-format
 msgid "Error: %s"
 msgstr "Erreur: %s"
 
-#: ../roundup/admin.py:2207
+#: ../roundup/admin.py:2220
 #, 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:2213
+#: ../roundup/admin.py:2226
 #, python-format
 msgid "Multiple commands match \"%(command)s\": %(list)s"
 msgstr "Plusieurs commandes correspondent  %(command)s: %(list)s"
 
-#: ../roundup/admin.py:2228
+#: ../roundup/admin.py:2241
 msgid "Enter tracker home: "
 msgstr "Saisissez le rpertoire racine du pisteur: "
 
-#: ../roundup/admin.py:2257 ../roundup/admin.py:2261
-#: ../roundup/admin.py:2257:2261
+#: ../roundup/admin.py:2270 ../roundup/admin.py:2274
+#: ../roundup/admin.py:2270:2274
 #, python-format
 msgid "Error: Couldn't open tracker: %(message)s"
 msgstr "Erreur: impossible d'ouvrir le pisteur, %(message)s"
 
-#: ../roundup/admin.py:2309
+#: ../roundup/admin.py:2322
 #, python-format
 msgid ""
 "Roundup %s ready for input.\n"
@@ -1571,15 +1573,15 @@
 "Roundup %s est prt pour la saisie.\n"
 "Saisissez help pour l'aide."
 
-#: ../roundup/admin.py:2342
+#: ../roundup/admin.py:2355
 msgid "Note: command history and editing not available"
 msgstr "Note: l'historique et l'dition des commandes n'est pas disponible"
 
-#: ../roundup/admin.py:2348
+#: ../roundup/admin.py:2361
 msgid "exit..."
 msgstr "sortie..."
 
-#: ../roundup/admin.py:2361
+#: ../roundup/admin.py:2374
 msgid "There are unsaved changes. Commit them (y/N)? "
 msgstr "Des changements n'ont pas t enregistrs, les valider (y/N)?"
 
@@ -2125,7 +2127,7 @@
 msgid "<em>undefined</em>"
 msgstr "<em>indfini</em>"
 
-#: ../roundup/cgi/client.py:90
+#: ../roundup/cgi/client.py:105
 msgid ""
 "<html><head><title>An error has occurred</title></head>\n"
 "<body><h1>An error has occurred</h1>\n"
@@ -2139,154 +2141,154 @@
 "Les administrateurs du pisteur ont t notifis du problme.</p>\n"
 "</body></html>"
 
-#: ../roundup/cgi/client.py:702 ../roundup/cgi/client.py:1622
-#: ../roundup/cgi/client.py:702:1622
+#: ../roundup/cgi/client.py:717 ../roundup/cgi/client.py:1635
+#: ../roundup/cgi/client.py:717:1635
 msgid "Required Header Missing"
 msgstr ""
 
-#: ../roundup/cgi/client.py:704
+#: ../roundup/cgi/client.py:719
 #, 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:956
+#: ../roundup/cgi/client.py:971
 msgid "Form Error: "
 msgstr "Erreur de formulaire: "
 
-#: ../roundup/cgi/client.py:1049
+#: ../roundup/cgi/client.py:1064
 #, python-format
 msgid "Unrecognized charset: %r"
 msgstr "Jeu de caractres non reconnu: %r"
 
-#: ../roundup/cgi/client.py:1318 ../roundup/cgi/client.py:2281
-#: ../roundup/cgi/client.py:1318:2281
+#: ../roundup/cgi/client.py:1331 ../roundup/cgi/client.py:2294
+#: ../roundup/cgi/client.py:1331:2294
 msgid "broken form: multiple @action values submitted"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1335
+#: ../roundup/cgi/client.py:1348
 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:1483
+#: ../roundup/cgi/client.py:1496
 msgid "Referer header not available."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1487
+#: ../roundup/cgi/client.py:1500
 #, python-format
 msgid "csrf key used with wrong method from: %s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1516
+#: ../roundup/cgi/client.py:1529
 #, python-format
 msgid "csrf header %(header)s required but missing for user%(userid)s."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1520
+#: ../roundup/cgi/client.py:1533
 #, python-format
 msgid "Missing header: %s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1528
+#: ../roundup/cgi/client.py:1541
 #, 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:1533
+#: ../roundup/cgi/client.py:1546
 #, fuzzy, python-format
 msgid "Invalid Referer: %s"
 msgstr "Tentative de connexion non valide"
 
-#: ../roundup/cgi/client.py:1548
+#: ../roundup/cgi/client.py:1561
 #, 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:1553
+#: ../roundup/cgi/client.py:1566
 #, fuzzy, python-format
 msgid "Invalid Origin %s"
 msgstr "Tentative de connexion non valide"
 
-#: ../roundup/cgi/client.py:1567
+#: ../roundup/cgi/client.py:1580
 #, python-format
 msgid ""
 "csrf X-FORWARDED-HOST header check failed for user%(userid)s. Value=%(host)s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1573
+#: ../roundup/cgi/client.py:1586
 #, python-format
 msgid "Invalid X-FORWARDED-HOST %s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1592
-#, python-format
-msgid "csrf HOST header check failed for user%(userid)s. Value=%(host)s"
-msgstr ""
-
-#: ../roundup/cgi/client.py:1597
-#, python-format
-msgid "Invalid HOST %s"
-msgstr ""
-
 #: ../roundup/cgi/client.py:1605
+#, python-format
+msgid "csrf HOST header check failed for user%(userid)s. Value=%(host)s"
+msgstr ""
+
+#: ../roundup/cgi/client.py:1610
+#, python-format
+msgid "Invalid HOST %s"
+msgstr ""
+
+#: ../roundup/cgi/client.py:1618
 msgid "Csrf: unable to verify sufficient headers"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1606
-msgid "Unable to verify sufficient headers"
-msgstr ""
-
 #: ../roundup/cgi/client.py:1619
+msgid "Unable to verify sufficient headers"
+msgstr ""
+
+#: ../roundup/cgi/client.py:1632
 #, python-format
 msgid "csrf X-REQUESTED-WITH xmlrpc required header check failed for user%s."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1660
+#: ../roundup/cgi/client.py:1673
 #, python-format
 msgid "Required csrf field missing for user%s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1662 ../roundup/cgi/client.py:1689
-#: ../roundup/cgi/client.py:1706 ../roundup/cgi/client.py:1662:1689:1706
+#: ../roundup/cgi/client.py:1675 ../roundup/cgi/client.py:1702
+#: ../roundup/cgi/client.py:1719 ../roundup/cgi/client.py:1675:1702:1719
 msgid ""
 "We can't validate your session (csrf failure). Re-enter any unsaved data and "
 "try again."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1666
+#: ../roundup/cgi/client.py:1679
 #, python-format
 msgid "csrf field not supplied by user%s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1678
+#: ../roundup/cgi/client.py:1691
 #, 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:1696
+#: ../roundup/cgi/client.py:1709
 #, 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:1888
+#: ../roundup/cgi/client.py:1901
 msgid "You are not allowed to view this file."
 msgstr "Vous n'tes pas autoris  voir ce fichier"
 
-#: ../roundup/cgi/client.py:2159
+#: ../roundup/cgi/client.py:2172
 #, python-format
 msgid "%(starttag)sTime elapsed: %(seconds)fs%(endtag)s\n"
 msgstr "%(starttag)sTemps coul: %(seconds)fs%(endtag)s\n"
 
-#: ../roundup/cgi/client.py:2163
+#: ../roundup/cgi/client.py:2176
 #, python-format
 msgid ""
 "%(starttag)sCache hits: %(cache_hits)d, misses %(cache_misses)d. Loading "
@@ -2296,7 +2298,7 @@
 "Chargement d'lments: %(get_items)f secondes. Filtrage: %(filtering)f "
 "secondes.%(endtag)s\n"
 
-#: ../roundup/cgi/client.py:2703
+#: ../roundup/cgi/client.py:2716
 #, python-format
 msgid ""
 "Cache failure: compressed file %(compressed)s is older than its source file "
@@ -2365,16 +2367,16 @@
 msgstr[1] ""
 "Les proprits requises %(property)s de %(class)s n'ont pas t fournies"
 
-#: ../roundup/cgi/templating.py:277
+#: ../roundup/cgi/templating.py:278
 #, python-format
 msgid "You are not allowed to %(action)s items of class %(class)s"
 msgstr "Vous ne pouvez pas %(action)s des lments de classe %(class)s"
 
-#: ../roundup/cgi/templating.py:914
+#: ../roundup/cgi/templating.py:916
 msgid "(list)"
 msgstr "(liste)"
 
-#: ../roundup/cgi/templating.py:989
+#: ../roundup/cgi/templating.py:991
 msgid "Submit New Entry"
 msgstr "Soumettre un nouvelle entre"
 
@@ -2383,58 +2385,58 @@
 # ../roundup/cgi/templating.py:1875 ../roundup/cgi/templating.py:710:829
 # :1236:1257 :1304:1327 :1361:1400 :1453:1470 :1549:1569 :1587:1619
 # :1629:1683 :1875
-#: ../roundup/cgi/templating.py:1011 ../roundup/cgi/templating.py:1187
-#: ../roundup/cgi/templating.py:1822 ../roundup/cgi/templating.py:1853
-#: ../roundup/cgi/templating.py:1874 ../roundup/cgi/templating.py:1912
-#: ../roundup/cgi/templating.py:1965 ../roundup/cgi/templating.py:1989
-#: ../roundup/cgi/templating.py:1996 ../roundup/cgi/templating.py:2033
-#: ../roundup/cgi/templating.py:2086 ../roundup/cgi/templating.py:2119
-#: ../roundup/cgi/templating.py:2214 ../roundup/cgi/templating.py:2235
-#: ../roundup/cgi/templating.py:2326 ../roundup/cgi/templating.py:2346
-#: ../roundup/cgi/templating.py:2368 ../roundup/cgi/templating.py:2411
-#: ../roundup/cgi/templating.py:2421 ../roundup/cgi/templating.py:2486
-#: ../roundup/cgi/templating.py:2789 ../roundup/cgi/templating.py:1011:1187
-#: :1822:1853 :1874:1912 :1965:1989 :1996:2033 :2086:2119 :2214:2235 :2326:2346
-#: :2368:2411 :2421:2486:2789
+#: ../roundup/cgi/templating.py:1013 ../roundup/cgi/templating.py:1189
+#: ../roundup/cgi/templating.py:1824 ../roundup/cgi/templating.py:1855
+#: ../roundup/cgi/templating.py:1876 ../roundup/cgi/templating.py:1914
+#: ../roundup/cgi/templating.py:1967 ../roundup/cgi/templating.py:1991
+#: ../roundup/cgi/templating.py:1998 ../roundup/cgi/templating.py:2035
+#: ../roundup/cgi/templating.py:2088 ../roundup/cgi/templating.py:2121
+#: ../roundup/cgi/templating.py:2216 ../roundup/cgi/templating.py:2237
+#: ../roundup/cgi/templating.py:2328 ../roundup/cgi/templating.py:2348
+#: ../roundup/cgi/templating.py:2370 ../roundup/cgi/templating.py:2413
+#: ../roundup/cgi/templating.py:2423 ../roundup/cgi/templating.py:2488
+#: ../roundup/cgi/templating.py:2791 ../roundup/cgi/templating.py:1013:1189
+#: :1824:1855 :1876:1914 :1967:1991 :1998:2035 :2088:2121 :2216:2237 :2328:2348
+#: :2370:2413 :2423:2488:2791
 msgid "[hidden]"
 msgstr "[masqu]"
 
-#: ../roundup/cgi/templating.py:1012
+#: ../roundup/cgi/templating.py:1014
 msgid "New node - no history"
 msgstr "Nouveau n~ud - pas d'historique"
 
-#: ../roundup/cgi/templating.py:1152
+#: ../roundup/cgi/templating.py:1154
 msgid "Submit Changes"
 msgstr "Soumettre les changements"
 
-#: ../roundup/cgi/templating.py:1230
+#: ../roundup/cgi/templating.py:1232
 msgid "<em>The indicated property no longer exists</em>"
 msgstr "<em>La proprit indique n'existe plus</em>"
 
-#: ../roundup/cgi/templating.py:1266
+#: ../roundup/cgi/templating.py:1268
 #, python-format
 msgid "The linked class %(classname)s no longer exists"
 msgstr "La classe lie %(classname)s n'existe plus"
 
-#: ../roundup/cgi/templating.py:1303 ../roundup/cgi/templating.py:1333
-#: ../roundup/cgi/templating.py:2495 ../roundup/cgi/templating.py:2798
-#: ../roundup/cgi/templating.py:1303:1333 :2495:2798
+#: ../roundup/cgi/templating.py:1305 ../roundup/cgi/templating.py:1335
+#: ../roundup/cgi/templating.py:2497 ../roundup/cgi/templating.py:2800
+#: ../roundup/cgi/templating.py:1305:1335 :2497:2800
 msgid "[label is missing]"
 msgstr ""
 
 # ../roundup/cgi/templating.py:940 :964
 # ../roundup/cgi/templating.py:940:964
-#: ../roundup/cgi/templating.py:1307 ../roundup/cgi/templating.py:1336
-#: ../roundup/cgi/templating.py:1307:1336
+#: ../roundup/cgi/templating.py:1309 ../roundup/cgi/templating.py:1338
+#: ../roundup/cgi/templating.py:1309:1338
 msgid "<strike>The linked node no longer exists</strike>"
 msgstr "<strike>Le noeud li n'existe plus</strike>"
 
-#: ../roundup/cgi/templating.py:1398
+#: ../roundup/cgi/templating.py:1400
 #, python-format
 msgid "%s: (no value)"
 msgstr "%s: (pas de valeur)"
 
-#: ../roundup/cgi/templating.py:1414
+#: ../roundup/cgi/templating.py:1416
 #, fuzzy, python-format
 msgid ""
 "<strong><em>This event %s is not handled by the history display!</em></"
@@ -2443,31 +2445,31 @@
 "<strong><em>Cet vnement n'est pas gr par l'affichage de l'historique.</"
 "em></strong>"
 
-#: ../roundup/cgi/templating.py:1427
+#: ../roundup/cgi/templating.py:1429
 msgid "<tr><td colspan=4><strong>Note:</strong></td></tr>"
 msgstr "<tr><td colspan=4><strong>Note:</strong></td></tr>"
 
-#: ../roundup/cgi/templating.py:1436
+#: ../roundup/cgi/templating.py:1438
 msgid "History"
 msgstr "Historique"
 
-#: ../roundup/cgi/templating.py:1438
+#: ../roundup/cgi/templating.py:1440
 msgid "<th>Date</th>"
 msgstr "<th>Date</th>"
 
-#: ../roundup/cgi/templating.py:1439
+#: ../roundup/cgi/templating.py:1441
 msgid "<th>User</th>"
 msgstr "<th>Utilisateur</th>"
 
-#: ../roundup/cgi/templating.py:1440
+#: ../roundup/cgi/templating.py:1442
 msgid "<th>Action</th>"
 msgstr "<th>Action</th>"
 
-#: ../roundup/cgi/templating.py:1441
+#: ../roundup/cgi/templating.py:1443
 msgid "<th>Args</th>"
 msgstr "<th>Arguments</th>"
 
-#: ../roundup/cgi/templating.py:1492
+#: ../roundup/cgi/templating.py:1494
 #, python-format
 msgid "Copy of %(class)s %(id)s"
 msgstr "Copie de %(class)s %(id)s"
@@ -2475,20 +2477,20 @@
 # ../roundup/cgi/templating.py:1006 :1404 :1425 :1431
 # ../roundup/cgi/templating.py:1431 ../roundup/cgi/templating.py:1006:1404
 # :1425:1431
-#: ../roundup/cgi/templating.py:2123 ../roundup/cgi/templating.py:2158
-#: ../roundup/cgi/templating.py:1380:2123:2158
+#: ../roundup/cgi/templating.py:2125 ../roundup/cgi/templating.py:2160
+#: ../roundup/cgi/templating.py:1382:2125:2160
 msgid "No"
 msgstr "Non"
 
 # ../roundup/cgi/templating.py:1006 :1404 :1423 :1428
 # ../roundup/cgi/templating.py:1428 ../roundup/cgi/templating.py:1006:1404
 # :1423:1428
-#: ../roundup/cgi/templating.py:2123 ../roundup/cgi/templating.py:2152
-#: ../roundup/cgi/templating.py:1380:2123:2152
+#: ../roundup/cgi/templating.py:2125 ../roundup/cgi/templating.py:2154
+#: ../roundup/cgi/templating.py:1382:2125:2154
 msgid "Yes"
 msgstr "Oui"
 
-#: ../roundup/cgi/templating.py:2284
+#: ../roundup/cgi/templating.py:2286
 msgid ""
 "default value for DateHTMLProperty must be either DateHTMLProperty or string "
 "date representation."
@@ -2496,27 +2498,27 @@
 "la valeur par dfaut pour DateHTMLProperty doit tre soit DateHTMLProperty "
 "soit une reprsentation textuelle de la date."
 
-#: ../roundup/cgi/templating.py:2466
+#: ../roundup/cgi/templating.py:2468
 #, python-format
 msgid "Attempt to look up %(attr)s on a missing value"
 msgstr "Tentative de recherche de %(attr)s sur une valeur manquante"
 
-#: ../roundup/cgi/templating.py:2477
+#: ../roundup/cgi/templating.py:2479
 #, fuzzy, python-format
 msgid "Attempt to look up %(item)s on a missing value"
 msgstr "Tentative de recherche de %(attr)s sur une valeur manquante"
 
-#: ../roundup/cgi/templating.py:2582
+#: ../roundup/cgi/templating.py:2584
 #, python-format
 msgid "<option %svalue=\"-1\">- no selection -</option>"
 msgstr "<option %svalue=\"-1\">- pas de slection -</option>"
 
-#: ../roundup/cgi/templating.py:3743
+#: ../roundup/cgi/templating.py:3745
 #, python-format
 msgid "Unable to read or expand file '%(name)s' in template '%(template)s'."
 msgstr ""
 
-#: ../roundup/cgi/templating.py:3793
+#: ../roundup/cgi/templating.py:3795
 #, python-format
 msgid ""
 "Found an incorrect token when expandfile applied string subsitution on "
@@ -3066,6 +3068,65 @@
 msgid "not of form [arg=value,value,...;arg=value,value,...]"
 msgstr "pas de la forme [arg=value,value,...;arg=value,value,...]"
 
+#: ../roundup/pygettext.py:401
+#, python-format
+msgid "*** %(file)s:%(lineno)s: Seen unexpected token \"%(token)s\""
+msgstr ""
+
+#: ../roundup/pygettext.py:457
+#, python-format
+msgid "# File: %(filename)s, line: %(lineno)d"
+msgstr ""
+
+#: ../roundup/pygettext.py:464
+#, python-format
+msgid " %(filename)s:%(lineno)d"
+msgstr ""
+
+# ../roundup/cgi/actions.py:930 :934
+# ../roundup/cgi/actions.py:930:934
+#: ../roundup/pygettext.py:540
+#, fuzzy, python-format
+msgid "Invalid value for --style: %s"
+msgstr "Tentative de connexion non valide"
+
+#: ../roundup/pygettext.py:548
+#, python-format
+msgid "pygettext.py (xgettext for Python) %s"
+msgstr ""
+
+#: ../roundup/pygettext.py:554
+#, python-format
+msgid "--width argument must be an integer: %s"
+msgstr ""
+
+#: ../roundup/pygettext.py:582
+#, python-format
+msgid "Can't read --exclude-file: %s"
+msgstr ""
+
+#: ../roundup/pygettext.py:601
+msgid "Reading standard input"
+msgstr ""
+
+#: ../roundup/pygettext.py:606
+#, python-format
+msgid "Working on %s"
+msgstr ""
+
+#: ../roundup/pygettext.py:640
+msgid "a unicode string"
+msgstr ""
+
+#: ../roundup/pygettext.py:642
+#, python-format
+msgid "*** Seen unexpected token \"%(token)s\""
+msgstr ""
+
+#: ../roundup/pygettext.py:643
+msgid "morethanonestring"
+msgstr ""
+
 #: ../roundup/rest.py:410
 #, python-format
 msgid "Method %(m)s not allowed. Allowed: %(a)s"
@@ -3097,7 +3158,7 @@
 "%(acceptable_types)s"
 msgstr ""
 
-#: ../roundup/rest.py:2437
+#: ../roundup/rest.py:2441
 #, python-format
 msgid ""
 "Unrecognized api version: %s. See /rest without specifying api version for "
@@ -3199,26 +3260,35 @@
 "%(old)s"
 msgstr ""
 
-#: ../roundup/scripts/roundup_demo.py:151
+#: ../roundup/scripts/roundup_demo.py:50
+#, python-format
+msgid ""
+"Enter tracker template to use (one of (%(template_list)s)) "
+"[%(default_template)s]: "
+msgstr ""
+
+#: ../roundup/scripts/roundup_demo.py:166
 #, python-format
 msgid "Enter directory path to create demo tracker [%s]: "
 msgstr ""
 "Saisissez le chemin du rpertoire o crer le pisteur de dmonstration "
 "[%s]: "
 
-#: ../roundup/scripts/roundup_demo.py:170
-#, python-format
+#: ../roundup/scripts/roundup_gettext.py:33
 msgid ""
-"Enter tracker template to use (one of (%(template_list)s)) "
-"[%(default_template)s]: "
-msgstr ""
-
-#: ../roundup/scripts/roundup_gettext.py:35
+"\n"
+"Extracting translatable strings only from html templates.\n"
+"Because the 'polib' module is missing, unable to extract\n"
+"translations from detectors or extensions.\n"
+"The 'polib' module can be installed with pip.\n"
+msgstr ""
+
+#: ../roundup/scripts/roundup_gettext.py:71
 #, python-format
 msgid "Usage: %(program)s <tracker home>"
 msgstr "Utilisation: %(program)s <rpertoire du pisteur>"
 
-#: ../roundup/scripts/roundup_gettext.py:51
+#: ../roundup/scripts/roundup_gettext.py:89
 #, python-format
 msgid "No tracker templates found in directory %s"
 msgstr "Aucun modle de pisteur dans le rpertoire %s"
--- a/locale/hu.po	Wed Aug 07 21:43:40 2024 -0400
+++ b/locale/hu.po	Wed Aug 07 21:52:58 2024 -0400
@@ -8,7 +8,7 @@
 msgstr ""
 "Project-Id-Version: Roundup 2.4.0\n"
 "Report-Msgid-Bugs-To: roundup-devel@lists.sourceforge.net\n"
-"POT-Creation-Date: 2024-07-09 15:12-0400\n"
+"POT-Creation-Date: 2024-08-07 21:43-0400\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"
@@ -28,19 +28,19 @@
 msgid "You may not retire the admin or anonymous user"
 msgstr "Az admin és anonymous felhasználókat nem lehet visszavonultatni"
 
-#: ../roundup/admin.py:130
+#: ../roundup/admin.py:131
 msgid ""
 "Have 'display designator[,designator*]' show header inside\n"
 "      []'s before items. Includes retired/active status.\n"
 msgstr ""
 
-#: ../roundup/admin.py:134
+#: ../roundup/admin.py:135
 msgid ""
 "Have 'display designator' and 'specification class' show\n"
 "      protected fields: creator, id etc.\n"
 msgstr ""
 
-#: ../roundup/admin.py:138
+#: ../roundup/admin.py:139
 msgid ""
 "Controls history options. It is a bitstring where setting\n"
 "      the bit disables the feature. A value of 0 (default)\n"
@@ -51,59 +51,59 @@
 "      history.\n"
 msgstr ""
 
-#: ../roundup/admin.py:147
+#: ../roundup/admin.py:148
 msgid ""
 "Set the number of lines of history to keep for this session.\n"
 "      -1 is infinite.\n"
 msgstr ""
 
-#: ../roundup/admin.py:151
+#: ../roundup/admin.py:152
 msgid "Set indexer to use when running 'reindex' NYI\n"
 msgstr ""
 
-#: ../roundup/admin.py:154
+#: ../roundup/admin.py:155
 msgid "Force reopening of tracker when running each command.\n"
 msgstr ""
 
-#: ../roundup/admin.py:157
+#: ../roundup/admin.py:158
 msgid ""
 "set the number of rows imported before a database commit is\n"
 "      done. Used only for imports on PostgreSQL.\n"
 msgstr ""
 
-#: ../roundup/admin.py:159
+#: ../roundup/admin.py:160
 msgid "Show retired items in table, list etc. One of 'no', 'only', 'both'\n"
 msgstr ""
 
-#: ../roundup/admin.py:161
-msgid "internal mapping for show_retired.\n"
-msgstr ""
-
 #: ../roundup/admin.py:162
+msgid "internal mapping for show_retired.\n"
+msgstr ""
+
+#: ../roundup/admin.py:163
 msgid "Enable verbose output: tracing, descriptions...\n"
 msgstr ""
 
 # ../roundup/admin.py:85 :981 :1030 :1052
-#: ../roundup/admin.py:174 ../roundup/admin.py:1179 ../roundup/admin.py:1824
-#: ../roundup/admin.py:1856 ../roundup/admin.py:174:1179 :1824:1856
+#: ../roundup/admin.py:175 ../roundup/admin.py:1188 ../roundup/admin.py:1836
+#: ../roundup/admin.py:1868 ../roundup/admin.py:175:1188 :1836:1868
 #, python-format
 msgid "no such class \"%(classname)s\""
 msgstr "nincs \"%(classname)s\" osztály"
 
 # ../roundup/admin.py:95 :99
-#: ../roundup/admin.py:187
+#: ../roundup/admin.py:188
 #, python-format
 msgid "argument \"%(arg)s\" not propname=value"
 msgstr "A(z) \"%(arg)s\" argumentum nem név=érték alakú"
 
-#: ../roundup/admin.py:200
+#: ../roundup/admin.py:201
 #, python-format
 msgid ""
 "Problem: %(message)s\n"
 "\n"
 msgstr "Probléma: %(message)s\n"
 
-#: ../roundup/admin.py:201
+#: ../roundup/admin.py:202
 #, fuzzy, python-format
 msgid ""
 "%(message)sUsage: roundup-admin [options] [<command> <arguments>]\n"
@@ -158,12 +158,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:230
+#: ../roundup/admin.py:231
 #, fuzzy
 msgid "Commands: "
 msgstr "Parancsok:"
 
-#: ../roundup/admin.py:237
+#: ../roundup/admin.py:238
 msgid ""
 "Commands may be abbreviated as long as the abbreviation\n"
 "matches only one command, e.g. l == li == lis == list."
@@ -171,7 +171,7 @@
 "A parancsok rövidíthetők mindaddig, amíg csak egy parancsra illenek, pl. l "
 "== li == lis == list."
 
-#: ../roundup/admin.py:266
+#: ../roundup/admin.py:270
 msgid ""
 "\n"
 "All commands (except help) require a tracker specifier. This is just\n"
@@ -239,25 +239,25 @@
 "Command help:\n"
 msgstr ""
 
-#: ../roundup/admin.py:330
+#: ../roundup/admin.py:334
 #, python-format
 msgid "%s:"
 msgstr "%s:"
 
 # ../roundup/admin.py:340 :396
-#: ../roundup/admin.py:435 ../roundup/admin.py:1384
-#: ../roundup/admin.py:435:1384
+#: ../roundup/admin.py:439 ../roundup/admin.py:1396
+#: ../roundup/admin.py:439:1396
 msgid "Templates:"
 msgstr "Sablonok:"
 
 # ../roundup/admin.py:343 :407
-#: ../roundup/admin.py:438 ../roundup/admin.py:1394
-#: ../roundup/admin.py:438:1394
+#: ../roundup/admin.py:442 ../roundup/admin.py:1406
+#: ../roundup/admin.py:442:1406
 msgid "Back ends:"
 msgstr "Adatbázis hátterek:"
 
 #. noqa: ARG002
-#: ../roundup/admin.py:455
+#: ../roundup/admin.py:459
 msgid ""
 "Usage: commit\n"
 "        Commit changes made to the database during an interactive session.\n"
@@ -271,7 +271,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:470
+#: ../roundup/admin.py:474
 msgid ""
 "Usage: create classname property=value ...\n"
 "        Create a new entry of a given class.\n"
@@ -285,46 +285,45 @@
 
 # ../roundup/admin.py:369 :466 :527 :606 :656 :714 :735 :763 :834 :901 :972
 # :1020 :1042 :1069 :1136 :1207
-#: ../roundup/admin.py:478 ../roundup/admin.py:552 ../roundup/admin.py:600
-#: ../roundup/admin.py:723 ../roundup/admin.py:796 ../roundup/admin.py:842
-#: ../roundup/admin.py:893 ../roundup/admin.py:990 ../roundup/admin.py:1206
-#: ../roundup/admin.py:1357 ../roundup/admin.py:1485 ../roundup/admin.py:1571
-#: ../roundup/admin.py:1691 ../roundup/admin.py:1814 ../roundup/admin.py:1846
-#: ../roundup/admin.py:1962 ../roundup/admin.py:2016 ../roundup/admin.py:2064
-#: ../roundup/admin.py:478:552 :1206:1357:1485 :1571:1691 :1814:1846 :1962:2016
-#: :2064 :600:723 :796:842 :893:990
+#: ../roundup/admin.py:482 ../roundup/admin.py:555 ../roundup/admin.py:606
+#: ../roundup/admin.py:733 ../roundup/admin.py:806 ../roundup/admin.py:851
+#: ../roundup/admin.py:902 ../roundup/admin.py:999 ../roundup/admin.py:1216
+#: ../roundup/admin.py:1369 ../roundup/admin.py:1497 ../roundup/admin.py:1580
+#: ../roundup/admin.py:1703 ../roundup/admin.py:1826 ../roundup/admin.py:1858
+#: ../roundup/admin.py:1974 ../roundup/admin.py:2028 ../roundup/admin.py:2076
+#: ../roundup/admin.py:482:555 :1216:1369:1497 :1580:1703 :1826:1858 :1974:2028
+#: :2076 :606:733 :806:851 :902:999
 msgid "Not enough arguments supplied"
 msgstr "Nincs megadva elég argumentum"
 
-#: ../roundup/admin.py:498
+#: ../roundup/admin.py:502
 #, python-format
 msgid "%(propname)s (Password): "
 msgstr "%(propname)s (Jelszó): "
 
-#: ../roundup/admin.py:501
+#: ../roundup/admin.py:505
 #, python-format
 msgid "   %(propname)s (Again): "
 msgstr "   %(propname)s (Ismét): "
 
-#: ../roundup/admin.py:505
+#: ../roundup/admin.py:509
 msgid "Sorry, try again..."
 msgstr "Sajnálom, próbálja újra..."
 
-#: ../roundup/admin.py:510
+#: ../roundup/admin.py:514
 #, python-format
 msgid "%(propname)s (%(proptype)s): "
 msgstr "%(propname)s (%(proptype)s): "
 
-#: ../roundup/admin.py:529
+#: ../roundup/admin.py:533
 #, python-format
 msgid "you must provide the \"%(propname)s\" property."
 msgstr "meg kell adni a(z) \"%(propname)s\" tulajdonságot."
 
-#: ../roundup/admin.py:541
+#: ../roundup/admin.py:545
 #, fuzzy
 msgid ""
 "Usage: display designator[,designator]*\n"
-"\n"
 "        Show the property values for the given node(s).\n"
 "\n"
 "        A designator is a classname and a nodeid concatenated,\n"
@@ -341,46 +340,52 @@
 "        csomópont értékét.\n"
 "        "
 
-#: ../roundup/admin.py:583
+#: ../roundup/admin.py:586
 #, fuzzy, python-format
 msgid "%(protected)s%(key)s: %(value)s"
 msgstr "%(key)s: %(value)s"
 
 #. grab the directory to export to
-#: ../roundup/admin.py:586
+#: ../roundup/admin.py:589
 msgid ""
 "Usage: export [[-]class[,class]] export_dir\n"
-"        Export the database to colon-separated-value files.\n"
+"        Export the database and file content.\n"
+"\n"
+"        Database content is exported to colon separated files.\n"
 "        To exclude the files (e.g. for the msg or file class),\n"
 "        use the exporttables command.\n"
 "\n"
 "        Optionally limit the export to just the named classes\n"
-"        or exclude the named classes, if the 1st argument starts with '-'.\n"
+"        or exclude the named classes, if the 1st argument\n"
+"        starts with '-'.\n"
 "\n"
 "        This action exports the current data from the database into\n"
 "        colon-separated-value files that are placed in the nominated\n"
-"        destination directory.\n"
+"        export_dir directory.\n"
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:698
+#: ../roundup/admin.py:704
 msgid ""
 "Usage: exporttables [[-]class[,class]] export_dir\n"
-"        Export the database to colon-separated-value files, excluding the\n"
-"        files below $TRACKER_HOME/db/files/ (which can be archived "
-"separately).\n"
+"        Export only the database to files, no file content.\n"
+"\n"
+"        Database content is exported to colon separated files.\n"
+"        The files below $TRACKER_HOME/db/files/ (which can be\n"
+"        archived separately) are not part of the export.\n"
 "        To include the files, use the export command.\n"
 "\n"
 "        Optionally limit the export to just the named classes\n"
-"        or exclude the named classes, if the 1st argument starts with '-'.\n"
+"        or exclude the named classes, if the 1st argument\n"
+"        starts with '-'.\n"
 "\n"
 "        This action exports the current data from the database into\n"
-"        colon-separated-value files that are placed in the nominated\n"
+"        colon-separated-value files that are placed in the export_dir\n"
 "        destination directory.\n"
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:713
+#: ../roundup/admin.py:723
 msgid ""
 "Usage: filter classname propname=value ...\n"
 "        Find the nodes of the given class with a given property value.\n"
@@ -394,20 +399,20 @@
 msgstr ""
 
 # ../roundup/admin.py:701 :854 :866 :920
-#: ../roundup/admin.py:754
+#: ../roundup/admin.py:764
 #, 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:781 ../roundup/admin.py:830 ../roundup/admin.py:1505
-#: ../roundup/admin.py:1518 ../roundup/admin.py:2086
-#: ../roundup/admin.py:781:830 :1505:1518:2086
+#: ../roundup/admin.py:791 ../roundup/admin.py:840 ../roundup/admin.py:1517
+#: ../roundup/admin.py:1530 ../roundup/admin.py:2098
+#: ../roundup/admin.py:791:840 :1517:1530:2098
 #, python-format
 msgid "%(classname)s has no property \"%(propname)s\""
 msgstr "%(classname)s-nek nincs \"%(propname)s\" tulajdonsága"
 
-#: ../roundup/admin.py:788
+#: ../roundup/admin.py:798
 msgid ""
 "Usage: find classname propname=value ...\n"
 "        Find the nodes of the given class with a given link property value.\n"
@@ -418,12 +423,11 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:837
+#: ../roundup/admin.py:847
 #, fuzzy
 msgid ""
-"Usage: genconfig <filename>\n"
-"        Generate a new tracker config file (ini style) with default\n"
-"        values in <filename>.\n"
+"Usage: genconfig filename\n"
+"        Create a new tracker config file with default values in filename.\n"
 "        "
 msgstr ""
 "Használat: genconfig <fájlnév>\n"
@@ -432,7 +436,7 @@
 "        a <fájlnév> fájlba.\n"
 "        "
 
-#: ../roundup/admin.py:855
+#: ../roundup/admin.py:864
 #, python-format
 msgid ""
 "Changing option\n"
@@ -440,20 +444,20 @@
 "from old default of %(old_number)s to new default of %(new_number)s."
 msgstr ""
 
-#: ../roundup/admin.py:866
+#: ../roundup/admin.py:875
 #, python-format
 msgid ""
 "Update 'password_pbkdf2_default_rounds' to a number equal to or larger\n"
 "  than %s.\n"
 msgstr ""
 
-#: ../roundup/admin.py:873
+#: ../roundup/admin.py:882
 msgid ""
 "Check the rdbms mysql_* settings. Your charset and collations may need\n"
 "  to be changed. See upgrading instructions.\n"
 msgstr ""
 
-#: ../roundup/admin.py:883
+#: ../roundup/admin.py:892
 #, fuzzy
 msgid ""
 "Usage: get property designator[,designator]*\n"
@@ -474,7 +478,7 @@
 "        "
 
 # ../roundup/admin.py:560 :575
-#: ../roundup/admin.py:916
+#: ../roundup/admin.py:925
 #, python-format
 msgid "property %s is not of type Multilink or Link so -d flag does not apply."
 msgstr ""
@@ -482,18 +486,18 @@
 "alkalmazható."
 
 # ../roundup/admin.py:583 :983 :1032 :1054
-#: ../roundup/admin.py:933 ../roundup/admin.py:1181 ../roundup/admin.py:1858
-#: ../roundup/admin.py:933:1181:1858
+#: ../roundup/admin.py:942 ../roundup/admin.py:1190 ../roundup/admin.py:1842
+#: ../roundup/admin.py:1870 ../roundup/admin.py:942:1190 :1842:1870
 #, python-format
 msgid "no such %(classname)s node \"%(nodeid)s\""
 msgstr "nincs \"%(nodeid)s\" %(classname)s csomópont"
 
-#: ../roundup/admin.py:936
+#: ../roundup/admin.py:945
 #, python-format
 msgid "no such %(classname)s property \"%(propname)s\""
 msgstr "nincs \"%(propname)s\" %(classname)s tulajdonság"
 
-#: ../roundup/admin.py:941
+#: ../roundup/admin.py:950
 msgid ""
 "Usage: help topic\n"
 "        Give help about topic.\n"
@@ -513,12 +517,12 @@
 "        all       -- minden elérhető segítség\n"
 "        "
 
-#: ../roundup/admin.py:960
+#: ../roundup/admin.py:969
 #, python-format
 msgid "Sorry, no help for \"%(topic)s\""
 msgstr "Elnézést, \"%(topic)s\" témához nincs súgó"
 
-#: ../roundup/admin.py:977
+#: ../roundup/admin.py:986
 #, fuzzy
 msgid ""
 "Usage: history designator [skipquiet] [raw]\n"
@@ -540,27 +544,27 @@
 "        csomópont értékét.\n"
 "        "
 
-#: ../roundup/admin.py:1002
+#: ../roundup/admin.py:1011
 #, python-format
 msgid "Unexpected argument(s): %s. Expected 'skipquiet' or 'raw'."
 msgstr ""
 
-#: ../roundup/admin.py:1053
+#: ../roundup/admin.py:1062
 #, fuzzy
 msgid "removed"
 msgstr "Törlés"
 
-#: ../roundup/admin.py:1055
+#: ../roundup/admin.py:1064
 msgid "added"
 msgstr ""
 
-#: ../roundup/admin.py:1057
+#: ../roundup/admin.py:1066
 #, python-format
 msgid "Unknown history set operation '%s'. Expected +/-."
 msgstr ""
 
 #. .Hint added issue23 to superseder
-#: ../roundup/admin.py:1082
+#: ../roundup/admin.py:1091
 #, fuzzy, python-format
 msgid "added %(class)s%(item_id)s to %(propname)s"
 msgstr "%(class)s %(id)s %(properties)s sikeresen szerkesztve"
@@ -568,34 +572,35 @@
 #. .Hint read as: assignedto was admin(1)
 #. where assignedto is the property
 #. admin is the key name for value 1
-#: ../roundup/admin.py:1103
+#: ../roundup/admin.py:1112
 #, fuzzy, python-format
 msgid "%(prop)s was %(name)s(%(value)s)"
 msgstr "%(propname)s (%(proptype)s): "
 
-#: ../roundup/admin.py:1109 ../roundup/admin.py:1138
-#: ../roundup/admin.py:1109:1138
+#: ../roundup/admin.py:1118 ../roundup/admin.py:1147
+#: ../roundup/admin.py:1118:1147
 #, fuzzy, python-format
 msgid "%(prop)s was %(value)s"
 msgstr "%(key)s: %(value)s"
 
-#: ../roundup/admin.py:1128
+#: ../roundup/admin.py:1137
 #, python-format
 msgid "%(prop)s was [%(value_list)s]"
 msgstr ""
 
 #. .Hint modified nosy: added demo(3)
-#: ../roundup/admin.py:1135
+#: ../roundup/admin.py:1144
 #, python-format
 msgid "modified %(prop)s: %(how)s"
 msgstr ""
 
-#: ../roundup/admin.py:1186
+#: ../roundup/admin.py:1195
 msgid ""
 "Usage: import import_dir\n"
-"        Import a database from the directory containing CSV files,\n"
-"        two per class to import.\n"
+"        Import a database and file contents from the directory.\n"
 "\n"
+"        The directory should have the same format as one containing\n"
+"        the output of export. There are two files imported per class.\n"
 "        The files used in the import are:\n"
 "\n"
 "        <class>.csv\n"
@@ -613,16 +618,17 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1276
+#: ../roundup/admin.py:1287
 msgid ""
 "Usage: importtables export_dir\n"
+"        This imports the database tables exported using exporttables.\n"
 "\n"
-"        This imports the database tables exported using exporttables.\n"
+"        It does not import the content of files like msgs and files.\n"
 "        "
 msgstr ""
 
 #. password
-#: ../roundup/admin.py:1283
+#: ../roundup/admin.py:1295
 msgid ""
 "Usage: initialise [adminpw]\n"
 "        Initialise a new Roundup tracker.\n"
@@ -640,23 +646,23 @@
 "        Végrehajtja az adatbázist inicializáló dbinit.init() rutint\n"
 "        "
 
-#: ../roundup/admin.py:1297
+#: ../roundup/admin.py:1309
 msgid "Admin Password: "
 msgstr "Adminisztrátori jelszó: "
 
-#: ../roundup/admin.py:1298
+#: ../roundup/admin.py:1310
 msgid "       Confirm: "
 msgstr "       Megerősítés "
 
-#: ../roundup/admin.py:1302
+#: ../roundup/admin.py:1314
 msgid "Instance home does not exist"
 msgstr "A példány könyvtára nem létezik"
 
-#: ../roundup/admin.py:1306
+#: ../roundup/admin.py:1318
 msgid "Instance has not been installed"
 msgstr "A példány nem lett installálva"
 
-#: ../roundup/admin.py:1314
+#: ../roundup/admin.py:1326
 msgid ""
 "WARNING: The database is already initialised!\n"
 "If you re-initialise it, you will lose all the data!\n"
@@ -666,7 +672,7 @@
 "Újrainicializálás esetén minden adat elvész!\n"
 "Törli? Y/N: "
 
-#: ../roundup/admin.py:1334
+#: ../roundup/admin.py:1346
 msgid ""
 "Usage: install [template [backend [key=val[,key=val]]]]\n"
 "        Install a new Roundup tracker.\n"
@@ -692,12 +698,12 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1363
+#: ../roundup/admin.py:1375
 #, 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:1372
+#: ../roundup/admin.py:1384
 #, python-format
 msgid ""
 "WARNING: There appears to be a tracker in \"%(tracker_home)s\"!\n"
@@ -709,22 +715,22 @@
 "Ha újra installálod, minden adat elveszik!\n"
 "Töröljem? Y/N: "
 
-#: ../roundup/admin.py:1385
+#: ../roundup/admin.py:1397
 #, fuzzy
 msgid "Select template"
 msgstr "Sablon választása [classic]: "
 
-#: ../roundup/admin.py:1395
+#: ../roundup/admin.py:1407
 #, fuzzy
 msgid "Select backend"
 msgstr "Adatbázis háttér választása [anydbm]: "
 
-#: ../roundup/admin.py:1406
+#: ../roundup/admin.py:1418
 #, python-format
 msgid "Error in configuration settings: \"%s\""
 msgstr "Hiba a konfigurációs beállításokban: \"%s\""
 
-#: ../roundup/admin.py:1439
+#: ../roundup/admin.py:1451
 #, python-format
 msgid ""
 "\n"
@@ -737,11 +743,11 @@
 " Most kell szerkesztened a konfigurációs fájlt:\n"
 "   %(config_file)s"
 
-#: ../roundup/admin.py:1449
+#: ../roundup/admin.py:1461
 msgid " ... at a minimum, you must set following options:"
 msgstr " ... legalább a következő opciókat kell beállítani:"
 
-#: ../roundup/admin.py:1454
+#: ../roundup/admin.py:1466
 #, python-format
 msgid ""
 "\n"
@@ -758,7 +764,7 @@
 "---------------------------------------------------------------------------\n"
 msgstr ""
 
-#: ../roundup/admin.py:1470
+#: ../roundup/admin.py:1482
 msgid ""
 "Usage: list classname [property]\n"
 "        List the instances of a class.\n"
@@ -774,20 +780,19 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1483
+#: ../roundup/admin.py:1495
 msgid "Too many arguments supplied"
 msgstr "Túl sok argumentum került megadásra"
 
-#: ../roundup/admin.py:1516
+#: ../roundup/admin.py:1528
 #, python-format
 msgid "%(nodeid)4s: %(value)s"
 msgstr "%(nodeid)4s: %(value)s"
 
 #. noqa: ARG002  - args unused
-#: ../roundup/admin.py:1523
+#: ../roundup/admin.py:1535
 msgid ""
 "Usage: migrate\n"
-"\n"
 "        Update a tracker's database to be compatible with the Roundup\n"
 "        codebase.\n"
 "\n"
@@ -808,22 +813,20 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1544
+#: ../roundup/admin.py:1555
 #, python-format
 msgid "Tracker updated to schema version %s."
 msgstr ""
 
-#: ../roundup/admin.py:1548
+#: ../roundup/admin.py:1559
 #, python-format
 msgid "No migration action required. At schema version %s."
 msgstr ""
 
-#: ../roundup/admin.py:1553
+#: ../roundup/admin.py:1564
 msgid ""
 "Usage: pack period | date\n"
-"\n"
-"        Remove journal entries older than a period of time specified or\n"
-"        before a certain date.\n"
+"        Remove journal entries older than the date/period.\n"
 "\n"
 "        A period is specified using the suffixes \"y\", \"m\", and \"d\". "
 "The\n"
@@ -840,15 +843,16 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1581
+#: ../roundup/admin.py:1590
 msgid "Invalid format"
 msgstr "Hibás formátum"
 
-#: ../roundup/admin.py:1592
+#: ../roundup/admin.py:1601
 msgid ""
 "Usage: perftest [mode] [arguments]*\n"
+"        Time operations in Roundup.\n"
 "\n"
-"        Time operations in Roundup. Supported arguments:\n"
+"        Supported arguments:\n"
 "\n"
 "            [password] [rounds=<integer>] [scheme=<scheme>]\n"
 "\n"
@@ -861,28 +865,30 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1625
+#: ../roundup/admin.py:1635
 msgid "Invalid 'rounds'. Must be larger than 999."
 msgstr ""
 
-#: ../roundup/admin.py:1629
+#: ../roundup/admin.py:1639
 #, python-format
 msgid "Invalid 'rounds'. It must be an integer not: %s"
 msgstr ""
 
-#: ../roundup/admin.py:1656
+#: ../roundup/admin.py:1666
 msgid "scheme does not support rounds."
 msgstr ""
 
-#: ../roundup/admin.py:1659
+#: ../roundup/admin.py:1669
 #, python-format
 msgid "Hash time: %(time)0.9f seconds, scheme: %(scheme)s, rounds: %(rounds)s"
 msgstr ""
 
-#: ../roundup/admin.py:1665
+#: ../roundup/admin.py:1675
 msgid ""
 "Usage: pragma setting=value | 'list'\n"
-"        Set internal admin settings to a value. E.G.\n"
+"        Set internal admin settings to a value.\n"
+"\n"
+"        For example:\n"
 "\n"
 "            pragma verbose=True\n"
 "            pragma verbose=yes\n"
@@ -906,49 +912,49 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1698
+#: ../roundup/admin.py:1710
 #, python-format
 msgid "Argument must be setting=value, was given: %s."
 msgstr ""
 
-#: ../roundup/admin.py:1701
+#: ../roundup/admin.py:1713
 msgid "Current settings and values (NYI - not yet implemented):"
 msgstr ""
 
-#: ../roundup/admin.py:1712
+#: ../roundup/admin.py:1724
 msgid ""
 "      Help for this pragma is missing. Please report it to the Roundup "
 "project.\n"
 msgstr ""
 
-#: ../roundup/admin.py:1718
+#: ../roundup/admin.py:1730
 #, fuzzy, python-format
 msgid "Unknown setting %s. Try \"pragma list\"."
 msgstr "Ismeretlen felhasználónév"
 
-#: ../roundup/admin.py:1728
+#: ../roundup/admin.py:1740
 #, python-format
 msgid "Incorrect value for boolean setting %(setting)s: %(value)s."
 msgstr ""
 
-#: ../roundup/admin.py:1735
+#: ../roundup/admin.py:1747
 #, python-format
 msgid "Incorrect value for integer setting %(setting)s: %(value)s."
 msgstr ""
 
-#: ../roundup/admin.py:1742
+#: ../roundup/admin.py:1754
 #, python-format
 msgid ""
 "Incorrect value for setting %(setting)s: %(value)s. Should be no, both, or "
 "only."
 msgstr ""
 
-#: ../roundup/admin.py:1752
+#: ../roundup/admin.py:1764
 #, python-format
 msgid "Internal error: pragma can not handle values of type: %s"
 msgstr ""
 
-#: ../roundup/admin.py:1761
+#: ../roundup/admin.py:1773
 msgid ""
 "Usage: reindex [classname|classname:#-#|designator]*\n"
 "        Re-generate a tracker's search indexes.\n"
@@ -965,17 +971,17 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1783
+#: ../roundup/admin.py:1795
 #, python-format
 msgid "no such item \"%(designator)s\""
 msgstr "nincs ilyen elem: \"%(designator)s\""
 
-#: ../roundup/admin.py:1793
+#: ../roundup/admin.py:1805
 #, fuzzy, python-format
 msgid "no such item \"%(class)s%(id)s\""
 msgstr "nincs ilyen elem: \"%(designator)s\""
 
-#: ../roundup/admin.py:1805
+#: ../roundup/admin.py:1817
 msgid ""
 "Usage: restore designator[,designator]*\n"
 "        Restore the retired node specified by designator.\n"
@@ -987,13 +993,7 @@
 "        "
 msgstr ""
 
-# ../roundup/admin.py:583 :983 :1032 :1054
-#: ../roundup/admin.py:1830
-#, fuzzy
-msgid "no such %(classname)s node \"%(nodeid)s\""
-msgstr "nincs \"%(nodeid)s\" %(classname)s csomópont"
-
-#: ../roundup/admin.py:1836
+#: ../roundup/admin.py:1848
 msgid ""
 "Usage: retire designator[,designator]*\n"
 "        Retire the node specified by designator.\n"
@@ -1007,7 +1007,7 @@
 msgstr ""
 
 #. noqa: ARG002 - args unused
-#: ../roundup/admin.py:1864
+#: ../roundup/admin.py:1876
 msgid ""
 "Usage: rollback\n"
 "        Undo all changes that are pending commit to the database.\n"
@@ -1019,60 +1019,60 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1877
+#: ../roundup/admin.py:1889
 msgid ""
 "Usage: security [Role name]\n"
+"        Display the Permissions available to one or all Roles.\n"
 "\n"
-"             Display the Permissions available to one or all Roles.\n"
-"             Also validates that any properties defined in a\n"
-"             permission are valid.\n"
+"        Also validates that any properties defined in a\n"
+"        permission are valid.\n"
 "\n"
-"             Run this after changing your permissions to catch\n"
-"             typos.\n"
+"        Run this after changing your permissions to catch\n"
+"        typos.\n"
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1892
+#: ../roundup/admin.py:1904
 #, fuzzy, python-format
 msgid "No such Role \"%(role)s\"\n"
 msgstr "Nincs ilyen szerepkör: \"%(role)s\""
 
-#: ../roundup/admin.py:1898
+#: ../roundup/admin.py:1910
 #, 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:1901
+#: ../roundup/admin.py:1913
 #, 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:1905
+#: ../roundup/admin.py:1917
 #, 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:1907
+#: ../roundup/admin.py:1919
 #, 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:1910
+#: ../roundup/admin.py:1922
 #, fuzzy, python-format
 msgid "Role \"%(name)s\":\n"
 msgstr "\"%(name)s\" szerepkör:"
 
-#: ../roundup/admin.py:1916
+#: ../roundup/admin.py:1928
 #, fuzzy
 msgid " %(description)s (%(name)s for \"%(klass)s\""
 msgstr " %(description)s (%(name)s)"
 
-#: ../roundup/admin.py:1916
+#: ../roundup/admin.py:1928
 #, fuzzy, python-format
 msgid " %(description)s (%(name)s for \"%(klass)s\": %(properties)s only)\n"
 msgstr " %(description)s (%(name)s)"
 
-#: ../roundup/admin.py:1929
+#: ../roundup/admin.py:1941
 #, python-format
 msgid ""
 "\n"
@@ -1080,17 +1080,17 @@
 "\n"
 msgstr ""
 
-#: ../roundup/admin.py:1935
+#: ../roundup/admin.py:1947
 #, fuzzy, python-format
 msgid " %(description)s (%(name)s for \"%(klass)s\" only)\n"
 msgstr " %(description)s (%(name)s)"
 
-#: ../roundup/admin.py:1938
+#: ../roundup/admin.py:1950
 #, fuzzy, python-format
 msgid " %(description)s (%(name)s)\n"
 msgstr " %(description)s (%(name)s)"
 
-#: ../roundup/admin.py:1942
+#: ../roundup/admin.py:1954
 msgid ""
 "Usage: set items property=value [property=value ...]\n"
 "        Set the given properties of one or more items(s).\n"
@@ -1111,7 +1111,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:2010
+#: ../roundup/admin.py:2022
 msgid ""
 "Usage: specification classname\n"
 "        Show the properties for a classname.\n"
@@ -1125,17 +1125,17 @@
 "        Listázza az adott osztály tulajdonságait.\n"
 "        "
 
-#: ../roundup/admin.py:2029
+#: ../roundup/admin.py:2041
 #, fuzzy, python-format
 msgid "%(key)s: %(value)s (key property)\n"
 msgstr "%(key)s: %(value)s (kulcs tulajdonság)"
 
-#: ../roundup/admin.py:2032
+#: ../roundup/admin.py:2044
 #, fuzzy, python-format
 msgid "%(key)s: %(value)s\n"
 msgstr "%(key)s: %(value)s"
 
-#: ../roundup/admin.py:2035
+#: ../roundup/admin.py:2047
 msgid ""
 "Usage: table classname [property[,property]*]\n"
 "        List the instances of a class in tabular form.\n"
@@ -1167,17 +1167,17 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:2081
+#: ../roundup/admin.py:2093
 #, python-format
 msgid "\"%(spec)s\" not name:width"
 msgstr "\"%(spec)s\" nem név:hossz formátumú"
 
-#: ../roundup/admin.py:2103
+#: ../roundup/admin.py:2115
 #, python-format
 msgid "\"%(spec)s\" does not have an integer width: \"%(width)s\""
 msgstr ""
 
-#: ../roundup/admin.py:2139
+#: ../roundup/admin.py:2151
 msgid ""
 "Usage: templates [trace_search]\n"
 "        List templates and their installed directories.\n"
@@ -1187,13 +1187,14 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:2167
+#: ../roundup/admin.py:2179
 #, fuzzy
 msgid ""
 "Usage: updateconfig <filename>\n"
-"        Generate an updated tracker config file (ini style) in\n"
-"        <filename>. Use current settings from existing roundup\n"
-"        tracker in tracker home.\n"
+"        Merge existing tracker config with new settings.\n"
+"\n"
+"        Output the updated config file to <filename>. Use current\n"
+"        settings from existing roundup tracker in tracker home.\n"
 "        "
 msgstr ""
 "Használat: genconfig <fájlnév>\n"
@@ -1203,37 +1204,37 @@
 "        "
 
 # ../roundup/cgi/actions.py:596 :607 :778 :797
-#: ../roundup/admin.py:2175 ../roundup/cgi/actions.py:886
+#: ../roundup/admin.py:2188 ../roundup/cgi/actions.py:886
 #: ../roundup/cgi/actions.py:897 ../roundup/cgi/actions.py:1099
 #: ../roundup/cgi/actions.py:1113 ../roundup/cgi/actions.py:886:897 :1099:1113
 #, python-format
 msgid "Error: %s"
 msgstr "Hiba: %s"
 
-#: ../roundup/admin.py:2207
+#: ../roundup/admin.py:2220
 #, 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:2213
+#: ../roundup/admin.py:2226
 #, 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:2228
+#: ../roundup/admin.py:2241
 msgid "Enter tracker home: "
 msgstr "Adja meg a hibakövető könyvtárát: "
 
-#: ../roundup/admin.py:2257 ../roundup/admin.py:2261
-#: ../roundup/admin.py:2257:2261
+#: ../roundup/admin.py:2270 ../roundup/admin.py:2274
+#: ../roundup/admin.py:2270:2274
 #, python-format
 msgid "Error: Couldn't open tracker: %(message)s"
 msgstr "Hiba: Hibakövető megnyitása sikertelen: %(message)s"
 
-#: ../roundup/admin.py:2309
+#: ../roundup/admin.py:2322
 #, python-format
 msgid ""
 "Roundup %s ready for input.\n"
@@ -1242,15 +1243,15 @@
 "A Roundup %s fogadókész.\n"
 "Segítségért gépeljen \"help\"-et."
 
-#: ../roundup/admin.py:2342
+#: ../roundup/admin.py:2355
 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:2348
+#: ../roundup/admin.py:2361
 msgid "exit..."
 msgstr "kilépés..."
 
-#: ../roundup/admin.py:2361
+#: ../roundup/admin.py:2374
 msgid "There are unsaved changes. Commit them (y/N)? "
 msgstr "Vannak nem mentett változtatások. Elmenti őket (y/N)? "
 
@@ -1782,7 +1783,7 @@
 msgid "<em>undefined</em>"
 msgstr "<em>nem definiált</em>"
 
-#: ../roundup/cgi/client.py:90
+#: ../roundup/cgi/client.py:105
 msgid ""
 "<html><head><title>An error has occurred</title></head>\n"
 "<body><h1>An error has occurred</h1>\n"
@@ -1796,150 +1797,150 @@
 "A hibakövető karbantartói értesítést kaptak a problémáról.</p>\n"
 "</body></html>"
 
-#: ../roundup/cgi/client.py:702 ../roundup/cgi/client.py:1622
-#: ../roundup/cgi/client.py:702:1622
+#: ../roundup/cgi/client.py:717 ../roundup/cgi/client.py:1635
+#: ../roundup/cgi/client.py:717:1635
 msgid "Required Header Missing"
 msgstr ""
 
-#: ../roundup/cgi/client.py:704
+#: ../roundup/cgi/client.py:719
 #, 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:956
+#: ../roundup/cgi/client.py:971
 msgid "Form Error: "
 msgstr "Űrlap hiba: "
 
-#: ../roundup/cgi/client.py:1049
+#: ../roundup/cgi/client.py:1064
 #, python-format
 msgid "Unrecognized charset: %r"
 msgstr "Ismeretlen karakterkészlet: %r"
 
-#: ../roundup/cgi/client.py:1318 ../roundup/cgi/client.py:2281
-#: ../roundup/cgi/client.py:1318:2281
+#: ../roundup/cgi/client.py:1331 ../roundup/cgi/client.py:2294
+#: ../roundup/cgi/client.py:1331:2294
 msgid "broken form: multiple @action values submitted"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1335
+#: ../roundup/cgi/client.py:1348
 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:1483
+#: ../roundup/cgi/client.py:1496
 msgid "Referer header not available."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1487
+#: ../roundup/cgi/client.py:1500
 #, python-format
 msgid "csrf key used with wrong method from: %s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1516
+#: ../roundup/cgi/client.py:1529
 #, python-format
 msgid "csrf header %(header)s required but missing for user%(userid)s."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1520
+#: ../roundup/cgi/client.py:1533
 #, python-format
 msgid "Missing header: %s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1528
+#: ../roundup/cgi/client.py:1541
 #, 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:1533
+#: ../roundup/cgi/client.py:1546
 #, fuzzy, python-format
 msgid "Invalid Referer: %s"
 msgstr "Hibás bejelentkezés"
 
-#: ../roundup/cgi/client.py:1548
+#: ../roundup/cgi/client.py:1561
 #, 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:1553
+#: ../roundup/cgi/client.py:1566
 #, fuzzy, python-format
 msgid "Invalid Origin %s"
 msgstr "Hibás bejelentkezés"
 
-#: ../roundup/cgi/client.py:1567
+#: ../roundup/cgi/client.py:1580
 #, python-format
 msgid ""
 "csrf X-FORWARDED-HOST header check failed for user%(userid)s. Value=%(host)s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1573
+#: ../roundup/cgi/client.py:1586
 #, python-format
 msgid "Invalid X-FORWARDED-HOST %s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1592
-#, python-format
-msgid "csrf HOST header check failed for user%(userid)s. Value=%(host)s"
-msgstr ""
-
-#: ../roundup/cgi/client.py:1597
-#, python-format
-msgid "Invalid HOST %s"
-msgstr ""
-
 #: ../roundup/cgi/client.py:1605
+#, python-format
+msgid "csrf HOST header check failed for user%(userid)s. Value=%(host)s"
+msgstr ""
+
+#: ../roundup/cgi/client.py:1610
+#, python-format
+msgid "Invalid HOST %s"
+msgstr ""
+
+#: ../roundup/cgi/client.py:1618
 msgid "Csrf: unable to verify sufficient headers"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1606
-msgid "Unable to verify sufficient headers"
-msgstr ""
-
 #: ../roundup/cgi/client.py:1619
+msgid "Unable to verify sufficient headers"
+msgstr ""
+
+#: ../roundup/cgi/client.py:1632
 #, python-format
 msgid "csrf X-REQUESTED-WITH xmlrpc required header check failed for user%s."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1660
+#: ../roundup/cgi/client.py:1673
 #, python-format
 msgid "Required csrf field missing for user%s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1662 ../roundup/cgi/client.py:1689
-#: ../roundup/cgi/client.py:1706 ../roundup/cgi/client.py:1662:1689:1706
+#: ../roundup/cgi/client.py:1675 ../roundup/cgi/client.py:1702
+#: ../roundup/cgi/client.py:1719 ../roundup/cgi/client.py:1675:1702:1719
 msgid ""
 "We can't validate your session (csrf failure). Re-enter any unsaved data and "
 "try again."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1666
+#: ../roundup/cgi/client.py:1679
 #, python-format
 msgid "csrf field not supplied by user%s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1678
+#: ../roundup/cgi/client.py:1691
 #, 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:1696
+#: ../roundup/cgi/client.py:1709
 #, 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:1888
+#: ../roundup/cgi/client.py:1901
 msgid "You are not allowed to view this file."
 msgstr "Nem nézheti meg ezt a fájlt."
 
-#: ../roundup/cgi/client.py:2159
+#: ../roundup/cgi/client.py:2172
 #, python-format
 msgid "%(starttag)sTime elapsed: %(seconds)fs%(endtag)s\n"
 msgstr "%(starttag)sEltelt idő: %(seconds)fs%(endtag)s\n"
 
-#: ../roundup/cgi/client.py:2163
+#: ../roundup/cgi/client.py:2176
 #, python-format
 msgid ""
 "%(starttag)sCache hits: %(cache_hits)d, misses %(cache_misses)d. Loading "
@@ -1948,7 +1949,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:2703
+#: ../roundup/cgi/client.py:2716
 #, python-format
 msgid ""
 "Cache failure: compressed file %(compressed)s is older than its source file "
@@ -2013,74 +2014,74 @@
 msgstr[1] ""
 "Nincsenek megadva a(z) %(class)s kötelező %(property)s tulajdonságai"
 
-#: ../roundup/cgi/templating.py:277
+#: ../roundup/cgi/templating.py:278
 #, python-format
 msgid "You are not allowed to %(action)s items of class %(class)s"
 msgstr ""
 "Nincs jogosultsága a(z) %(class)s osztály elemein %(action)s műveletet "
 "végrehajtani"
 
-#: ../roundup/cgi/templating.py:914
+#: ../roundup/cgi/templating.py:916
 msgid "(list)"
 msgstr "(lista)"
 
-#: ../roundup/cgi/templating.py:989
+#: ../roundup/cgi/templating.py:991
 msgid "Submit New Entry"
 msgstr "Létrehozás"
 
 # ../roundup/cgi/templating.py:710 :829 :1236 :1257 :1304 :1327 :1361 :1400
 # :1453 :1470 :1549 :1569 :1587 :1619 :1629 :1683 :1875
-#: ../roundup/cgi/templating.py:1011 ../roundup/cgi/templating.py:1187
-#: ../roundup/cgi/templating.py:1822 ../roundup/cgi/templating.py:1853
-#: ../roundup/cgi/templating.py:1874 ../roundup/cgi/templating.py:1912
-#: ../roundup/cgi/templating.py:1965 ../roundup/cgi/templating.py:1989
-#: ../roundup/cgi/templating.py:1996 ../roundup/cgi/templating.py:2033
-#: ../roundup/cgi/templating.py:2086 ../roundup/cgi/templating.py:2119
-#: ../roundup/cgi/templating.py:2214 ../roundup/cgi/templating.py:2235
-#: ../roundup/cgi/templating.py:2326 ../roundup/cgi/templating.py:2346
-#: ../roundup/cgi/templating.py:2368 ../roundup/cgi/templating.py:2411
-#: ../roundup/cgi/templating.py:2421 ../roundup/cgi/templating.py:2486
-#: ../roundup/cgi/templating.py:2789 ../roundup/cgi/templating.py:1011:1187
-#: :1822:1853 :1874:1912 :1965:1989 :1996:2033 :2086:2119 :2214:2235 :2326:2346
-#: :2368:2411 :2421:2486:2789
+#: ../roundup/cgi/templating.py:1013 ../roundup/cgi/templating.py:1189
+#: ../roundup/cgi/templating.py:1824 ../roundup/cgi/templating.py:1855
+#: ../roundup/cgi/templating.py:1876 ../roundup/cgi/templating.py:1914
+#: ../roundup/cgi/templating.py:1967 ../roundup/cgi/templating.py:1991
+#: ../roundup/cgi/templating.py:1998 ../roundup/cgi/templating.py:2035
+#: ../roundup/cgi/templating.py:2088 ../roundup/cgi/templating.py:2121
+#: ../roundup/cgi/templating.py:2216 ../roundup/cgi/templating.py:2237
+#: ../roundup/cgi/templating.py:2328 ../roundup/cgi/templating.py:2348
+#: ../roundup/cgi/templating.py:2370 ../roundup/cgi/templating.py:2413
+#: ../roundup/cgi/templating.py:2423 ../roundup/cgi/templating.py:2488
+#: ../roundup/cgi/templating.py:2791 ../roundup/cgi/templating.py:1013:1189
+#: :1824:1855 :1876:1914 :1967:1991 :1998:2035 :2088:2121 :2216:2237 :2328:2348
+#: :2370:2413 :2423:2488:2791
 msgid "[hidden]"
 msgstr "[rejtett]"
 
-#: ../roundup/cgi/templating.py:1012
+#: ../roundup/cgi/templating.py:1014
 msgid "New node - no history"
 msgstr "Új bejegyzés - nincs történet"
 
-#: ../roundup/cgi/templating.py:1152
+#: ../roundup/cgi/templating.py:1154
 msgid "Submit Changes"
 msgstr "Változások mentése"
 
-#: ../roundup/cgi/templating.py:1230
+#: ../roundup/cgi/templating.py:1232
 msgid "<em>The indicated property no longer exists</em>"
 msgstr "<em>A jelzett tulajdonság már nem létezik</em>"
 
-#: ../roundup/cgi/templating.py:1266
+#: ../roundup/cgi/templating.py:1268
 #, python-format
 msgid "The linked class %(classname)s no longer exists"
 msgstr "A csatolt %(classname)s osztály már nem létezik"
 
-#: ../roundup/cgi/templating.py:1303 ../roundup/cgi/templating.py:1333
-#: ../roundup/cgi/templating.py:2495 ../roundup/cgi/templating.py:2798
-#: ../roundup/cgi/templating.py:1303:1333 :2495:2798
+#: ../roundup/cgi/templating.py:1305 ../roundup/cgi/templating.py:1335
+#: ../roundup/cgi/templating.py:2497 ../roundup/cgi/templating.py:2800
+#: ../roundup/cgi/templating.py:1305:1335 :2497:2800
 msgid "[label is missing]"
 msgstr ""
 
 # ../roundup/cgi/templating.py:940 :964
-#: ../roundup/cgi/templating.py:1307 ../roundup/cgi/templating.py:1336
-#: ../roundup/cgi/templating.py:1307:1336
+#: ../roundup/cgi/templating.py:1309 ../roundup/cgi/templating.py:1338
+#: ../roundup/cgi/templating.py:1309:1338
 msgid "<strike>The linked node no longer exists</strike>"
 msgstr "<strike>A csatolt bejegyzés már nem létezik</strike>"
 
-#: ../roundup/cgi/templating.py:1398
+#: ../roundup/cgi/templating.py:1400
 #, python-format
 msgid "%s: (no value)"
 msgstr "%s: (nincs érték)"
 
-#: ../roundup/cgi/templating.py:1414
+#: ../roundup/cgi/templating.py:1416
 #, fuzzy, python-format
 msgid ""
 "<strong><em>This event %s is not handled by the history display!</em></"
@@ -2088,48 +2089,48 @@
 msgstr ""
 "<strong><em>Az előzmények képernyő nem kezeli ezt az eseményt!</em></strong>"
 
-#: ../roundup/cgi/templating.py:1427
+#: ../roundup/cgi/templating.py:1429
 msgid "<tr><td colspan=4><strong>Note:</strong></td></tr>"
 msgstr "<tr><td colspan=4><strong>Megjegyzés:</strong></td></tr>"
 
-#: ../roundup/cgi/templating.py:1436
+#: ../roundup/cgi/templating.py:1438
 msgid "History"
 msgstr "Előzmények"
 
-#: ../roundup/cgi/templating.py:1438
+#: ../roundup/cgi/templating.py:1440
 msgid "<th>Date</th>"
 msgstr "<th>Dátum</th>"
 
-#: ../roundup/cgi/templating.py:1439
+#: ../roundup/cgi/templating.py:1441
 msgid "<th>User</th>"
 msgstr "<th>Szerző</th>"
 
-#: ../roundup/cgi/templating.py:1440
+#: ../roundup/cgi/templating.py:1442
 msgid "<th>Action</th>"
 msgstr "<th>Művelet</th>"
 
-#: ../roundup/cgi/templating.py:1441
+#: ../roundup/cgi/templating.py:1443
 msgid "<th>Args</th>"
 msgstr "<th>Tulajdonságok</th>"
 
-#: ../roundup/cgi/templating.py:1492
+#: ../roundup/cgi/templating.py:1494
 #, python-format
 msgid "Copy of %(class)s %(id)s"
 msgstr "A(z) %(class)s %(id)s másolata"
 
 # ../roundup/cgi/templating.py:1006 :1404 :1425 :1431
-#: ../roundup/cgi/templating.py:2123 ../roundup/cgi/templating.py:2158
-#: ../roundup/cgi/templating.py:1380:2123:2158
+#: ../roundup/cgi/templating.py:2125 ../roundup/cgi/templating.py:2160
+#: ../roundup/cgi/templating.py:1382:2125:2160
 msgid "No"
 msgstr "Nem"
 
 # ../roundup/cgi/templating.py:1006 :1404 :1423 :1428
-#: ../roundup/cgi/templating.py:2123 ../roundup/cgi/templating.py:2152
-#: ../roundup/cgi/templating.py:1380:2123:2152
+#: ../roundup/cgi/templating.py:2125 ../roundup/cgi/templating.py:2154
+#: ../roundup/cgi/templating.py:1382:2125:2154
 msgid "Yes"
 msgstr "Igen"
 
-#: ../roundup/cgi/templating.py:2284
+#: ../roundup/cgi/templating.py:2286
 msgid ""
 "default value for DateHTMLProperty must be either DateHTMLProperty or string "
 "date representation."
@@ -2137,27 +2138,27 @@
 "a DateHTMLProperty alapértéke DateHTMLProperty vagy szöveges dátumleírás "
 "típusú kell legyen."
 
-#: ../roundup/cgi/templating.py:2466
+#: ../roundup/cgi/templating.py:2468
 #, python-format
 msgid "Attempt to look up %(attr)s on a missing value"
 msgstr "Kísérlet %(attr)s keresésére egy hiányzó értéken"
 
-#: ../roundup/cgi/templating.py:2477
+#: ../roundup/cgi/templating.py:2479
 #, fuzzy, python-format
 msgid "Attempt to look up %(item)s on a missing value"
 msgstr "Kísérlet %(attr)s keresésére egy hiányzó értéken"
 
-#: ../roundup/cgi/templating.py:2582
+#: ../roundup/cgi/templating.py:2584
 #, python-format
 msgid "<option %svalue=\"-1\">- no selection -</option>"
 msgstr "<option %svalue=\"-1\">- nincs kiválasztás -</option>"
 
-#: ../roundup/cgi/templating.py:3743
+#: ../roundup/cgi/templating.py:3745
 #, python-format
 msgid "Unable to read or expand file '%(name)s' in template '%(template)s'."
 msgstr ""
 
-#: ../roundup/cgi/templating.py:3793
+#: ../roundup/cgi/templating.py:3795
 #, python-format
 msgid ""
 "Found an incorrect token when expandfile applied string subsitution on "
@@ -2668,6 +2669,64 @@
 msgid "not of form [arg=value,value,...;arg=value,value,...]"
 msgstr "nem [arg=érték,érték,...;arg=érték,érték,...] formátumú"
 
+#: ../roundup/pygettext.py:401
+#, python-format
+msgid "*** %(file)s:%(lineno)s: Seen unexpected token \"%(token)s\""
+msgstr ""
+
+#: ../roundup/pygettext.py:457
+#, python-format
+msgid "# File: %(filename)s, line: %(lineno)d"
+msgstr ""
+
+#: ../roundup/pygettext.py:464
+#, python-format
+msgid " %(filename)s:%(lineno)d"
+msgstr ""
+
+# ../roundup/cgi/actions.py:930 :934
+#: ../roundup/pygettext.py:540
+#, fuzzy, python-format
+msgid "Invalid value for --style: %s"
+msgstr "Hibás bejelentkezés"
+
+#: ../roundup/pygettext.py:548
+#, python-format
+msgid "pygettext.py (xgettext for Python) %s"
+msgstr ""
+
+#: ../roundup/pygettext.py:554
+#, python-format
+msgid "--width argument must be an integer: %s"
+msgstr ""
+
+#: ../roundup/pygettext.py:582
+#, python-format
+msgid "Can't read --exclude-file: %s"
+msgstr ""
+
+#: ../roundup/pygettext.py:601
+msgid "Reading standard input"
+msgstr ""
+
+#: ../roundup/pygettext.py:606
+#, python-format
+msgid "Working on %s"
+msgstr ""
+
+#: ../roundup/pygettext.py:640
+msgid "a unicode string"
+msgstr ""
+
+#: ../roundup/pygettext.py:642
+#, python-format
+msgid "*** Seen unexpected token \"%(token)s\""
+msgstr ""
+
+#: ../roundup/pygettext.py:643
+msgid "morethanonestring"
+msgstr ""
+
 #: ../roundup/rest.py:410
 #, python-format
 msgid "Method %(m)s not allowed. Allowed: %(a)s"
@@ -2698,7 +2757,7 @@
 "%(acceptable_types)s"
 msgstr ""
 
-#: ../roundup/rest.py:2437
+#: ../roundup/rest.py:2441
 #, python-format
 msgid ""
 "Unrecognized api version: %s. See /rest without specifying api version for "
@@ -2800,24 +2859,33 @@
 "%(old)s"
 msgstr ""
 
-#: ../roundup/scripts/roundup_demo.py:151
-#, python-format
-msgid "Enter directory path to create demo tracker [%s]: "
-msgstr "Adja meg az elérési utat a bemutató tracker [%s] létrehozásához: "
-
-#: ../roundup/scripts/roundup_demo.py:170
+#: ../roundup/scripts/roundup_demo.py:50
 #, python-format
 msgid ""
 "Enter tracker template to use (one of (%(template_list)s)) "
 "[%(default_template)s]: "
 msgstr ""
 
-#: ../roundup/scripts/roundup_gettext.py:35
+#: ../roundup/scripts/roundup_demo.py:166
+#, python-format
+msgid "Enter directory path to create demo tracker [%s]: "
+msgstr "Adja meg az elérési utat a bemutató tracker [%s] létrehozásához: "
+
+#: ../roundup/scripts/roundup_gettext.py:33
+msgid ""
+"\n"
+"Extracting translatable strings only from html templates.\n"
+"Because the 'polib' module is missing, unable to extract\n"
+"translations from detectors or extensions.\n"
+"The 'polib' module can be installed with pip.\n"
+msgstr ""
+
+#: ../roundup/scripts/roundup_gettext.py:71
 #, python-format
 msgid "Usage: %(program)s <tracker home>"
 msgstr "Használat: %(program)s <tracker elérési út>"
 
-#: ../roundup/scripts/roundup_gettext.py:51
+#: ../roundup/scripts/roundup_gettext.py:89
 #, python-format
 msgid "No tracker templates found in directory %s"
 msgstr "Nem található tracker sablon a(z) %s könyvtárban"
--- a/locale/it.po	Wed Aug 07 21:43:40 2024 -0400
+++ b/locale/it.po	Wed Aug 07 21:52:58 2024 -0400
@@ -7,7 +7,7 @@
 msgstr ""
 "Project-Id-Version: Roundup 2.4.0\n"
 "Report-Msgid-Bugs-To: roundup-devel@lists.sourceforge.net\n"
-"POT-Creation-Date: 2024-07-09 15:12-0400\n"
+"POT-Creation-Date: 2024-08-07 21:43-0400\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"
@@ -27,19 +27,19 @@
 msgid "You may not retire the admin or anonymous user"
 msgstr "Non è possibile ritirare l'utente amministratore o l'utente anonimo"
 
-#: ../roundup/admin.py:130
+#: ../roundup/admin.py:131
 msgid ""
 "Have 'display designator[,designator*]' show header inside\n"
 "      []'s before items. Includes retired/active status.\n"
 msgstr ""
 
-#: ../roundup/admin.py:134
+#: ../roundup/admin.py:135
 msgid ""
 "Have 'display designator' and 'specification class' show\n"
 "      protected fields: creator, id etc.\n"
 msgstr ""
 
-#: ../roundup/admin.py:138
+#: ../roundup/admin.py:139
 msgid ""
 "Controls history options. It is a bitstring where setting\n"
 "      the bit disables the feature. A value of 0 (default)\n"
@@ -50,52 +50,52 @@
 "      history.\n"
 msgstr ""
 
-#: ../roundup/admin.py:147
+#: ../roundup/admin.py:148
 msgid ""
 "Set the number of lines of history to keep for this session.\n"
 "      -1 is infinite.\n"
 msgstr ""
 
-#: ../roundup/admin.py:151
+#: ../roundup/admin.py:152
 msgid "Set indexer to use when running 'reindex' NYI\n"
 msgstr ""
 
-#: ../roundup/admin.py:154
+#: ../roundup/admin.py:155
 msgid "Force reopening of tracker when running each command.\n"
 msgstr ""
 
-#: ../roundup/admin.py:157
+#: ../roundup/admin.py:158
 msgid ""
 "set the number of rows imported before a database commit is\n"
 "      done. Used only for imports on PostgreSQL.\n"
 msgstr ""
 
-#: ../roundup/admin.py:159
+#: ../roundup/admin.py:160
 msgid "Show retired items in table, list etc. One of 'no', 'only', 'both'\n"
 msgstr ""
 
-#: ../roundup/admin.py:161
-msgid "internal mapping for show_retired.\n"
-msgstr ""
-
 #: ../roundup/admin.py:162
+msgid "internal mapping for show_retired.\n"
+msgstr ""
+
+#: ../roundup/admin.py:163
 msgid "Enable verbose output: tracing, descriptions...\n"
 msgstr ""
 
 # ../roundup/admin.py:1052 ../roundup/admin.py:85:981 :1030:1052
-#: ../roundup/admin.py:174 ../roundup/admin.py:1179 ../roundup/admin.py:1824
-#: ../roundup/admin.py:1856 ../roundup/admin.py:174:1179 :1824:1856
+#: ../roundup/admin.py:175 ../roundup/admin.py:1188 ../roundup/admin.py:1836
+#: ../roundup/admin.py:1868 ../roundup/admin.py:175:1188 :1836:1868
 #, 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:187
+#: ../roundup/admin.py:188
 #, python-format
 msgid "argument \"%(arg)s\" not propname=value"
 msgstr "argomento \"%(arg)s\" non nel formato nome=valore"
 
-#: ../roundup/admin.py:200
+#: ../roundup/admin.py:201
 #, python-format
 msgid ""
 "Problem: %(message)s\n"
@@ -104,7 +104,7 @@
 "Problema: %(message)s\n"
 "\n"
 
-#: ../roundup/admin.py:201
+#: ../roundup/admin.py:202
 #, python-format
 msgid ""
 "%(message)sUsage: roundup-admin [options] [<command> <arguments>]\n"
@@ -135,12 +135,12 @@
 " roundup-admin help all                   -- all available help\n"
 msgstr ""
 
-#: ../roundup/admin.py:230
+#: ../roundup/admin.py:231
 #, fuzzy
 msgid "Commands: "
 msgstr "Comandi:"
 
-#: ../roundup/admin.py:237
+#: ../roundup/admin.py:238
 msgid ""
 "Commands may be abbreviated as long as the abbreviation\n"
 "matches only one command, e.g. l == li == lis == list."
@@ -148,7 +148,7 @@
 "I comandi possono essere abbreviati finchè l'abbreviazione rimane univoca\n"
 "es: l == li == lis == list."
 
-#: ../roundup/admin.py:266
+#: ../roundup/admin.py:270
 msgid ""
 "\n"
 "All commands (except help) require a tracker specifier. This is just\n"
@@ -216,25 +216,25 @@
 "Command help:\n"
 msgstr ""
 
-#: ../roundup/admin.py:330
+#: ../roundup/admin.py:334
 #, python-format
 msgid "%s:"
 msgstr "%s:"
 
 # ../roundup/admin.py:340 ../roundup/admin.py:396 ../roundup/admin.py:340:396
-#: ../roundup/admin.py:435 ../roundup/admin.py:1384
-#: ../roundup/admin.py:435:1384
+#: ../roundup/admin.py:439 ../roundup/admin.py:1396
+#: ../roundup/admin.py:439:1396
 msgid "Templates:"
 msgstr "Modelli predefiniti:"
 
 # ../roundup/admin.py:343 ../roundup/admin.py:407 ../roundup/admin.py:343:407
-#: ../roundup/admin.py:438 ../roundup/admin.py:1394
-#: ../roundup/admin.py:438:1394
+#: ../roundup/admin.py:442 ../roundup/admin.py:1406
+#: ../roundup/admin.py:442:1406
 msgid "Back ends:"
 msgstr "Back ends:"
 
 #. noqa: ARG002
-#: ../roundup/admin.py:455
+#: ../roundup/admin.py:459
 msgid ""
 "Usage: commit\n"
 "        Commit changes made to the database during an interactive session.\n"
@@ -248,7 +248,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:470
+#: ../roundup/admin.py:474
 msgid ""
 "Usage: create classname property=value ...\n"
 "        Create a new entry of a given class.\n"
@@ -262,45 +262,44 @@
 
 # ../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:478 ../roundup/admin.py:552 ../roundup/admin.py:600
-#: ../roundup/admin.py:723 ../roundup/admin.py:796 ../roundup/admin.py:842
-#: ../roundup/admin.py:893 ../roundup/admin.py:990 ../roundup/admin.py:1206
-#: ../roundup/admin.py:1357 ../roundup/admin.py:1485 ../roundup/admin.py:1571
-#: ../roundup/admin.py:1691 ../roundup/admin.py:1814 ../roundup/admin.py:1846
-#: ../roundup/admin.py:1962 ../roundup/admin.py:2016 ../roundup/admin.py:2064
-#: ../roundup/admin.py:478:552 :1206:1357:1485 :1571:1691 :1814:1846 :1962:2016
-#: :2064 :600:723 :796:842 :893:990
+#: ../roundup/admin.py:482 ../roundup/admin.py:555 ../roundup/admin.py:606
+#: ../roundup/admin.py:733 ../roundup/admin.py:806 ../roundup/admin.py:851
+#: ../roundup/admin.py:902 ../roundup/admin.py:999 ../roundup/admin.py:1216
+#: ../roundup/admin.py:1369 ../roundup/admin.py:1497 ../roundup/admin.py:1580
+#: ../roundup/admin.py:1703 ../roundup/admin.py:1826 ../roundup/admin.py:1858
+#: ../roundup/admin.py:1974 ../roundup/admin.py:2028 ../roundup/admin.py:2076
+#: ../roundup/admin.py:482:555 :1216:1369:1497 :1580:1703 :1826:1858 :1974:2028
+#: :2076 :606:733 :806:851 :902:999
 msgid "Not enough arguments supplied"
 msgstr "Non sono stati forniti abbastanza argomenti"
 
-#: ../roundup/admin.py:498
+#: ../roundup/admin.py:502
 #, python-format
 msgid "%(propname)s (Password): "
 msgstr "%(propname)s·(Password):·"
 
-#: ../roundup/admin.py:501
+#: ../roundup/admin.py:505
 #, python-format
 msgid "   %(propname)s (Again): "
 msgstr "   %(propname)s (Ripeti password): "
 
-#: ../roundup/admin.py:505
+#: ../roundup/admin.py:509
 msgid "Sorry, try again..."
 msgstr "Mi dispiace, riprova..."
 
-#: ../roundup/admin.py:510
+#: ../roundup/admin.py:514
 #, python-format
 msgid "%(propname)s (%(proptype)s): "
 msgstr "%(propname)s (%(proptype)s): "
 
-#: ../roundup/admin.py:529
+#: ../roundup/admin.py:533
 #, python-format
 msgid "you must provide the \"%(propname)s\" property."
 msgstr "deve essere fornita la proprietà \"%(propname)s\"."
 
-#: ../roundup/admin.py:541
+#: ../roundup/admin.py:545
 msgid ""
 "Usage: display designator[,designator]*\n"
-"\n"
 "        Show the property values for the given node(s).\n"
 "\n"
 "        A designator is a classname and a nodeid concatenated,\n"
@@ -311,46 +310,52 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:583
+#: ../roundup/admin.py:586
 #, fuzzy, python-format
 msgid "%(protected)s%(key)s: %(value)s"
 msgstr "%(key)s:·%(value)s"
 
 #. grab the directory to export to
-#: ../roundup/admin.py:586
+#: ../roundup/admin.py:589
 msgid ""
 "Usage: export [[-]class[,class]] export_dir\n"
-"        Export the database to colon-separated-value files.\n"
+"        Export the database and file content.\n"
+"\n"
+"        Database content is exported to colon separated files.\n"
 "        To exclude the files (e.g. for the msg or file class),\n"
 "        use the exporttables command.\n"
 "\n"
 "        Optionally limit the export to just the named classes\n"
-"        or exclude the named classes, if the 1st argument starts with '-'.\n"
+"        or exclude the named classes, if the 1st argument\n"
+"        starts with '-'.\n"
 "\n"
 "        This action exports the current data from the database into\n"
 "        colon-separated-value files that are placed in the nominated\n"
-"        destination directory.\n"
+"        export_dir directory.\n"
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:698
+#: ../roundup/admin.py:704
 msgid ""
 "Usage: exporttables [[-]class[,class]] export_dir\n"
-"        Export the database to colon-separated-value files, excluding the\n"
-"        files below $TRACKER_HOME/db/files/ (which can be archived "
-"separately).\n"
+"        Export only the database to files, no file content.\n"
+"\n"
+"        Database content is exported to colon separated files.\n"
+"        The files below $TRACKER_HOME/db/files/ (which can be\n"
+"        archived separately) are not part of the export.\n"
 "        To include the files, use the export command.\n"
 "\n"
 "        Optionally limit the export to just the named classes\n"
-"        or exclude the named classes, if the 1st argument starts with '-'.\n"
+"        or exclude the named classes, if the 1st argument\n"
+"        starts with '-'.\n"
 "\n"
 "        This action exports the current data from the database into\n"
-"        colon-separated-value files that are placed in the nominated\n"
+"        colon-separated-value files that are placed in the export_dir\n"
 "        destination directory.\n"
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:713
+#: ../roundup/admin.py:723
 msgid ""
 "Usage: filter classname propname=value ...\n"
 "        Find the nodes of the given class with a given property value.\n"
@@ -364,20 +369,20 @@
 msgstr ""
 
 # ../roundup/admin.py:920 ../roundup/admin.py:701:854 :866:920
-#: ../roundup/admin.py:754
+#: ../roundup/admin.py:764
 #, 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:781 ../roundup/admin.py:830 ../roundup/admin.py:1505
-#: ../roundup/admin.py:1518 ../roundup/admin.py:2086
-#: ../roundup/admin.py:781:830 :1505:1518:2086
+#: ../roundup/admin.py:791 ../roundup/admin.py:840 ../roundup/admin.py:1517
+#: ../roundup/admin.py:1530 ../roundup/admin.py:2098
+#: ../roundup/admin.py:791:840 :1517:1530:2098
 #, python-format
 msgid "%(classname)s has no property \"%(propname)s\""
 msgstr "la classe %(classname)s non ha la proprietà \"%(propname)s\""
 
-#: ../roundup/admin.py:788
+#: ../roundup/admin.py:798
 msgid ""
 "Usage: find classname propname=value ...\n"
 "        Find the nodes of the given class with a given link property value.\n"
@@ -388,15 +393,14 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:837
+#: ../roundup/admin.py:847
 msgid ""
-"Usage: genconfig <filename>\n"
-"        Generate a new tracker config file (ini style) with default\n"
-"        values in <filename>.\n"
+"Usage: genconfig filename\n"
+"        Create a new tracker config file with default values in filename.\n"
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:855
+#: ../roundup/admin.py:864
 #, python-format
 msgid ""
 "Changing option\n"
@@ -404,20 +408,20 @@
 "from old default of %(old_number)s to new default of %(new_number)s."
 msgstr ""
 
-#: ../roundup/admin.py:866
+#: ../roundup/admin.py:875
 #, python-format
 msgid ""
 "Update 'password_pbkdf2_default_rounds' to a number equal to or larger\n"
 "  than %s.\n"
 msgstr ""
 
-#: ../roundup/admin.py:873
+#: ../roundup/admin.py:882
 msgid ""
 "Check the rdbms mysql_* settings. Your charset and collations may need\n"
 "  to be changed. See upgrading instructions.\n"
 msgstr ""
 
-#: ../roundup/admin.py:883
+#: ../roundup/admin.py:892
 msgid ""
 "Usage: get property designator[,designator]*\n"
 "        Get the given property of one or more designator(s).\n"
@@ -431,24 +435,24 @@
 msgstr ""
 
 # ../roundup/admin.py:560 ../roundup/admin.py:575 ../roundup/admin.py:560:575
-#: ../roundup/admin.py:916
+#: ../roundup/admin.py:925
 #, 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:933 ../roundup/admin.py:1181 ../roundup/admin.py:1858
-#: ../roundup/admin.py:933:1181:1858
+#: ../roundup/admin.py:942 ../roundup/admin.py:1190 ../roundup/admin.py:1842
+#: ../roundup/admin.py:1870 ../roundup/admin.py:942:1190 :1842:1870
 #, python-format
 msgid "no such %(classname)s node \"%(nodeid)s\""
 msgstr ""
 
-#: ../roundup/admin.py:936
+#: ../roundup/admin.py:945
 #, python-format
 msgid "no such %(classname)s property \"%(propname)s\""
 msgstr ""
 
-#: ../roundup/admin.py:941
+#: ../roundup/admin.py:950
 msgid ""
 "Usage: help topic\n"
 "        Give help about topic.\n"
@@ -460,12 +464,12 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:960
+#: ../roundup/admin.py:969
 #, python-format
 msgid "Sorry, no help for \"%(topic)s\""
 msgstr "Nessun aiuto per \"%(topic)s\""
 
-#: ../roundup/admin.py:977
+#: ../roundup/admin.py:986
 msgid ""
 "Usage: history designator [skipquiet] [raw]\n"
 "        Show the history entries of a designator.\n"
@@ -480,27 +484,27 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1002
+#: ../roundup/admin.py:1011
 #, python-format
 msgid "Unexpected argument(s): %s. Expected 'skipquiet' or 'raw'."
 msgstr ""
 
-#: ../roundup/admin.py:1053
+#: ../roundup/admin.py:1062
 #, fuzzy
 msgid "removed"
 msgstr "rimuovi"
 
-#: ../roundup/admin.py:1055
+#: ../roundup/admin.py:1064
 msgid "added"
 msgstr ""
 
-#: ../roundup/admin.py:1057
+#: ../roundup/admin.py:1066
 #, python-format
 msgid "Unknown history set operation '%s'. Expected +/-."
 msgstr ""
 
 #. .Hint added issue23 to superseder
-#: ../roundup/admin.py:1082
+#: ../roundup/admin.py:1091
 #, fuzzy, python-format
 msgid "added %(class)s%(item_id)s to %(propname)s"
 msgstr "%(class)s %(id)s %(properties)s modificata correttamente"
@@ -508,34 +512,35 @@
 #. .Hint read as: assignedto was admin(1)
 #. where assignedto is the property
 #. admin is the key name for value 1
-#: ../roundup/admin.py:1103
+#: ../roundup/admin.py:1112
 #, fuzzy, python-format
 msgid "%(prop)s was %(name)s(%(value)s)"
 msgstr "%(propname)s (%(proptype)s): "
 
-#: ../roundup/admin.py:1109 ../roundup/admin.py:1138
-#: ../roundup/admin.py:1109:1138
+#: ../roundup/admin.py:1118 ../roundup/admin.py:1147
+#: ../roundup/admin.py:1118:1147
 #, fuzzy, python-format
 msgid "%(prop)s was %(value)s"
 msgstr "%(key)s:·%(value)s"
 
-#: ../roundup/admin.py:1128
+#: ../roundup/admin.py:1137
 #, python-format
 msgid "%(prop)s was [%(value_list)s]"
 msgstr ""
 
 #. .Hint modified nosy: added demo(3)
-#: ../roundup/admin.py:1135
+#: ../roundup/admin.py:1144
 #, python-format
 msgid "modified %(prop)s: %(how)s"
 msgstr ""
 
-#: ../roundup/admin.py:1186
+#: ../roundup/admin.py:1195
 msgid ""
 "Usage: import import_dir\n"
-"        Import a database from the directory containing CSV files,\n"
-"        two per class to import.\n"
+"        Import a database and file contents from the directory.\n"
 "\n"
+"        The directory should have the same format as one containing\n"
+"        the output of export. There are two files imported per class.\n"
 "        The files used in the import are:\n"
 "\n"
 "        <class>.csv\n"
@@ -553,16 +558,17 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1276
+#: ../roundup/admin.py:1287
 msgid ""
 "Usage: importtables export_dir\n"
+"        This imports the database tables exported using exporttables.\n"
 "\n"
-"        This imports the database tables exported using exporttables.\n"
+"        It does not import the content of files like msgs and files.\n"
 "        "
 msgstr ""
 
 #. password
-#: ../roundup/admin.py:1283
+#: ../roundup/admin.py:1295
 msgid ""
 "Usage: initialise [adminpw]\n"
 "        Initialise a new Roundup tracker.\n"
@@ -573,30 +579,30 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1297
+#: ../roundup/admin.py:1309
 msgid "Admin Password: "
 msgstr "Password dell'amministratore"
 
-#: ../roundup/admin.py:1298
+#: ../roundup/admin.py:1310
 msgid "       Confirm: "
 msgstr "       Conferma: "
 
-#: ../roundup/admin.py:1302
+#: ../roundup/admin.py:1314
 msgid "Instance home does not exist"
 msgstr "La home dell'istanza non esiste"
 
-#: ../roundup/admin.py:1306
+#: ../roundup/admin.py:1318
 msgid "Instance has not been installed"
 msgstr "L'istanza non è stata installata"
 
-#: ../roundup/admin.py:1314
+#: ../roundup/admin.py:1326
 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:1334
+#: ../roundup/admin.py:1346
 msgid ""
 "Usage: install [template [backend [key=val[,key=val]]]]\n"
 "        Install a new Roundup tracker.\n"
@@ -622,12 +628,12 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1363
+#: ../roundup/admin.py:1375
 #, 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:1372
+#: ../roundup/admin.py:1384
 #, python-format
 msgid ""
 "WARNING: There appears to be a tracker in \"%(tracker_home)s\"!\n"
@@ -638,22 +644,22 @@
 "Se verrà reinstallata, tutti i dati precedentemente salvati andranno persi\n"
 "Cancellare la directory specificata? Y/N: "
 
-#: ../roundup/admin.py:1385
+#: ../roundup/admin.py:1397
 #, fuzzy
 msgid "Select template"
 msgstr "Seleziona il modello predefinito [classic]: "
 
-#: ../roundup/admin.py:1395
+#: ../roundup/admin.py:1407
 #, fuzzy
 msgid "Select backend"
 msgstr "Seleziona il backend [anydbm]: "
 
-#: ../roundup/admin.py:1406
+#: ../roundup/admin.py:1418
 #, python-format
 msgid "Error in configuration settings: \"%s\""
 msgstr "Erorre nei settaggi di configurazione: \"%s\""
 
-#: ../roundup/admin.py:1439
+#: ../roundup/admin.py:1451
 #, python-format
 msgid ""
 "\n"
@@ -662,11 +668,11 @@
 "   %(config_file)s"
 msgstr ""
 
-#: ../roundup/admin.py:1449
+#: ../roundup/admin.py:1461
 msgid " ... at a minimum, you must set following options:"
 msgstr " ... devono essere configurate almeno le seguenti opzioni:"
 
-#: ../roundup/admin.py:1454
+#: ../roundup/admin.py:1466
 #, python-format
 msgid ""
 "\n"
@@ -683,7 +689,7 @@
 "---------------------------------------------------------------------------\n"
 msgstr ""
 
-#: ../roundup/admin.py:1470
+#: ../roundup/admin.py:1482
 msgid ""
 "Usage: list classname [property]\n"
 "        List the instances of a class.\n"
@@ -699,20 +705,19 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1483
+#: ../roundup/admin.py:1495
 msgid "Too many arguments supplied"
 msgstr ""
 
-#: ../roundup/admin.py:1516
+#: ../roundup/admin.py:1528
 #, python-format
 msgid "%(nodeid)4s: %(value)s"
 msgstr ""
 
 #. noqa: ARG002  - args unused
-#: ../roundup/admin.py:1523
+#: ../roundup/admin.py:1535
 msgid ""
 "Usage: migrate\n"
-"\n"
 "        Update a tracker's database to be compatible with the Roundup\n"
 "        codebase.\n"
 "\n"
@@ -733,22 +738,20 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1544
+#: ../roundup/admin.py:1555
 #, python-format
 msgid "Tracker updated to schema version %s."
 msgstr ""
 
-#: ../roundup/admin.py:1548
+#: ../roundup/admin.py:1559
 #, python-format
 msgid "No migration action required. At schema version %s."
 msgstr ""
 
-#: ../roundup/admin.py:1553
+#: ../roundup/admin.py:1564
 msgid ""
 "Usage: pack period | date\n"
-"\n"
-"        Remove journal entries older than a period of time specified or\n"
-"        before a certain date.\n"
+"        Remove journal entries older than the date/period.\n"
 "\n"
 "        A period is specified using the suffixes \"y\", \"m\", and \"d\". "
 "The\n"
@@ -765,15 +768,16 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1581
+#: ../roundup/admin.py:1590
 msgid "Invalid format"
 msgstr ""
 
-#: ../roundup/admin.py:1592
+#: ../roundup/admin.py:1601
 msgid ""
 "Usage: perftest [mode] [arguments]*\n"
+"        Time operations in Roundup.\n"
 "\n"
-"        Time operations in Roundup. Supported arguments:\n"
+"        Supported arguments:\n"
 "\n"
 "            [password] [rounds=<integer>] [scheme=<scheme>]\n"
 "\n"
@@ -786,28 +790,30 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1625
+#: ../roundup/admin.py:1635
 msgid "Invalid 'rounds'. Must be larger than 999."
 msgstr ""
 
-#: ../roundup/admin.py:1629
+#: ../roundup/admin.py:1639
 #, python-format
 msgid "Invalid 'rounds'. It must be an integer not: %s"
 msgstr ""
 
-#: ../roundup/admin.py:1656
+#: ../roundup/admin.py:1666
 msgid "scheme does not support rounds."
 msgstr ""
 
-#: ../roundup/admin.py:1659
+#: ../roundup/admin.py:1669
 #, python-format
 msgid "Hash time: %(time)0.9f seconds, scheme: %(scheme)s, rounds: %(rounds)s"
 msgstr ""
 
-#: ../roundup/admin.py:1665
+#: ../roundup/admin.py:1675
 msgid ""
 "Usage: pragma setting=value | 'list'\n"
-"        Set internal admin settings to a value. E.G.\n"
+"        Set internal admin settings to a value.\n"
+"\n"
+"        For example:\n"
 "\n"
 "            pragma verbose=True\n"
 "            pragma verbose=yes\n"
@@ -831,49 +837,49 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1698
+#: ../roundup/admin.py:1710
 #, python-format
 msgid "Argument must be setting=value, was given: %s."
 msgstr ""
 
-#: ../roundup/admin.py:1701
+#: ../roundup/admin.py:1713
 msgid "Current settings and values (NYI - not yet implemented):"
 msgstr ""
 
-#: ../roundup/admin.py:1712
+#: ../roundup/admin.py:1724
 msgid ""
 "      Help for this pragma is missing. Please report it to the Roundup "
 "project.\n"
 msgstr ""
 
-#: ../roundup/admin.py:1718
+#: ../roundup/admin.py:1730
 #, fuzzy, python-format
 msgid "Unknown setting %s. Try \"pragma list\"."
 msgstr "Nome Utente sconosciuto"
 
-#: ../roundup/admin.py:1728
+#: ../roundup/admin.py:1740
 #, python-format
 msgid "Incorrect value for boolean setting %(setting)s: %(value)s."
 msgstr ""
 
-#: ../roundup/admin.py:1735
+#: ../roundup/admin.py:1747
 #, python-format
 msgid "Incorrect value for integer setting %(setting)s: %(value)s."
 msgstr ""
 
-#: ../roundup/admin.py:1742
+#: ../roundup/admin.py:1754
 #, python-format
 msgid ""
 "Incorrect value for setting %(setting)s: %(value)s. Should be no, both, or "
 "only."
 msgstr ""
 
-#: ../roundup/admin.py:1752
+#: ../roundup/admin.py:1764
 #, python-format
 msgid "Internal error: pragma can not handle values of type: %s"
 msgstr ""
 
-#: ../roundup/admin.py:1761
+#: ../roundup/admin.py:1773
 msgid ""
 "Usage: reindex [classname|classname:#-#|designator]*\n"
 "        Re-generate a tracker's search indexes.\n"
@@ -890,18 +896,18 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1783
+#: ../roundup/admin.py:1795
 #, python-format
 msgid "no such item \"%(designator)s\""
 msgstr ""
 
 # ../roundup/admin.py:1052 ../roundup/admin.py:85:981 :1030:1052
-#: ../roundup/admin.py:1793
+#: ../roundup/admin.py:1805
 #, fuzzy, python-format
 msgid "no such item \"%(class)s%(id)s\""
 msgstr "classe \"%(classname)s\" mancante"
 
-#: ../roundup/admin.py:1805
+#: ../roundup/admin.py:1817
 msgid ""
 "Usage: restore designator[,designator]*\n"
 "        Restore the retired node specified by designator.\n"
@@ -913,13 +919,7 @@
 "        "
 msgstr ""
 
-# ../roundup/admin.py:1052 ../roundup/admin.py:85:981 :1030:1052
-#: ../roundup/admin.py:1830
-#, fuzzy
-msgid "no such %(classname)s node \"%(nodeid)s\""
-msgstr "classe \"%(classname)s\" mancante"
-
-#: ../roundup/admin.py:1836
+#: ../roundup/admin.py:1848
 msgid ""
 "Usage: retire designator[,designator]*\n"
 "        Retire the node specified by designator.\n"
@@ -933,7 +933,7 @@
 msgstr ""
 
 #. noqa: ARG002 - args unused
-#: ../roundup/admin.py:1864
+#: ../roundup/admin.py:1876
 msgid ""
 "Usage: rollback\n"
 "        Undo all changes that are pending commit to the database.\n"
@@ -945,59 +945,59 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1877
+#: ../roundup/admin.py:1889
 msgid ""
 "Usage: security [Role name]\n"
+"        Display the Permissions available to one or all Roles.\n"
 "\n"
-"             Display the Permissions available to one or all Roles.\n"
-"             Also validates that any properties defined in a\n"
-"             permission are valid.\n"
+"        Also validates that any properties defined in a\n"
+"        permission are valid.\n"
 "\n"
-"             Run this after changing your permissions to catch\n"
-"             typos.\n"
+"        Run this after changing your permissions to catch\n"
+"        typos.\n"
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1892
+#: ../roundup/admin.py:1904
 #, fuzzy, python-format
 msgid "No such Role \"%(role)s\"\n"
 msgstr "Non è presente il ruolo \"%(role)s\""
 
-#: ../roundup/admin.py:1898
+#: ../roundup/admin.py:1910
 #, 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:1901
+#: ../roundup/admin.py:1913
 #, 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:1905
+#: ../roundup/admin.py:1917
 #, 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:1907
+#: ../roundup/admin.py:1919
 #, 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:1910
+#: ../roundup/admin.py:1922
 #, fuzzy, python-format
 msgid "Role \"%(name)s\":\n"
 msgstr "Ruolo \"%(name)s\":"
 
-#: ../roundup/admin.py:1916
+#: ../roundup/admin.py:1928
 msgid " %(description)s (%(name)s for \"%(klass)s\""
 msgstr ""
 
-#: ../roundup/admin.py:1916
+#: ../roundup/admin.py:1928
 #, python-format
 msgid " %(description)s (%(name)s for \"%(klass)s\": %(properties)s only)\n"
 msgstr ""
 
-#: ../roundup/admin.py:1929
+#: ../roundup/admin.py:1941
 #, python-format
 msgid ""
 "\n"
@@ -1005,17 +1005,17 @@
 "\n"
 msgstr ""
 
-#: ../roundup/admin.py:1935
+#: ../roundup/admin.py:1947
 #, python-format
 msgid " %(description)s (%(name)s for \"%(klass)s\" only)\n"
 msgstr ""
 
-#: ../roundup/admin.py:1938
+#: ../roundup/admin.py:1950
 #, python-format
 msgid " %(description)s (%(name)s)\n"
 msgstr ""
 
-#: ../roundup/admin.py:1942
+#: ../roundup/admin.py:1954
 msgid ""
 "Usage: set items property=value [property=value ...]\n"
 "        Set the given properties of one or more items(s).\n"
@@ -1036,7 +1036,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:2010
+#: ../roundup/admin.py:2022
 msgid ""
 "Usage: specification classname\n"
 "        Show the properties for a classname.\n"
@@ -1045,17 +1045,17 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:2029
+#: ../roundup/admin.py:2041
 #, fuzzy, python-format
 msgid "%(key)s: %(value)s (key property)\n"
 msgstr "%(key)s %(value)s (chiave)"
 
-#: ../roundup/admin.py:2032
+#: ../roundup/admin.py:2044
 #, fuzzy, python-format
 msgid "%(key)s: %(value)s\n"
 msgstr "%(key)s:·%(value)s"
 
-#: ../roundup/admin.py:2035
+#: ../roundup/admin.py:2047
 msgid ""
 "Usage: table classname [property[,property]*]\n"
 "        List the instances of a class in tabular form.\n"
@@ -1087,17 +1087,17 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:2081
+#: ../roundup/admin.py:2093
 #, python-format
 msgid "\"%(spec)s\" not name:width"
 msgstr ""
 
-#: ../roundup/admin.py:2103
+#: ../roundup/admin.py:2115
 #, python-format
 msgid "\"%(spec)s\" does not have an integer width: \"%(width)s\""
 msgstr ""
 
-#: ../roundup/admin.py:2139
+#: ../roundup/admin.py:2151
 msgid ""
 "Usage: templates [trace_search]\n"
 "        List templates and their installed directories.\n"
@@ -1107,59 +1107,60 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:2167
+#: ../roundup/admin.py:2179
 msgid ""
 "Usage: updateconfig <filename>\n"
-"        Generate an updated tracker config file (ini style) in\n"
-"        <filename>. Use current settings from existing roundup\n"
-"        tracker in tracker home.\n"
+"        Merge existing tracker config with new settings.\n"
+"\n"
+"        Output the updated config file to <filename>. Use current\n"
+"        settings from existing roundup tracker in tracker home.\n"
 "        "
 msgstr ""
 
 # ../roundup/cgi/actions.py:597:608 :779:798
-#: ../roundup/admin.py:2175 ../roundup/cgi/actions.py:886
+#: ../roundup/admin.py:2188 ../roundup/cgi/actions.py:886
 #: ../roundup/cgi/actions.py:897 ../roundup/cgi/actions.py:1099
 #: ../roundup/cgi/actions.py:1113 ../roundup/cgi/actions.py:886:897 :1099:1113
 #, python-format
 msgid "Error: %s"
 msgstr "Errore: %s"
 
-#: ../roundup/admin.py:2207
+#: ../roundup/admin.py:2220
 #, python-format
 msgid "Unknown command \"%(command)s\" (\"help commands\" for a list)"
 msgstr ""
 
-#: ../roundup/admin.py:2213
+#: ../roundup/admin.py:2226
 #, python-format
 msgid "Multiple commands match \"%(command)s\": %(list)s"
 msgstr ""
 
-#: ../roundup/admin.py:2228
+#: ../roundup/admin.py:2241
 msgid "Enter tracker home: "
 msgstr ""
 
-#: ../roundup/admin.py:2257 ../roundup/admin.py:2261
-#: ../roundup/admin.py:2257:2261
+#: ../roundup/admin.py:2270 ../roundup/admin.py:2274
+#: ../roundup/admin.py:2270:2274
 #, python-format
 msgid "Error: Couldn't open tracker: %(message)s"
 msgstr ""
 
-#: ../roundup/admin.py:2309
+#: ../roundup/admin.py:2322
 #, python-format
 msgid ""
 "Roundup %s ready for input.\n"
 "Type \"help\" for help."
 msgstr ""
 
-#: ../roundup/admin.py:2342
+#: ../roundup/admin.py:2355
 msgid "Note: command history and editing not available"
 msgstr ""
 
-#: ../roundup/admin.py:2348
-msgid "exit..."
-msgstr ""
-
 #: ../roundup/admin.py:2361
+msgid "exit..."
+msgstr ""
+
+#: ../roundup/admin.py:2374
 msgid "There are unsaved changes. Commit them (y/N)? "
 msgstr ""
 
@@ -1696,7 +1697,7 @@
 msgid "<em>undefined</em>"
 msgstr "<em>indefinito</em>"
 
-#: ../roundup/cgi/client.py:90
+#: ../roundup/cgi/client.py:105
 msgid ""
 "<html><head><title>An error has occurred</title></head>\n"
 "<body><h1>An error has occurred</h1>\n"
@@ -1710,159 +1711,159 @@
 "La notifica del problema è stata notificata al manutentore del tracker.</p>\n"
 "</body></html>"
 
-#: ../roundup/cgi/client.py:702 ../roundup/cgi/client.py:1622
-#: ../roundup/cgi/client.py:702:1622
+#: ../roundup/cgi/client.py:717 ../roundup/cgi/client.py:1635
+#: ../roundup/cgi/client.py:717:1635
 msgid "Required Header Missing"
 msgstr ""
 
-#: ../roundup/cgi/client.py:704
+#: ../roundup/cgi/client.py:719
 #, 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:956
+#: ../roundup/cgi/client.py:971
 msgid "Form Error: "
 msgstr "Errore nella Form: "
 
-#: ../roundup/cgi/client.py:1049
+#: ../roundup/cgi/client.py:1064
 #, python-format
 msgid "Unrecognized charset: %r"
 msgstr "Codice di carattere sconosciuto: %r"
 
-#: ../roundup/cgi/client.py:1318 ../roundup/cgi/client.py:2281
-#: ../roundup/cgi/client.py:1318:2281
+#: ../roundup/cgi/client.py:1331 ../roundup/cgi/client.py:2294
+#: ../roundup/cgi/client.py:1331:2294
 msgid "broken form: multiple @action values submitted"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1335
+#: ../roundup/cgi/client.py:1348
 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:1483
+#: ../roundup/cgi/client.py:1496
 msgid "Referer header not available."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1487
+#: ../roundup/cgi/client.py:1500
 #, python-format
 msgid "csrf key used with wrong method from: %s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1516
+#: ../roundup/cgi/client.py:1529
 #, python-format
 msgid "csrf header %(header)s required but missing for user%(userid)s."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1520
+#: ../roundup/cgi/client.py:1533
 #, python-format
 msgid "Missing header: %s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1528
+#: ../roundup/cgi/client.py:1541
 #, 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:1533
+#: ../roundup/cgi/client.py:1546
 #, fuzzy, python-format
 msgid "Invalid Referer: %s"
 msgstr "Login invalida"
 
-#: ../roundup/cgi/client.py:1548
+#: ../roundup/cgi/client.py:1561
 #, 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:1553
+#: ../roundup/cgi/client.py:1566
 #, fuzzy, python-format
 msgid "Invalid Origin %s"
 msgstr "Login invalida"
 
-#: ../roundup/cgi/client.py:1567
+#: ../roundup/cgi/client.py:1580
 #, python-format
 msgid ""
 "csrf X-FORWARDED-HOST header check failed for user%(userid)s. Value=%(host)s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1573
+#: ../roundup/cgi/client.py:1586
 #, python-format
 msgid "Invalid X-FORWARDED-HOST %s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1592
-#, python-format
-msgid "csrf HOST header check failed for user%(userid)s. Value=%(host)s"
-msgstr ""
-
-#: ../roundup/cgi/client.py:1597
-#, python-format
-msgid "Invalid HOST %s"
-msgstr ""
-
 #: ../roundup/cgi/client.py:1605
+#, python-format
+msgid "csrf HOST header check failed for user%(userid)s. Value=%(host)s"
+msgstr ""
+
+#: ../roundup/cgi/client.py:1610
+#, python-format
+msgid "Invalid HOST %s"
+msgstr ""
+
+#: ../roundup/cgi/client.py:1618
 msgid "Csrf: unable to verify sufficient headers"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1606
-msgid "Unable to verify sufficient headers"
-msgstr ""
-
 #: ../roundup/cgi/client.py:1619
+msgid "Unable to verify sufficient headers"
+msgstr ""
+
+#: ../roundup/cgi/client.py:1632
 #, python-format
 msgid "csrf X-REQUESTED-WITH xmlrpc required header check failed for user%s."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1660
+#: ../roundup/cgi/client.py:1673
 #, python-format
 msgid "Required csrf field missing for user%s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1662 ../roundup/cgi/client.py:1689
-#: ../roundup/cgi/client.py:1706 ../roundup/cgi/client.py:1662:1689:1706
+#: ../roundup/cgi/client.py:1675 ../roundup/cgi/client.py:1702
+#: ../roundup/cgi/client.py:1719 ../roundup/cgi/client.py:1675:1702:1719
 msgid ""
 "We can't validate your session (csrf failure). Re-enter any unsaved data and "
 "try again."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1666
+#: ../roundup/cgi/client.py:1679
 #, python-format
 msgid "csrf field not supplied by user%s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1678
+#: ../roundup/cgi/client.py:1691
 #, 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:1696
+#: ../roundup/cgi/client.py:1709
 #, 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:1888
+#: ../roundup/cgi/client.py:1901
 msgid "You are not allowed to view this file."
 msgstr "Non si dispone dei permessi per visualizzare questo file."
 
-#: ../roundup/cgi/client.py:2159
+#: ../roundup/cgi/client.py:2172
 #, python-format
 msgid "%(starttag)sTime elapsed: %(seconds)fs%(endtag)s\n"
 msgstr "%(starttag)sTempo trascorso: %(seconds)fs%(endtag)s\n"
 
-#: ../roundup/cgi/client.py:2163
+#: ../roundup/cgi/client.py:2176
 #, 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:2703
+#: ../roundup/cgi/client.py:2716
 #, python-format
 msgid ""
 "Cache failure: compressed file %(compressed)s is older than its source file "
@@ -1929,72 +1930,72 @@
 msgstr[0] "La proprietà %(class)s %(property)s non è stata fornita"
 msgstr[1] "Le proprietà %(class)s %(property)s non sono state fornite"
 
-#: ../roundup/cgi/templating.py:277
+#: ../roundup/cgi/templating.py:278
 #, python-format
 msgid "You are not allowed to %(action)s items of class %(class)s"
 msgstr "Non si dispone dei permessi per %(action)s item della classe %(class)s"
 
-#: ../roundup/cgi/templating.py:914
+#: ../roundup/cgi/templating.py:916
 msgid "(list)"
 msgstr "(elenco)"
 
-#: ../roundup/cgi/templating.py:989
+#: ../roundup/cgi/templating.py:991
 msgid "Submit New Entry"
 msgstr "Crea Nuovo"
 
 # ../roundup/cgi/templating.py:728:862 :1269:1298 :1318:1364 :1387:1423
 # :1460:1513 :1530:1614 :1634:1652 :1684:1694 :1746:1935
-#: ../roundup/cgi/templating.py:1011 ../roundup/cgi/templating.py:1187
-#: ../roundup/cgi/templating.py:1822 ../roundup/cgi/templating.py:1853
-#: ../roundup/cgi/templating.py:1874 ../roundup/cgi/templating.py:1912
-#: ../roundup/cgi/templating.py:1965 ../roundup/cgi/templating.py:1989
-#: ../roundup/cgi/templating.py:1996 ../roundup/cgi/templating.py:2033
-#: ../roundup/cgi/templating.py:2086 ../roundup/cgi/templating.py:2119
-#: ../roundup/cgi/templating.py:2214 ../roundup/cgi/templating.py:2235
-#: ../roundup/cgi/templating.py:2326 ../roundup/cgi/templating.py:2346
-#: ../roundup/cgi/templating.py:2368 ../roundup/cgi/templating.py:2411
-#: ../roundup/cgi/templating.py:2421 ../roundup/cgi/templating.py:2486
-#: ../roundup/cgi/templating.py:2789 ../roundup/cgi/templating.py:1011:1187
-#: :1822:1853 :1874:1912 :1965:1989 :1996:2033 :2086:2119 :2214:2235 :2326:2346
-#: :2368:2411 :2421:2486:2789
+#: ../roundup/cgi/templating.py:1013 ../roundup/cgi/templating.py:1189
+#: ../roundup/cgi/templating.py:1824 ../roundup/cgi/templating.py:1855
+#: ../roundup/cgi/templating.py:1876 ../roundup/cgi/templating.py:1914
+#: ../roundup/cgi/templating.py:1967 ../roundup/cgi/templating.py:1991
+#: ../roundup/cgi/templating.py:1998 ../roundup/cgi/templating.py:2035
+#: ../roundup/cgi/templating.py:2088 ../roundup/cgi/templating.py:2121
+#: ../roundup/cgi/templating.py:2216 ../roundup/cgi/templating.py:2237
+#: ../roundup/cgi/templating.py:2328 ../roundup/cgi/templating.py:2348
+#: ../roundup/cgi/templating.py:2370 ../roundup/cgi/templating.py:2413
+#: ../roundup/cgi/templating.py:2423 ../roundup/cgi/templating.py:2488
+#: ../roundup/cgi/templating.py:2791 ../roundup/cgi/templating.py:1013:1189
+#: :1824:1855 :1876:1914 :1967:1991 :1998:2035 :2088:2121 :2216:2237 :2328:2348
+#: :2370:2413 :2423:2488:2791
 msgid "[hidden]"
 msgstr "[nascosto]"
 
-#: ../roundup/cgi/templating.py:1012
+#: ../roundup/cgi/templating.py:1014
 msgid "New node - no history"
 msgstr "Nuovo nodo - nessuno storico"
 
-#: ../roundup/cgi/templating.py:1152
+#: ../roundup/cgi/templating.py:1154
 msgid "Submit Changes"
 msgstr "Inserisci Modifiche"
 
-#: ../roundup/cgi/templating.py:1230
+#: ../roundup/cgi/templating.py:1232
 msgid "<em>The indicated property no longer exists</em>"
 msgstr "<em>La caratteristica indicata non esiste</em>"
 
-#: ../roundup/cgi/templating.py:1266
+#: ../roundup/cgi/templating.py:1268
 #, python-format
 msgid "The linked class %(classname)s no longer exists"
 msgstr "La classe collegata %(classname)s non esiste più"
 
-#: ../roundup/cgi/templating.py:1303 ../roundup/cgi/templating.py:1333
-#: ../roundup/cgi/templating.py:2495 ../roundup/cgi/templating.py:2798
-#: ../roundup/cgi/templating.py:1303:1333 :2495:2798
+#: ../roundup/cgi/templating.py:1305 ../roundup/cgi/templating.py:1335
+#: ../roundup/cgi/templating.py:2497 ../roundup/cgi/templating.py:2800
+#: ../roundup/cgi/templating.py:1305:1335 :2497:2800
 msgid "[label is missing]"
 msgstr ""
 
 # ../roundup/cgi/templating.py:973:997
-#: ../roundup/cgi/templating.py:1307 ../roundup/cgi/templating.py:1336
-#: ../roundup/cgi/templating.py:1307:1336
+#: ../roundup/cgi/templating.py:1309 ../roundup/cgi/templating.py:1338
+#: ../roundup/cgi/templating.py:1309:1338
 msgid "<strike>The linked node no longer exists</strike>"
 msgstr "<strike>Il Nodo collegato non esiste più</strike>"
 
-#: ../roundup/cgi/templating.py:1398
+#: ../roundup/cgi/templating.py:1400
 #, python-format
 msgid "%s: (no value)"
 msgstr "%s: (nessun valore)"
 
-#: ../roundup/cgi/templating.py:1414
+#: ../roundup/cgi/templating.py:1416
 #, fuzzy, python-format
 msgid ""
 "<strong><em>This event %s is not handled by the history display!</em></"
@@ -2003,50 +2004,50 @@
 "<strong><em>Questo evento non è gestito dal visualizzatore dello storico!</"
 "em></strong>"
 
-#: ../roundup/cgi/templating.py:1427
+#: ../roundup/cgi/templating.py:1429
 msgid "<tr><td colspan=4><strong>Note:</strong></td></tr>"
 msgstr "<tr><td colspan=4><strong>Note:</strong></td></tr>"
 
-#: ../roundup/cgi/templating.py:1436
+#: ../roundup/cgi/templating.py:1438
 msgid "History"
 msgstr "Storico"
 
-#: ../roundup/cgi/templating.py:1438
+#: ../roundup/cgi/templating.py:1440
 msgid "<th>Date</th>"
 msgstr "<th>Data</th>"
 
-#: ../roundup/cgi/templating.py:1439
+#: ../roundup/cgi/templating.py:1441
 msgid "<th>User</th>"
 msgstr "<th>Utente</th>"
 
-#: ../roundup/cgi/templating.py:1440
+#: ../roundup/cgi/templating.py:1442
 msgid "<th>Action</th>"
 msgstr "<th>Azione</th>"
 
-#: ../roundup/cgi/templating.py:1441
+#: ../roundup/cgi/templating.py:1443
 msgid "<th>Args</th>"
 msgstr "<th>Argomenti</th>"
 
-#: ../roundup/cgi/templating.py:1492
+#: ../roundup/cgi/templating.py:1494
 #, python-format
 msgid "Copy of %(class)s %(id)s"
 msgstr "Copia di %(class)s %(id)s"
 
 # ../roundup/cgi/templating.py:1491 ../roundup/cgi/templating.py:1039:1464
 # :1485:1491
-#: ../roundup/cgi/templating.py:2123 ../roundup/cgi/templating.py:2158
-#: ../roundup/cgi/templating.py:1380:2123:2158
+#: ../roundup/cgi/templating.py:2125 ../roundup/cgi/templating.py:2160
+#: ../roundup/cgi/templating.py:1382:2125:2160
 msgid "No"
 msgstr "No"
 
 # ../roundup/cgi/templating.py:1488 ../roundup/cgi/templating.py:1039:1464
 # :1483:1488
-#: ../roundup/cgi/templating.py:2123 ../roundup/cgi/templating.py:2152
-#: ../roundup/cgi/templating.py:1380:2123:2152
+#: ../roundup/cgi/templating.py:2125 ../roundup/cgi/templating.py:2154
+#: ../roundup/cgi/templating.py:1382:2125:2154
 msgid "Yes"
 msgstr "Sì"
 
-#: ../roundup/cgi/templating.py:2284
+#: ../roundup/cgi/templating.py:2286
 msgid ""
 "default value for DateHTMLProperty must be either DateHTMLProperty or string "
 "date representation."
@@ -2054,27 +2055,27 @@
 "Il valore predefinito per DateHTMLProperty deve essere  DateHTMLProperty "
 "oppure una stringa rappresentante una data."
 
-#: ../roundup/cgi/templating.py:2466
+#: ../roundup/cgi/templating.py:2468
 #, python-format
 msgid "Attempt to look up %(attr)s on a missing value"
 msgstr "Tentativo di visualizzare %(attr)s con un valore mancante"
 
-#: ../roundup/cgi/templating.py:2477
+#: ../roundup/cgi/templating.py:2479
 #, fuzzy, python-format
 msgid "Attempt to look up %(item)s on a missing value"
 msgstr "Tentativo di visualizzare %(attr)s con un valore mancante"
 
-#: ../roundup/cgi/templating.py:2582
+#: ../roundup/cgi/templating.py:2584
 #, python-format
 msgid "<option %svalue=\"-1\">- no selection -</option>"
 msgstr "<option %svalue=\"-1\">- nessuna selezione -</option>"
 
-#: ../roundup/cgi/templating.py:3743
+#: ../roundup/cgi/templating.py:3745
 #, python-format
 msgid "Unable to read or expand file '%(name)s' in template '%(template)s'."
 msgstr ""
 
-#: ../roundup/cgi/templating.py:3793
+#: ../roundup/cgi/templating.py:3795
 #, python-format
 msgid ""
 "Found an incorrect token when expandfile applied string subsitution on "
@@ -2609,6 +2610,64 @@
 msgid "not of form [arg=value,value,...;arg=value,value,...]"
 msgstr "Non nel formato [arg=valore,valore,...;arg=valore,valore,...]"
 
+#: ../roundup/pygettext.py:401
+#, python-format
+msgid "*** %(file)s:%(lineno)s: Seen unexpected token \"%(token)s\""
+msgstr ""
+
+#: ../roundup/pygettext.py:457
+#, python-format
+msgid "# File: %(filename)s, line: %(lineno)d"
+msgstr ""
+
+#: ../roundup/pygettext.py:464
+#, python-format
+msgid " %(filename)s:%(lineno)d"
+msgstr ""
+
+# ../roundup/cgi/actions.py:931:935
+#: ../roundup/pygettext.py:540
+#, fuzzy, python-format
+msgid "Invalid value for --style: %s"
+msgstr "Login invalida"
+
+#: ../roundup/pygettext.py:548
+#, python-format
+msgid "pygettext.py (xgettext for Python) %s"
+msgstr ""
+
+#: ../roundup/pygettext.py:554
+#, python-format
+msgid "--width argument must be an integer: %s"
+msgstr ""
+
+#: ../roundup/pygettext.py:582
+#, python-format
+msgid "Can't read --exclude-file: %s"
+msgstr ""
+
+#: ../roundup/pygettext.py:601
+msgid "Reading standard input"
+msgstr ""
+
+#: ../roundup/pygettext.py:606
+#, python-format
+msgid "Working on %s"
+msgstr ""
+
+#: ../roundup/pygettext.py:640
+msgid "a unicode string"
+msgstr ""
+
+#: ../roundup/pygettext.py:642
+#, python-format
+msgid "*** Seen unexpected token \"%(token)s\""
+msgstr ""
+
+#: ../roundup/pygettext.py:643
+msgid "morethanonestring"
+msgstr ""
+
 #: ../roundup/rest.py:410
 #, python-format
 msgid "Method %(m)s not allowed. Allowed: %(a)s"
@@ -2639,7 +2698,7 @@
 "%(acceptable_types)s"
 msgstr ""
 
-#: ../roundup/rest.py:2437
+#: ../roundup/rest.py:2441
 #, python-format
 msgid ""
 "Unrecognized api version: %s. See /rest without specifying api version for "
@@ -2750,24 +2809,33 @@
 "%(old)s"
 msgstr ""
 
-#: ../roundup/scripts/roundup_demo.py:151
-#, python-format
-msgid "Enter directory path to create demo tracker [%s]: "
-msgstr ""
-
-#: ../roundup/scripts/roundup_demo.py:170
+#: ../roundup/scripts/roundup_demo.py:50
 #, python-format
 msgid ""
 "Enter tracker template to use (one of (%(template_list)s)) "
 "[%(default_template)s]: "
 msgstr ""
 
-#: ../roundup/scripts/roundup_gettext.py:35
+#: ../roundup/scripts/roundup_demo.py:166
+#, python-format
+msgid "Enter directory path to create demo tracker [%s]: "
+msgstr ""
+
+#: ../roundup/scripts/roundup_gettext.py:33
+msgid ""
+"\n"
+"Extracting translatable strings only from html templates.\n"
+"Because the 'polib' module is missing, unable to extract\n"
+"translations from detectors or extensions.\n"
+"The 'polib' module can be installed with pip.\n"
+msgstr ""
+
+#: ../roundup/scripts/roundup_gettext.py:71
 #, python-format
 msgid "Usage: %(program)s <tracker home>"
 msgstr ""
 
-#: ../roundup/scripts/roundup_gettext.py:51
+#: ../roundup/scripts/roundup_gettext.py:89
 #, python-format
 msgid "No tracker templates found in directory %s"
 msgstr ""
--- a/locale/ja.po	Wed Aug 07 21:43:40 2024 -0400
+++ b/locale/ja.po	Wed Aug 07 21:52:58 2024 -0400
@@ -7,7 +7,7 @@
 msgstr ""
 "Project-Id-Version: Roundup 2.4.0\n"
 "Report-Msgid-Bugs-To: roundup-devel@lists.sourceforge.net\n"
-"POT-Creation-Date: 2024-07-09 15:12-0400\n"
+"POT-Creation-Date: 2024-08-07 21:43-0400\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"
@@ -27,19 +27,19 @@
 msgid "You may not retire the admin or anonymous user"
 msgstr "ユーザー admin と anonymous を無効にすることはできません"
 
-#: ../roundup/admin.py:130
+#: ../roundup/admin.py:131
 msgid ""
 "Have 'display designator[,designator*]' show header inside\n"
 "      []'s before items. Includes retired/active status.\n"
 msgstr ""
 
-#: ../roundup/admin.py:134
+#: ../roundup/admin.py:135
 msgid ""
 "Have 'display designator' and 'specification class' show\n"
 "      protected fields: creator, id etc.\n"
 msgstr ""
 
-#: ../roundup/admin.py:138
+#: ../roundup/admin.py:139
 msgid ""
 "Controls history options. It is a bitstring where setting\n"
 "      the bit disables the feature. A value of 0 (default)\n"
@@ -50,57 +50,57 @@
 "      history.\n"
 msgstr ""
 
-#: ../roundup/admin.py:147
+#: ../roundup/admin.py:148
 msgid ""
 "Set the number of lines of history to keep for this session.\n"
 "      -1 is infinite.\n"
 msgstr ""
 
-#: ../roundup/admin.py:151
+#: ../roundup/admin.py:152
 msgid "Set indexer to use when running 'reindex' NYI\n"
 msgstr ""
 
-#: ../roundup/admin.py:154
+#: ../roundup/admin.py:155
 msgid "Force reopening of tracker when running each command.\n"
 msgstr ""
 
-#: ../roundup/admin.py:157
+#: ../roundup/admin.py:158
 msgid ""
 "set the number of rows imported before a database commit is\n"
 "      done. Used only for imports on PostgreSQL.\n"
 msgstr ""
 
-#: ../roundup/admin.py:159
+#: ../roundup/admin.py:160
 msgid "Show retired items in table, list etc. One of 'no', 'only', 'both'\n"
 msgstr ""
 
-#: ../roundup/admin.py:161
-msgid "internal mapping for show_retired.\n"
-msgstr ""
-
 #: ../roundup/admin.py:162
+msgid "internal mapping for show_retired.\n"
+msgstr ""
+
+#: ../roundup/admin.py:163
 msgid "Enable verbose output: tracing, descriptions...\n"
 msgstr ""
 
-#: ../roundup/admin.py:174 ../roundup/admin.py:1179 ../roundup/admin.py:1824
-#: ../roundup/admin.py:1856 ../roundup/admin.py:174:1179 :1824:1856
+#: ../roundup/admin.py:175 ../roundup/admin.py:1188 ../roundup/admin.py:1836
+#: ../roundup/admin.py:1868 ../roundup/admin.py:175:1188 :1836:1868
 #, python-format
 msgid "no such class \"%(classname)s\""
 msgstr ""
 
-#: ../roundup/admin.py:187
+#: ../roundup/admin.py:188
 #, python-format
 msgid "argument \"%(arg)s\" not propname=value"
 msgstr ""
 
-#: ../roundup/admin.py:200
+#: ../roundup/admin.py:201
 #, python-format
 msgid ""
 "Problem: %(message)s\n"
 "\n"
 msgstr ""
 
-#: ../roundup/admin.py:201
+#: ../roundup/admin.py:202
 #, python-format
 msgid ""
 "%(message)sUsage: roundup-admin [options] [<command> <arguments>]\n"
@@ -131,17 +131,17 @@
 " roundup-admin help all                   -- all available help\n"
 msgstr ""
 
-#: ../roundup/admin.py:230
+#: ../roundup/admin.py:231
 msgid "Commands: "
 msgstr ""
 
-#: ../roundup/admin.py:237
+#: ../roundup/admin.py:238
 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:266
+#: ../roundup/admin.py:270
 msgid ""
 "\n"
 "All commands (except help) require a tracker specifier. This is just\n"
@@ -209,23 +209,23 @@
 "Command help:\n"
 msgstr ""
 
-#: ../roundup/admin.py:330
+#: ../roundup/admin.py:334
 #, python-format
 msgid "%s:"
 msgstr ""
 
-#: ../roundup/admin.py:435 ../roundup/admin.py:1384
-#: ../roundup/admin.py:435:1384
+#: ../roundup/admin.py:439 ../roundup/admin.py:1396
+#: ../roundup/admin.py:439:1396
 msgid "Templates:"
 msgstr ""
 
-#: ../roundup/admin.py:438 ../roundup/admin.py:1394
-#: ../roundup/admin.py:438:1394
+#: ../roundup/admin.py:442 ../roundup/admin.py:1406
+#: ../roundup/admin.py:442:1406
 msgid "Back ends:"
 msgstr ""
 
 #. noqa: ARG002
-#: ../roundup/admin.py:455
+#: ../roundup/admin.py:459
 msgid ""
 "Usage: commit\n"
 "        Commit changes made to the database during an interactive session.\n"
@@ -239,7 +239,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:470
+#: ../roundup/admin.py:474
 msgid ""
 "Usage: create classname property=value ...\n"
 "        Create a new entry of a given class.\n"
@@ -251,45 +251,44 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:478 ../roundup/admin.py:552 ../roundup/admin.py:600
-#: ../roundup/admin.py:723 ../roundup/admin.py:796 ../roundup/admin.py:842
-#: ../roundup/admin.py:893 ../roundup/admin.py:990 ../roundup/admin.py:1206
-#: ../roundup/admin.py:1357 ../roundup/admin.py:1485 ../roundup/admin.py:1571
-#: ../roundup/admin.py:1691 ../roundup/admin.py:1814 ../roundup/admin.py:1846
-#: ../roundup/admin.py:1962 ../roundup/admin.py:2016 ../roundup/admin.py:2064
-#: ../roundup/admin.py:478:552 :1206:1357:1485 :1571:1691 :1814:1846 :1962:2016
-#: :2064 :600:723 :796:842 :893:990
+#: ../roundup/admin.py:482 ../roundup/admin.py:555 ../roundup/admin.py:606
+#: ../roundup/admin.py:733 ../roundup/admin.py:806 ../roundup/admin.py:851
+#: ../roundup/admin.py:902 ../roundup/admin.py:999 ../roundup/admin.py:1216
+#: ../roundup/admin.py:1369 ../roundup/admin.py:1497 ../roundup/admin.py:1580
+#: ../roundup/admin.py:1703 ../roundup/admin.py:1826 ../roundup/admin.py:1858
+#: ../roundup/admin.py:1974 ../roundup/admin.py:2028 ../roundup/admin.py:2076
+#: ../roundup/admin.py:482:555 :1216:1369:1497 :1580:1703 :1826:1858 :1974:2028
+#: :2076 :606:733 :806:851 :902:999
 msgid "Not enough arguments supplied"
 msgstr ""
 
-#: ../roundup/admin.py:498
+#: ../roundup/admin.py:502
 #, python-format
 msgid "%(propname)s (Password): "
 msgstr ""
 
-#: ../roundup/admin.py:501
-#, python-format
-msgid "   %(propname)s (Again): "
-msgstr ""
-
 #: ../roundup/admin.py:505
+#, python-format
+msgid "   %(propname)s (Again): "
+msgstr ""
+
+#: ../roundup/admin.py:509
 msgid "Sorry, try again..."
 msgstr ""
 
-#: ../roundup/admin.py:510
+#: ../roundup/admin.py:514
 #, python-format
 msgid "%(propname)s (%(proptype)s): "
 msgstr ""
 
-#: ../roundup/admin.py:529
+#: ../roundup/admin.py:533
 #, python-format
 msgid "you must provide the \"%(propname)s\" property."
 msgstr ""
 
-#: ../roundup/admin.py:541
+#: ../roundup/admin.py:545
 msgid ""
 "Usage: display designator[,designator]*\n"
-"\n"
 "        Show the property values for the given node(s).\n"
 "\n"
 "        A designator is a classname and a nodeid concatenated,\n"
@@ -300,46 +299,52 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:583
+#: ../roundup/admin.py:586
 #, python-format
 msgid "%(protected)s%(key)s: %(value)s"
 msgstr ""
 
 #. grab the directory to export to
-#: ../roundup/admin.py:586
+#: ../roundup/admin.py:589
 msgid ""
 "Usage: export [[-]class[,class]] export_dir\n"
-"        Export the database to colon-separated-value files.\n"
+"        Export the database and file content.\n"
+"\n"
+"        Database content is exported to colon separated files.\n"
 "        To exclude the files (e.g. for the msg or file class),\n"
 "        use the exporttables command.\n"
 "\n"
 "        Optionally limit the export to just the named classes\n"
-"        or exclude the named classes, if the 1st argument starts with '-'.\n"
+"        or exclude the named classes, if the 1st argument\n"
+"        starts with '-'.\n"
 "\n"
 "        This action exports the current data from the database into\n"
 "        colon-separated-value files that are placed in the nominated\n"
-"        destination directory.\n"
+"        export_dir directory.\n"
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:698
+#: ../roundup/admin.py:704
 msgid ""
 "Usage: exporttables [[-]class[,class]] export_dir\n"
-"        Export the database to colon-separated-value files, excluding the\n"
-"        files below $TRACKER_HOME/db/files/ (which can be archived "
-"separately).\n"
+"        Export only the database to files, no file content.\n"
+"\n"
+"        Database content is exported to colon separated files.\n"
+"        The files below $TRACKER_HOME/db/files/ (which can be\n"
+"        archived separately) are not part of the export.\n"
 "        To include the files, use the export command.\n"
 "\n"
 "        Optionally limit the export to just the named classes\n"
-"        or exclude the named classes, if the 1st argument starts with '-'.\n"
+"        or exclude the named classes, if the 1st argument\n"
+"        starts with '-'.\n"
 "\n"
 "        This action exports the current data from the database into\n"
-"        colon-separated-value files that are placed in the nominated\n"
+"        colon-separated-value files that are placed in the export_dir\n"
 "        destination directory.\n"
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:713
+#: ../roundup/admin.py:723
 msgid ""
 "Usage: filter classname propname=value ...\n"
 "        Find the nodes of the given class with a given property value.\n"
@@ -352,19 +357,19 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:754
+#: ../roundup/admin.py:764
 #, python-format
 msgid "Class %(curclassname)s has no property %(pn)s in %(propname)s."
 msgstr ""
 
-#: ../roundup/admin.py:781 ../roundup/admin.py:830 ../roundup/admin.py:1505
-#: ../roundup/admin.py:1518 ../roundup/admin.py:2086
-#: ../roundup/admin.py:781:830 :1505:1518:2086
+#: ../roundup/admin.py:791 ../roundup/admin.py:840 ../roundup/admin.py:1517
+#: ../roundup/admin.py:1530 ../roundup/admin.py:2098
+#: ../roundup/admin.py:791:840 :1517:1530:2098
 #, python-format
 msgid "%(classname)s has no property \"%(propname)s\""
 msgstr ""
 
-#: ../roundup/admin.py:788
+#: ../roundup/admin.py:798
 msgid ""
 "Usage: find classname propname=value ...\n"
 "        Find the nodes of the given class with a given link property value.\n"
@@ -375,15 +380,14 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:837
+#: ../roundup/admin.py:847
 msgid ""
-"Usage: genconfig <filename>\n"
-"        Generate a new tracker config file (ini style) with default\n"
-"        values in <filename>.\n"
+"Usage: genconfig filename\n"
+"        Create a new tracker config file with default values in filename.\n"
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:855
+#: ../roundup/admin.py:864
 #, python-format
 msgid ""
 "Changing option\n"
@@ -391,20 +395,20 @@
 "from old default of %(old_number)s to new default of %(new_number)s."
 msgstr ""
 
-#: ../roundup/admin.py:866
+#: ../roundup/admin.py:875
 #, python-format
 msgid ""
 "Update 'password_pbkdf2_default_rounds' to a number equal to or larger\n"
 "  than %s.\n"
 msgstr ""
 
-#: ../roundup/admin.py:873
+#: ../roundup/admin.py:882
 msgid ""
 "Check the rdbms mysql_* settings. Your charset and collations may need\n"
 "  to be changed. See upgrading instructions.\n"
 msgstr ""
 
-#: ../roundup/admin.py:883
+#: ../roundup/admin.py:892
 msgid ""
 "Usage: get property designator[,designator]*\n"
 "        Get the given property of one or more designator(s).\n"
@@ -417,23 +421,23 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:916
+#: ../roundup/admin.py:925
 #, python-format
 msgid "property %s is not of type Multilink or Link so -d flag does not apply."
 msgstr ""
 
-#: ../roundup/admin.py:933 ../roundup/admin.py:1181 ../roundup/admin.py:1858
-#: ../roundup/admin.py:933:1181:1858
+#: ../roundup/admin.py:942 ../roundup/admin.py:1190 ../roundup/admin.py:1842
+#: ../roundup/admin.py:1870 ../roundup/admin.py:942:1190 :1842:1870
 #, python-format
 msgid "no such %(classname)s node \"%(nodeid)s\""
 msgstr ""
 
-#: ../roundup/admin.py:936
+#: ../roundup/admin.py:945
 #, python-format
 msgid "no such %(classname)s property \"%(propname)s\""
 msgstr ""
 
-#: ../roundup/admin.py:941
+#: ../roundup/admin.py:950
 msgid ""
 "Usage: help topic\n"
 "        Give help about topic.\n"
@@ -445,12 +449,12 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:960
+#: ../roundup/admin.py:969
 #, python-format
 msgid "Sorry, no help for \"%(topic)s\""
 msgstr ""
 
-#: ../roundup/admin.py:977
+#: ../roundup/admin.py:986
 msgid ""
 "Usage: history designator [skipquiet] [raw]\n"
 "        Show the history entries of a designator.\n"
@@ -465,27 +469,27 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1002
+#: ../roundup/admin.py:1011
 #, python-format
 msgid "Unexpected argument(s): %s. Expected 'skipquiet' or 'raw'."
 msgstr ""
 
-#: ../roundup/admin.py:1053
+#: ../roundup/admin.py:1062
 #, fuzzy
 msgid "removed"
 msgstr "削除"
 
-#: ../roundup/admin.py:1055
+#: ../roundup/admin.py:1064
 msgid "added"
 msgstr ""
 
-#: ../roundup/admin.py:1057
+#: ../roundup/admin.py:1066
 #, python-format
 msgid "Unknown history set operation '%s'. Expected +/-."
 msgstr ""
 
 #. .Hint added issue23 to superseder
-#: ../roundup/admin.py:1082
+#: ../roundup/admin.py:1091
 #, fuzzy, python-format
 msgid "added %(class)s%(item_id)s to %(propname)s"
 msgstr "%(class)s %(id)s %(properties)s 更新完了"
@@ -493,34 +497,35 @@
 #. .Hint read as: assignedto was admin(1)
 #. where assignedto is the property
 #. admin is the key name for value 1
-#: ../roundup/admin.py:1103
+#: ../roundup/admin.py:1112
 #, python-format
 msgid "%(prop)s was %(name)s(%(value)s)"
 msgstr ""
 
-#: ../roundup/admin.py:1109 ../roundup/admin.py:1138
-#: ../roundup/admin.py:1109:1138
+#: ../roundup/admin.py:1118 ../roundup/admin.py:1147
+#: ../roundup/admin.py:1118:1147
 #, python-format
 msgid "%(prop)s was %(value)s"
 msgstr ""
 
-#: ../roundup/admin.py:1128
+#: ../roundup/admin.py:1137
 #, python-format
 msgid "%(prop)s was [%(value_list)s]"
 msgstr ""
 
 #. .Hint modified nosy: added demo(3)
-#: ../roundup/admin.py:1135
+#: ../roundup/admin.py:1144
 #, python-format
 msgid "modified %(prop)s: %(how)s"
 msgstr ""
 
-#: ../roundup/admin.py:1186
+#: ../roundup/admin.py:1195
 msgid ""
 "Usage: import import_dir\n"
-"        Import a database from the directory containing CSV files,\n"
-"        two per class to import.\n"
+"        Import a database and file contents from the directory.\n"
 "\n"
+"        The directory should have the same format as one containing\n"
+"        the output of export. There are two files imported per class.\n"
 "        The files used in the import are:\n"
 "\n"
 "        <class>.csv\n"
@@ -538,16 +543,17 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1276
+#: ../roundup/admin.py:1287
 msgid ""
 "Usage: importtables export_dir\n"
+"        This imports the database tables exported using exporttables.\n"
 "\n"
-"        This imports the database tables exported using exporttables.\n"
+"        It does not import the content of files like msgs and files.\n"
 "        "
 msgstr ""
 
 #. password
-#: ../roundup/admin.py:1283
+#: ../roundup/admin.py:1295
 msgid ""
 "Usage: initialise [adminpw]\n"
 "        Initialise a new Roundup tracker.\n"
@@ -558,30 +564,30 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1297
+#: ../roundup/admin.py:1309
 msgid "Admin Password: "
 msgstr ""
 
-#: ../roundup/admin.py:1298
+#: ../roundup/admin.py:1310
 msgid "       Confirm: "
 msgstr ""
 
-#: ../roundup/admin.py:1302
-msgid "Instance home does not exist"
-msgstr ""
-
-#: ../roundup/admin.py:1306
-msgid "Instance has not been installed"
-msgstr ""
-
 #: ../roundup/admin.py:1314
+msgid "Instance home does not exist"
+msgstr ""
+
+#: ../roundup/admin.py:1318
+msgid "Instance has not been installed"
+msgstr ""
+
+#: ../roundup/admin.py:1326
 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:1334
+#: ../roundup/admin.py:1346
 msgid ""
 "Usage: install [template [backend [key=val[,key=val]]]]\n"
 "        Install a new Roundup tracker.\n"
@@ -607,12 +613,12 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1363
+#: ../roundup/admin.py:1375
 #, python-format
 msgid "Instance home parent directory \"%(parent)s\" does not exist"
 msgstr ""
 
-#: ../roundup/admin.py:1372
+#: ../roundup/admin.py:1384
 #, python-format
 msgid ""
 "WARNING: There appears to be a tracker in \"%(tracker_home)s\"!\n"
@@ -620,20 +626,20 @@
 "Erase it? Y/N: "
 msgstr ""
 
-#: ../roundup/admin.py:1385
+#: ../roundup/admin.py:1397
 msgid "Select template"
 msgstr ""
 
-#: ../roundup/admin.py:1395
+#: ../roundup/admin.py:1407
 msgid "Select backend"
 msgstr ""
 
-#: ../roundup/admin.py:1406
+#: ../roundup/admin.py:1418
 #, python-format
 msgid "Error in configuration settings: \"%s\""
 msgstr ""
 
-#: ../roundup/admin.py:1439
+#: ../roundup/admin.py:1451
 #, python-format
 msgid ""
 "\n"
@@ -642,11 +648,11 @@
 "   %(config_file)s"
 msgstr ""
 
-#: ../roundup/admin.py:1449
+#: ../roundup/admin.py:1461
 msgid " ... at a minimum, you must set following options:"
 msgstr ""
 
-#: ../roundup/admin.py:1454
+#: ../roundup/admin.py:1466
 #, python-format
 msgid ""
 "\n"
@@ -663,7 +669,7 @@
 "---------------------------------------------------------------------------\n"
 msgstr ""
 
-#: ../roundup/admin.py:1470
+#: ../roundup/admin.py:1482
 msgid ""
 "Usage: list classname [property]\n"
 "        List the instances of a class.\n"
@@ -679,20 +685,19 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1483
+#: ../roundup/admin.py:1495
 msgid "Too many arguments supplied"
 msgstr ""
 
-#: ../roundup/admin.py:1516
+#: ../roundup/admin.py:1528
 #, python-format
 msgid "%(nodeid)4s: %(value)s"
 msgstr ""
 
 #. noqa: ARG002  - args unused
-#: ../roundup/admin.py:1523
+#: ../roundup/admin.py:1535
 msgid ""
 "Usage: migrate\n"
-"\n"
 "        Update a tracker's database to be compatible with the Roundup\n"
 "        codebase.\n"
 "\n"
@@ -713,22 +718,20 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1544
+#: ../roundup/admin.py:1555
 #, python-format
 msgid "Tracker updated to schema version %s."
 msgstr ""
 
-#: ../roundup/admin.py:1548
+#: ../roundup/admin.py:1559
 #, python-format
 msgid "No migration action required. At schema version %s."
 msgstr ""
 
-#: ../roundup/admin.py:1553
+#: ../roundup/admin.py:1564
 msgid ""
 "Usage: pack period | date\n"
-"\n"
-"        Remove journal entries older than a period of time specified or\n"
-"        before a certain date.\n"
+"        Remove journal entries older than the date/period.\n"
 "\n"
 "        A period is specified using the suffixes \"y\", \"m\", and \"d\". "
 "The\n"
@@ -745,15 +748,16 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1581
+#: ../roundup/admin.py:1590
 msgid "Invalid format"
 msgstr ""
 
-#: ../roundup/admin.py:1592
+#: ../roundup/admin.py:1601
 msgid ""
 "Usage: perftest [mode] [arguments]*\n"
+"        Time operations in Roundup.\n"
 "\n"
-"        Time operations in Roundup. Supported arguments:\n"
+"        Supported arguments:\n"
 "\n"
 "            [password] [rounds=<integer>] [scheme=<scheme>]\n"
 "\n"
@@ -766,28 +770,30 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1625
+#: ../roundup/admin.py:1635
 msgid "Invalid 'rounds'. Must be larger than 999."
 msgstr ""
 
-#: ../roundup/admin.py:1629
+#: ../roundup/admin.py:1639
 #, python-format
 msgid "Invalid 'rounds'. It must be an integer not: %s"
 msgstr ""
 
-#: ../roundup/admin.py:1656
+#: ../roundup/admin.py:1666
 msgid "scheme does not support rounds."
 msgstr ""
 
-#: ../roundup/admin.py:1659
+#: ../roundup/admin.py:1669
 #, python-format
 msgid "Hash time: %(time)0.9f seconds, scheme: %(scheme)s, rounds: %(rounds)s"
 msgstr ""
 
-#: ../roundup/admin.py:1665
+#: ../roundup/admin.py:1675
 msgid ""
 "Usage: pragma setting=value | 'list'\n"
-"        Set internal admin settings to a value. E.G.\n"
+"        Set internal admin settings to a value.\n"
+"\n"
+"        For example:\n"
 "\n"
 "            pragma verbose=True\n"
 "            pragma verbose=yes\n"
@@ -811,49 +817,49 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1698
+#: ../roundup/admin.py:1710
 #, python-format
 msgid "Argument must be setting=value, was given: %s."
 msgstr ""
 
-#: ../roundup/admin.py:1701
+#: ../roundup/admin.py:1713
 msgid "Current settings and values (NYI - not yet implemented):"
 msgstr ""
 
-#: ../roundup/admin.py:1712
+#: ../roundup/admin.py:1724
 msgid ""
 "      Help for this pragma is missing. Please report it to the Roundup "
 "project.\n"
 msgstr ""
 
-#: ../roundup/admin.py:1718
+#: ../roundup/admin.py:1730
 #, fuzzy, python-format
 msgid "Unknown setting %s. Try \"pragma list\"."
 msgstr "登録されていないユーザー名です"
 
-#: ../roundup/admin.py:1728
+#: ../roundup/admin.py:1740
 #, python-format
 msgid "Incorrect value for boolean setting %(setting)s: %(value)s."
 msgstr ""
 
-#: ../roundup/admin.py:1735
+#: ../roundup/admin.py:1747
 #, python-format
 msgid "Incorrect value for integer setting %(setting)s: %(value)s."
 msgstr ""
 
-#: ../roundup/admin.py:1742
+#: ../roundup/admin.py:1754
 #, python-format
 msgid ""
 "Incorrect value for setting %(setting)s: %(value)s. Should be no, both, or "
 "only."
 msgstr ""
 
-#: ../roundup/admin.py:1752
+#: ../roundup/admin.py:1764
 #, python-format
 msgid "Internal error: pragma can not handle values of type: %s"
 msgstr ""
 
-#: ../roundup/admin.py:1761
+#: ../roundup/admin.py:1773
 msgid ""
 "Usage: reindex [classname|classname:#-#|designator]*\n"
 "        Re-generate a tracker's search indexes.\n"
@@ -870,17 +876,17 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1783
+#: ../roundup/admin.py:1795
 #, python-format
 msgid "no such item \"%(designator)s\""
 msgstr ""
 
-#: ../roundup/admin.py:1793
+#: ../roundup/admin.py:1805
 #, fuzzy, python-format
 msgid "no such item \"%(class)s%(id)s\""
 msgstr "%(class)s %(id)s のコピー"
 
-#: ../roundup/admin.py:1805
+#: ../roundup/admin.py:1817
 msgid ""
 "Usage: restore designator[,designator]*\n"
 "        Restore the retired node specified by designator.\n"
@@ -892,11 +898,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1830
-msgid "no such %(classname)s node \"%(nodeid)s\""
-msgstr ""
-
-#: ../roundup/admin.py:1836
+#: ../roundup/admin.py:1848
 msgid ""
 "Usage: retire designator[,designator]*\n"
 "        Retire the node specified by designator.\n"
@@ -910,7 +912,7 @@
 msgstr ""
 
 #. noqa: ARG002 - args unused
-#: ../roundup/admin.py:1864
+#: ../roundup/admin.py:1876
 msgid ""
 "Usage: rollback\n"
 "        Undo all changes that are pending commit to the database.\n"
@@ -922,59 +924,59 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1877
+#: ../roundup/admin.py:1889
 msgid ""
 "Usage: security [Role name]\n"
+"        Display the Permissions available to one or all Roles.\n"
 "\n"
-"             Display the Permissions available to one or all Roles.\n"
-"             Also validates that any properties defined in a\n"
-"             permission are valid.\n"
+"        Also validates that any properties defined in a\n"
+"        permission are valid.\n"
 "\n"
-"             Run this after changing your permissions to catch\n"
-"             typos.\n"
+"        Run this after changing your permissions to catch\n"
+"        typos.\n"
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1892
+#: ../roundup/admin.py:1904
 #, python-format
 msgid "No such Role \"%(role)s\"\n"
 msgstr ""
 
-#: ../roundup/admin.py:1898
-#, python-format
-msgid "New Web users get the Roles \"%(role)s\"\n"
-msgstr ""
-
-#: ../roundup/admin.py:1901
-#, python-format
-msgid "New Web users get the Role \"%(role)s\"\n"
-msgstr ""
-
-#: ../roundup/admin.py:1905
-#, python-format
-msgid "New Email users get the Roles \"%(role)s\"\n"
-msgstr ""
-
-#: ../roundup/admin.py:1907
-#, python-format
-msgid "New Email users get the Role \"%(role)s\"\n"
-msgstr ""
-
 #: ../roundup/admin.py:1910
 #, python-format
+msgid "New Web users get the Roles \"%(role)s\"\n"
+msgstr ""
+
+#: ../roundup/admin.py:1913
+#, python-format
+msgid "New Web users get the Role \"%(role)s\"\n"
+msgstr ""
+
+#: ../roundup/admin.py:1917
+#, python-format
+msgid "New Email users get the Roles \"%(role)s\"\n"
+msgstr ""
+
+#: ../roundup/admin.py:1919
+#, python-format
+msgid "New Email users get the Role \"%(role)s\"\n"
+msgstr ""
+
+#: ../roundup/admin.py:1922
+#, python-format
 msgid "Role \"%(name)s\":\n"
 msgstr ""
 
-#: ../roundup/admin.py:1916
+#: ../roundup/admin.py:1928
 msgid " %(description)s (%(name)s for \"%(klass)s\""
 msgstr ""
 
-#: ../roundup/admin.py:1916
+#: ../roundup/admin.py:1928
 #, python-format
 msgid " %(description)s (%(name)s for \"%(klass)s\": %(properties)s only)\n"
 msgstr ""
 
-#: ../roundup/admin.py:1929
+#: ../roundup/admin.py:1941
 #, python-format
 msgid ""
 "\n"
@@ -982,17 +984,17 @@
 "\n"
 msgstr ""
 
-#: ../roundup/admin.py:1935
+#: ../roundup/admin.py:1947
 #, python-format
 msgid " %(description)s (%(name)s for \"%(klass)s\" only)\n"
 msgstr ""
 
-#: ../roundup/admin.py:1938
+#: ../roundup/admin.py:1950
 #, python-format
 msgid " %(description)s (%(name)s)\n"
 msgstr ""
 
-#: ../roundup/admin.py:1942
+#: ../roundup/admin.py:1954
 msgid ""
 "Usage: set items property=value [property=value ...]\n"
 "        Set the given properties of one or more items(s).\n"
@@ -1013,7 +1015,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:2010
+#: ../roundup/admin.py:2022
 msgid ""
 "Usage: specification classname\n"
 "        Show the properties for a classname.\n"
@@ -1022,17 +1024,17 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:2029
+#: ../roundup/admin.py:2041
 #, python-format
 msgid "%(key)s: %(value)s (key property)\n"
 msgstr ""
 
-#: ../roundup/admin.py:2032
+#: ../roundup/admin.py:2044
 #, python-format
 msgid "%(key)s: %(value)s\n"
 msgstr ""
 
-#: ../roundup/admin.py:2035
+#: ../roundup/admin.py:2047
 msgid ""
 "Usage: table classname [property[,property]*]\n"
 "        List the instances of a class in tabular form.\n"
@@ -1064,17 +1066,17 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:2081
+#: ../roundup/admin.py:2093
 #, python-format
 msgid "\"%(spec)s\" not name:width"
 msgstr ""
 
-#: ../roundup/admin.py:2103
+#: ../roundup/admin.py:2115
 #, python-format
 msgid "\"%(spec)s\" does not have an integer width: \"%(width)s\""
 msgstr ""
 
-#: ../roundup/admin.py:2139
+#: ../roundup/admin.py:2151
 msgid ""
 "Usage: templates [trace_search]\n"
 "        List templates and their installed directories.\n"
@@ -1084,58 +1086,59 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:2167
+#: ../roundup/admin.py:2179
 msgid ""
 "Usage: updateconfig <filename>\n"
-"        Generate an updated tracker config file (ini style) in\n"
-"        <filename>. Use current settings from existing roundup\n"
-"        tracker in tracker home.\n"
+"        Merge existing tracker config with new settings.\n"
+"\n"
+"        Output the updated config file to <filename>. Use current\n"
+"        settings from existing roundup tracker in tracker home.\n"
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:2175 ../roundup/cgi/actions.py:886
+#: ../roundup/admin.py:2188 ../roundup/cgi/actions.py:886
 #: ../roundup/cgi/actions.py:897 ../roundup/cgi/actions.py:1099
 #: ../roundup/cgi/actions.py:1113 ../roundup/cgi/actions.py:886:897 :1099:1113
 #, python-format
 msgid "Error: %s"
 msgstr "エラー: %s"
 
-#: ../roundup/admin.py:2207
+#: ../roundup/admin.py:2220
 #, python-format
 msgid "Unknown command \"%(command)s\" (\"help commands\" for a list)"
 msgstr ""
 
-#: ../roundup/admin.py:2213
+#: ../roundup/admin.py:2226
 #, python-format
 msgid "Multiple commands match \"%(command)s\": %(list)s"
 msgstr ""
 
-#: ../roundup/admin.py:2228
+#: ../roundup/admin.py:2241
 msgid "Enter tracker home: "
 msgstr ""
 
-#: ../roundup/admin.py:2257 ../roundup/admin.py:2261
-#: ../roundup/admin.py:2257:2261
+#: ../roundup/admin.py:2270 ../roundup/admin.py:2274
+#: ../roundup/admin.py:2270:2274
 #, python-format
 msgid "Error: Couldn't open tracker: %(message)s"
 msgstr ""
 
-#: ../roundup/admin.py:2309
+#: ../roundup/admin.py:2322
 #, python-format
 msgid ""
 "Roundup %s ready for input.\n"
 "Type \"help\" for help."
 msgstr ""
 
-#: ../roundup/admin.py:2342
+#: ../roundup/admin.py:2355
 msgid "Note: command history and editing not available"
 msgstr ""
 
-#: ../roundup/admin.py:2348
-msgid "exit..."
-msgstr ""
-
 #: ../roundup/admin.py:2361
+msgid "exit..."
+msgstr ""
+
+#: ../roundup/admin.py:2374
 msgid "There are unsaved changes. Commit them (y/N)? "
 msgstr ""
 
@@ -1650,7 +1653,7 @@
 msgid "<em>undefined</em>"
 msgstr "<em>未定義</em>"
 
-#: ../roundup/cgi/client.py:90
+#: ../roundup/cgi/client.py:105
 msgid ""
 "<html><head><title>An error has occurred</title></head>\n"
 "<body><h1>An error has occurred</h1>\n"
@@ -1659,155 +1662,155 @@
 "</body></html>"
 msgstr ""
 
-#: ../roundup/cgi/client.py:702 ../roundup/cgi/client.py:1622
-#: ../roundup/cgi/client.py:702:1622
+#: ../roundup/cgi/client.py:717 ../roundup/cgi/client.py:1635
+#: ../roundup/cgi/client.py:717:1635
 msgid "Required Header Missing"
 msgstr ""
 
-#: ../roundup/cgi/client.py:704
+#: ../roundup/cgi/client.py:719
 #, fuzzy
 msgid "Client is not allowed to use Rest Interface."
 msgstr "クエリー編集の権限がありません。"
 
-#: ../roundup/cgi/client.py:956
+#: ../roundup/cgi/client.py:971
 msgid "Form Error: "
 msgstr ""
 
-#: ../roundup/cgi/client.py:1049
+#: ../roundup/cgi/client.py:1064
 #, python-format
 msgid "Unrecognized charset: %r"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1318 ../roundup/cgi/client.py:2281
-#: ../roundup/cgi/client.py:1318:2281
+#: ../roundup/cgi/client.py:1331 ../roundup/cgi/client.py:2294
+#: ../roundup/cgi/client.py:1331:2294
 msgid "broken form: multiple @action values submitted"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1335
+#: ../roundup/cgi/client.py:1348
 msgid "Anonymous users are not allowed to use the web interface"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1483
+#: ../roundup/cgi/client.py:1496
 msgid "Referer header not available."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1487
+#: ../roundup/cgi/client.py:1500
 #, python-format
 msgid "csrf key used with wrong method from: %s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1516
+#: ../roundup/cgi/client.py:1529
 #, python-format
 msgid "csrf header %(header)s required but missing for user%(userid)s."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1520
-#, python-format
-msgid "Missing header: %s"
-msgstr ""
-
-#: ../roundup/cgi/client.py:1528
-#, python-format
-msgid "csrf Referer header check failed for user%(userid)s. Value=%(referer)s"
-msgstr ""
-
 #: ../roundup/cgi/client.py:1533
+#, python-format
+msgid "Missing header: %s"
+msgstr ""
+
+#: ../roundup/cgi/client.py:1541
+#, python-format
+msgid "csrf Referer header check failed for user%(userid)s. Value=%(referer)s"
+msgstr ""
+
+#: ../roundup/cgi/client.py:1546
 #, fuzzy, python-format
 msgid "Invalid Referer: %s"
 msgstr "不正なリクエスト"
 
-#: ../roundup/cgi/client.py:1548
+#: ../roundup/cgi/client.py:1561
 #, python-format
 msgid "csrf Origin header check failed for user%(userid)s. Value=%(origin)s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1553
+#: ../roundup/cgi/client.py:1566
 #, fuzzy, python-format
 msgid "Invalid Origin %s"
 msgstr "不正なリクエスト"
 
-#: ../roundup/cgi/client.py:1567
+#: ../roundup/cgi/client.py:1580
 #, python-format
 msgid ""
 "csrf X-FORWARDED-HOST header check failed for user%(userid)s. Value=%(host)s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1573
+#: ../roundup/cgi/client.py:1586
 #, python-format
 msgid "Invalid X-FORWARDED-HOST %s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1592
+#: ../roundup/cgi/client.py:1605
 #, python-format
 msgid "csrf HOST header check failed for user%(userid)s. Value=%(host)s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1597
+#: ../roundup/cgi/client.py:1610
 #, fuzzy, python-format
 msgid "Invalid HOST %s"
 msgstr "不正なリクエスト"
 
-#: ../roundup/cgi/client.py:1605
+#: ../roundup/cgi/client.py:1618
 msgid "Csrf: unable to verify sufficient headers"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1606
-msgid "Unable to verify sufficient headers"
-msgstr ""
-
 #: ../roundup/cgi/client.py:1619
+msgid "Unable to verify sufficient headers"
+msgstr ""
+
+#: ../roundup/cgi/client.py:1632
 #, python-format
 msgid "csrf X-REQUESTED-WITH xmlrpc required header check failed for user%s."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1660
+#: ../roundup/cgi/client.py:1673
 #, python-format
 msgid "Required csrf field missing for user%s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1662 ../roundup/cgi/client.py:1689
-#: ../roundup/cgi/client.py:1706 ../roundup/cgi/client.py:1662:1689:1706
+#: ../roundup/cgi/client.py:1675 ../roundup/cgi/client.py:1702
+#: ../roundup/cgi/client.py:1719 ../roundup/cgi/client.py:1675:1702:1719
 msgid ""
 "We can't validate your session (csrf failure). Re-enter any unsaved data and "
 "try again."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1666
+#: ../roundup/cgi/client.py:1679
 #, python-format
 msgid "csrf field not supplied by user%s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1678
+#: ../roundup/cgi/client.py:1691
 #, 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:1696
+#: ../roundup/cgi/client.py:1709
 #, 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:1888
+#: ../roundup/cgi/client.py:1901
 msgid "You are not allowed to view this file."
 msgstr ""
 
-#: ../roundup/cgi/client.py:2159
+#: ../roundup/cgi/client.py:2172
 #, python-format
 msgid "%(starttag)sTime elapsed: %(seconds)fs%(endtag)s\n"
 msgstr ""
 
-#: ../roundup/cgi/client.py:2163
+#: ../roundup/cgi/client.py:2176
 #, 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:2703
+#: ../roundup/cgi/client.py:2716
 #, python-format
 msgid ""
 "Cache failure: compressed file %(compressed)s is older than its source file "
@@ -1869,115 +1872,115 @@
 msgstr[0] "%(class)s の入力必須属性 %(property)s が入力されていません"
 msgstr[1] "%(class)s の入力必須属性 %(property)s が入力されていません"
 
-#: ../roundup/cgi/templating.py:277
+#: ../roundup/cgi/templating.py:278
 #, python-format
 msgid "You are not allowed to %(action)s items of class %(class)s"
 msgstr "クラス %(class)s のアイテムを %(action)s する権限がありません"
 
-#: ../roundup/cgi/templating.py:914
+#: ../roundup/cgi/templating.py:916
 msgid "(list)"
 msgstr "(一覧)"
 
-#: ../roundup/cgi/templating.py:989
+#: ../roundup/cgi/templating.py:991
 msgid "Submit New Entry"
 msgstr "新規登録"
 
-#: ../roundup/cgi/templating.py:1011 ../roundup/cgi/templating.py:1187
-#: ../roundup/cgi/templating.py:1822 ../roundup/cgi/templating.py:1853
-#: ../roundup/cgi/templating.py:1874 ../roundup/cgi/templating.py:1912
-#: ../roundup/cgi/templating.py:1965 ../roundup/cgi/templating.py:1989
-#: ../roundup/cgi/templating.py:1996 ../roundup/cgi/templating.py:2033
-#: ../roundup/cgi/templating.py:2086 ../roundup/cgi/templating.py:2119
-#: ../roundup/cgi/templating.py:2214 ../roundup/cgi/templating.py:2235
-#: ../roundup/cgi/templating.py:2326 ../roundup/cgi/templating.py:2346
-#: ../roundup/cgi/templating.py:2368 ../roundup/cgi/templating.py:2411
-#: ../roundup/cgi/templating.py:2421 ../roundup/cgi/templating.py:2486
-#: ../roundup/cgi/templating.py:2789 ../roundup/cgi/templating.py:1011:1187
-#: :1822:1853 :1874:1912 :1965:1989 :1996:2033 :2086:2119 :2214:2235 :2326:2346
-#: :2368:2411 :2421:2486:2789
+#: ../roundup/cgi/templating.py:1013 ../roundup/cgi/templating.py:1189
+#: ../roundup/cgi/templating.py:1824 ../roundup/cgi/templating.py:1855
+#: ../roundup/cgi/templating.py:1876 ../roundup/cgi/templating.py:1914
+#: ../roundup/cgi/templating.py:1967 ../roundup/cgi/templating.py:1991
+#: ../roundup/cgi/templating.py:1998 ../roundup/cgi/templating.py:2035
+#: ../roundup/cgi/templating.py:2088 ../roundup/cgi/templating.py:2121
+#: ../roundup/cgi/templating.py:2216 ../roundup/cgi/templating.py:2237
+#: ../roundup/cgi/templating.py:2328 ../roundup/cgi/templating.py:2348
+#: ../roundup/cgi/templating.py:2370 ../roundup/cgi/templating.py:2413
+#: ../roundup/cgi/templating.py:2423 ../roundup/cgi/templating.py:2488
+#: ../roundup/cgi/templating.py:2791 ../roundup/cgi/templating.py:1013:1189
+#: :1824:1855 :1876:1914 :1967:1991 :1998:2035 :2088:2121 :2216:2237 :2328:2348
+#: :2370:2413 :2423:2488:2791
 msgid "[hidden]"
 msgstr ""
 
-#: ../roundup/cgi/templating.py:1012
+#: ../roundup/cgi/templating.py:1014
 msgid "New node - no history"
 msgstr ""
 
-#: ../roundup/cgi/templating.py:1152
+#: ../roundup/cgi/templating.py:1154
 msgid "Submit Changes"
 msgstr "更新"
 
-#: ../roundup/cgi/templating.py:1230
+#: ../roundup/cgi/templating.py:1232
 msgid "<em>The indicated property no longer exists</em>"
 msgstr "<em>指定されたプロパティは存在しません<em>"
 
-#: ../roundup/cgi/templating.py:1266
+#: ../roundup/cgi/templating.py:1268
 #, python-format
 msgid "The linked class %(classname)s no longer exists"
 msgstr "リンク先のクラス %(classname)s は存在しません"
 
-#: ../roundup/cgi/templating.py:1303 ../roundup/cgi/templating.py:1333
-#: ../roundup/cgi/templating.py:2495 ../roundup/cgi/templating.py:2798
-#: ../roundup/cgi/templating.py:1303:1333 :2495:2798
+#: ../roundup/cgi/templating.py:1305 ../roundup/cgi/templating.py:1335
+#: ../roundup/cgi/templating.py:2497 ../roundup/cgi/templating.py:2800
+#: ../roundup/cgi/templating.py:1305:1335 :2497:2800
 msgid "[label is missing]"
 msgstr ""
 
-#: ../roundup/cgi/templating.py:1307 ../roundup/cgi/templating.py:1336
-#: ../roundup/cgi/templating.py:1307:1336
+#: ../roundup/cgi/templating.py:1309 ../roundup/cgi/templating.py:1338
+#: ../roundup/cgi/templating.py:1309:1338
 msgid "<strike>The linked node no longer exists</strike>"
 msgstr "<strike>リンク先のノードは存在しません</strike>"
 
-#: ../roundup/cgi/templating.py:1398
+#: ../roundup/cgi/templating.py:1400
 #, python-format
 msgid "%s: (no value)"
 msgstr ""
 
-#: ../roundup/cgi/templating.py:1414
+#: ../roundup/cgi/templating.py:1416
 #, fuzzy, python-format
 msgid ""
 "<strong><em>This event %s is not handled by the history display!</em></"
 "strong>"
 msgstr "<strong><em>このイベントは履歴の中に表示されません!</em></strong>"
 
-#: ../roundup/cgi/templating.py:1427
+#: ../roundup/cgi/templating.py:1429
 msgid "<tr><td colspan=4><strong>Note:</strong></td></tr>"
 msgstr "<tr><td colspan=4><strong>備考:</strong></td></tr>"
 
-#: ../roundup/cgi/templating.py:1436
+#: ../roundup/cgi/templating.py:1438
 msgid "History"
 msgstr "履歴"
 
-#: ../roundup/cgi/templating.py:1438
+#: ../roundup/cgi/templating.py:1440
 msgid "<th>Date</th>"
 msgstr "<th>日時</th>"
 
-#: ../roundup/cgi/templating.py:1439
+#: ../roundup/cgi/templating.py:1441
 msgid "<th>User</th>"
 msgstr "<th>ユーザー</th>"
 
-#: ../roundup/cgi/templating.py:1440
+#: ../roundup/cgi/templating.py:1442
 msgid "<th>Action</th>"
 msgstr "<th>アクション</th>"
 
-#: ../roundup/cgi/templating.py:1441
+#: ../roundup/cgi/templating.py:1443
 msgid "<th>Args</th>"
 msgstr "<th>引数</th>"
 
-#: ../roundup/cgi/templating.py:1492
+#: ../roundup/cgi/templating.py:1494
 #, python-format
 msgid "Copy of %(class)s %(id)s"
 msgstr "%(class)s %(id)s のコピー"
 
-#: ../roundup/cgi/templating.py:2123 ../roundup/cgi/templating.py:2158
-#: ../roundup/cgi/templating.py:1380:2123:2158
+#: ../roundup/cgi/templating.py:2125 ../roundup/cgi/templating.py:2160
+#: ../roundup/cgi/templating.py:1382:2125:2160
 msgid "No"
 msgstr ""
 
-#: ../roundup/cgi/templating.py:2123 ../roundup/cgi/templating.py:2152
-#: ../roundup/cgi/templating.py:1380:2123:2152
+#: ../roundup/cgi/templating.py:2125 ../roundup/cgi/templating.py:2154
+#: ../roundup/cgi/templating.py:1382:2125:2154
 msgid "Yes"
 msgstr ""
 
-#: ../roundup/cgi/templating.py:2284
+#: ../roundup/cgi/templating.py:2286
 msgid ""
 "default value for DateHTMLProperty must be either DateHTMLProperty or string "
 "date representation."
@@ -1985,27 +1988,27 @@
 "DateHTMLProperty のデフォルト値は DateHTMLProperty もしくは日付の文字列表現で"
 "なくてはなりません。"
 
-#: ../roundup/cgi/templating.py:2466
+#: ../roundup/cgi/templating.py:2468
 #, python-format
 msgid "Attempt to look up %(attr)s on a missing value"
 msgstr "存在しない値の %(attr)s 検索が実行されました"
 
-#: ../roundup/cgi/templating.py:2477
+#: ../roundup/cgi/templating.py:2479
 #, fuzzy, python-format
 msgid "Attempt to look up %(item)s on a missing value"
 msgstr "存在しない値の %(attr)s 検索が実行されました"
 
-#: ../roundup/cgi/templating.py:2582
+#: ../roundup/cgi/templating.py:2584
 #, python-format
 msgid "<option %svalue=\"-1\">- no selection -</option>"
 msgstr "<option %svalue=\"-1\">- 未選択 -</option>"
 
-#: ../roundup/cgi/templating.py:3743
+#: ../roundup/cgi/templating.py:3745
 #, python-format
 msgid "Unable to read or expand file '%(name)s' in template '%(template)s'."
 msgstr ""
 
-#: ../roundup/cgi/templating.py:3793
+#: ../roundup/cgi/templating.py:3795
 #, python-format
 msgid ""
 "Found an incorrect token when expandfile applied string subsitution on "
@@ -2457,6 +2460,63 @@
 msgid "not of form [arg=value,value,...;arg=value,value,...]"
 msgstr ""
 
+#: ../roundup/pygettext.py:401
+#, python-format
+msgid "*** %(file)s:%(lineno)s: Seen unexpected token \"%(token)s\""
+msgstr ""
+
+#: ../roundup/pygettext.py:457
+#, python-format
+msgid "# File: %(filename)s, line: %(lineno)d"
+msgstr ""
+
+#: ../roundup/pygettext.py:464
+#, python-format
+msgid " %(filename)s:%(lineno)d"
+msgstr ""
+
+#: ../roundup/pygettext.py:540
+#, fuzzy, python-format
+msgid "Invalid value for --style: %s"
+msgstr "不正なリクエスト"
+
+#: ../roundup/pygettext.py:548
+#, python-format
+msgid "pygettext.py (xgettext for Python) %s"
+msgstr ""
+
+#: ../roundup/pygettext.py:554
+#, python-format
+msgid "--width argument must be an integer: %s"
+msgstr ""
+
+#: ../roundup/pygettext.py:582
+#, python-format
+msgid "Can't read --exclude-file: %s"
+msgstr ""
+
+#: ../roundup/pygettext.py:601
+msgid "Reading standard input"
+msgstr ""
+
+#: ../roundup/pygettext.py:606
+#, python-format
+msgid "Working on %s"
+msgstr ""
+
+#: ../roundup/pygettext.py:640
+msgid "a unicode string"
+msgstr ""
+
+#: ../roundup/pygettext.py:642
+#, python-format
+msgid "*** Seen unexpected token \"%(token)s\""
+msgstr ""
+
+#: ../roundup/pygettext.py:643
+msgid "morethanonestring"
+msgstr ""
+
 #: ../roundup/rest.py:410
 #, python-format
 msgid "Method %(m)s not allowed. Allowed: %(a)s"
@@ -2486,7 +2546,7 @@
 "%(acceptable_types)s"
 msgstr ""
 
-#: ../roundup/rest.py:2437
+#: ../roundup/rest.py:2441
 #, python-format
 msgid ""
 "Unrecognized api version: %s. See /rest without specifying api version for "
@@ -2587,24 +2647,33 @@
 "%(old)s"
 msgstr ""
 
-#: ../roundup/scripts/roundup_demo.py:151
-#, python-format
-msgid "Enter directory path to create demo tracker [%s]: "
-msgstr ""
-
-#: ../roundup/scripts/roundup_demo.py:170
+#: ../roundup/scripts/roundup_demo.py:50
 #, python-format
 msgid ""
 "Enter tracker template to use (one of (%(template_list)s)) "
 "[%(default_template)s]: "
 msgstr ""
 
-#: ../roundup/scripts/roundup_gettext.py:35
+#: ../roundup/scripts/roundup_demo.py:166
+#, python-format
+msgid "Enter directory path to create demo tracker [%s]: "
+msgstr ""
+
+#: ../roundup/scripts/roundup_gettext.py:33
+msgid ""
+"\n"
+"Extracting translatable strings only from html templates.\n"
+"Because the 'polib' module is missing, unable to extract\n"
+"translations from detectors or extensions.\n"
+"The 'polib' module can be installed with pip.\n"
+msgstr ""
+
+#: ../roundup/scripts/roundup_gettext.py:71
 #, python-format
 msgid "Usage: %(program)s <tracker home>"
 msgstr ""
 
-#: ../roundup/scripts/roundup_gettext.py:51
+#: ../roundup/scripts/roundup_gettext.py:89
 #, python-format
 msgid "No tracker templates found in directory %s"
 msgstr ""
--- a/locale/lt.po	Wed Aug 07 21:43:40 2024 -0400
+++ b/locale/lt.po	Wed Aug 07 21:52:58 2024 -0400
@@ -7,7 +7,7 @@
 msgstr ""
 "Project-Id-Version: Roundup 2.4.0\n"
 "Report-Msgid-Bugs-To: roundup-devel@lists.sourceforge.net\n"
-"POT-Creation-Date: 2024-07-09 15:12-0400\n"
+"POT-Creation-Date: 2024-08-07 21:43-0400\n"
 "PO-Revision-Date: 2013-10-31 12:21+0100\n"
 "Last-Translator: Nerijus Baliunas <nerijus@users.sourceforge.net>\n"
 "Language-Team: \n"
@@ -28,19 +28,19 @@
 msgid "You may not retire the admin or anonymous user"
 msgstr "Negalite deaktyvuoti administratoriaus ar anoniminio vartotojo"
 
-#: ../roundup/admin.py:130
+#: ../roundup/admin.py:131
 msgid ""
 "Have 'display designator[,designator*]' show header inside\n"
 "      []'s before items. Includes retired/active status.\n"
 msgstr ""
 
-#: ../roundup/admin.py:134
+#: ../roundup/admin.py:135
 msgid ""
 "Have 'display designator' and 'specification class' show\n"
 "      protected fields: creator, id etc.\n"
 msgstr ""
 
-#: ../roundup/admin.py:138
+#: ../roundup/admin.py:139
 msgid ""
 "Controls history options. It is a bitstring where setting\n"
 "      the bit disables the feature. A value of 0 (default)\n"
@@ -51,52 +51,52 @@
 "      history.\n"
 msgstr ""
 
-#: ../roundup/admin.py:147
+#: ../roundup/admin.py:148
 msgid ""
 "Set the number of lines of history to keep for this session.\n"
 "      -1 is infinite.\n"
 msgstr ""
 
-#: ../roundup/admin.py:151
+#: ../roundup/admin.py:152
 msgid "Set indexer to use when running 'reindex' NYI\n"
 msgstr ""
 
-#: ../roundup/admin.py:154
+#: ../roundup/admin.py:155
 msgid "Force reopening of tracker when running each command.\n"
 msgstr ""
 
-#: ../roundup/admin.py:157
+#: ../roundup/admin.py:158
 msgid ""
 "set the number of rows imported before a database commit is\n"
 "      done. Used only for imports on PostgreSQL.\n"
 msgstr ""
 
-#: ../roundup/admin.py:159
+#: ../roundup/admin.py:160
 msgid "Show retired items in table, list etc. One of 'no', 'only', 'both'\n"
 msgstr ""
 
-#: ../roundup/admin.py:161
-msgid "internal mapping for show_retired.\n"
-msgstr ""
-
 #: ../roundup/admin.py:162
+msgid "internal mapping for show_retired.\n"
+msgstr ""
+
+#: ../roundup/admin.py:163
 msgid "Enable verbose output: tracing, descriptions...\n"
 msgstr ""
 
 # ../roundup/admin.py:85 :962 :1011 :1033
-#: ../roundup/admin.py:174 ../roundup/admin.py:1179 ../roundup/admin.py:1824
-#: ../roundup/admin.py:1856 ../roundup/admin.py:174:1179 :1824:1856
+#: ../roundup/admin.py:175 ../roundup/admin.py:1188 ../roundup/admin.py:1836
+#: ../roundup/admin.py:1868 ../roundup/admin.py:175:1188 :1836:1868
 #, python-format
 msgid "no such class \"%(classname)s\""
 msgstr "nėra klasės \"%(classname)s\""
 
 # ../roundup/admin.py:95 :99
-#: ../roundup/admin.py:187
+#: ../roundup/admin.py:188
 #, python-format
 msgid "argument \"%(arg)s\" not propname=value"
 msgstr "argumentas \"%(arg)s\" nėra parinktis=reikšmė formato"
 
-#: ../roundup/admin.py:200
+#: ../roundup/admin.py:201
 #, python-format
 msgid ""
 "Problem: %(message)s\n"
@@ -105,7 +105,7 @@
 "Problema: %(message)s\n"
 "\n"
 
-#: ../roundup/admin.py:201
+#: ../roundup/admin.py:202
 #, fuzzy, python-format
 msgid ""
 "%(message)sUsage: roundup-admin [options] [<command> <arguments>]\n"
@@ -158,12 +158,12 @@
 " roundup-admin help <komanda>             -- specifinė pagalba komandoms\n"
 " roundup-admin help all                   -- visa įmanoma pagalba\n"
 
-#: ../roundup/admin.py:230
+#: ../roundup/admin.py:231
 #, fuzzy
 msgid "Commands: "
 msgstr "Komandos:"
 
-#: ../roundup/admin.py:237
+#: ../roundup/admin.py:238
 msgid ""
 "Commands may be abbreviated as long as the abbreviation\n"
 "matches only one command, e.g. l == li == lis == list."
@@ -171,7 +171,7 @@
 "Komandos gali būti sutrumpintos, tačiau sutrumpinimas turi atitikti tik\n"
 "vieną komandą, pvz. l == li == lis == list."
 
-#: ../roundup/admin.py:266
+#: ../roundup/admin.py:270
 #, fuzzy
 msgid ""
 "\n"
@@ -306,25 +306,25 @@
 "\n"
 "Komandų pagalba:\n"
 
-#: ../roundup/admin.py:330
+#: ../roundup/admin.py:334
 #, python-format
 msgid "%s:"
 msgstr "%s:"
 
 # ../roundup/admin.py:338 :387
-#: ../roundup/admin.py:435 ../roundup/admin.py:1384
-#: ../roundup/admin.py:435:1384
+#: ../roundup/admin.py:439 ../roundup/admin.py:1396
+#: ../roundup/admin.py:439:1396
 msgid "Templates:"
 msgstr "Šablonai:"
 
 # ../roundup/admin.py:341 :398
-#: ../roundup/admin.py:438 ../roundup/admin.py:1394
-#: ../roundup/admin.py:438:1394
+#: ../roundup/admin.py:442 ../roundup/admin.py:1406
+#: ../roundup/admin.py:442:1406
 msgid "Back ends:"
 msgstr "Duomenų saugyklos:"
 
 #. noqa: ARG002
-#: ../roundup/admin.py:455
+#: ../roundup/admin.py:459
 msgid ""
 "Usage: commit\n"
 "        Commit changes made to the database during an interactive session.\n"
@@ -349,7 +349,7 @@
 "            išsaugomos, jei jos įvykdomos sėkmingai.\n"
 "        "
 
-#: ../roundup/admin.py:470
+#: ../roundup/admin.py:474
 msgid ""
 "Usage: create classname property=value ...\n"
 "        Create a new entry of a given class.\n"
@@ -370,46 +370,45 @@
 
 # ../roundup/admin.py:360 :447 :508 :587 :637 :695 :716 :744 :815 :882 :953
 # :1001 :1023 :1050 :1117 :1184
-#: ../roundup/admin.py:478 ../roundup/admin.py:552 ../roundup/admin.py:600
-#: ../roundup/admin.py:723 ../roundup/admin.py:796 ../roundup/admin.py:842
-#: ../roundup/admin.py:893 ../roundup/admin.py:990 ../roundup/admin.py:1206
-#: ../roundup/admin.py:1357 ../roundup/admin.py:1485 ../roundup/admin.py:1571
-#: ../roundup/admin.py:1691 ../roundup/admin.py:1814 ../roundup/admin.py:1846
-#: ../roundup/admin.py:1962 ../roundup/admin.py:2016 ../roundup/admin.py:2064
-#: ../roundup/admin.py:478:552 :1206:1357:1485 :1571:1691 :1814:1846 :1962:2016
-#: :2064 :600:723 :796:842 :893:990
+#: ../roundup/admin.py:482 ../roundup/admin.py:555 ../roundup/admin.py:606
+#: ../roundup/admin.py:733 ../roundup/admin.py:806 ../roundup/admin.py:851
+#: ../roundup/admin.py:902 ../roundup/admin.py:999 ../roundup/admin.py:1216
+#: ../roundup/admin.py:1369 ../roundup/admin.py:1497 ../roundup/admin.py:1580
+#: ../roundup/admin.py:1703 ../roundup/admin.py:1826 ../roundup/admin.py:1858
+#: ../roundup/admin.py:1974 ../roundup/admin.py:2028 ../roundup/admin.py:2076
+#: ../roundup/admin.py:482:555 :1216:1369:1497 :1580:1703 :1826:1858 :1974:2028
+#: :2076 :606:733 :806:851 :902:999
 msgid "Not enough arguments supplied"
 msgstr "Paduota nepakankamai argumentų"
 
-#: ../roundup/admin.py:498
+#: ../roundup/admin.py:502
 #, python-format
 msgid "%(propname)s (Password): "
 msgstr "%(propname)s (Slaptažodis): "
 
-#: ../roundup/admin.py:501
+#: ../roundup/admin.py:505
 #, python-format
 msgid "   %(propname)s (Again): "
 msgstr "   %(propname)s (Pakartoti): "
 
-#: ../roundup/admin.py:505
+#: ../roundup/admin.py:509
 msgid "Sorry, try again..."
 msgstr "Bandykite dar kartą..."
 
-#: ../roundup/admin.py:510
+#: ../roundup/admin.py:514
 #, python-format
 msgid "%(propname)s (%(proptype)s): "
 msgstr "%(propname)s (%(proptype)s): "
 
-#: ../roundup/admin.py:529
+#: ../roundup/admin.py:533
 #, python-format
 msgid "you must provide the \"%(propname)s\" property."
 msgstr "turite pateikti parinktį \"%(propname)s\"."
 
-#: ../roundup/admin.py:541
+#: ../roundup/admin.py:545
 #, fuzzy
 msgid ""
 "Usage: display designator[,designator]*\n"
-"\n"
 "        Show the property values for the given node(s).\n"
 "\n"
 "        A designator is a classname and a nodeid concatenated,\n"
@@ -425,25 +424,29 @@
 "            Ši komanda išvardina parinktis ir jų reikšmes duotam elementui.\n"
 "        "
 
-#: ../roundup/admin.py:583
+#: ../roundup/admin.py:586
 #, fuzzy, python-format
 msgid "%(protected)s%(key)s: %(value)s"
 msgstr "%(key)s: %(value)s"
 
 #. grab the directory to export to
-#: ../roundup/admin.py:586
+#: ../roundup/admin.py:589
+#, fuzzy
 msgid ""
 "Usage: export [[-]class[,class]] export_dir\n"
-"        Export the database to colon-separated-value files.\n"
+"        Export the database and file content.\n"
+"\n"
+"        Database content is exported to colon separated files.\n"
 "        To exclude the files (e.g. for the msg or file class),\n"
 "        use the exporttables command.\n"
 "\n"
 "        Optionally limit the export to just the named classes\n"
-"        or exclude the named classes, if the 1st argument starts with '-'.\n"
+"        or exclude the named classes, if the 1st argument\n"
+"        starts with '-'.\n"
 "\n"
 "        This action exports the current data from the database into\n"
 "        colon-separated-value files that are placed in the nominated\n"
-"        destination directory.\n"
+"        export_dir directory.\n"
 "        "
 msgstr ""
 "Naudojimas: export [[-]klasė[,klasė]] eksporto_direktorija\n"
@@ -459,19 +462,23 @@
 "        direktorijoje.\n"
 "        "
 
-#: ../roundup/admin.py:698
+#: ../roundup/admin.py:704
+#, fuzzy
 msgid ""
 "Usage: exporttables [[-]class[,class]] export_dir\n"
-"        Export the database to colon-separated-value files, excluding the\n"
-"        files below $TRACKER_HOME/db/files/ (which can be archived "
-"separately).\n"
+"        Export only the database to files, no file content.\n"
+"\n"
+"        Database content is exported to colon separated files.\n"
+"        The files below $TRACKER_HOME/db/files/ (which can be\n"
+"        archived separately) are not part of the export.\n"
 "        To include the files, use the export command.\n"
 "\n"
 "        Optionally limit the export to just the named classes\n"
-"        or exclude the named classes, if the 1st argument starts with '-'.\n"
+"        or exclude the named classes, if the 1st argument\n"
+"        starts with '-'.\n"
 "\n"
 "        This action exports the current data from the database into\n"
-"        colon-separated-value files that are placed in the nominated\n"
+"        colon-separated-value files that are placed in the export_dir\n"
 "        destination directory.\n"
 "        "
 msgstr ""
@@ -489,7 +496,7 @@
 "        direktorijoje.\n"
 "        "
 
-#: ../roundup/admin.py:713
+#: ../roundup/admin.py:723
 #, fuzzy
 msgid ""
 "Usage: filter classname propname=value ...\n"
@@ -512,20 +519,20 @@
 "        "
 
 # ../roundup/admin.py:682 :835 :847 :901
-#: ../roundup/admin.py:754
+#: ../roundup/admin.py:764
 #, 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:781 ../roundup/admin.py:830 ../roundup/admin.py:1505
-#: ../roundup/admin.py:1518 ../roundup/admin.py:2086
-#: ../roundup/admin.py:781:830 :1505:1518:2086
+#: ../roundup/admin.py:791 ../roundup/admin.py:840 ../roundup/admin.py:1517
+#: ../roundup/admin.py:1530 ../roundup/admin.py:2098
+#: ../roundup/admin.py:791:840 :1517:1530:2098
 #, python-format
 msgid "%(classname)s has no property \"%(propname)s\""
 msgstr "%(classname)s neturi parinkties \"%(propname)s\""
 
-#: ../roundup/admin.py:788
+#: ../roundup/admin.py:798
 msgid ""
 "Usage: find classname propname=value ...\n"
 "        Find the nodes of the given class with a given link property value.\n"
@@ -544,12 +551,11 @@
 "            arba jo raktinė reikšmė.\n"
 "        "
 
-#: ../roundup/admin.py:837
+#: ../roundup/admin.py:847
 #, fuzzy
 msgid ""
-"Usage: genconfig <filename>\n"
-"        Generate a new tracker config file (ini style) with default\n"
-"        values in <filename>.\n"
+"Usage: genconfig filename\n"
+"        Create a new tracker config file with default values in filename.\n"
 "        "
 msgstr ""
 "Naudojimas: genconfig <failovardas>\n"
@@ -557,7 +563,7 @@
 "            įprastomis reikšmėmis faile <failovardas>.\n"
 "        "
 
-#: ../roundup/admin.py:855
+#: ../roundup/admin.py:864
 #, python-format
 msgid ""
 "Changing option\n"
@@ -565,20 +571,20 @@
 "from old default of %(old_number)s to new default of %(new_number)s."
 msgstr ""
 
-#: ../roundup/admin.py:866
+#: ../roundup/admin.py:875
 #, python-format
 msgid ""
 "Update 'password_pbkdf2_default_rounds' to a number equal to or larger\n"
 "  than %s.\n"
 msgstr ""
 
-#: ../roundup/admin.py:873
+#: ../roundup/admin.py:882
 msgid ""
 "Check the rdbms mysql_* settings. Your charset and collations may need\n"
 "  to be changed. See upgrading instructions.\n"
 msgstr ""
 
-#: ../roundup/admin.py:883
+#: ../roundup/admin.py:892
 #, fuzzy
 msgid ""
 "Usage: get property designator[,designator]*\n"
@@ -598,7 +604,7 @@
 "            "
 
 # ../roundup/admin.py:541 :556
-#: ../roundup/admin.py:916
+#: ../roundup/admin.py:925
 #, python-format
 msgid "property %s is not of type Multilink or Link so -d flag does not apply."
 msgstr ""
@@ -606,18 +612,18 @@
 "-d netinkamas."
 
 # ../roundup/admin.py:564 :964 :1013 :1035
-#: ../roundup/admin.py:933 ../roundup/admin.py:1181 ../roundup/admin.py:1858
-#: ../roundup/admin.py:933:1181:1858
+#: ../roundup/admin.py:942 ../roundup/admin.py:1190 ../roundup/admin.py:1842
+#: ../roundup/admin.py:1870 ../roundup/admin.py:942:1190 :1842:1870
 #, python-format
 msgid "no such %(classname)s node \"%(nodeid)s\""
 msgstr "nėra tokio %(classname)s elemento \"%(nodeid)s\""
 
-#: ../roundup/admin.py:936
+#: ../roundup/admin.py:945
 #, python-format
 msgid "no such %(classname)s property \"%(propname)s\""
 msgstr "nėra tokio %(classname)s parinkties \"%(propname)s\""
 
-#: ../roundup/admin.py:941
+#: ../roundup/admin.py:950
 msgid ""
 "Usage: help topic\n"
 "        Give help about topic.\n"
@@ -637,12 +643,12 @@
 "        all       -- visa įmanoma pagalba\n"
 "        "
 
-#: ../roundup/admin.py:960
+#: ../roundup/admin.py:969
 #, python-format
 msgid "Sorry, no help for \"%(topic)s\""
 msgstr "Atsiprašome, pagalbos temai \"%(topic)s\" nėra"
 
-#: ../roundup/admin.py:977
+#: ../roundup/admin.py:986
 #, fuzzy
 msgid ""
 "Usage: history designator [skipquiet] [raw]\n"
@@ -665,27 +671,27 @@
 "            kartą.\n"
 "        "
 
-#: ../roundup/admin.py:1002
+#: ../roundup/admin.py:1011
 #, python-format
 msgid "Unexpected argument(s): %s. Expected 'skipquiet' or 'raw'."
 msgstr ""
 
-#: ../roundup/admin.py:1053
+#: ../roundup/admin.py:1062
 #, fuzzy
 msgid "removed"
 msgstr "pašalinti"
 
-#: ../roundup/admin.py:1055
+#: ../roundup/admin.py:1064
 msgid "added"
 msgstr ""
 
-#: ../roundup/admin.py:1057
+#: ../roundup/admin.py:1066
 #, python-format
 msgid "Unknown history set operation '%s'. Expected +/-."
 msgstr ""
 
 #. .Hint added issue23 to superseder
-#: ../roundup/admin.py:1082
+#: ../roundup/admin.py:1091
 #, fuzzy, python-format
 msgid "added %(class)s%(item_id)s to %(propname)s"
 msgstr "%(class)s %(id)s %(properties)s pakeitimai išsaugoti"
@@ -693,34 +699,36 @@
 #. .Hint read as: assignedto was admin(1)
 #. where assignedto is the property
 #. admin is the key name for value 1
-#: ../roundup/admin.py:1103
+#: ../roundup/admin.py:1112
 #, fuzzy, python-format
 msgid "%(prop)s was %(name)s(%(value)s)"
 msgstr "%(propname)s (%(proptype)s): "
 
-#: ../roundup/admin.py:1109 ../roundup/admin.py:1138
-#: ../roundup/admin.py:1109:1138
+#: ../roundup/admin.py:1118 ../roundup/admin.py:1147
+#: ../roundup/admin.py:1118:1147
 #, fuzzy, python-format
 msgid "%(prop)s was %(value)s"
 msgstr "%(key)s: %(value)s"
 
-#: ../roundup/admin.py:1128
+#: ../roundup/admin.py:1137
 #, python-format
 msgid "%(prop)s was [%(value_list)s]"
 msgstr ""
 
 #. .Hint modified nosy: added demo(3)
-#: ../roundup/admin.py:1135
+#: ../roundup/admin.py:1144
 #, python-format
 msgid "modified %(prop)s: %(how)s"
 msgstr ""
 
-#: ../roundup/admin.py:1186
+#: ../roundup/admin.py:1195
+#, fuzzy
 msgid ""
 "Usage: import import_dir\n"
-"        Import a database from the directory containing CSV files,\n"
-"        two per class to import.\n"
-"\n"
+"        Import a database and file contents from the directory.\n"
+"\n"
+"        The directory should have the same format as one containing\n"
+"        the output of export. There are two files imported per class.\n"
 "        The files used in the import are:\n"
 "\n"
 "        <class>.csv\n"
@@ -760,16 +768,17 @@
 "            veiksmas).\n"
 "        "
 
-#: ../roundup/admin.py:1276
+#: ../roundup/admin.py:1287
 msgid ""
 "Usage: importtables export_dir\n"
-"\n"
 "        This imports the database tables exported using exporttables.\n"
+"\n"
+"        It does not import the content of files like msgs and files.\n"
 "        "
 msgstr ""
 
 #. password
-#: ../roundup/admin.py:1283
+#: ../roundup/admin.py:1295
 msgid ""
 "Usage: initialise [adminpw]\n"
 "        Initialise a new Roundup tracker.\n"
@@ -787,23 +796,23 @@
 "            Vykdyti tracker'io inicializacijos funkciją dbinit.init()\n"
 "        "
 
-#: ../roundup/admin.py:1297
+#: ../roundup/admin.py:1309
 msgid "Admin Password: "
 msgstr "Administratoriaus slaptažodis: "
 
-#: ../roundup/admin.py:1298
+#: ../roundup/admin.py:1310
 msgid "       Confirm: "
 msgstr "       Patvirtinkite: "
 
-#: ../roundup/admin.py:1302
+#: ../roundup/admin.py:1314
 msgid "Instance home does not exist"
 msgstr "Namų direktorija neegzistuoja"
 
-#: ../roundup/admin.py:1306
+#: ../roundup/admin.py:1318
 msgid "Instance has not been installed"
 msgstr "Egzempliorius nebuvo įdiegtas"
 
-#: ../roundup/admin.py:1314
+#: ../roundup/admin.py:1326
 msgid ""
 "WARNING: The database is already initialised!\n"
 "If you re-initialise it, you will lose all the data!\n"
@@ -813,7 +822,7 @@
 "Jei jūs ją inicializuosite dar kartą, prarasite visus duomenis!\n"
 "Ištrinti duomenų bazę? Y/N: "
 
-#: ../roundup/admin.py:1334
+#: ../roundup/admin.py:1346
 msgid ""
 "Usage: install [template [backend [key=val[,key=val]]]]\n"
 "        Install a new Roundup tracker.\n"
@@ -861,12 +870,12 @@
 "        Taip pat pažiūrėkite initopts pagalbą.\n"
 "        "
 
-#: ../roundup/admin.py:1363
+#: ../roundup/admin.py:1375
 #, python-format
 msgid "Instance home parent directory \"%(parent)s\" does not exist"
 msgstr "Namų direktorijos tėvinė direktorija \"%(parent)s\" neegzistuoja"
 
-#: ../roundup/admin.py:1372
+#: ../roundup/admin.py:1384
 #, python-format
 msgid ""
 "WARNING: There appears to be a tracker in \"%(tracker_home)s\"!\n"
@@ -877,22 +886,22 @@
 "Jei jūs jį perdiegsite, prarasite visus duomenis!\n"
 "Ištrinti jį? Y/N: "
 
-#: ../roundup/admin.py:1385
+#: ../roundup/admin.py:1397
 #, fuzzy
 msgid "Select template"
 msgstr "Pasirinkite šabloną [klasikinis]: "
 
-#: ../roundup/admin.py:1395
+#: ../roundup/admin.py:1407
 #, fuzzy
 msgid "Select backend"
 msgstr "Pasirinkite duomenų saugyklą [anydbm]: "
 
-#: ../roundup/admin.py:1406
+#: ../roundup/admin.py:1418
 #, python-format
 msgid "Error in configuration settings: \"%s\""
 msgstr "Klaida konfigūracijos nustatymuose: \"%s\""
 
-#: ../roundup/admin.py:1439
+#: ../roundup/admin.py:1451
 #, python-format
 msgid ""
 "\n"
@@ -905,11 +914,11 @@
 " Dabar jūs turėtumėte pakeisti tracker'io konfigūracijos failą:\n"
 "   %(config_file)s"
 
-#: ../roundup/admin.py:1449
+#: ../roundup/admin.py:1461
 msgid " ... at a minimum, you must set following options:"
 msgstr " ... mažiausiai turėtumėte nustalyti šias parinktis:"
 
-#: ../roundup/admin.py:1454
+#: ../roundup/admin.py:1466
 #, python-format
 msgid ""
 "\n"
@@ -938,7 +947,7 @@
 " aukščiau minėtus žingsnius.\n"
 "---------------------------------------------------------------------------\n"
 
-#: ../roundup/admin.py:1470
+#: ../roundup/admin.py:1482
 msgid ""
 "Usage: list classname [property]\n"
 "        List the instances of a class.\n"
@@ -966,20 +975,19 @@
 "            parinkties sąrašas kiekvienam klasės egzemplioriui.\n"
 "        "
 
-#: ../roundup/admin.py:1483
+#: ../roundup/admin.py:1495
 msgid "Too many arguments supplied"
 msgstr "Pateikta per daug argumentų"
 
-#: ../roundup/admin.py:1516
+#: ../roundup/admin.py:1528
 #, python-format
 msgid "%(nodeid)4s: %(value)s"
 msgstr "%(nodeid)4s: %(value)s"
 
 #. noqa: ARG002  - args unused
-#: ../roundup/admin.py:1523
+#: ../roundup/admin.py:1535
 msgid ""
 "Usage: migrate\n"
-"\n"
 "        Update a tracker's database to be compatible with the Roundup\n"
 "        codebase.\n"
 "\n"
@@ -1000,22 +1008,21 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1544
+#: ../roundup/admin.py:1555
 #, python-format
 msgid "Tracker updated to schema version %s."
 msgstr ""
 
-#: ../roundup/admin.py:1548
+#: ../roundup/admin.py:1559
 #, python-format
 msgid "No migration action required. At schema version %s."
 msgstr ""
 
-#: ../roundup/admin.py:1553
+#: ../roundup/admin.py:1564
+#, fuzzy
 msgid ""
 "Usage: pack period | date\n"
-"\n"
-"        Remove journal entries older than a period of time specified or\n"
-"        before a certain date.\n"
+"        Remove journal entries older than the date/period.\n"
 "\n"
 "        A period is specified using the suffixes \"y\", \"m\", and \"d\". "
 "The\n"
@@ -1049,15 +1056,16 @@
 "\n"
 "        "
 
-#: ../roundup/admin.py:1581
+#: ../roundup/admin.py:1590
 msgid "Invalid format"
 msgstr "Netinkamas formatas"
 
-#: ../roundup/admin.py:1592
+#: ../roundup/admin.py:1601
 msgid ""
 "Usage: perftest [mode] [arguments]*\n"
-"\n"
-"        Time operations in Roundup. Supported arguments:\n"
+"        Time operations in Roundup.\n"
+"\n"
+"        Supported arguments:\n"
 "\n"
 "            [password] [rounds=<integer>] [scheme=<scheme>]\n"
 "\n"
@@ -1070,28 +1078,30 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1625
+#: ../roundup/admin.py:1635
 msgid "Invalid 'rounds'. Must be larger than 999."
 msgstr ""
 
-#: ../roundup/admin.py:1629
+#: ../roundup/admin.py:1639
 #, python-format
 msgid "Invalid 'rounds'. It must be an integer not: %s"
 msgstr ""
 
-#: ../roundup/admin.py:1656
+#: ../roundup/admin.py:1666
 msgid "scheme does not support rounds."
 msgstr ""
 
-#: ../roundup/admin.py:1659
+#: ../roundup/admin.py:1669
 #, python-format
 msgid "Hash time: %(time)0.9f seconds, scheme: %(scheme)s, rounds: %(rounds)s"
 msgstr ""
 
-#: ../roundup/admin.py:1665
+#: ../roundup/admin.py:1675
 msgid ""
 "Usage: pragma setting=value | 'list'\n"
-"        Set internal admin settings to a value. E.G.\n"
+"        Set internal admin settings to a value.\n"
+"\n"
+"        For example:\n"
 "\n"
 "            pragma verbose=True\n"
 "            pragma verbose=yes\n"
@@ -1115,49 +1125,49 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1698
+#: ../roundup/admin.py:1710
 #, python-format
 msgid "Argument must be setting=value, was given: %s."
 msgstr ""
 
-#: ../roundup/admin.py:1701
+#: ../roundup/admin.py:1713
 msgid "Current settings and values (NYI - not yet implemented):"
 msgstr ""
 
-#: ../roundup/admin.py:1712
+#: ../roundup/admin.py:1724
 msgid ""
 "      Help for this pragma is missing. Please report it to the Roundup "
 "project.\n"
 msgstr ""
 
-#: ../roundup/admin.py:1718
+#: ../roundup/admin.py:1730
 #, fuzzy, python-format
 msgid "Unknown setting %s. Try \"pragma list\"."
 msgstr "Nežinomas vartotojo vardas"
 
-#: ../roundup/admin.py:1728
+#: ../roundup/admin.py:1740
 #, python-format
 msgid "Incorrect value for boolean setting %(setting)s: %(value)s."
 msgstr ""
 
-#: ../roundup/admin.py:1735
+#: ../roundup/admin.py:1747
 #, python-format
 msgid "Incorrect value for integer setting %(setting)s: %(value)s."
 msgstr ""
 
-#: ../roundup/admin.py:1742
+#: ../roundup/admin.py:1754
 #, python-format
 msgid ""
 "Incorrect value for setting %(setting)s: %(value)s. Should be no, both, or "
 "only."
 msgstr ""
 
-#: ../roundup/admin.py:1752
+#: ../roundup/admin.py:1764
 #, python-format
 msgid "Internal error: pragma can not handle values of type: %s"
 msgstr ""
 
-#: ../roundup/admin.py:1761
+#: ../roundup/admin.py:1773
 #, fuzzy
 msgid ""
 "Usage: reindex [classname|classname:#-#|designator]*\n"
@@ -1181,17 +1191,17 @@
 "            Paprastai tai įvyksta automatiškai.\n"
 "        "
 
-#: ../roundup/admin.py:1783
+#: ../roundup/admin.py:1795
 #, python-format
 msgid "no such item \"%(designator)s\""
 msgstr "nėra elemento \"%(designator)s\""
 
-#: ../roundup/admin.py:1793
+#: ../roundup/admin.py:1805
 #, fuzzy, python-format
 msgid "no such item \"%(class)s%(id)s\""
 msgstr "nėra elemento \"%(designator)s\""
 
-#: ../roundup/admin.py:1805
+#: ../roundup/admin.py:1817
 #, fuzzy
 msgid ""
 "Usage: restore designator[,designator]*\n"
@@ -1209,13 +1219,7 @@
 "            Duotas elementas vėl taps prieinamas vartotojams.\n"
 "        "
 
-# ../roundup/admin.py:564 :964 :1013 :1035
-#: ../roundup/admin.py:1830
-#, fuzzy
-msgid "no such %(classname)s node \"%(nodeid)s\""
-msgstr "nėra tokio %(classname)s elemento \"%(nodeid)s\""
-
-#: ../roundup/admin.py:1836
+#: ../roundup/admin.py:1848
 #, fuzzy
 msgid ""
 "Usage: retire designator[,designator]*\n"
@@ -1237,7 +1241,7 @@
 "        "
 
 #. noqa: ARG002 - args unused
-#: ../roundup/admin.py:1864
+#: ../roundup/admin.py:1876
 msgid ""
 "Usage: rollback\n"
 "        Undo all changes that are pending commit to the database.\n"
@@ -1259,60 +1263,60 @@
 "             nepadarys jokių pakeitimų duomenų bazėje.\n"
 "        "
 
-#: ../roundup/admin.py:1877
+#: ../roundup/admin.py:1889
 msgid ""
 "Usage: security [Role name]\n"
-"\n"
-"             Display the Permissions available to one or all Roles.\n"
-"             Also validates that any properties defined in a\n"
-"             permission are valid.\n"
-"\n"
-"             Run this after changing your permissions to catch\n"
-"             typos.\n"
+"        Display the Permissions available to one or all Roles.\n"
+"\n"
+"        Also validates that any properties defined in a\n"
+"        permission are valid.\n"
+"\n"
+"        Run this after changing your permissions to catch\n"
+"        typos.\n"
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1892
+#: ../roundup/admin.py:1904
 #, fuzzy, python-format
 msgid "No such Role \"%(role)s\"\n"
 msgstr "Nėra tokios rolės \"%(role)s\""
 
-#: ../roundup/admin.py:1898
+#: ../roundup/admin.py:1910
 #, 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:1901
+#: ../roundup/admin.py:1913
 #, fuzzy, python-format
 msgid "New Web users get the Role \"%(role)s\"\n"
 msgstr "Naujiems web vartotojams suteikiama rolė \"%(role)s\""
 
-#: ../roundup/admin.py:1905
+#: ../roundup/admin.py:1917
 #, 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:1907
+#: ../roundup/admin.py:1919
 #, 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:1910
+#: ../roundup/admin.py:1922
 #, fuzzy, python-format
 msgid "Role \"%(name)s\":\n"
 msgstr "Rolė \"%(name)s\":"
 
-#: ../roundup/admin.py:1916
+#: ../roundup/admin.py:1928
 #, fuzzy
 msgid " %(description)s (%(name)s for \"%(klass)s\""
 msgstr " %(description)s (%(name)s skirta tik \"%(klass)s\")"
 
-#: ../roundup/admin.py:1916
+#: ../roundup/admin.py:1928
 #, 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:1929
+#: ../roundup/admin.py:1941
 #, python-format
 msgid ""
 "\n"
@@ -1320,17 +1324,17 @@
 "\n"
 msgstr ""
 
-#: ../roundup/admin.py:1935
+#: ../roundup/admin.py:1947
 #, 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:1938
+#: ../roundup/admin.py:1950
 #, fuzzy, python-format
 msgid " %(description)s (%(name)s)\n"
 msgstr " %(description)s (%(name)s)"
 
-#: ../roundup/admin.py:1942
+#: ../roundup/admin.py:1954
 #, fuzzy
 msgid ""
 "Usage: set items property=value [property=value ...]\n"
@@ -1365,7 +1369,7 @@
 "            reikšmės (t.y. \"1,2,3\").\n"
 "        "
 
-#: ../roundup/admin.py:2010
+#: ../roundup/admin.py:2022
 msgid ""
 "Usage: specification classname\n"
 "        Show the properties for a classname.\n"
@@ -1379,17 +1383,17 @@
 "            Ši komanda išvardina duotos klasės parinktis.\n"
 "        "
 
-#: ../roundup/admin.py:2029
+#: ../roundup/admin.py:2041
 #, fuzzy, python-format
 msgid "%(key)s: %(value)s (key property)\n"
 msgstr "%(key)s: %(value)s (key property)"
 
-#: ../roundup/admin.py:2032
+#: ../roundup/admin.py:2044
 #, fuzzy, python-format
 msgid "%(key)s: %(value)s\n"
 msgstr "%(key)s: %(value)s"
 
-#: ../roundup/admin.py:2035
+#: ../roundup/admin.py:2047
 msgid ""
 "Usage: table classname [property[,property]*]\n"
 "        List the instances of a class in tabular form.\n"
@@ -1451,17 +1455,17 @@
 "            pateiks 4 simbolių ilgio \"Name\" stulpelį.\n"
 "        "
 
-#: ../roundup/admin.py:2081
+#: ../roundup/admin.py:2093
 #, python-format
 msgid "\"%(spec)s\" not name:width"
 msgstr "\"%(spec)s\" ne vardas:plotis"
 
-#: ../roundup/admin.py:2103
+#: ../roundup/admin.py:2115
 #, python-format
 msgid "\"%(spec)s\" does not have an integer width: \"%(width)s\""
 msgstr ""
 
-#: ../roundup/admin.py:2139
+#: ../roundup/admin.py:2151
 msgid ""
 "Usage: templates [trace_search]\n"
 "        List templates and their installed directories.\n"
@@ -1471,13 +1475,14 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:2167
+#: ../roundup/admin.py:2179
 #, fuzzy
 msgid ""
 "Usage: updateconfig <filename>\n"
-"        Generate an updated tracker config file (ini style) in\n"
-"        <filename>. Use current settings from existing roundup\n"
-"        tracker in tracker home.\n"
+"        Merge existing tracker config with new settings.\n"
+"\n"
+"        Output the updated config file to <filename>. Use current\n"
+"        settings from existing roundup tracker in tracker home.\n"
 "        "
 msgstr ""
 "Naudojimas: genconfig <failovardas>\n"
@@ -1486,36 +1491,36 @@
 "        "
 
 # ../roundup/cgi/actions.py:579 :590 :761 :780
-#: ../roundup/admin.py:2175 ../roundup/cgi/actions.py:886
+#: ../roundup/admin.py:2188 ../roundup/cgi/actions.py:886
 #: ../roundup/cgi/actions.py:897 ../roundup/cgi/actions.py:1099
 #: ../roundup/cgi/actions.py:1113 ../roundup/cgi/actions.py:886:897 :1099:1113
 #, python-format
 msgid "Error: %s"
 msgstr "Klaida: %s"
 
-#: ../roundup/admin.py:2207
+#: ../roundup/admin.py:2220
 #, 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:2213
+#: ../roundup/admin.py:2226
 #, python-format
 msgid "Multiple commands match \"%(command)s\": %(list)s"
 msgstr "Kelios komandos atitinka \"%(command)s\": %(list)s"
 
-#: ../roundup/admin.py:2228
+#: ../roundup/admin.py:2241
 msgid "Enter tracker home: "
 msgstr "Įveskite tracker'io namų direktoriją: "
 
-#: ../roundup/admin.py:2257 ../roundup/admin.py:2261
-#: ../roundup/admin.py:2257:2261
+#: ../roundup/admin.py:2270 ../roundup/admin.py:2274
+#: ../roundup/admin.py:2270:2274
 #, python-format
 msgid "Error: Couldn't open tracker: %(message)s"
 msgstr "Klaida: Negaliu atidaryti tracker'io: %(message)s"
 
-#: ../roundup/admin.py:2309
+#: ../roundup/admin.py:2322
 #, python-format
 msgid ""
 "Roundup %s ready for input.\n"
@@ -1524,15 +1529,15 @@
 "Roundup %s pasiruošęs priimti duomenis.\n"
 "Norėdami iškviesti pagalbą įveskite \"help\"."
 
-#: ../roundup/admin.py:2342
+#: ../roundup/admin.py:2355
 msgid "Note: command history and editing not available"
 msgstr "Pastaba: komandų archyvas ir redagavimas neprieinami"
 
-#: ../roundup/admin.py:2348
+#: ../roundup/admin.py:2361
 msgid "exit..."
 msgstr "išeiti..."
 
-#: ../roundup/admin.py:2361
+#: ../roundup/admin.py:2374
 msgid "There are unsaved changes. Commit them (y/N)? "
 msgstr "Yra neišsaugotų pakeitimų. Išsaugoti juos (y/N)? "
 
@@ -2069,7 +2074,7 @@
 msgid "<em>undefined</em>"
 msgstr "<em>neapibrėžta</em>"
 
-#: ../roundup/cgi/client.py:90
+#: ../roundup/cgi/client.py:105
 msgid ""
 "<html><head><title>An error has occurred</title></head>\n"
 "<body><h1>An error has occurred</h1>\n"
@@ -2083,150 +2088,150 @@
 "Apie klaidą pranešėme tracker'io administratoriui.</p>\n"
 "</body></html>"
 
-#: ../roundup/cgi/client.py:702 ../roundup/cgi/client.py:1622
-#: ../roundup/cgi/client.py:702:1622
+#: ../roundup/cgi/client.py:717 ../roundup/cgi/client.py:1635
+#: ../roundup/cgi/client.py:717:1635
 msgid "Required Header Missing"
 msgstr ""
 
-#: ../roundup/cgi/client.py:704
+#: ../roundup/cgi/client.py:719
 #, fuzzy
 msgid "Client is not allowed to use Rest Interface."
 msgstr "Anoniminiai vartotojai neturi teisių naudoti web interfeisą"
 
-#: ../roundup/cgi/client.py:956
+#: ../roundup/cgi/client.py:971
 msgid "Form Error: "
 msgstr "Formos klaida: "
 
-#: ../roundup/cgi/client.py:1049
+#: ../roundup/cgi/client.py:1064
 #, python-format
 msgid "Unrecognized charset: %r"
 msgstr "Neatpažinta koduotė: %r"
 
-#: ../roundup/cgi/client.py:1318 ../roundup/cgi/client.py:2281
-#: ../roundup/cgi/client.py:1318:2281
+#: ../roundup/cgi/client.py:1331 ../roundup/cgi/client.py:2294
+#: ../roundup/cgi/client.py:1331:2294
 msgid "broken form: multiple @action values submitted"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1335
+#: ../roundup/cgi/client.py:1348
 msgid "Anonymous users are not allowed to use the web interface"
 msgstr "Anoniminiai vartotojai neturi teisių naudoti web interfeisą"
 
-#: ../roundup/cgi/client.py:1483
+#: ../roundup/cgi/client.py:1496
 msgid "Referer header not available."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1487
+#: ../roundup/cgi/client.py:1500
 #, python-format
 msgid "csrf key used with wrong method from: %s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1516
+#: ../roundup/cgi/client.py:1529
 #, python-format
 msgid "csrf header %(header)s required but missing for user%(userid)s."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1520
+#: ../roundup/cgi/client.py:1533
 #, python-format
 msgid "Missing header: %s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1528
+#: ../roundup/cgi/client.py:1541
 #, 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:1533
+#: ../roundup/cgi/client.py:1546
 #, fuzzy, python-format
 msgid "Invalid Referer: %s"
 msgstr "Neteisingas vartotojo vardas ar slaptažodis"
 
-#: ../roundup/cgi/client.py:1548
+#: ../roundup/cgi/client.py:1561
 #, 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:1553
+#: ../roundup/cgi/client.py:1566
 #, fuzzy, python-format
 msgid "Invalid Origin %s"
 msgstr "Neteisingas vartotojo vardas ar slaptažodis"
 
-#: ../roundup/cgi/client.py:1567
+#: ../roundup/cgi/client.py:1580
 #, python-format
 msgid ""
 "csrf X-FORWARDED-HOST header check failed for user%(userid)s. Value=%(host)s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1573
+#: ../roundup/cgi/client.py:1586
 #, python-format
 msgid "Invalid X-FORWARDED-HOST %s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1592
-#, python-format
-msgid "csrf HOST header check failed for user%(userid)s. Value=%(host)s"
-msgstr ""
-
-#: ../roundup/cgi/client.py:1597
-#, python-format
-msgid "Invalid HOST %s"
-msgstr ""
-
 #: ../roundup/cgi/client.py:1605
+#, python-format
+msgid "csrf HOST header check failed for user%(userid)s. Value=%(host)s"
+msgstr ""
+
+#: ../roundup/cgi/client.py:1610
+#, python-format
+msgid "Invalid HOST %s"
+msgstr ""
+
+#: ../roundup/cgi/client.py:1618
 msgid "Csrf: unable to verify sufficient headers"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1606
-msgid "Unable to verify sufficient headers"
-msgstr ""
-
 #: ../roundup/cgi/client.py:1619
+msgid "Unable to verify sufficient headers"
+msgstr ""
+
+#: ../roundup/cgi/client.py:1632
 #, python-format
 msgid "csrf X-REQUESTED-WITH xmlrpc required header check failed for user%s."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1660
+#: ../roundup/cgi/client.py:1673
 #, python-format
 msgid "Required csrf field missing for user%s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1662 ../roundup/cgi/client.py:1689
-#: ../roundup/cgi/client.py:1706 ../roundup/cgi/client.py:1662:1689:1706
+#: ../roundup/cgi/client.py:1675 ../roundup/cgi/client.py:1702
+#: ../roundup/cgi/client.py:1719 ../roundup/cgi/client.py:1675:1702:1719
 msgid ""
 "We can't validate your session (csrf failure). Re-enter any unsaved data and "
 "try again."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1666
+#: ../roundup/cgi/client.py:1679
 #, python-format
 msgid "csrf field not supplied by user%s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1678
+#: ../roundup/cgi/client.py:1691
 #, 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:1696
+#: ../roundup/cgi/client.py:1709
 #, 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:1888
+#: ../roundup/cgi/client.py:1901
 msgid "You are not allowed to view this file."
 msgstr "Jūs neturite teisių žiūrėti šį failą."
 
-#: ../roundup/cgi/client.py:2159
+#: ../roundup/cgi/client.py:2172
 #, 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:2163
+#: ../roundup/cgi/client.py:2176
 #, python-format
 msgid ""
 "%(starttag)sCache hits: %(cache_hits)d, misses %(cache_misses)d. Loading "
@@ -2236,7 +2241,7 @@
 "%(cache_misses)d. Įkeliami elementai: %(get_items)f sek. Filtruojama: "
 "%(filtering)f sek.%(endtag)s\n"
 
-#: ../roundup/cgi/client.py:2703
+#: ../roundup/cgi/client.py:2716
 #, python-format
 msgid ""
 "Cache failure: compressed file %(compressed)s is older than its source file "
@@ -2300,121 +2305,121 @@
 msgstr[1] "Reikalingos %(class)s parinktys %(property)s nepateiktos"
 msgstr[2] "Reikalingos %(class)s parinktys %(property)s nepateiktos"
 
-#: ../roundup/cgi/templating.py:277
+#: ../roundup/cgi/templating.py:278
 #, python-format
 msgid "You are not allowed to %(action)s items of class %(class)s"
 msgstr ""
 "Jūs negalite atlikti komandos %(action)s su klasės %(class)s elementais"
 
-#: ../roundup/cgi/templating.py:914
+#: ../roundup/cgi/templating.py:916
 msgid "(list)"
 msgstr "(list)"
 
-#: ../roundup/cgi/templating.py:989
+#: ../roundup/cgi/templating.py:991
 msgid "Submit New Entry"
 msgstr "Įvesti naują įrašą"
 
 # ../roundup/cgi/templating.py:700 :819 :1193 :1214 :1258 :1280 :1314 :1353
 # :1404 :1421 :1497 :1517 :1530 :1547 :1557 :1607 :1794
-#: ../roundup/cgi/templating.py:1011 ../roundup/cgi/templating.py:1187
-#: ../roundup/cgi/templating.py:1822 ../roundup/cgi/templating.py:1853
-#: ../roundup/cgi/templating.py:1874 ../roundup/cgi/templating.py:1912
-#: ../roundup/cgi/templating.py:1965 ../roundup/cgi/templating.py:1989
-#: ../roundup/cgi/templating.py:1996 ../roundup/cgi/templating.py:2033
-#: ../roundup/cgi/templating.py:2086 ../roundup/cgi/templating.py:2119
-#: ../roundup/cgi/templating.py:2214 ../roundup/cgi/templating.py:2235
-#: ../roundup/cgi/templating.py:2326 ../roundup/cgi/templating.py:2346
-#: ../roundup/cgi/templating.py:2368 ../roundup/cgi/templating.py:2411
-#: ../roundup/cgi/templating.py:2421 ../roundup/cgi/templating.py:2486
-#: ../roundup/cgi/templating.py:2789 ../roundup/cgi/templating.py:1011:1187
-#: :1822:1853 :1874:1912 :1965:1989 :1996:2033 :2086:2119 :2214:2235 :2326:2346
-#: :2368:2411 :2421:2486:2789
+#: ../roundup/cgi/templating.py:1013 ../roundup/cgi/templating.py:1189
+#: ../roundup/cgi/templating.py:1824 ../roundup/cgi/templating.py:1855
+#: ../roundup/cgi/templating.py:1876 ../roundup/cgi/templating.py:1914
+#: ../roundup/cgi/templating.py:1967 ../roundup/cgi/templating.py:1991
+#: ../roundup/cgi/templating.py:1998 ../roundup/cgi/templating.py:2035
+#: ../roundup/cgi/templating.py:2088 ../roundup/cgi/templating.py:2121
+#: ../roundup/cgi/templating.py:2216 ../roundup/cgi/templating.py:2237
+#: ../roundup/cgi/templating.py:2328 ../roundup/cgi/templating.py:2348
+#: ../roundup/cgi/templating.py:2370 ../roundup/cgi/templating.py:2413
+#: ../roundup/cgi/templating.py:2423 ../roundup/cgi/templating.py:2488
+#: ../roundup/cgi/templating.py:2791 ../roundup/cgi/templating.py:1013:1189
+#: :1824:1855 :1876:1914 :1967:1991 :1998:2035 :2088:2121 :2216:2237 :2328:2348
+#: :2370:2413 :2423:2488:2791
 msgid "[hidden]"
 msgstr "[paslėpta]"
 
-#: ../roundup/cgi/templating.py:1012
+#: ../roundup/cgi/templating.py:1014
 msgid "New node - no history"
 msgstr "Naujas elementas -- nėra istorijos"
 
-#: ../roundup/cgi/templating.py:1152
+#: ../roundup/cgi/templating.py:1154
 msgid "Submit Changes"
 msgstr "Išsaugoti pakeitimus"
 
-#: ../roundup/cgi/templating.py:1230
+#: ../roundup/cgi/templating.py:1232
 msgid "<em>The indicated property no longer exists</em>"
 msgstr "<em>Nurodytos parinkties nėra</em>"
 
-#: ../roundup/cgi/templating.py:1266
+#: ../roundup/cgi/templating.py:1268
 #, python-format
 msgid "The linked class %(classname)s no longer exists"
 msgstr "Susietos klasės %(classname)s nebėra"
 
-#: ../roundup/cgi/templating.py:1303 ../roundup/cgi/templating.py:1333
-#: ../roundup/cgi/templating.py:2495 ../roundup/cgi/templating.py:2798
-#: ../roundup/cgi/templating.py:1303:1333 :2495:2798
+#: ../roundup/cgi/templating.py:1305 ../roundup/cgi/templating.py:1335
+#: ../roundup/cgi/templating.py:2497 ../roundup/cgi/templating.py:2800
+#: ../roundup/cgi/templating.py:1305:1335 :2497:2800
 msgid "[label is missing]"
 msgstr ""
 
 # ../roundup/cgi/templating.py:930 :951
-#: ../roundup/cgi/templating.py:1307 ../roundup/cgi/templating.py:1336
-#: ../roundup/cgi/templating.py:1307:1336
+#: ../roundup/cgi/templating.py:1309 ../roundup/cgi/templating.py:1338
+#: ../roundup/cgi/templating.py:1309:1338
 msgid "<strike>The linked node no longer exists</strike>"
 msgstr "<strike>Susieto elemento nebėra</strike>"
 
-#: ../roundup/cgi/templating.py:1398
+#: ../roundup/cgi/templating.py:1400
 #, python-format
 msgid "%s: (no value)"
 msgstr "%s: (no value)"
 
-#: ../roundup/cgi/templating.py:1414
+#: ../roundup/cgi/templating.py:1416
 #, fuzzy, python-format
 msgid ""
 "<strong><em>This event %s is not handled by the history display!</em></"
 "strong>"
 msgstr "<strong><em>Šis įvykis nėra rodomas archyve!</em></strong>"
 
-#: ../roundup/cgi/templating.py:1427
+#: ../roundup/cgi/templating.py:1429
 msgid "<tr><td colspan=4><strong>Note:</strong></td></tr>"
 msgstr "<tr><td colspan=4><strong>Pastaba:</strong></td></tr>"
 
-#: ../roundup/cgi/templating.py:1436
+#: ../roundup/cgi/templating.py:1438
 msgid "History"
 msgstr "Archyvas"
 
-#: ../roundup/cgi/templating.py:1438
+#: ../roundup/cgi/templating.py:1440
 msgid "<th>Date</th>"
 msgstr "<th>Data</th>"
 
-#: ../roundup/cgi/templating.py:1439
+#: ../roundup/cgi/templating.py:1441
 msgid "<th>User</th>"
 msgstr "<th>Vartotojas</th>"
 
-#: ../roundup/cgi/templating.py:1440
+#: ../roundup/cgi/templating.py:1442
 msgid "<th>Action</th>"
 msgstr "<th>Veiksmas</th>"
 
-#: ../roundup/cgi/templating.py:1441
+#: ../roundup/cgi/templating.py:1443
 msgid "<th>Args</th>"
 msgstr "<th>Argumentai</th>"
 
-#: ../roundup/cgi/templating.py:1492
+#: ../roundup/cgi/templating.py:1494
 #, python-format
 msgid "Copy of %(class)s %(id)s"
 msgstr "%(class)s %(id)s kopija"
 
 # ../roundup/cgi/templating.py:993 :1357 :1378 :1384
-#: ../roundup/cgi/templating.py:2123 ../roundup/cgi/templating.py:2158
-#: ../roundup/cgi/templating.py:1380:2123:2158
+#: ../roundup/cgi/templating.py:2125 ../roundup/cgi/templating.py:2160
+#: ../roundup/cgi/templating.py:1382:2125:2160
 msgid "No"
 msgstr "Ne"
 
 # ../roundup/cgi/templating.py:993 :1357 :1376 :1381
-#: ../roundup/cgi/templating.py:2123 ../roundup/cgi/templating.py:2152
-#: ../roundup/cgi/templating.py:1380:2123:2152
+#: ../roundup/cgi/templating.py:2125 ../roundup/cgi/templating.py:2154
+#: ../roundup/cgi/templating.py:1382:2125:2154
 msgid "Yes"
 msgstr "Taip"
 
-#: ../roundup/cgi/templating.py:2284
+#: ../roundup/cgi/templating.py:2286
 msgid ""
 "default value for DateHTMLProperty must be either DateHTMLProperty or string "
 "date representation."
@@ -2422,27 +2427,27 @@
 "standartinė DateHTMLProperty reikšmė turi būti arba DateHTMLProperty arba "
 "datos reprezentacija kaip simbolių eilutės."
 
-#: ../roundup/cgi/templating.py:2466
+#: ../roundup/cgi/templating.py:2468
 #, python-format
 msgid "Attempt to look up %(attr)s on a missing value"
 msgstr "Bandėte pažiūrėti %(attr)s neegzistuojančiai reikšmei"
 
-#: ../roundup/cgi/templating.py:2477
+#: ../roundup/cgi/templating.py:2479
 #, fuzzy, python-format
 msgid "Attempt to look up %(item)s on a missing value"
 msgstr "Bandėte pažiūrėti %(attr)s neegzistuojančiai reikšmei"
 
-#: ../roundup/cgi/templating.py:2582
+#: ../roundup/cgi/templating.py:2584
 #, python-format
 msgid "<option %svalue=\"-1\">- no selection -</option>"
 msgstr "<option %svalue=\"-1\">- nepasirinkta -</option>"
 
-#: ../roundup/cgi/templating.py:3743
+#: ../roundup/cgi/templating.py:3745
 #, python-format
 msgid "Unable to read or expand file '%(name)s' in template '%(template)s'."
 msgstr ""
 
-#: ../roundup/cgi/templating.py:3793
+#: ../roundup/cgi/templating.py:3795
 #, python-format
 msgid ""
 "Found an incorrect token when expandfile applied string subsitution on "
@@ -2974,6 +2979,64 @@
 msgid "not of form [arg=value,value,...;arg=value,value,...]"
 msgstr "ne tokios formos: [arg=reikšmė,reikšmė,...;arg=reikšmė,reikšmė,...]"
 
+#: ../roundup/pygettext.py:401
+#, python-format
+msgid "*** %(file)s:%(lineno)s: Seen unexpected token \"%(token)s\""
+msgstr ""
+
+#: ../roundup/pygettext.py:457
+#, python-format
+msgid "# File: %(filename)s, line: %(lineno)d"
+msgstr ""
+
+#: ../roundup/pygettext.py:464
+#, python-format
+msgid " %(filename)s:%(lineno)d"
+msgstr ""
+
+# ../roundup/cgi/actions.py:897 :901
+#: ../roundup/pygettext.py:540
+#, fuzzy, python-format
+msgid "Invalid value for --style: %s"
+msgstr "Neteisingas vartotojo vardas ar slaptažodis"
+
+#: ../roundup/pygettext.py:548
+#, python-format
+msgid "pygettext.py (xgettext for Python) %s"
+msgstr ""
+
+#: ../roundup/pygettext.py:554
+#, python-format
+msgid "--width argument must be an integer: %s"
+msgstr ""
+
+#: ../roundup/pygettext.py:582
+#, python-format
+msgid "Can't read --exclude-file: %s"
+msgstr ""
+
+#: ../roundup/pygettext.py:601
+msgid "Reading standard input"
+msgstr ""
+
+#: ../roundup/pygettext.py:606
+#, python-format
+msgid "Working on %s"
+msgstr ""
+
+#: ../roundup/pygettext.py:640
+msgid "a unicode string"
+msgstr ""
+
+#: ../roundup/pygettext.py:642
+#, python-format
+msgid "*** Seen unexpected token \"%(token)s\""
+msgstr ""
+
+#: ../roundup/pygettext.py:643
+msgid "morethanonestring"
+msgstr ""
+
 #: ../roundup/rest.py:410
 #, python-format
 msgid "Method %(m)s not allowed. Allowed: %(a)s"
@@ -3004,7 +3067,7 @@
 "%(acceptable_types)s"
 msgstr ""
 
-#: ../roundup/rest.py:2437
+#: ../roundup/rest.py:2441
 #, python-format
 msgid ""
 "Unrecognized api version: %s. See /rest without specifying api version for "
@@ -3111,24 +3174,33 @@
 "Buvo:\n"
 "%s"
 
-#: ../roundup/scripts/roundup_demo.py:151
-#, python-format
-msgid "Enter directory path to create demo tracker [%s]: "
-msgstr "Įveskite kelią į direktoriją demo track'erio sukūrimui [%s]: "
-
-#: ../roundup/scripts/roundup_demo.py:170
+#: ../roundup/scripts/roundup_demo.py:50
 #, python-format
 msgid ""
 "Enter tracker template to use (one of (%(template_list)s)) "
 "[%(default_template)s]: "
 msgstr ""
 
-#: ../roundup/scripts/roundup_gettext.py:35
+#: ../roundup/scripts/roundup_demo.py:166
+#, python-format
+msgid "Enter directory path to create demo tracker [%s]: "
+msgstr "Įveskite kelią į direktoriją demo track'erio sukūrimui [%s]: "
+
+#: ../roundup/scripts/roundup_gettext.py:33
+msgid ""
+"\n"
+"Extracting translatable strings only from html templates.\n"
+"Because the 'polib' module is missing, unable to extract\n"
+"translations from detectors or extensions.\n"
+"The 'polib' module can be installed with pip.\n"
+msgstr ""
+
+#: ../roundup/scripts/roundup_gettext.py:71
 #, python-format
 msgid "Usage: %(program)s <tracker home>"
 msgstr "Naudojimas: %(program)s <tracker'io namų direktorija>"
 
-#: ../roundup/scripts/roundup_gettext.py:51
+#: ../roundup/scripts/roundup_gettext.py:89
 #, python-format
 msgid "No tracker templates found in directory %s"
 msgstr "Direktorijoje %s nėra tracker'io šablonų"
--- a/locale/nb.po	Wed Aug 07 21:43:40 2024 -0400
+++ b/locale/nb.po	Wed Aug 07 21:52:58 2024 -0400
@@ -7,7 +7,7 @@
 msgstr ""
 "Project-Id-Version: Roundup 2.4.0\n"
 "Report-Msgid-Bugs-To: roundup-devel@lists.sourceforge.net\n"
-"POT-Creation-Date: 2024-07-09 15:12-0400\n"
+"POT-Creation-Date: 2024-08-07 21:43-0400\n"
 "PO-Revision-Date: 2013-10-31 12:21+0100\n"
 "Last-Translator: Christian Aastorp <christian.aastorp@gmail.com>\n"
 "Language-Team: Norwegian Bokmal <LL@li.org>\n"
@@ -30,19 +30,19 @@
 msgid "You may not retire the admin or anonymous user"
 msgstr "Du kan ikke slette admin eller anonymous brukerne"
 
-#: ../roundup/admin.py:130
+#: ../roundup/admin.py:131
 msgid ""
 "Have 'display designator[,designator*]' show header inside\n"
 "      []'s before items. Includes retired/active status.\n"
 msgstr ""
 
-#: ../roundup/admin.py:134
+#: ../roundup/admin.py:135
 msgid ""
 "Have 'display designator' and 'specification class' show\n"
 "      protected fields: creator, id etc.\n"
 msgstr ""
 
-#: ../roundup/admin.py:138
+#: ../roundup/admin.py:139
 msgid ""
 "Controls history options. It is a bitstring where setting\n"
 "      the bit disables the feature. A value of 0 (default)\n"
@@ -53,50 +53,50 @@
 "      history.\n"
 msgstr ""
 
-#: ../roundup/admin.py:147
+#: ../roundup/admin.py:148
 msgid ""
 "Set the number of lines of history to keep for this session.\n"
 "      -1 is infinite.\n"
 msgstr ""
 
-#: ../roundup/admin.py:151
+#: ../roundup/admin.py:152
 msgid "Set indexer to use when running 'reindex' NYI\n"
 msgstr ""
 
-#: ../roundup/admin.py:154
+#: ../roundup/admin.py:155
 msgid "Force reopening of tracker when running each command.\n"
 msgstr ""
 
-#: ../roundup/admin.py:157
+#: ../roundup/admin.py:158
 msgid ""
 "set the number of rows imported before a database commit is\n"
 "      done. Used only for imports on PostgreSQL.\n"
 msgstr ""
 
-#: ../roundup/admin.py:159
+#: ../roundup/admin.py:160
 msgid "Show retired items in table, list etc. One of 'no', 'only', 'both'\n"
 msgstr ""
 
-#: ../roundup/admin.py:161
-msgid "internal mapping for show_retired.\n"
-msgstr ""
-
 #: ../roundup/admin.py:162
+msgid "internal mapping for show_retired.\n"
+msgstr ""
+
+#: ../roundup/admin.py:163
 msgid "Enable verbose output: tracing, descriptions...\n"
 msgstr ""
 
-#: ../roundup/admin.py:174 ../roundup/admin.py:1179 ../roundup/admin.py:1824
-#: ../roundup/admin.py:1856 ../roundup/admin.py:174:1179 :1824:1856
+#: ../roundup/admin.py:175 ../roundup/admin.py:1188 ../roundup/admin.py:1836
+#: ../roundup/admin.py:1868 ../roundup/admin.py:175:1188 :1836:1868
 #, python-format
 msgid "no such class \"%(classname)s\""
 msgstr "ingen slik klasse \"%(classname)s\""
 
-#: ../roundup/admin.py:187
+#: ../roundup/admin.py:188
 #, python-format
 msgid "argument \"%(arg)s\" not propname=value"
 msgstr "argumentet \"%(arg)s\" ikke propname=value"
 
-#: ../roundup/admin.py:200
+#: ../roundup/admin.py:201
 #, python-format
 msgid ""
 "Problem: %(message)s\n"
@@ -105,7 +105,7 @@
 "Problem: %(message)s\n"
 "\n"
 
-#: ../roundup/admin.py:201
+#: ../roundup/admin.py:202
 #, fuzzy, python-format
 msgid ""
 "%(message)sUsage: roundup-admin [options] [<command> <arguments>]\n"
@@ -158,12 +158,12 @@
 " roundup-admin help <command>             -- kommandospesifikk hjelp\n"
 " roundup-admin help all                   -- all tilgjengelig hjelp\n"
 
-#: ../roundup/admin.py:230
+#: ../roundup/admin.py:231
 #, fuzzy
 msgid "Commands: "
 msgstr "Kommandoer:"
 
-#: ../roundup/admin.py:237
+#: ../roundup/admin.py:238
 msgid ""
 "Commands may be abbreviated as long as the abbreviation\n"
 "matches only one command, e.g. l == li == lis == list."
@@ -171,7 +171,7 @@
 "Kommandoer kan forkortes så lenge som forkortelsen bare passer med en "
 "kommando, feks e.g. l == li == lis == list."
 
-#: ../roundup/admin.py:266
+#: ../roundup/admin.py:270
 #, fuzzy
 msgid ""
 "\n"
@@ -309,23 +309,23 @@
 "\n"
 "Kommandohjelp:\n"
 
-#: ../roundup/admin.py:330
+#: ../roundup/admin.py:334
 #, python-format
 msgid "%s:"
 msgstr "%s:"
 
-#: ../roundup/admin.py:435 ../roundup/admin.py:1384
-#: ../roundup/admin.py:435:1384
+#: ../roundup/admin.py:439 ../roundup/admin.py:1396
+#: ../roundup/admin.py:439:1396
 msgid "Templates:"
 msgstr "Maler:"
 
-#: ../roundup/admin.py:438 ../roundup/admin.py:1394
-#: ../roundup/admin.py:438:1394
+#: ../roundup/admin.py:442 ../roundup/admin.py:1406
+#: ../roundup/admin.py:442:1406
 msgid "Back ends:"
 msgstr "Back ends:"
 
 #. noqa: ARG002
-#: ../roundup/admin.py:455
+#: ../roundup/admin.py:459
 msgid ""
 "Usage: commit\n"
 "        Commit changes made to the database during an interactive session.\n"
@@ -348,7 +348,7 @@
 "         permanent, hvis de lykkes.\n"
 "        "
 
-#: ../roundup/admin.py:470
+#: ../roundup/admin.py:474
 msgid ""
 "Usage: create classname property=value ...\n"
 "        Create a new entry of a given class.\n"
@@ -366,46 +366,45 @@
 "        på kommandolinjen ette \"create\"kommandoen.\n"
 "        "
 
-#: ../roundup/admin.py:478 ../roundup/admin.py:552 ../roundup/admin.py:600
-#: ../roundup/admin.py:723 ../roundup/admin.py:796 ../roundup/admin.py:842
-#: ../roundup/admin.py:893 ../roundup/admin.py:990 ../roundup/admin.py:1206
-#: ../roundup/admin.py:1357 ../roundup/admin.py:1485 ../roundup/admin.py:1571
-#: ../roundup/admin.py:1691 ../roundup/admin.py:1814 ../roundup/admin.py:1846
-#: ../roundup/admin.py:1962 ../roundup/admin.py:2016 ../roundup/admin.py:2064
-#: ../roundup/admin.py:478:552 :1206:1357:1485 :1571:1691 :1814:1846 :1962:2016
-#: :2064 :600:723 :796:842 :893:990
+#: ../roundup/admin.py:482 ../roundup/admin.py:555 ../roundup/admin.py:606
+#: ../roundup/admin.py:733 ../roundup/admin.py:806 ../roundup/admin.py:851
+#: ../roundup/admin.py:902 ../roundup/admin.py:999 ../roundup/admin.py:1216
+#: ../roundup/admin.py:1369 ../roundup/admin.py:1497 ../roundup/admin.py:1580
+#: ../roundup/admin.py:1703 ../roundup/admin.py:1826 ../roundup/admin.py:1858
+#: ../roundup/admin.py:1974 ../roundup/admin.py:2028 ../roundup/admin.py:2076
+#: ../roundup/admin.py:482:555 :1216:1369:1497 :1580:1703 :1826:1858 :1974:2028
+#: :2076 :606:733 :806:851 :902:999
 msgid "Not enough arguments supplied"
 msgstr "For få parametre"
 
-#: ../roundup/admin.py:498
+#: ../roundup/admin.py:502
 #, python-format
 msgid "%(propname)s (Password): "
 msgstr "%(propname)s (Password): "
 
-#: ../roundup/admin.py:501
+#: ../roundup/admin.py:505
 #, python-format
 msgid "   %(propname)s (Again): "
 msgstr "   %(propname)s (Again): "
 
-#: ../roundup/admin.py:505
+#: ../roundup/admin.py:509
 msgid "Sorry, try again..."
 msgstr "Beklager, prøv en gang til..."
 
-#: ../roundup/admin.py:510
+#: ../roundup/admin.py:514
 #, python-format
 msgid "%(propname)s (%(proptype)s): "
 msgstr "%(propname)s (%(proptype)s): "
 
-#: ../roundup/admin.py:529
+#: ../roundup/admin.py:533
 #, python-format
 msgid "you must provide the \"%(propname)s\" property."
 msgstr "du må oppgi \"%(propname)s\" egenskapen."
 
-#: ../roundup/admin.py:541
+#: ../roundup/admin.py:545
 #, fuzzy
 msgid ""
 "Usage: display designator[,designator]*\n"
-"\n"
 "        Show the property values for the given node(s).\n"
 "\n"
 "        A designator is a classname and a nodeid concatenated,\n"
@@ -421,25 +420,29 @@
 "        Lister egenskapene og deres verdier for oppgitt node.\n"
 "        "
 
-#: ../roundup/admin.py:583
+#: ../roundup/admin.py:586
 #, fuzzy, python-format
 msgid "%(protected)s%(key)s: %(value)s"
 msgstr "%(key)s: %(value)s"
 
 #. grab the directory to export to
-#: ../roundup/admin.py:586
+#: ../roundup/admin.py:589
+#, fuzzy
 msgid ""
 "Usage: export [[-]class[,class]] export_dir\n"
-"        Export the database to colon-separated-value files.\n"
+"        Export the database and file content.\n"
+"\n"
+"        Database content is exported to colon separated files.\n"
 "        To exclude the files (e.g. for the msg or file class),\n"
 "        use the exporttables command.\n"
 "\n"
 "        Optionally limit the export to just the named classes\n"
-"        or exclude the named classes, if the 1st argument starts with '-'.\n"
+"        or exclude the named classes, if the 1st argument\n"
+"        starts with '-'.\n"
 "\n"
 "        This action exports the current data from the database into\n"
 "        colon-separated-value files that are placed in the nominated\n"
-"        destination directory.\n"
+"        export_dir directory.\n"
 "        "
 msgstr ""
 "Bruk: export [[-] klasse[,klasse]] eksportkatalog\n"
@@ -454,19 +457,23 @@
 "\t  kolonseparerte filer som plasseres i angitt katalog.\n"
 "        "
 
-#: ../roundup/admin.py:698
+#: ../roundup/admin.py:704
+#, fuzzy
 msgid ""
 "Usage: exporttables [[-]class[,class]] export_dir\n"
-"        Export the database to colon-separated-value files, excluding the\n"
-"        files below $TRACKER_HOME/db/files/ (which can be archived "
-"separately).\n"
+"        Export only the database to files, no file content.\n"
+"\n"
+"        Database content is exported to colon separated files.\n"
+"        The files below $TRACKER_HOME/db/files/ (which can be\n"
+"        archived separately) are not part of the export.\n"
 "        To include the files, use the export command.\n"
 "\n"
 "        Optionally limit the export to just the named classes\n"
-"        or exclude the named classes, if the 1st argument starts with '-'.\n"
+"        or exclude the named classes, if the 1st argument\n"
+"        starts with '-'.\n"
 "\n"
 "        This action exports the current data from the database into\n"
-"        colon-separated-value files that are placed in the nominated\n"
+"        colon-separated-value files that are placed in the export_dir\n"
 "        destination directory.\n"
 "        "
 msgstr ""
@@ -483,7 +490,7 @@
 "      kolonseparerte filer som plasseres i angitt katalog.\n"
 "        "
 
-#: ../roundup/admin.py:713
+#: ../roundup/admin.py:723
 #, fuzzy
 msgid ""
 "Usage: filter classname propname=value ...\n"
@@ -503,19 +510,19 @@
 "        Verdien kan enten være nodeid-en til den lenkede noden, eller dens "
 "nøkkelverdi.n        "
 
-#: ../roundup/admin.py:754
+#: ../roundup/admin.py:764
 #, fuzzy, python-format
 msgid "Class %(curclassname)s has no property %(pn)s in %(propname)s."
 msgstr "%(classname)s har ingen verdi \"%(propname)s\""
 
-#: ../roundup/admin.py:781 ../roundup/admin.py:830 ../roundup/admin.py:1505
-#: ../roundup/admin.py:1518 ../roundup/admin.py:2086
-#: ../roundup/admin.py:781:830 :1505:1518:2086
+#: ../roundup/admin.py:791 ../roundup/admin.py:840 ../roundup/admin.py:1517
+#: ../roundup/admin.py:1530 ../roundup/admin.py:2098
+#: ../roundup/admin.py:791:840 :1517:1530:2098
 #, python-format
 msgid "%(classname)s has no property \"%(propname)s\""
 msgstr "%(classname)s har ingen verdi \"%(propname)s\""
 
-#: ../roundup/admin.py:788
+#: ../roundup/admin.py:798
 msgid ""
 "Usage: find classname propname=value ...\n"
 "        Find the nodes of the given class with a given link property value.\n"
@@ -532,12 +539,11 @@
 "        Verdien kan enten være nodeid-en til den lenkede noden, eller dens "
 "nøkkelverdi.n        "
 
-#: ../roundup/admin.py:837
+#: ../roundup/admin.py:847
 #, fuzzy
 msgid ""
-"Usage: genconfig <filename>\n"
-"        Generate a new tracker config file (ini style) with default\n"
-"        values in <filename>.\n"
+"Usage: genconfig filename\n"
+"        Create a new tracker config file with default values in filename.\n"
 "        "
 msgstr ""
 "Bruk: genconfig <filename>\n"
@@ -545,7 +551,7 @@
 "        i <filename>.\n"
 "        "
 
-#: ../roundup/admin.py:855
+#: ../roundup/admin.py:864
 #, python-format
 msgid ""
 "Changing option\n"
@@ -553,20 +559,20 @@
 "from old default of %(old_number)s to new default of %(new_number)s."
 msgstr ""
 
-#: ../roundup/admin.py:866
+#: ../roundup/admin.py:875
 #, python-format
 msgid ""
 "Update 'password_pbkdf2_default_rounds' to a number equal to or larger\n"
 "  than %s.\n"
 msgstr ""
 
-#: ../roundup/admin.py:873
+#: ../roundup/admin.py:882
 msgid ""
 "Check the rdbms mysql_* settings. Your charset and collations may need\n"
 "  to be changed. See upgrading instructions.\n"
 msgstr ""
 
-#: ../roundup/admin.py:883
+#: ../roundup/admin.py:892
 #, fuzzy
 msgid ""
 "Usage: get property designator[,designator]*\n"
@@ -587,24 +593,24 @@
 "\t\tved angivelsene.\n"
 "        "
 
-#: ../roundup/admin.py:916
+#: ../roundup/admin.py:925
 #, python-format
 msgid "property %s is not of type Multilink or Link so -d flag does not apply."
 msgstr ""
 "egneskapen %s er ikke multilenke eller lenke so -d lfagget kan ikke anvendes."
 
-#: ../roundup/admin.py:933 ../roundup/admin.py:1181 ../roundup/admin.py:1858
-#: ../roundup/admin.py:933:1181:1858
+#: ../roundup/admin.py:942 ../roundup/admin.py:1190 ../roundup/admin.py:1842
+#: ../roundup/admin.py:1870 ../roundup/admin.py:942:1190 :1842:1870
 #, python-format
 msgid "no such %(classname)s node \"%(nodeid)s\""
 msgstr "finnes ikke %(classname)s node \"%(nodeid)s\""
 
-#: ../roundup/admin.py:936
+#: ../roundup/admin.py:945
 #, python-format
 msgid "no such %(classname)s property \"%(propname)s\""
 msgstr "finnes ikke %(classname)s property \"%(propname)s\""
 
-#: ../roundup/admin.py:941
+#: ../roundup/admin.py:950
 msgid ""
 "Usage: help topic\n"
 "        Give help about topic.\n"
@@ -624,12 +630,12 @@
 "        all       -- all tilgjengeli hjelp\n"
 "        "
 
-#: ../roundup/admin.py:960
+#: ../roundup/admin.py:969
 #, python-format
 msgid "Sorry, no help for \"%(topic)s\""
 msgstr "Beklager, ingen hjelp for \"%(topic)s\""
 
-#: ../roundup/admin.py:977
+#: ../roundup/admin.py:986
 #, fuzzy
 msgid ""
 "Usage: history designator [skipquiet] [raw]\n"
@@ -651,27 +657,27 @@
 "       av list eller find-kommandoene, og at dens nøkkel kan gjenbrukes.\n"
 "        "
 
-#: ../roundup/admin.py:1002
+#: ../roundup/admin.py:1011
 #, python-format
 msgid "Unexpected argument(s): %s. Expected 'skipquiet' or 'raw'."
 msgstr ""
 
-#: ../roundup/admin.py:1053
+#: ../roundup/admin.py:1062
 #, fuzzy
 msgid "removed"
 msgstr "slette"
 
-#: ../roundup/admin.py:1055
+#: ../roundup/admin.py:1064
 msgid "added"
 msgstr ""
 
-#: ../roundup/admin.py:1057
+#: ../roundup/admin.py:1066
 #, python-format
 msgid "Unknown history set operation '%s'. Expected +/-."
 msgstr ""
 
 #. .Hint added issue23 to superseder
-#: ../roundup/admin.py:1082
+#: ../roundup/admin.py:1091
 #, fuzzy, python-format
 msgid "added %(class)s%(item_id)s to %(propname)s"
 msgstr "%(class)s %(id)s %(properties)s endret ok"
@@ -679,34 +685,36 @@
 #. .Hint read as: assignedto was admin(1)
 #. where assignedto is the property
 #. admin is the key name for value 1
-#: ../roundup/admin.py:1103
+#: ../roundup/admin.py:1112
 #, fuzzy, python-format
 msgid "%(prop)s was %(name)s(%(value)s)"
 msgstr "%(propname)s (%(proptype)s): "
 
-#: ../roundup/admin.py:1109 ../roundup/admin.py:1138
-#: ../roundup/admin.py:1109:1138
+#: ../roundup/admin.py:1118 ../roundup/admin.py:1147
+#: ../roundup/admin.py:1118:1147
 #, fuzzy, python-format
 msgid "%(prop)s was %(value)s"
 msgstr "%(key)s: %(value)s"
 
-#: ../roundup/admin.py:1128
+#: ../roundup/admin.py:1137
 #, python-format
 msgid "%(prop)s was [%(value_list)s]"
 msgstr ""
 
 #. .Hint modified nosy: added demo(3)
-#: ../roundup/admin.py:1135
+#: ../roundup/admin.py:1144
 #, python-format
 msgid "modified %(prop)s: %(how)s"
 msgstr ""
 
-#: ../roundup/admin.py:1186
+#: ../roundup/admin.py:1195
+#, fuzzy
 msgid ""
 "Usage: import import_dir\n"
-"        Import a database from the directory containing CSV files,\n"
-"        two per class to import.\n"
-"\n"
+"        Import a database and file contents from the directory.\n"
+"\n"
+"        The directory should have the same format as one containing\n"
+"        the output of export. There are two files imported per class.\n"
 "        The files used in the import are:\n"
 "\n"
 "        <class>.csv\n"
@@ -743,16 +751,17 @@
 "    (eller, mer omstendelig glem alle gamle data).\n"
 "        "
 
-#: ../roundup/admin.py:1276
+#: ../roundup/admin.py:1287
 msgid ""
 "Usage: importtables export_dir\n"
-"\n"
 "        This imports the database tables exported using exporttables.\n"
+"\n"
+"        It does not import the content of files like msgs and files.\n"
 "        "
 msgstr ""
 
 #. password
-#: ../roundup/admin.py:1283
+#: ../roundup/admin.py:1295
 msgid ""
 "Usage: initialise [adminpw]\n"
 "        Initialise a new Roundup tracker.\n"
@@ -770,23 +779,23 @@
 "        Kjør sporerens oppstartsfunksjon dbinit.init()\n"
 "        "
 
-#: ../roundup/admin.py:1297
+#: ../roundup/admin.py:1309
 msgid "Admin Password: "
 msgstr "Admin passord:"
 
-#: ../roundup/admin.py:1298
+#: ../roundup/admin.py:1310
 msgid "       Confirm: "
 msgstr "       Bekreft: "
 
-#: ../roundup/admin.py:1302
+#: ../roundup/admin.py:1314
 msgid "Instance home does not exist"
 msgstr "Hjemmekatalogen finnes ikke"
 
-#: ../roundup/admin.py:1306
+#: ../roundup/admin.py:1318
 msgid "Instance has not been installed"
 msgstr "Sporeren er ikke installert"
 
-#: ../roundup/admin.py:1314
+#: ../roundup/admin.py:1326
 msgid ""
 "WARNING: The database is already initialised!\n"
 "If you re-initialise it, you will lose all the data!\n"
@@ -796,7 +805,7 @@
 "Hvis du reinitialiserer den vil alle data bli slettet.\n"
 "Slette den? Y/N: "
 
-#: ../roundup/admin.py:1334
+#: ../roundup/admin.py:1346
 msgid ""
 "Usage: install [template [backend [key=val[,key=val]]]]\n"
 "        Install a new Roundup tracker.\n"
@@ -843,12 +852,12 @@
 "\t\tSe også hjelp for initops.\n"
 "        "
 
-#: ../roundup/admin.py:1363
+#: ../roundup/admin.py:1375
 #, python-format
 msgid "Instance home parent directory \"%(parent)s\" does not exist"
 msgstr "Overordnet katalog \"%(parent)s\" finnes ikke"
 
-#: ../roundup/admin.py:1372
+#: ../roundup/admin.py:1384
 #, python-format
 msgid ""
 "WARNING: There appears to be a tracker in \"%(tracker_home)s\"!\n"
@@ -859,22 +868,22 @@
 "Du vil miste alle data hvis du reinstallerer!\n"
 "Slette den? Y/N: "
 
-#: ../roundup/admin.py:1385
+#: ../roundup/admin.py:1397
 #, fuzzy
 msgid "Select template"
 msgstr "Velg mal [classic]: "
 
-#: ../roundup/admin.py:1395
+#: ../roundup/admin.py:1407
 #, fuzzy
 msgid "Select backend"
 msgstr "Velg database backend [anydbm]: "
 
-#: ../roundup/admin.py:1406
+#: ../roundup/admin.py:1418
 #, python-format
 msgid "Error in configuration settings: \"%s\""
 msgstr "Feil i konfigurasjon \"%s\""
 
-#: ../roundup/admin.py:1439
+#: ../roundup/admin.py:1451
 #, python-format
 msgid ""
 "\n"
@@ -887,11 +896,11 @@
 " Du bør redigere konfigurasjonsfilen for sporeren nå:\n"
 "   %(config_file)s"
 
-#: ../roundup/admin.py:1449
+#: ../roundup/admin.py:1461
 msgid " ... at a minimum, you must set following options:"
 msgstr "... du må spesifisere følgende opsjoner som et minimum:"
 
-#: ../roundup/admin.py:1454
+#: ../roundup/admin.py:1466
 #, python-format
 msgid ""
 "\n"
@@ -919,7 +928,7 @@
 " disse endringene.\n"
 "---------------------------------------------------------------------------\n"
 
-#: ../roundup/admin.py:1470
+#: ../roundup/admin.py:1482
 msgid ""
 "Usage: list classname [property]\n"
 "        List the instances of a class.\n"
@@ -948,21 +957,20 @@
 "        for alle klasseinstanser.\n"
 "        "
 
-#: ../roundup/admin.py:1483
+#: ../roundup/admin.py:1495
 msgid "Too many arguments supplied"
 msgstr "For mange argumenter"
 
-#: ../roundup/admin.py:1516
+#: ../roundup/admin.py:1528
 #, python-format
 msgid "%(nodeid)4s: %(value)s"
 msgstr "%(nodeid)4s: %(value)s"
 
 #. noqa: ARG002  - args unused
-#: ../roundup/admin.py:1523
+#: ../roundup/admin.py:1535
 #, fuzzy
 msgid ""
 "Usage: migrate\n"
-"\n"
 "        Update a tracker's database to be compatible with the Roundup\n"
 "        codebase.\n"
 "\n"
@@ -1006,22 +1014,21 @@
 "    la det bli en vane.\n"
 "        "
 
-#: ../roundup/admin.py:1544
+#: ../roundup/admin.py:1555
 #, python-format
 msgid "Tracker updated to schema version %s."
 msgstr ""
 
-#: ../roundup/admin.py:1548
+#: ../roundup/admin.py:1559
 #, fuzzy, python-format
 msgid "No migration action required. At schema version %s."
 msgstr "Ingen migrasjon krevet"
 
-#: ../roundup/admin.py:1553
+#: ../roundup/admin.py:1564
+#, fuzzy
 msgid ""
 "Usage: pack period | date\n"
-"\n"
-"        Remove journal entries older than a period of time specified or\n"
-"        before a certain date.\n"
+"        Remove journal entries older than the date/period.\n"
 "\n"
 "        A period is specified using the suffixes \"y\", \"m\", and \"d\". "
 "The\n"
@@ -1055,15 +1062,16 @@
 "\n"
 "        "
 
-#: ../roundup/admin.py:1581
+#: ../roundup/admin.py:1590
 msgid "Invalid format"
 msgstr "Ugyldig format"
 
-#: ../roundup/admin.py:1592
+#: ../roundup/admin.py:1601
 msgid ""
 "Usage: perftest [mode] [arguments]*\n"
-"\n"
-"        Time operations in Roundup. Supported arguments:\n"
+"        Time operations in Roundup.\n"
+"\n"
+"        Supported arguments:\n"
 "\n"
 "            [password] [rounds=<integer>] [scheme=<scheme>]\n"
 "\n"
@@ -1076,28 +1084,30 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1625
+#: ../roundup/admin.py:1635
 msgid "Invalid 'rounds'. Must be larger than 999."
 msgstr ""
 
-#: ../roundup/admin.py:1629
+#: ../roundup/admin.py:1639
 #, python-format
 msgid "Invalid 'rounds'. It must be an integer not: %s"
 msgstr ""
 
-#: ../roundup/admin.py:1656
+#: ../roundup/admin.py:1666
 msgid "scheme does not support rounds."
 msgstr ""
 
-#: ../roundup/admin.py:1659
+#: ../roundup/admin.py:1669
 #, python-format
 msgid "Hash time: %(time)0.9f seconds, scheme: %(scheme)s, rounds: %(rounds)s"
 msgstr ""
 
-#: ../roundup/admin.py:1665
+#: ../roundup/admin.py:1675
 msgid ""
 "Usage: pragma setting=value | 'list'\n"
-"        Set internal admin settings to a value. E.G.\n"
+"        Set internal admin settings to a value.\n"
+"\n"
+"        For example:\n"
 "\n"
 "            pragma verbose=True\n"
 "            pragma verbose=yes\n"
@@ -1121,49 +1131,49 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1698
+#: ../roundup/admin.py:1710
 #, python-format
 msgid "Argument must be setting=value, was given: %s."
 msgstr ""
 
-#: ../roundup/admin.py:1701
+#: ../roundup/admin.py:1713
 msgid "Current settings and values (NYI - not yet implemented):"
 msgstr ""
 
-#: ../roundup/admin.py:1712
+#: ../roundup/admin.py:1724
 msgid ""
 "      Help for this pragma is missing. Please report it to the Roundup "
 "project.\n"
 msgstr ""
 
-#: ../roundup/admin.py:1718
+#: ../roundup/admin.py:1730
 #, fuzzy, python-format
 msgid "Unknown setting %s. Try \"pragma list\"."
 msgstr "Ukjent brukernavn:"
 
-#: ../roundup/admin.py:1728
+#: ../roundup/admin.py:1740
 #, python-format
 msgid "Incorrect value for boolean setting %(setting)s: %(value)s."
 msgstr ""
 
-#: ../roundup/admin.py:1735
+#: ../roundup/admin.py:1747
 #, python-format
 msgid "Incorrect value for integer setting %(setting)s: %(value)s."
 msgstr ""
 
-#: ../roundup/admin.py:1742
+#: ../roundup/admin.py:1754
 #, python-format
 msgid ""
 "Incorrect value for setting %(setting)s: %(value)s. Should be no, both, or "
 "only."
 msgstr ""
 
-#: ../roundup/admin.py:1752
+#: ../roundup/admin.py:1764
 #, python-format
 msgid "Internal error: pragma can not handle values of type: %s"
 msgstr ""
 
-#: ../roundup/admin.py:1761
+#: ../roundup/admin.py:1773
 #, fuzzy
 msgid ""
 "Usage: reindex [classname|classname:#-#|designator]*\n"
@@ -1187,17 +1197,17 @@
 "    automatisk.\n"
 "        "
 
-#: ../roundup/admin.py:1783
+#: ../roundup/admin.py:1795
 #, python-format
 msgid "no such item \"%(designator)s\""
 msgstr "ingen slik enhet  \"%(designator)s\""
 
-#: ../roundup/admin.py:1793
+#: ../roundup/admin.py:1805
 #, fuzzy, python-format
 msgid "no such item \"%(class)s%(id)s\""
 msgstr "ingen slik enhet  \"%(designator)s\""
 
-#: ../roundup/admin.py:1805
+#: ../roundup/admin.py:1817
 #, fuzzy
 msgid ""
 "Usage: restore designator[,designator]*\n"
@@ -1215,12 +1225,7 @@
 "\t   Oppgitte noder blir tilgjengelige for brukerne igjen.\n"
 "        "
 
-#: ../roundup/admin.py:1830
-#, fuzzy
-msgid "no such %(classname)s node \"%(nodeid)s\""
-msgstr "finnes ikke %(classname)s node \"%(nodeid)s\""
-
-#: ../roundup/admin.py:1836
+#: ../roundup/admin.py:1848
 #, fuzzy
 msgid ""
 "Usage: retire designator[,designator]*\n"
@@ -1241,7 +1246,7 @@
 "        "
 
 #. noqa: ARG002 - args unused
-#: ../roundup/admin.py:1864
+#: ../roundup/admin.py:1876
 msgid ""
 "Usage: rollback\n"
 "        Undo all changes that are pending commit to the database.\n"
@@ -1260,60 +1265,60 @@
 "          commited. \n"
 "        "
 
-#: ../roundup/admin.py:1877
+#: ../roundup/admin.py:1889
 msgid ""
 "Usage: security [Role name]\n"
-"\n"
-"             Display the Permissions available to one or all Roles.\n"
-"             Also validates that any properties defined in a\n"
-"             permission are valid.\n"
-"\n"
-"             Run this after changing your permissions to catch\n"
-"             typos.\n"
+"        Display the Permissions available to one or all Roles.\n"
+"\n"
+"        Also validates that any properties defined in a\n"
+"        permission are valid.\n"
+"\n"
+"        Run this after changing your permissions to catch\n"
+"        typos.\n"
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1892
+#: ../roundup/admin.py:1904
 #, fuzzy, python-format
 msgid "No such Role \"%(role)s\"\n"
 msgstr "Ingen slik rolle \"%(role)s\""
 
-#: ../roundup/admin.py:1898
+#: ../roundup/admin.py:1910
 #, fuzzy, python-format
 msgid "New Web users get the Roles \"%(role)s\"\n"
 msgstr "Nye web-brukere for rollene \"%(role)s\""
 
-#: ../roundup/admin.py:1901
+#: ../roundup/admin.py:1913
 #, fuzzy, python-format
 msgid "New Web users get the Role \"%(role)s\"\n"
 msgstr "Nye web-brukere for rollen \"%(role)s\""
 
-#: ../roundup/admin.py:1905
+#: ../roundup/admin.py:1917
 #, fuzzy, python-format
 msgid "New Email users get the Roles \"%(role)s\"\n"
 msgstr "Nye epostbrukere for rollene \"%(role)s\""
 
-#: ../roundup/admin.py:1907
+#: ../roundup/admin.py:1919
 #, fuzzy, python-format
 msgid "New Email users get the Role \"%(role)s\"\n"
 msgstr "Nye epostbrukere for rollen \"%(role)s\""
 
-#: ../roundup/admin.py:1910
+#: ../roundup/admin.py:1922
 #, fuzzy, python-format
 msgid "Role \"%(name)s\":\n"
 msgstr "Rolle \"%(name)s\":"
 
-#: ../roundup/admin.py:1916
+#: ../roundup/admin.py:1928
 #, fuzzy
 msgid " %(description)s (%(name)s for \"%(klass)s\""
 msgstr " %(description)s (%(name)s bare for \"%(klass)s\")"
 
-#: ../roundup/admin.py:1916
+#: ../roundup/admin.py:1928
 #, fuzzy, python-format
 msgid " %(description)s (%(name)s for \"%(klass)s\": %(properties)s only)\n"
 msgstr " %(description)s (%(name)s bare for \"%(klass)s\": %(properties)s )"
 
-#: ../roundup/admin.py:1929
+#: ../roundup/admin.py:1941
 #, python-format
 msgid ""
 "\n"
@@ -1321,17 +1326,17 @@
 "\n"
 msgstr ""
 
-#: ../roundup/admin.py:1935
+#: ../roundup/admin.py:1947
 #, fuzzy, python-format
 msgid " %(description)s (%(name)s for \"%(klass)s\" only)\n"
 msgstr " %(description)s (%(name)s bare for \"%(klass)s\")"
 
-#: ../roundup/admin.py:1938
+#: ../roundup/admin.py:1950
 #, fuzzy, python-format
 msgid " %(description)s (%(name)s)\n"
 msgstr " %(description)s (%(name)s)"
 
-#: ../roundup/admin.py:1942
+#: ../roundup/admin.py:1954
 #, fuzzy
 msgid ""
 "Usage: set items property=value [property=value ...]\n"
@@ -1366,7 +1371,7 @@
 "som\n"
 "        en kommaseparert liste (feks \"1,2,3\")."
 
-#: ../roundup/admin.py:2010
+#: ../roundup/admin.py:2022
 msgid ""
 "Usage: specification classname\n"
 "        Show the properties for a classname.\n"
@@ -1380,17 +1385,17 @@
 "        Lister egenskapene til gitt klasse.\n"
 "        "
 
-#: ../roundup/admin.py:2029
+#: ../roundup/admin.py:2041
 #, fuzzy, python-format
 msgid "%(key)s: %(value)s (key property)\n"
 msgstr "%(key)s: %(value)s (key property)"
 
-#: ../roundup/admin.py:2032
+#: ../roundup/admin.py:2044
 #, fuzzy, python-format
 msgid "%(key)s: %(value)s\n"
 msgstr "%(key)s: %(value)s"
 
-#: ../roundup/admin.py:2035
+#: ../roundup/admin.py:2047
 msgid ""
 "Usage: table classname [property[,property]*]\n"
 "        List the instances of a class in tabular form.\n"
@@ -1450,17 +1455,17 @@
 "        resulterer i en fire bokstavaer bred \"Name\" kolonne.\n"
 "        "
 
-#: ../roundup/admin.py:2081
+#: ../roundup/admin.py:2093
 #, python-format
 msgid "\"%(spec)s\" not name:width"
 msgstr "\"%(spec)s\" ikke navn:bredde"
 
-#: ../roundup/admin.py:2103
+#: ../roundup/admin.py:2115
 #, python-format
 msgid "\"%(spec)s\" does not have an integer width: \"%(width)s\""
 msgstr ""
 
-#: ../roundup/admin.py:2139
+#: ../roundup/admin.py:2151
 msgid ""
 "Usage: templates [trace_search]\n"
 "        List templates and their installed directories.\n"
@@ -1470,13 +1475,14 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:2167
+#: ../roundup/admin.py:2179
 #, fuzzy
 msgid ""
 "Usage: updateconfig <filename>\n"
-"        Generate an updated tracker config file (ini style) in\n"
-"        <filename>. Use current settings from existing roundup\n"
-"        tracker in tracker home.\n"
+"        Merge existing tracker config with new settings.\n"
+"\n"
+"        Output the updated config file to <filename>. Use current\n"
+"        settings from existing roundup tracker in tracker home.\n"
 "        "
 msgstr ""
 "Bruk: genconfig <filename>\n"
@@ -1484,34 +1490,34 @@
 "        i <filename>.\n"
 "        "
 
-#: ../roundup/admin.py:2175 ../roundup/cgi/actions.py:886
+#: ../roundup/admin.py:2188 ../roundup/cgi/actions.py:886
 #: ../roundup/cgi/actions.py:897 ../roundup/cgi/actions.py:1099
 #: ../roundup/cgi/actions.py:1113 ../roundup/cgi/actions.py:886:897 :1099:1113
 #, python-format
 msgid "Error: %s"
 msgstr "Feil: %s"
 
-#: ../roundup/admin.py:2207
+#: ../roundup/admin.py:2220
 #, python-format
 msgid "Unknown command \"%(command)s\" (\"help commands\" for a list)"
 msgstr "Ukjent kommando \"%(command)s\" (\"help commands\" for liste)"
 
-#: ../roundup/admin.py:2213
+#: ../roundup/admin.py:2226
 #, python-format
 msgid "Multiple commands match \"%(command)s\": %(list)s"
 msgstr "Multiple kommandoer  matcher \"%(command)s\": %(list)s"
 
-#: ../roundup/admin.py:2228
+#: ../roundup/admin.py:2241
 msgid "Enter tracker home: "
 msgstr "Oppgi sporers plassering:"
 
-#: ../roundup/admin.py:2257 ../roundup/admin.py:2261
-#: ../roundup/admin.py:2257:2261
+#: ../roundup/admin.py:2270 ../roundup/admin.py:2274
+#: ../roundup/admin.py:2270:2274
 #, python-format
 msgid "Error: Couldn't open tracker: %(message)s"
 msgstr "Feil: Kan ikke åpne sporer: %(message)s"
 
-#: ../roundup/admin.py:2309
+#: ../roundup/admin.py:2322
 #, python-format
 msgid ""
 "Roundup %s ready for input.\n"
@@ -1520,15 +1526,15 @@
 "Roundup %s er klar til bruk.\n"
 "Skriv  \"help\" for hjelp."
 
-#: ../roundup/admin.py:2342
+#: ../roundup/admin.py:2355
 msgid "Note: command history and editing not available"
 msgstr "Merk: kommandohistorikk og redigering utilgjengelig"
 
-#: ../roundup/admin.py:2348
+#: ../roundup/admin.py:2361
 msgid "exit..."
 msgstr "exit..."
 
-#: ../roundup/admin.py:2361
+#: ../roundup/admin.py:2374
 msgid "There are unsaved changes. Commit them (y/N)? "
 msgstr "Det er ikkelagrede endringer. Lagre dem (y/N)? "
 
@@ -2061,7 +2067,7 @@
 msgid "<em>undefined</em>"
 msgstr "<em>udefinert</em>"
 
-#: ../roundup/cgi/client.py:90
+#: ../roundup/cgi/client.py:105
 msgid ""
 "<html><head><title>An error has occurred</title></head>\n"
 "<body><h1>An error has occurred</h1>\n"
@@ -2070,148 +2076,148 @@
 "</body></html>"
 msgstr ""
 
-#: ../roundup/cgi/client.py:702 ../roundup/cgi/client.py:1622
-#: ../roundup/cgi/client.py:702:1622
+#: ../roundup/cgi/client.py:717 ../roundup/cgi/client.py:1635
+#: ../roundup/cgi/client.py:717:1635
 msgid "Required Header Missing"
 msgstr ""
 
-#: ../roundup/cgi/client.py:704
+#: ../roundup/cgi/client.py:719
 #, fuzzy
 msgid "Client is not allowed to use Rest Interface."
 msgstr "Anonyme brukere får ikke benytte web-grensesnittet"
 
-#: ../roundup/cgi/client.py:956
+#: ../roundup/cgi/client.py:971
 msgid "Form Error: "
 msgstr "Skjema feil:"
 
-#: ../roundup/cgi/client.py:1049
+#: ../roundup/cgi/client.py:1064
 #, python-format
 msgid "Unrecognized charset: %r"
 msgstr "Ukjent tegnsett: %r"
 
-#: ../roundup/cgi/client.py:1318 ../roundup/cgi/client.py:2281
-#: ../roundup/cgi/client.py:1318:2281
+#: ../roundup/cgi/client.py:1331 ../roundup/cgi/client.py:2294
+#: ../roundup/cgi/client.py:1331:2294
 msgid "broken form: multiple @action values submitted"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1335
+#: ../roundup/cgi/client.py:1348
 msgid "Anonymous users are not allowed to use the web interface"
 msgstr "Anonyme brukere får ikke benytte web-grensesnittet"
 
-#: ../roundup/cgi/client.py:1483
+#: ../roundup/cgi/client.py:1496
 msgid "Referer header not available."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1487
+#: ../roundup/cgi/client.py:1500
 #, python-format
 msgid "csrf key used with wrong method from: %s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1516
+#: ../roundup/cgi/client.py:1529
 #, python-format
 msgid "csrf header %(header)s required but missing for user%(userid)s."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1520
-#, python-format
-msgid "Missing header: %s"
-msgstr ""
-
-#: ../roundup/cgi/client.py:1528
-#, python-format
-msgid "csrf Referer header check failed for user%(userid)s. Value=%(referer)s"
-msgstr ""
-
 #: ../roundup/cgi/client.py:1533
+#, python-format
+msgid "Missing header: %s"
+msgstr ""
+
+#: ../roundup/cgi/client.py:1541
+#, python-format
+msgid "csrf Referer header check failed for user%(userid)s. Value=%(referer)s"
+msgstr ""
+
+#: ../roundup/cgi/client.py:1546
 #, fuzzy, python-format
 msgid "Invalid Referer: %s"
 msgstr "Ugylig login"
 
-#: ../roundup/cgi/client.py:1548
+#: ../roundup/cgi/client.py:1561
 #, python-format
 msgid "csrf Origin header check failed for user%(userid)s. Value=%(origin)s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1553
+#: ../roundup/cgi/client.py:1566
 #, fuzzy, python-format
 msgid "Invalid Origin %s"
 msgstr "Ugylig login"
 
-#: ../roundup/cgi/client.py:1567
+#: ../roundup/cgi/client.py:1580
 #, python-format
 msgid ""
 "csrf X-FORWARDED-HOST header check failed for user%(userid)s. Value=%(host)s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1573
+#: ../roundup/cgi/client.py:1586
 #, python-format
 msgid "Invalid X-FORWARDED-HOST %s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1592
+#: ../roundup/cgi/client.py:1605
 #, python-format
 msgid "csrf HOST header check failed for user%(userid)s. Value=%(host)s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1597
+#: ../roundup/cgi/client.py:1610
 #, fuzzy, python-format
 msgid "Invalid HOST %s"
 msgstr "Ugyldig forespørsel"
 
-#: ../roundup/cgi/client.py:1605
+#: ../roundup/cgi/client.py:1618
 msgid "Csrf: unable to verify sufficient headers"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1606
-msgid "Unable to verify sufficient headers"
-msgstr ""
-
 #: ../roundup/cgi/client.py:1619
+msgid "Unable to verify sufficient headers"
+msgstr ""
+
+#: ../roundup/cgi/client.py:1632
 #, python-format
 msgid "csrf X-REQUESTED-WITH xmlrpc required header check failed for user%s."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1660
+#: ../roundup/cgi/client.py:1673
 #, python-format
 msgid "Required csrf field missing for user%s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1662 ../roundup/cgi/client.py:1689
-#: ../roundup/cgi/client.py:1706 ../roundup/cgi/client.py:1662:1689:1706
+#: ../roundup/cgi/client.py:1675 ../roundup/cgi/client.py:1702
+#: ../roundup/cgi/client.py:1719 ../roundup/cgi/client.py:1675:1702:1719
 msgid ""
 "We can't validate your session (csrf failure). Re-enter any unsaved data and "
 "try again."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1666
+#: ../roundup/cgi/client.py:1679
 #, python-format
 msgid "csrf field not supplied by user%s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1678
+#: ../roundup/cgi/client.py:1691
 #, 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:1696
+#: ../roundup/cgi/client.py:1709
 #, 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:1888
+#: ../roundup/cgi/client.py:1901
 msgid "You are not allowed to view this file."
 msgstr "Du har ikke lov å se denne filen."
 
-#: ../roundup/cgi/client.py:2159
+#: ../roundup/cgi/client.py:2172
 #, python-format
 msgid "%(starttag)sTime elapsed: %(seconds)fs%(endtag)s\n"
 msgstr "%(starttag)sMedgått tid: %(seconds)fs%(endtag)s\n"
 
-#: ../roundup/cgi/client.py:2163
+#: ../roundup/cgi/client.py:2176
 #, python-format
 msgid ""
 "%(starttag)sCache hits: %(cache_hits)d, misses %(cache_misses)d. Loading "
@@ -2220,7 +2226,7 @@
 "%(starttag)sCache treff: %(cache_hits)d, ikke-treff %(cache_misses)d. Laster "
 "saker: %(get_items)f secs. Filtrerer: %(filtering)f secs.%(endtag)s\n"
 
-#: ../roundup/cgi/client.py:2703
+#: ../roundup/cgi/client.py:2716
 #, python-format
 msgid ""
 "Cache failure: compressed file %(compressed)s is older than its source file "
@@ -2281,69 +2287,69 @@
 msgstr[0] "Krevet %(class)s egenskap %(property)s ikke gitt."
 msgstr[1] "Krevet %(class)s egenskap %(property)s ikke gitt."
 
-#: ../roundup/cgi/templating.py:277
+#: ../roundup/cgi/templating.py:278
 #, python-format
 msgid "You are not allowed to %(action)s items of class %(class)s"
 msgstr "Du har ikke rettigheter til å %(action)s instanser av klasse %(class)s"
 
-#: ../roundup/cgi/templating.py:914
+#: ../roundup/cgi/templating.py:916
 msgid "(list)"
 msgstr "(liste)"
 
-#: ../roundup/cgi/templating.py:989
+#: ../roundup/cgi/templating.py:991
 msgid "Submit New Entry"
 msgstr "Legg til ny oppføring"
 
-#: ../roundup/cgi/templating.py:1011 ../roundup/cgi/templating.py:1187
-#: ../roundup/cgi/templating.py:1822 ../roundup/cgi/templating.py:1853
-#: ../roundup/cgi/templating.py:1874 ../roundup/cgi/templating.py:1912
-#: ../roundup/cgi/templating.py:1965 ../roundup/cgi/templating.py:1989
-#: ../roundup/cgi/templating.py:1996 ../roundup/cgi/templating.py:2033
-#: ../roundup/cgi/templating.py:2086 ../roundup/cgi/templating.py:2119
-#: ../roundup/cgi/templating.py:2214 ../roundup/cgi/templating.py:2235
-#: ../roundup/cgi/templating.py:2326 ../roundup/cgi/templating.py:2346
-#: ../roundup/cgi/templating.py:2368 ../roundup/cgi/templating.py:2411
-#: ../roundup/cgi/templating.py:2421 ../roundup/cgi/templating.py:2486
-#: ../roundup/cgi/templating.py:2789 ../roundup/cgi/templating.py:1011:1187
-#: :1822:1853 :1874:1912 :1965:1989 :1996:2033 :2086:2119 :2214:2235 :2326:2346
-#: :2368:2411 :2421:2486:2789
+#: ../roundup/cgi/templating.py:1013 ../roundup/cgi/templating.py:1189
+#: ../roundup/cgi/templating.py:1824 ../roundup/cgi/templating.py:1855
+#: ../roundup/cgi/templating.py:1876 ../roundup/cgi/templating.py:1914
+#: ../roundup/cgi/templating.py:1967 ../roundup/cgi/templating.py:1991
+#: ../roundup/cgi/templating.py:1998 ../roundup/cgi/templating.py:2035
+#: ../roundup/cgi/templating.py:2088 ../roundup/cgi/templating.py:2121
+#: ../roundup/cgi/templating.py:2216 ../roundup/cgi/templating.py:2237
+#: ../roundup/cgi/templating.py:2328 ../roundup/cgi/templating.py:2348
+#: ../roundup/cgi/templating.py:2370 ../roundup/cgi/templating.py:2413
+#: ../roundup/cgi/templating.py:2423 ../roundup/cgi/templating.py:2488
+#: ../roundup/cgi/templating.py:2791 ../roundup/cgi/templating.py:1013:1189
+#: :1824:1855 :1876:1914 :1967:1991 :1998:2035 :2088:2121 :2216:2237 :2328:2348
+#: :2370:2413 :2423:2488:2791
 msgid "[hidden]"
 msgstr "[skjult]"
 
-#: ../roundup/cgi/templating.py:1012
+#: ../roundup/cgi/templating.py:1014
 msgid "New node - no history"
 msgstr "Ny node - ingen historie"
 
-#: ../roundup/cgi/templating.py:1152
+#: ../roundup/cgi/templating.py:1154
 msgid "Submit Changes"
 msgstr "Lagre endringer"
 
-#: ../roundup/cgi/templating.py:1230
+#: ../roundup/cgi/templating.py:1232
 msgid "<em>The indicated property no longer exists</em>"
 msgstr "<em>Valgt egenskap finnes ikke lenger</em>"
 
-#: ../roundup/cgi/templating.py:1266
+#: ../roundup/cgi/templating.py:1268
 #, python-format
 msgid "The linked class %(classname)s no longer exists"
 msgstr "Den lenkede klassen %(classname)s finnes ikke lenger"
 
-#: ../roundup/cgi/templating.py:1303 ../roundup/cgi/templating.py:1333
-#: ../roundup/cgi/templating.py:2495 ../roundup/cgi/templating.py:2798
-#: ../roundup/cgi/templating.py:1303:1333 :2495:2798
+#: ../roundup/cgi/templating.py:1305 ../roundup/cgi/templating.py:1335
+#: ../roundup/cgi/templating.py:2497 ../roundup/cgi/templating.py:2800
+#: ../roundup/cgi/templating.py:1305:1335 :2497:2800
 msgid "[label is missing]"
 msgstr ""
 
-#: ../roundup/cgi/templating.py:1307 ../roundup/cgi/templating.py:1336
-#: ../roundup/cgi/templating.py:1307:1336
+#: ../roundup/cgi/templating.py:1309 ../roundup/cgi/templating.py:1338
+#: ../roundup/cgi/templating.py:1309:1338
 msgid "<strike>The linked node no longer exists</strike>"
 msgstr "<strike>Den lenkede noden finnes ikke lenger</strike>"
 
-#: ../roundup/cgi/templating.py:1398
+#: ../roundup/cgi/templating.py:1400
 #, python-format
 msgid "%s: (no value)"
 msgstr "%s: (ingen verdi)"
 
-#: ../roundup/cgi/templating.py:1414
+#: ../roundup/cgi/templating.py:1416
 #, fuzzy, python-format
 msgid ""
 "<strong><em>This event %s is not handled by the history display!</em></"
@@ -2352,46 +2358,46 @@
 "<strong><em>Denne hendelsen håndteres ikke av historievisningen!</em></"
 "strong>"
 
-#: ../roundup/cgi/templating.py:1427
+#: ../roundup/cgi/templating.py:1429
 msgid "<tr><td colspan=4><strong>Note:</strong></td></tr>"
 msgstr "<tr><td colspan=4><strong>Noter:</strong></td></tr>"
 
-#: ../roundup/cgi/templating.py:1436
+#: ../roundup/cgi/templating.py:1438
 msgid "History"
 msgstr "Historie"
 
-#: ../roundup/cgi/templating.py:1438
+#: ../roundup/cgi/templating.py:1440
 msgid "<th>Date</th>"
 msgstr "<th>Dato</th>"
 
-#: ../roundup/cgi/templating.py:1439
+#: ../roundup/cgi/templating.py:1441
 msgid "<th>User</th>"
 msgstr "<th>Bruker</th>"
 
-#: ../roundup/cgi/templating.py:1440
+#: ../roundup/cgi/templating.py:1442
 msgid "<th>Action</th>"
 msgstr "<th>Aksjon</th>"
 
-#: ../roundup/cgi/templating.py:1441
+#: ../roundup/cgi/templating.py:1443
 msgid "<th>Args</th>"
 msgstr "<th>Argumenter</th>"
 
-#: ../roundup/cgi/templating.py:1492
+#: ../roundup/cgi/templating.py:1494
 #, python-format
 msgid "Copy of %(class)s %(id)s"
 msgstr "Kopi av %(class)s %(id)s"
 
-#: ../roundup/cgi/templating.py:2123 ../roundup/cgi/templating.py:2158
-#: ../roundup/cgi/templating.py:1380:2123:2158
+#: ../roundup/cgi/templating.py:2125 ../roundup/cgi/templating.py:2160
+#: ../roundup/cgi/templating.py:1382:2125:2160
 msgid "No"
 msgstr "Nei"
 
-#: ../roundup/cgi/templating.py:2123 ../roundup/cgi/templating.py:2152
-#: ../roundup/cgi/templating.py:1380:2123:2152
+#: ../roundup/cgi/templating.py:2125 ../roundup/cgi/templating.py:2154
+#: ../roundup/cgi/templating.py:1382:2125:2154
 msgid "Yes"
 msgstr "Ja"
 
-#: ../roundup/cgi/templating.py:2284
+#: ../roundup/cgi/templating.py:2286
 msgid ""
 "default value for DateHTMLProperty must be either DateHTMLProperty or string "
 "date representation."
@@ -2399,27 +2405,27 @@
 "standard verdi for DateHTMLProperty må være enten DateHTMLProperty eller en "
 "streng represantasjon av tidspunkt."
 
-#: ../roundup/cgi/templating.py:2466
+#: ../roundup/cgi/templating.py:2468
 #, python-format
 msgid "Attempt to look up %(attr)s on a missing value"
 msgstr "Forsøk på å slå opp  %(attr)s på manglende verdi"
 
-#: ../roundup/cgi/templating.py:2477
+#: ../roundup/cgi/templating.py:2479
 #, fuzzy, python-format
 msgid "Attempt to look up %(item)s on a missing value"
 msgstr "Forsøk på å slå opp  %(attr)s på manglende verdi"
 
-#: ../roundup/cgi/templating.py:2582
+#: ../roundup/cgi/templating.py:2584
 #, python-format
 msgid "<option %svalue=\"-1\">- no selection -</option>"
 msgstr "<option %svalue=\"-1\">- intet valg -</option>"
 
-#: ../roundup/cgi/templating.py:3743
+#: ../roundup/cgi/templating.py:3745
 #, python-format
 msgid "Unable to read or expand file '%(name)s' in template '%(template)s'."
 msgstr ""
 
-#: ../roundup/cgi/templating.py:3793
+#: ../roundup/cgi/templating.py:3795
 #, python-format
 msgid ""
 "Found an incorrect token when expandfile applied string subsitution on "
@@ -2961,6 +2967,63 @@
 msgid "not of form [arg=value,value,...;arg=value,value,...]"
 msgstr "ikke på formen [arg=value,value,...;arg=value,value,...]"
 
+#: ../roundup/pygettext.py:401
+#, python-format
+msgid "*** %(file)s:%(lineno)s: Seen unexpected token \"%(token)s\""
+msgstr ""
+
+#: ../roundup/pygettext.py:457
+#, python-format
+msgid "# File: %(filename)s, line: %(lineno)d"
+msgstr ""
+
+#: ../roundup/pygettext.py:464
+#, python-format
+msgid " %(filename)s:%(lineno)d"
+msgstr ""
+
+#: ../roundup/pygettext.py:540
+#, fuzzy, python-format
+msgid "Invalid value for --style: %s"
+msgstr "Ugylig login"
+
+#: ../roundup/pygettext.py:548
+#, python-format
+msgid "pygettext.py (xgettext for Python) %s"
+msgstr ""
+
+#: ../roundup/pygettext.py:554
+#, python-format
+msgid "--width argument must be an integer: %s"
+msgstr ""
+
+#: ../roundup/pygettext.py:582
+#, python-format
+msgid "Can't read --exclude-file: %s"
+msgstr ""
+
+#: ../roundup/pygettext.py:601
+msgid "Reading standard input"
+msgstr ""
+
+#: ../roundup/pygettext.py:606
+#, python-format
+msgid "Working on %s"
+msgstr ""
+
+#: ../roundup/pygettext.py:640
+msgid "a unicode string"
+msgstr ""
+
+#: ../roundup/pygettext.py:642
+#, python-format
+msgid "*** Seen unexpected token \"%(token)s\""
+msgstr ""
+
+#: ../roundup/pygettext.py:643
+msgid "morethanonestring"
+msgstr ""
+
 #: ../roundup/rest.py:410
 #, python-format
 msgid "Method %(m)s not allowed. Allowed: %(a)s"
@@ -2990,7 +3053,7 @@
 "%(acceptable_types)s"
 msgstr ""
 
-#: ../roundup/rest.py:2437
+#: ../roundup/rest.py:2441
 #, python-format
 msgid ""
 "Unrecognized api version: %s. See /rest without specifying api version for "
@@ -3097,24 +3160,33 @@
 "Var:\n"
 "%(old)s"
 
-#: ../roundup/scripts/roundup_demo.py:151
-#, python-format
-msgid "Enter directory path to create demo tracker [%s]: "
-msgstr "Oppgi katalogsti for å lage demo-sporer [%s]: "
-
-#: ../roundup/scripts/roundup_demo.py:170
+#: ../roundup/scripts/roundup_demo.py:50
 #, python-format
 msgid ""
 "Enter tracker template to use (one of (%(template_list)s)) "
 "[%(default_template)s]: "
 msgstr ""
 
-#: ../roundup/scripts/roundup_gettext.py:35
+#: ../roundup/scripts/roundup_demo.py:166
+#, python-format
+msgid "Enter directory path to create demo tracker [%s]: "
+msgstr "Oppgi katalogsti for å lage demo-sporer [%s]: "
+
+#: ../roundup/scripts/roundup_gettext.py:33
+msgid ""
+"\n"
+"Extracting translatable strings only from html templates.\n"
+"Because the 'polib' module is missing, unable to extract\n"
+"translations from detectors or extensions.\n"
+"The 'polib' module can be installed with pip.\n"
+msgstr ""
+
+#: ../roundup/scripts/roundup_gettext.py:71
 #, python-format
 msgid "Usage: %(program)s <tracker home>"
 msgstr "Bruk: %(program)s <tracker home>"
 
-#: ../roundup/scripts/roundup_gettext.py:51
+#: ../roundup/scripts/roundup_gettext.py:89
 #, python-format
 msgid "No tracker templates found in directory %s"
 msgstr "Ingen sporer maler funnet i katalog %s"
--- a/locale/roundup.pot	Wed Aug 07 21:43:40 2024 -0400
+++ b/locale/roundup.pot	Wed Aug 07 21:52:58 2024 -0400
@@ -8,7 +8,7 @@
 msgstr ""
 "Project-Id-Version: Roundup 2.4.0\n"
 "Report-Msgid-Bugs-To: roundup-devel@lists.sourceforge.net\n"
-"POT-Creation-Date: 2024-07-09 15:13-0400\n"
+"POT-Creation-Date: 2024-08-07 21:43-0400\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"
@@ -27,19 +27,19 @@
 msgid "You may not retire the admin or anonymous user"
 msgstr ""
 
-#: ../roundup/admin.py:130
+#: ../roundup/admin.py:131
 msgid ""
 "Have 'display designator[,designator*]' show header inside\n"
 "      []'s before items. Includes retired/active status.\n"
 msgstr ""
 
-#: ../roundup/admin.py:134
+#: ../roundup/admin.py:135
 msgid ""
 "Have 'display designator' and 'specification class' show\n"
 "      protected fields: creator, id etc.\n"
 msgstr ""
 
-#: ../roundup/admin.py:138
+#: ../roundup/admin.py:139
 msgid ""
 "Controls history options. It is a bitstring where setting\n"
 "      the bit disables the feature. A value of 0 (default)\n"
@@ -50,57 +50,57 @@
 "      history.\n"
 msgstr ""
 
-#: ../roundup/admin.py:147
+#: ../roundup/admin.py:148
 msgid ""
 "Set the number of lines of history to keep for this session.\n"
 "      -1 is infinite.\n"
 msgstr ""
 
-#: ../roundup/admin.py:151
+#: ../roundup/admin.py:152
 msgid "Set indexer to use when running 'reindex' NYI\n"
 msgstr ""
 
-#: ../roundup/admin.py:154
+#: ../roundup/admin.py:155
 msgid "Force reopening of tracker when running each command.\n"
 msgstr ""
 
-#: ../roundup/admin.py:157
+#: ../roundup/admin.py:158
 msgid ""
 "set the number of rows imported before a database commit is\n"
 "      done. Used only for imports on PostgreSQL.\n"
 msgstr ""
 
-#: ../roundup/admin.py:159
+#: ../roundup/admin.py:160
 msgid "Show retired items in table, list etc. One of 'no', 'only', 'both'\n"
 msgstr ""
 
-#: ../roundup/admin.py:161
-msgid "internal mapping for show_retired.\n"
-msgstr ""
-
 #: ../roundup/admin.py:162
+msgid "internal mapping for show_retired.\n"
+msgstr ""
+
+#: ../roundup/admin.py:163
 msgid "Enable verbose output: tracing, descriptions...\n"
 msgstr ""
 
-#: ../roundup/admin.py:174 ../roundup/admin.py:1179 ../roundup/admin.py:1824
-#: ../roundup/admin.py:1856 ../roundup/admin.py:174:1179 :1824:1856
+#: ../roundup/admin.py:175 ../roundup/admin.py:1188 ../roundup/admin.py:1836
+#: ../roundup/admin.py:1868 ../roundup/admin.py:175:1188 :1836:1868
 #, python-format
 msgid "no such class \"%(classname)s\""
 msgstr ""
 
-#: ../roundup/admin.py:187
+#: ../roundup/admin.py:188
 #, python-format
 msgid "argument \"%(arg)s\" not propname=value"
 msgstr ""
 
-#: ../roundup/admin.py:200
+#: ../roundup/admin.py:201
 #, python-format
 msgid ""
 "Problem: %(message)s\n"
 "\n"
 msgstr ""
 
-#: ../roundup/admin.py:201
+#: ../roundup/admin.py:202
 #, python-format
 msgid ""
 "%(message)sUsage: roundup-admin [options] [<command> <arguments>]\n"
@@ -131,17 +131,17 @@
 " roundup-admin help all                   -- all available help\n"
 msgstr ""
 
-#: ../roundup/admin.py:230
+#: ../roundup/admin.py:231
 msgid "Commands: "
 msgstr ""
 
-#: ../roundup/admin.py:237
+#: ../roundup/admin.py:238
 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:266
+#: ../roundup/admin.py:270
 msgid ""
 "\n"
 "All commands (except help) require a tracker specifier. This is just\n"
@@ -207,21 +207,21 @@
 "Command help:\n"
 msgstr ""
 
-#: ../roundup/admin.py:330
+#: ../roundup/admin.py:334
 #, python-format
 msgid "%s:"
 msgstr ""
 
-#: ../roundup/admin.py:435 ../roundup/admin.py:1384 ../roundup/admin.py:435:1384
+#: ../roundup/admin.py:439 ../roundup/admin.py:1396 ../roundup/admin.py:439:1396
 msgid "Templates:"
 msgstr ""
 
-#: ../roundup/admin.py:438 ../roundup/admin.py:1394 ../roundup/admin.py:438:1394
+#: ../roundup/admin.py:442 ../roundup/admin.py:1406 ../roundup/admin.py:442:1406
 msgid "Back ends:"
 msgstr ""
 
 #. noqa: ARG002
-#: ../roundup/admin.py:455
+#: ../roundup/admin.py:459
 msgid ""
 "Usage: commit\n"
 "        Commit changes made to the database during an interactive session.\n"
@@ -235,7 +235,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:470
+#: ../roundup/admin.py:474
 msgid ""
 "Usage: create classname property=value ...\n"
 "        Create a new entry of a given class.\n"
@@ -247,45 +247,44 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:478 ../roundup/admin.py:552 ../roundup/admin.py:600
-#: ../roundup/admin.py:723 ../roundup/admin.py:796 ../roundup/admin.py:842
-#: ../roundup/admin.py:893 ../roundup/admin.py:990 ../roundup/admin.py:1206
-#: ../roundup/admin.py:1357 ../roundup/admin.py:1485 ../roundup/admin.py:1571
-#: ../roundup/admin.py:1691 ../roundup/admin.py:1814 ../roundup/admin.py:1846
-#: ../roundup/admin.py:1962 ../roundup/admin.py:2016 ../roundup/admin.py:2064
-#: ../roundup/admin.py:478:552 :1206:1357 :1485 :1571:1691 :1814:1846 :1962:2016
-#: :2064 :600:723 :796:842 :893:990
+#: ../roundup/admin.py:482 ../roundup/admin.py:555 ../roundup/admin.py:606
+#: ../roundup/admin.py:733 ../roundup/admin.py:806 ../roundup/admin.py:851
+#: ../roundup/admin.py:902 ../roundup/admin.py:999 ../roundup/admin.py:1216
+#: ../roundup/admin.py:1369 ../roundup/admin.py:1497 ../roundup/admin.py:1580
+#: ../roundup/admin.py:1703 ../roundup/admin.py:1826 ../roundup/admin.py:1858
+#: ../roundup/admin.py:1974 ../roundup/admin.py:2028 ../roundup/admin.py:2076
+#: ../roundup/admin.py:482:555 :1216:1369 :1497 :1580:1703 :1826:1858 :1974:2028
+#: :2076 :606:733 :806:851 :902:999
 msgid "Not enough arguments supplied"
 msgstr ""
 
-#: ../roundup/admin.py:498
+#: ../roundup/admin.py:502
 #, python-format
 msgid "%(propname)s (Password): "
 msgstr ""
 
-#: ../roundup/admin.py:501
-#, python-format
-msgid "   %(propname)s (Again): "
-msgstr ""
-
 #: ../roundup/admin.py:505
+#, python-format
+msgid "   %(propname)s (Again): "
+msgstr ""
+
+#: ../roundup/admin.py:509
 msgid "Sorry, try again..."
 msgstr ""
 
-#: ../roundup/admin.py:510
+#: ../roundup/admin.py:514
 #, python-format
 msgid "%(propname)s (%(proptype)s): "
 msgstr ""
 
-#: ../roundup/admin.py:529
+#: ../roundup/admin.py:533
 #, python-format
 msgid "you must provide the \"%(propname)s\" property."
 msgstr ""
 
-#: ../roundup/admin.py:541
+#: ../roundup/admin.py:545
 msgid ""
 "Usage: display designator[,designator]*\n"
-"\n"
 "        Show the property values for the given node(s).\n"
 "\n"
 "        A designator is a classname and a nodeid concatenated,\n"
@@ -296,46 +295,52 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:583
+#: ../roundup/admin.py:586
 #, python-format
 msgid "%(protected)s%(key)s: %(value)s"
 msgstr ""
 
 #. grab the directory to export to
-#: ../roundup/admin.py:586
+#: ../roundup/admin.py:589
 msgid ""
 "Usage: export [[-]class[,class]] export_dir\n"
-"        Export the database to colon-separated-value files.\n"
+"        Export the database and file content.\n"
+"\n"
+"        Database content is exported to colon separated files.\n"
 "        To exclude the files (e.g. for the msg or file class),\n"
 "        use the exporttables command.\n"
 "\n"
 "        Optionally limit the export to just the named classes\n"
-"        or exclude the named classes, if the 1st argument starts with '-'.\n"
+"        or exclude the named classes, if the 1st argument\n"
+"        starts with '-'.\n"
 "\n"
 "        This action exports the current data from the database into\n"
 "        colon-separated-value files that are placed in the nominated\n"
-"        destination directory.\n"
+"        export_dir directory.\n"
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:698
+#: ../roundup/admin.py:704
 msgid ""
 "Usage: exporttables [[-]class[,class]] export_dir\n"
-"        Export the database to colon-separated-value files, excluding the\n"
-"        files below $TRACKER_HOME/db/files/ (which can be archived "
-"separately).\n"
+"        Export only the database to files, no file content.\n"
+"\n"
+"        Database content is exported to colon separated files.\n"
+"        The files below $TRACKER_HOME/db/files/ (which can be\n"
+"        archived separately) are not part of the export.\n"
 "        To include the files, use the export command.\n"
 "\n"
 "        Optionally limit the export to just the named classes\n"
-"        or exclude the named classes, if the 1st argument starts with '-'.\n"
+"        or exclude the named classes, if the 1st argument\n"
+"        starts with '-'.\n"
 "\n"
 "        This action exports the current data from the database into\n"
-"        colon-separated-value files that are placed in the nominated\n"
+"        colon-separated-value files that are placed in the export_dir\n"
 "        destination directory.\n"
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:713
+#: ../roundup/admin.py:723
 msgid ""
 "Usage: filter classname propname=value ...\n"
 "        Find the nodes of the given class with a given property value.\n"
@@ -348,19 +353,19 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:754
+#: ../roundup/admin.py:764
 #, python-format
 msgid "Class %(curclassname)s has no property %(pn)s in %(propname)s."
 msgstr ""
 
-#: ../roundup/admin.py:781 ../roundup/admin.py:830 ../roundup/admin.py:1505
-#: ../roundup/admin.py:1518 ../roundup/admin.py:2086 ../roundup/admin.py:781:830
-#: :1505:1518 :2086
+#: ../roundup/admin.py:791 ../roundup/admin.py:840 ../roundup/admin.py:1517
+#: ../roundup/admin.py:1530 ../roundup/admin.py:2098 ../roundup/admin.py:791:840
+#: :1517:1530 :2098
 #, python-format
 msgid "%(classname)s has no property \"%(propname)s\""
 msgstr ""
 
-#: ../roundup/admin.py:788
+#: ../roundup/admin.py:798
 msgid ""
 "Usage: find classname propname=value ...\n"
 "        Find the nodes of the given class with a given link property value.\n"
@@ -371,15 +376,14 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:837
+#: ../roundup/admin.py:847
 msgid ""
-"Usage: genconfig <filename>\n"
-"        Generate a new tracker config file (ini style) with default\n"
-"        values in <filename>.\n"
+"Usage: genconfig filename\n"
+"        Create a new tracker config file with default values in filename.\n"
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:855
+#: ../roundup/admin.py:864
 #, python-format
 msgid ""
 "Changing option\n"
@@ -387,20 +391,20 @@
 "from old default of %(old_number)s to new default of %(new_number)s."
 msgstr ""
 
-#: ../roundup/admin.py:866
+#: ../roundup/admin.py:875
 #, python-format
 msgid ""
 "Update 'password_pbkdf2_default_rounds' to a number equal to or larger\n"
 "  than %s.\n"
 msgstr ""
 
-#: ../roundup/admin.py:873
+#: ../roundup/admin.py:882
 msgid ""
 "Check the rdbms mysql_* settings. Your charset and collations may need\n"
 "  to be changed. See upgrading instructions.\n"
 msgstr ""
 
-#: ../roundup/admin.py:883
+#: ../roundup/admin.py:892
 msgid ""
 "Usage: get property designator[,designator]*\n"
 "        Get the given property of one or more designator(s).\n"
@@ -413,23 +417,23 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:916
+#: ../roundup/admin.py:925
 #, python-format
 msgid "property %s is not of type Multilink or Link so -d flag does not apply."
 msgstr ""
 
-#: ../roundup/admin.py:933 ../roundup/admin.py:1181 ../roundup/admin.py:1858
-#: ../roundup/admin.py:933:1181 :1858
+#: ../roundup/admin.py:942 ../roundup/admin.py:1190 ../roundup/admin.py:1842
+#: ../roundup/admin.py:1870 ../roundup/admin.py:942:1190 :1842:1870
 #, python-format
 msgid "no such %(classname)s node \"%(nodeid)s\""
 msgstr ""
 
-#: ../roundup/admin.py:936
+#: ../roundup/admin.py:945
 #, python-format
 msgid "no such %(classname)s property \"%(propname)s\""
 msgstr ""
 
-#: ../roundup/admin.py:941
+#: ../roundup/admin.py:950
 msgid ""
 "Usage: help topic\n"
 "        Give help about topic.\n"
@@ -441,12 +445,12 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:960
+#: ../roundup/admin.py:969
 #, python-format
 msgid "Sorry, no help for \"%(topic)s\""
 msgstr ""
 
-#: ../roundup/admin.py:977
+#: ../roundup/admin.py:986
 msgid ""
 "Usage: history designator [skipquiet] [raw]\n"
 "        Show the history entries of a designator.\n"
@@ -461,26 +465,26 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1002
+#: ../roundup/admin.py:1011
 #, python-format
 msgid "Unexpected argument(s): %s. Expected 'skipquiet' or 'raw'."
 msgstr ""
 
-#: ../roundup/admin.py:1053
+#: ../roundup/admin.py:1062
 msgid "removed"
 msgstr ""
 
-#: ../roundup/admin.py:1055
+#: ../roundup/admin.py:1064
 msgid "added"
 msgstr ""
 
-#: ../roundup/admin.py:1057
+#: ../roundup/admin.py:1066
 #, python-format
 msgid "Unknown history set operation '%s'. Expected +/-."
 msgstr ""
 
 #. .Hint added issue23 to superseder
-#: ../roundup/admin.py:1082
+#: ../roundup/admin.py:1091
 #, python-format
 msgid "added %(class)s%(item_id)s to %(propname)s"
 msgstr ""
@@ -488,34 +492,35 @@
 #. .Hint read as: assignedto was admin(1)
 #. where assignedto is the property
 #. admin is the key name for value 1
-#: ../roundup/admin.py:1103
+#: ../roundup/admin.py:1112
 #, python-format
 msgid "%(prop)s was %(name)s(%(value)s)"
 msgstr ""
 
-#: ../roundup/admin.py:1109 ../roundup/admin.py:1138
-#: ../roundup/admin.py:1109:1138
+#: ../roundup/admin.py:1118 ../roundup/admin.py:1147
+#: ../roundup/admin.py:1118:1147
 #, python-format
 msgid "%(prop)s was %(value)s"
 msgstr ""
 
-#: ../roundup/admin.py:1128
+#: ../roundup/admin.py:1137
 #, python-format
 msgid "%(prop)s was [%(value_list)s]"
 msgstr ""
 
 #. .Hint modified nosy: added demo(3)
-#: ../roundup/admin.py:1135
+#: ../roundup/admin.py:1144
 #, python-format
 msgid "modified %(prop)s: %(how)s"
 msgstr ""
 
-#: ../roundup/admin.py:1186
+#: ../roundup/admin.py:1195
 msgid ""
 "Usage: import import_dir\n"
-"        Import a database from the directory containing CSV files,\n"
-"        two per class to import.\n"
+"        Import a database and file contents from the directory.\n"
 "\n"
+"        The directory should have the same format as one containing\n"
+"        the output of export. There are two files imported per class.\n"
 "        The files used in the import are:\n"
 "\n"
 "        <class>.csv\n"
@@ -533,16 +538,17 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1276
+#: ../roundup/admin.py:1287
 msgid ""
 "Usage: importtables export_dir\n"
+"        This imports the database tables exported using exporttables.\n"
 "\n"
-"        This imports the database tables exported using exporttables.\n"
+"        It does not import the content of files like msgs and files.\n"
 "        "
 msgstr ""
 
 #. password
-#: ../roundup/admin.py:1283
+#: ../roundup/admin.py:1295
 msgid ""
 "Usage: initialise [adminpw]\n"
 "        Initialise a new Roundup tracker.\n"
@@ -553,30 +559,30 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1297
+#: ../roundup/admin.py:1309
 msgid "Admin Password: "
 msgstr ""
 
-#: ../roundup/admin.py:1298
+#: ../roundup/admin.py:1310
 msgid "       Confirm: "
 msgstr ""
 
-#: ../roundup/admin.py:1302
-msgid "Instance home does not exist"
-msgstr ""
-
-#: ../roundup/admin.py:1306
-msgid "Instance has not been installed"
-msgstr ""
-
 #: ../roundup/admin.py:1314
+msgid "Instance home does not exist"
+msgstr ""
+
+#: ../roundup/admin.py:1318
+msgid "Instance has not been installed"
+msgstr ""
+
+#: ../roundup/admin.py:1326
 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:1334
+#: ../roundup/admin.py:1346
 msgid ""
 "Usage: install [template [backend [key=val[,key=val]]]]\n"
 "        Install a new Roundup tracker.\n"
@@ -602,12 +608,12 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1363
+#: ../roundup/admin.py:1375
 #, python-format
 msgid "Instance home parent directory \"%(parent)s\" does not exist"
 msgstr ""
 
-#: ../roundup/admin.py:1372
+#: ../roundup/admin.py:1384
 #, python-format
 msgid ""
 "WARNING: There appears to be a tracker in \"%(tracker_home)s\"!\n"
@@ -615,20 +621,20 @@
 "Erase it? Y/N: "
 msgstr ""
 
-#: ../roundup/admin.py:1385
+#: ../roundup/admin.py:1397
 msgid "Select template"
 msgstr ""
 
-#: ../roundup/admin.py:1395
+#: ../roundup/admin.py:1407
 msgid "Select backend"
 msgstr ""
 
-#: ../roundup/admin.py:1406
+#: ../roundup/admin.py:1418
 #, python-format
 msgid "Error in configuration settings: \"%s\""
 msgstr ""
 
-#: ../roundup/admin.py:1439
+#: ../roundup/admin.py:1451
 #, python-format
 msgid ""
 "\n"
@@ -637,11 +643,11 @@
 "   %(config_file)s"
 msgstr ""
 
-#: ../roundup/admin.py:1449
+#: ../roundup/admin.py:1461
 msgid " ... at a minimum, you must set following options:"
 msgstr ""
 
-#: ../roundup/admin.py:1454
+#: ../roundup/admin.py:1466
 #, python-format
 msgid ""
 "\n"
@@ -657,7 +663,7 @@
 "---------------------------------------------------------------------------\n"
 msgstr ""
 
-#: ../roundup/admin.py:1470
+#: ../roundup/admin.py:1482
 msgid ""
 "Usage: list classname [property]\n"
 "        List the instances of a class.\n"
@@ -673,20 +679,19 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1483
+#: ../roundup/admin.py:1495
 msgid "Too many arguments supplied"
 msgstr ""
 
-#: ../roundup/admin.py:1516
+#: ../roundup/admin.py:1528
 #, python-format
 msgid "%(nodeid)4s: %(value)s"
 msgstr ""
 
 #. noqa: ARG002  - args unused
-#: ../roundup/admin.py:1523
+#: ../roundup/admin.py:1535
 msgid ""
 "Usage: migrate\n"
-"\n"
 "        Update a tracker's database to be compatible with the Roundup\n"
 "        codebase.\n"
 "\n"
@@ -707,22 +712,20 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1544
+#: ../roundup/admin.py:1555
 #, python-format
 msgid "Tracker updated to schema version %s."
 msgstr ""
 
-#: ../roundup/admin.py:1548
+#: ../roundup/admin.py:1559
 #, python-format
 msgid "No migration action required. At schema version %s."
 msgstr ""
 
-#: ../roundup/admin.py:1553
+#: ../roundup/admin.py:1564
 msgid ""
 "Usage: pack period | date\n"
-"\n"
-"        Remove journal entries older than a period of time specified or\n"
-"        before a certain date.\n"
+"        Remove journal entries older than the date/period.\n"
 "\n"
 "        A period is specified using the suffixes \"y\", \"m\", and \"d\". "
 "The\n"
@@ -739,15 +742,16 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1581
+#: ../roundup/admin.py:1590
 msgid "Invalid format"
 msgstr ""
 
-#: ../roundup/admin.py:1592
+#: ../roundup/admin.py:1601
 msgid ""
 "Usage: perftest [mode] [arguments]*\n"
+"        Time operations in Roundup.\n"
 "\n"
-"        Time operations in Roundup. Supported arguments:\n"
+"        Supported arguments:\n"
 "\n"
 "            [password] [rounds=<integer>] [scheme=<scheme>]\n"
 "\n"
@@ -760,28 +764,30 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1625
+#: ../roundup/admin.py:1635
 msgid "Invalid 'rounds'. Must be larger than 999."
 msgstr ""
 
-#: ../roundup/admin.py:1629
+#: ../roundup/admin.py:1639
 #, python-format
 msgid "Invalid 'rounds'. It must be an integer not: %s"
 msgstr ""
 
-#: ../roundup/admin.py:1656
+#: ../roundup/admin.py:1666
 msgid "scheme does not support rounds."
 msgstr ""
 
-#: ../roundup/admin.py:1659
+#: ../roundup/admin.py:1669
 #, python-format
 msgid "Hash time: %(time)0.9f seconds, scheme: %(scheme)s, rounds: %(rounds)s"
 msgstr ""
 
-#: ../roundup/admin.py:1665
+#: ../roundup/admin.py:1675
 msgid ""
 "Usage: pragma setting=value | 'list'\n"
-"        Set internal admin settings to a value. E.G.\n"
+"        Set internal admin settings to a value.\n"
+"\n"
+"        For example:\n"
 "\n"
 "            pragma verbose=True\n"
 "            pragma verbose=yes\n"
@@ -805,49 +811,49 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1698
+#: ../roundup/admin.py:1710
 #, python-format
 msgid "Argument must be setting=value, was given: %s."
 msgstr ""
 
-#: ../roundup/admin.py:1701
+#: ../roundup/admin.py:1713
 msgid "Current settings and values (NYI - not yet implemented):"
 msgstr ""
 
-#: ../roundup/admin.py:1712
+#: ../roundup/admin.py:1724
 msgid ""
 "      Help for this pragma is missing. Please report it to the Roundup "
 "project.\n"
 msgstr ""
 
-#: ../roundup/admin.py:1718
+#: ../roundup/admin.py:1730
 #, python-format
 msgid "Unknown setting %s. Try \"pragma list\"."
 msgstr ""
 
-#: ../roundup/admin.py:1728
+#: ../roundup/admin.py:1740
 #, python-format
 msgid "Incorrect value for boolean setting %(setting)s: %(value)s."
 msgstr ""
 
-#: ../roundup/admin.py:1735
+#: ../roundup/admin.py:1747
 #, python-format
 msgid "Incorrect value for integer setting %(setting)s: %(value)s."
 msgstr ""
 
-#: ../roundup/admin.py:1742
+#: ../roundup/admin.py:1754
 #, python-format
 msgid ""
 "Incorrect value for setting %(setting)s: %(value)s. Should be no, both, or "
 "only."
 msgstr ""
 
-#: ../roundup/admin.py:1752
+#: ../roundup/admin.py:1764
 #, python-format
 msgid "Internal error: pragma can not handle values of type: %s"
 msgstr ""
 
-#: ../roundup/admin.py:1761
+#: ../roundup/admin.py:1773
 msgid ""
 "Usage: reindex [classname|classname:#-#|designator]*\n"
 "        Re-generate a tracker's search indexes.\n"
@@ -864,17 +870,17 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1783
+#: ../roundup/admin.py:1795
 #, python-format
 msgid "no such item \"%(designator)s\""
 msgstr ""
 
-#: ../roundup/admin.py:1793
-#, python-format
-msgid "no such item \"%(class)s%(id)s\""
-msgstr ""
-
 #: ../roundup/admin.py:1805
+#, python-format
+msgid "no such item \"%(class)s%(id)s\""
+msgstr ""
+
+#: ../roundup/admin.py:1817
 msgid ""
 "Usage: restore designator[,designator]*\n"
 "        Restore the retired node specified by designator.\n"
@@ -886,11 +892,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1830
-msgid "no such %(classname)s node \"%(nodeid)s\""
-msgstr ""
-
-#: ../roundup/admin.py:1836
+#: ../roundup/admin.py:1848
 msgid ""
 "Usage: retire designator[,designator]*\n"
 "        Retire the node specified by designator.\n"
@@ -904,7 +906,7 @@
 msgstr ""
 
 #. noqa: ARG002 - args unused
-#: ../roundup/admin.py:1864
+#: ../roundup/admin.py:1876
 msgid ""
 "Usage: rollback\n"
 "        Undo all changes that are pending commit to the database.\n"
@@ -916,59 +918,59 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1877
+#: ../roundup/admin.py:1889
 msgid ""
 "Usage: security [Role name]\n"
+"        Display the Permissions available to one or all Roles.\n"
 "\n"
-"             Display the Permissions available to one or all Roles.\n"
-"             Also validates that any properties defined in a\n"
-"             permission are valid.\n"
+"        Also validates that any properties defined in a\n"
+"        permission are valid.\n"
 "\n"
-"             Run this after changing your permissions to catch\n"
-"             typos.\n"
+"        Run this after changing your permissions to catch\n"
+"        typos.\n"
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1892
+#: ../roundup/admin.py:1904
 #, python-format
 msgid "No such Role \"%(role)s\"\n"
 msgstr ""
 
-#: ../roundup/admin.py:1898
-#, python-format
-msgid "New Web users get the Roles \"%(role)s\"\n"
-msgstr ""
-
-#: ../roundup/admin.py:1901
-#, python-format
-msgid "New Web users get the Role \"%(role)s\"\n"
-msgstr ""
-
-#: ../roundup/admin.py:1905
-#, python-format
-msgid "New Email users get the Roles \"%(role)s\"\n"
-msgstr ""
-
-#: ../roundup/admin.py:1907
-#, python-format
-msgid "New Email users get the Role \"%(role)s\"\n"
-msgstr ""
-
 #: ../roundup/admin.py:1910
 #, python-format
+msgid "New Web users get the Roles \"%(role)s\"\n"
+msgstr ""
+
+#: ../roundup/admin.py:1913
+#, python-format
+msgid "New Web users get the Role \"%(role)s\"\n"
+msgstr ""
+
+#: ../roundup/admin.py:1917
+#, python-format
+msgid "New Email users get the Roles \"%(role)s\"\n"
+msgstr ""
+
+#: ../roundup/admin.py:1919
+#, python-format
+msgid "New Email users get the Role \"%(role)s\"\n"
+msgstr ""
+
+#: ../roundup/admin.py:1922
+#, python-format
 msgid "Role \"%(name)s\":\n"
 msgstr ""
 
-#: ../roundup/admin.py:1916
+#: ../roundup/admin.py:1928
 msgid " %(description)s (%(name)s for \"%(klass)s\""
 msgstr ""
 
-#: ../roundup/admin.py:1916
+#: ../roundup/admin.py:1928
 #, python-format
 msgid " %(description)s (%(name)s for \"%(klass)s\": %(properties)s only)\n"
 msgstr ""
 
-#: ../roundup/admin.py:1929
+#: ../roundup/admin.py:1941
 #, python-format
 msgid ""
 "\n"
@@ -976,17 +978,17 @@
 "\n"
 msgstr ""
 
-#: ../roundup/admin.py:1935
+#: ../roundup/admin.py:1947
 #, python-format
 msgid " %(description)s (%(name)s for \"%(klass)s\" only)\n"
 msgstr ""
 
-#: ../roundup/admin.py:1938
+#: ../roundup/admin.py:1950
 #, python-format
 msgid " %(description)s (%(name)s)\n"
 msgstr ""
 
-#: ../roundup/admin.py:1942
+#: ../roundup/admin.py:1954
 msgid ""
 "Usage: set items property=value [property=value ...]\n"
 "        Set the given properties of one or more items(s).\n"
@@ -1007,7 +1009,7 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:2010
+#: ../roundup/admin.py:2022
 msgid ""
 "Usage: specification classname\n"
 "        Show the properties for a classname.\n"
@@ -1016,17 +1018,17 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:2029
+#: ../roundup/admin.py:2041
 #, python-format
 msgid "%(key)s: %(value)s (key property)\n"
 msgstr ""
 
-#: ../roundup/admin.py:2032
+#: ../roundup/admin.py:2044
 #, python-format
 msgid "%(key)s: %(value)s\n"
 msgstr ""
 
-#: ../roundup/admin.py:2035
+#: ../roundup/admin.py:2047
 msgid ""
 "Usage: table classname [property[,property]*]\n"
 "        List the instances of a class in tabular form.\n"
@@ -1058,17 +1060,17 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:2081
+#: ../roundup/admin.py:2093
 #, python-format
 msgid "\"%(spec)s\" not name:width"
 msgstr ""
 
-#: ../roundup/admin.py:2103
+#: ../roundup/admin.py:2115
 #, python-format
 msgid "\"%(spec)s\" does not have an integer width: \"%(width)s\""
 msgstr ""
 
-#: ../roundup/admin.py:2139
+#: ../roundup/admin.py:2151
 msgid ""
 "Usage: templates [trace_search]\n"
 "        List templates and their installed directories.\n"
@@ -1078,58 +1080,59 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:2167
+#: ../roundup/admin.py:2179
 msgid ""
 "Usage: updateconfig <filename>\n"
-"        Generate an updated tracker config file (ini style) in\n"
-"        <filename>. Use current settings from existing roundup\n"
-"        tracker in tracker home.\n"
+"        Merge existing tracker config with new settings.\n"
+"\n"
+"        Output the updated config file to <filename>. Use current\n"
+"        settings from existing roundup tracker in tracker home.\n"
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:2175 ../roundup/cgi/actions.py:886
+#: ../roundup/admin.py:2188 ../roundup/cgi/actions.py:886
 #: ../roundup/cgi/actions.py:897 ../roundup/cgi/actions.py:1099
 #: ../roundup/cgi/actions.py:1113 ../roundup/cgi/actions.py:886:897 :1099:1113
 #, python-format
 msgid "Error: %s"
 msgstr ""
 
-#: ../roundup/admin.py:2207
+#: ../roundup/admin.py:2220
 #, python-format
 msgid "Unknown command \"%(command)s\" (\"help commands\" for a list)"
 msgstr ""
 
-#: ../roundup/admin.py:2213
+#: ../roundup/admin.py:2226
 #, python-format
 msgid "Multiple commands match \"%(command)s\": %(list)s"
 msgstr ""
 
-#: ../roundup/admin.py:2228
+#: ../roundup/admin.py:2241
 msgid "Enter tracker home: "
 msgstr ""
 
-#: ../roundup/admin.py:2257 ../roundup/admin.py:2261
-#: ../roundup/admin.py:2257:2261
+#: ../roundup/admin.py:2270 ../roundup/admin.py:2274
+#: ../roundup/admin.py:2270:2274
 #, python-format
 msgid "Error: Couldn't open tracker: %(message)s"
 msgstr ""
 
-#: ../roundup/admin.py:2309
+#: ../roundup/admin.py:2322
 #, python-format
 msgid ""
 "Roundup %s ready for input.\n"
 "Type \"help\" for help."
 msgstr ""
 
-#: ../roundup/admin.py:2342
+#: ../roundup/admin.py:2355
 msgid "Note: command history and editing not available"
 msgstr ""
 
-#: ../roundup/admin.py:2348
-msgid "exit..."
-msgstr ""
-
 #: ../roundup/admin.py:2361
+msgid "exit..."
+msgstr ""
+
+#: ../roundup/admin.py:2374
 msgid "There are unsaved changes. Commit them (y/N)? "
 msgstr ""
 
@@ -1634,7 +1637,7 @@
 msgid "<em>undefined</em>"
 msgstr ""
 
-#: ../roundup/cgi/client.py:90
+#: ../roundup/cgi/client.py:105
 msgid ""
 "<html><head><title>An error has occurred</title></head>\n"
 "<body><h1>An error has occurred</h1>\n"
@@ -1643,154 +1646,154 @@
 "</body></html>"
 msgstr ""
 
-#: ../roundup/cgi/client.py:702 ../roundup/cgi/client.py:1622
-#: ../roundup/cgi/client.py:702:1622
+#: ../roundup/cgi/client.py:717 ../roundup/cgi/client.py:1635
+#: ../roundup/cgi/client.py:717:1635
 msgid "Required Header Missing"
 msgstr ""
 
-#: ../roundup/cgi/client.py:704
+#: ../roundup/cgi/client.py:719
 msgid "Client is not allowed to use Rest Interface."
 msgstr ""
 
-#: ../roundup/cgi/client.py:956
+#: ../roundup/cgi/client.py:971
 msgid "Form Error: "
 msgstr ""
 
-#: ../roundup/cgi/client.py:1049
+#: ../roundup/cgi/client.py:1064
 #, python-format
 msgid "Unrecognized charset: %r"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1318 ../roundup/cgi/client.py:2281
-#: ../roundup/cgi/client.py:1318:2281
+#: ../roundup/cgi/client.py:1331 ../roundup/cgi/client.py:2294
+#: ../roundup/cgi/client.py:1331:2294
 msgid "broken form: multiple @action values submitted"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1335
+#: ../roundup/cgi/client.py:1348
 msgid "Anonymous users are not allowed to use the web interface"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1483
+#: ../roundup/cgi/client.py:1496
 msgid "Referer header not available."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1487
+#: ../roundup/cgi/client.py:1500
 #, python-format
 msgid "csrf key used with wrong method from: %s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1516
+#: ../roundup/cgi/client.py:1529
 #, python-format
 msgid "csrf header %(header)s required but missing for user%(userid)s."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1520
-#, python-format
-msgid "Missing header: %s"
-msgstr ""
-
-#: ../roundup/cgi/client.py:1528
-#, python-format
-msgid "csrf Referer header check failed for user%(userid)s. Value=%(referer)s"
-msgstr ""
-
 #: ../roundup/cgi/client.py:1533
 #, python-format
+msgid "Missing header: %s"
+msgstr ""
+
+#: ../roundup/cgi/client.py:1541
+#, python-format
+msgid "csrf Referer header check failed for user%(userid)s. Value=%(referer)s"
+msgstr ""
+
+#: ../roundup/cgi/client.py:1546
+#, python-format
 msgid "Invalid Referer: %s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1548
+#: ../roundup/cgi/client.py:1561
 #, python-format
 msgid "csrf Origin header check failed for user%(userid)s. Value=%(origin)s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1553
+#: ../roundup/cgi/client.py:1566
 #, python-format
 msgid "Invalid Origin %s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1567
+#: ../roundup/cgi/client.py:1580
 #, python-format
 msgid ""
 "csrf X-FORWARDED-HOST header check failed for user%(userid)s. Value=%(host)s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1573
+#: ../roundup/cgi/client.py:1586
 #, python-format
 msgid "Invalid X-FORWARDED-HOST %s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1592
-#, python-format
-msgid "csrf HOST header check failed for user%(userid)s. Value=%(host)s"
-msgstr ""
-
-#: ../roundup/cgi/client.py:1597
-#, python-format
-msgid "Invalid HOST %s"
-msgstr ""
-
 #: ../roundup/cgi/client.py:1605
+#, python-format
+msgid "csrf HOST header check failed for user%(userid)s. Value=%(host)s"
+msgstr ""
+
+#: ../roundup/cgi/client.py:1610
+#, python-format
+msgid "Invalid HOST %s"
+msgstr ""
+
+#: ../roundup/cgi/client.py:1618
 msgid "Csrf: unable to verify sufficient headers"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1606
-msgid "Unable to verify sufficient headers"
-msgstr ""
-
 #: ../roundup/cgi/client.py:1619
+msgid "Unable to verify sufficient headers"
+msgstr ""
+
+#: ../roundup/cgi/client.py:1632
 #, python-format
 msgid "csrf X-REQUESTED-WITH xmlrpc required header check failed for user%s."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1660
+#: ../roundup/cgi/client.py:1673
 #, python-format
 msgid "Required csrf field missing for user%s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1662 ../roundup/cgi/client.py:1689
-#: ../roundup/cgi/client.py:1706 ../roundup/cgi/client.py:1662:1689 :1706
+#: ../roundup/cgi/client.py:1675 ../roundup/cgi/client.py:1702
+#: ../roundup/cgi/client.py:1719 ../roundup/cgi/client.py:1675:1702 :1719
 msgid ""
 "We can't validate your session (csrf failure). Re-enter any unsaved data and "
 "try again."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1666
+#: ../roundup/cgi/client.py:1679
 #, python-format
 msgid "csrf field not supplied by user%s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1678
+#: ../roundup/cgi/client.py:1691
 #, 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:1696
+#: ../roundup/cgi/client.py:1709
 #, 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:1888
+#: ../roundup/cgi/client.py:1901
 msgid "You are not allowed to view this file."
 msgstr ""
 
-#: ../roundup/cgi/client.py:2159
+#: ../roundup/cgi/client.py:2172
 #, python-format
 msgid "%(starttag)sTime elapsed: %(seconds)fs%(endtag)s\n"
 msgstr ""
 
-#: ../roundup/cgi/client.py:2163
+#: ../roundup/cgi/client.py:2176
 #, 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:2703
+#: ../roundup/cgi/client.py:2716
 #, python-format
 msgid ""
 "Cache failure: compressed file %(compressed)s is older than its source file "
@@ -1848,140 +1851,140 @@
 msgstr[0] ""
 msgstr[1] ""
 
-#: ../roundup/cgi/templating.py:277
+#: ../roundup/cgi/templating.py:278
 #, python-format
 msgid "You are not allowed to %(action)s items of class %(class)s"
 msgstr ""
 
-#: ../roundup/cgi/templating.py:914
+#: ../roundup/cgi/templating.py:916
 msgid "(list)"
 msgstr ""
 
-#: ../roundup/cgi/templating.py:989
+#: ../roundup/cgi/templating.py:991
 msgid "Submit New Entry"
 msgstr ""
 
-#: ../roundup/cgi/templating.py:1011 ../roundup/cgi/templating.py:1187
-#: ../roundup/cgi/templating.py:1822 ../roundup/cgi/templating.py:1853
-#: ../roundup/cgi/templating.py:1874 ../roundup/cgi/templating.py:1912
-#: ../roundup/cgi/templating.py:1965 ../roundup/cgi/templating.py:1989
-#: ../roundup/cgi/templating.py:1996 ../roundup/cgi/templating.py:2033
-#: ../roundup/cgi/templating.py:2086 ../roundup/cgi/templating.py:2119
-#: ../roundup/cgi/templating.py:2214 ../roundup/cgi/templating.py:2235
-#: ../roundup/cgi/templating.py:2326 ../roundup/cgi/templating.py:2346
-#: ../roundup/cgi/templating.py:2368 ../roundup/cgi/templating.py:2411
-#: ../roundup/cgi/templating.py:2421 ../roundup/cgi/templating.py:2486
-#: ../roundup/cgi/templating.py:2789 ../roundup/cgi/templating.py:1011:1187
-#: :1822:1853 :1874:1912 :1965:1989 :1996:2033 :2086:2119 :2214:2235 :2326:2346
-#: :2368:2411 :2421:2486 :2789
+#: ../roundup/cgi/templating.py:1013 ../roundup/cgi/templating.py:1189
+#: ../roundup/cgi/templating.py:1824 ../roundup/cgi/templating.py:1855
+#: ../roundup/cgi/templating.py:1876 ../roundup/cgi/templating.py:1914
+#: ../roundup/cgi/templating.py:1967 ../roundup/cgi/templating.py:1991
+#: ../roundup/cgi/templating.py:1998 ../roundup/cgi/templating.py:2035
+#: ../roundup/cgi/templating.py:2088 ../roundup/cgi/templating.py:2121
+#: ../roundup/cgi/templating.py:2216 ../roundup/cgi/templating.py:2237
+#: ../roundup/cgi/templating.py:2328 ../roundup/cgi/templating.py:2348
+#: ../roundup/cgi/templating.py:2370 ../roundup/cgi/templating.py:2413
+#: ../roundup/cgi/templating.py:2423 ../roundup/cgi/templating.py:2488
+#: ../roundup/cgi/templating.py:2791 ../roundup/cgi/templating.py:1013:1189
+#: :1824:1855 :1876:1914 :1967:1991 :1998:2035 :2088:2121 :2216:2237 :2328:2348
+#: :2370:2413 :2423:2488 :2791
 msgid "[hidden]"
 msgstr ""
 
-#: ../roundup/cgi/templating.py:1012
+#: ../roundup/cgi/templating.py:1014
 msgid "New node - no history"
 msgstr ""
 
-#: ../roundup/cgi/templating.py:1152
+#: ../roundup/cgi/templating.py:1154
 msgid "Submit Changes"
 msgstr ""
 
-#: ../roundup/cgi/templating.py:1230
+#: ../roundup/cgi/templating.py:1232
 msgid "<em>The indicated property no longer exists</em>"
 msgstr ""
 
-#: ../roundup/cgi/templating.py:1266
+#: ../roundup/cgi/templating.py:1268
 #, python-format
 msgid "The linked class %(classname)s no longer exists"
 msgstr ""
 
-#: ../roundup/cgi/templating.py:1303 ../roundup/cgi/templating.py:1333
-#: ../roundup/cgi/templating.py:2495 ../roundup/cgi/templating.py:2798
-#: ../roundup/cgi/templating.py:1303:1333 :2495:2798
+#: ../roundup/cgi/templating.py:1305 ../roundup/cgi/templating.py:1335
+#: ../roundup/cgi/templating.py:2497 ../roundup/cgi/templating.py:2800
+#: ../roundup/cgi/templating.py:1305:1335 :2497:2800
 msgid "[label is missing]"
 msgstr ""
 
-#: ../roundup/cgi/templating.py:1307 ../roundup/cgi/templating.py:1336
-#: ../roundup/cgi/templating.py:1307:1336
+#: ../roundup/cgi/templating.py:1309 ../roundup/cgi/templating.py:1338
+#: ../roundup/cgi/templating.py:1309:1338
 msgid "<strike>The linked node no longer exists</strike>"
 msgstr ""
 
-#: ../roundup/cgi/templating.py:1398
+#: ../roundup/cgi/templating.py:1400
 #, python-format
 msgid "%s: (no value)"
 msgstr ""
 
-#: ../roundup/cgi/templating.py:1414
+#: ../roundup/cgi/templating.py:1416
 #, python-format
 msgid ""
 "<strong><em>This event %s is not handled by the history display!</em></strong>"
 msgstr ""
 
-#: ../roundup/cgi/templating.py:1427
+#: ../roundup/cgi/templating.py:1429
 msgid "<tr><td colspan=4><strong>Note:</strong></td></tr>"
 msgstr ""
 
-#: ../roundup/cgi/templating.py:1436
-msgid "History"
-msgstr ""
-
 #: ../roundup/cgi/templating.py:1438
-msgid "<th>Date</th>"
-msgstr ""
-
-#: ../roundup/cgi/templating.py:1439
-msgid "<th>User</th>"
+msgid "History"
 msgstr ""
 
 #: ../roundup/cgi/templating.py:1440
-msgid "<th>Action</th>"
+msgid "<th>Date</th>"
 msgstr ""
 
 #: ../roundup/cgi/templating.py:1441
+msgid "<th>User</th>"
+msgstr ""
+
+#: ../roundup/cgi/templating.py:1442
+msgid "<th>Action</th>"
+msgstr ""
+
+#: ../roundup/cgi/templating.py:1443
 msgid "<th>Args</th>"
 msgstr ""
 
-#: ../roundup/cgi/templating.py:1492
+#: ../roundup/cgi/templating.py:1494
 #, python-format
 msgid "Copy of %(class)s %(id)s"
 msgstr ""
 
-#: ../roundup/cgi/templating.py:2123 ../roundup/cgi/templating.py:2158
-#: ../roundup/cgi/templating.py:1380:2123 :2158
+#: ../roundup/cgi/templating.py:2125 ../roundup/cgi/templating.py:2160
+#: ../roundup/cgi/templating.py:1382:2125 :2160
 msgid "No"
 msgstr ""
 
-#: ../roundup/cgi/templating.py:2123 ../roundup/cgi/templating.py:2152
-#: ../roundup/cgi/templating.py:1380:2123 :2152
+#: ../roundup/cgi/templating.py:2125 ../roundup/cgi/templating.py:2154
+#: ../roundup/cgi/templating.py:1382:2125 :2154
 msgid "Yes"
 msgstr ""
 
-#: ../roundup/cgi/templating.py:2284
+#: ../roundup/cgi/templating.py:2286
 msgid ""
 "default value for DateHTMLProperty must be either DateHTMLProperty or string "
 "date representation."
 msgstr ""
 
-#: ../roundup/cgi/templating.py:2466
+#: ../roundup/cgi/templating.py:2468
 #, python-format
 msgid "Attempt to look up %(attr)s on a missing value"
 msgstr ""
 
-#: ../roundup/cgi/templating.py:2477
+#: ../roundup/cgi/templating.py:2479
 #, python-format
 msgid "Attempt to look up %(item)s on a missing value"
 msgstr ""
 
-#: ../roundup/cgi/templating.py:2582
+#: ../roundup/cgi/templating.py:2584
 #, python-format
 msgid "<option %svalue=\"-1\">- no selection -</option>"
 msgstr ""
 
-#: ../roundup/cgi/templating.py:3743
+#: ../roundup/cgi/templating.py:3745
 #, python-format
 msgid "Unable to read or expand file '%(name)s' in template '%(template)s'."
 msgstr ""
 
-#: ../roundup/cgi/templating.py:3793
+#: ../roundup/cgi/templating.py:3795
 #, python-format
 msgid ""
 "Found an incorrect token when expandfile applied string subsitution on "
@@ -2430,6 +2433,63 @@
 msgid "not of form [arg=value,value,...;arg=value,value,...]"
 msgstr ""
 
+#: ../roundup/pygettext.py:401
+#, python-format
+msgid "*** %(file)s:%(lineno)s: Seen unexpected token \"%(token)s\""
+msgstr ""
+
+#: ../roundup/pygettext.py:457
+#, python-format
+msgid "# File: %(filename)s, line: %(lineno)d"
+msgstr ""
+
+#: ../roundup/pygettext.py:464
+#, python-format
+msgid " %(filename)s:%(lineno)d"
+msgstr ""
+
+#: ../roundup/pygettext.py:540
+#, python-format
+msgid "Invalid value for --style: %s"
+msgstr ""
+
+#: ../roundup/pygettext.py:548
+#, python-format
+msgid "pygettext.py (xgettext for Python) %s"
+msgstr ""
+
+#: ../roundup/pygettext.py:554
+#, python-format
+msgid "--width argument must be an integer: %s"
+msgstr ""
+
+#: ../roundup/pygettext.py:582
+#, python-format
+msgid "Can't read --exclude-file: %s"
+msgstr ""
+
+#: ../roundup/pygettext.py:601
+msgid "Reading standard input"
+msgstr ""
+
+#: ../roundup/pygettext.py:606
+#, python-format
+msgid "Working on %s"
+msgstr ""
+
+#: ../roundup/pygettext.py:640
+msgid "a unicode string"
+msgstr ""
+
+#: ../roundup/pygettext.py:642
+#, python-format
+msgid "*** Seen unexpected token \"%(token)s\""
+msgstr ""
+
+#: ../roundup/pygettext.py:643
+msgid "morethanonestring"
+msgstr ""
+
 #: ../roundup/rest.py:410
 #, python-format
 msgid "Method %(m)s not allowed. Allowed: %(a)s"
@@ -2459,7 +2519,7 @@
 "%(acceptable_types)s"
 msgstr ""
 
-#: ../roundup/rest.py:2437
+#: ../roundup/rest.py:2441
 #, python-format
 msgid ""
 "Unrecognized api version: %s. See /rest without specifying api version for "
@@ -2560,24 +2620,33 @@
 "%(old)s"
 msgstr ""
 
-#: ../roundup/scripts/roundup_demo.py:151
-#, python-format
-msgid "Enter directory path to create demo tracker [%s]: "
-msgstr ""
-
-#: ../roundup/scripts/roundup_demo.py:170
+#: ../roundup/scripts/roundup_demo.py:50
 #, python-format
 msgid ""
 "Enter tracker template to use (one of (%(template_list)s)) "
 "[%(default_template)s]: "
 msgstr ""
 
-#: ../roundup/scripts/roundup_gettext.py:35
+#: ../roundup/scripts/roundup_demo.py:166
+#, python-format
+msgid "Enter directory path to create demo tracker [%s]: "
+msgstr ""
+
+#: ../roundup/scripts/roundup_gettext.py:33
+msgid ""
+"\n"
+"Extracting translatable strings only from html templates.\n"
+"Because the 'polib' module is missing, unable to extract\n"
+"translations from detectors or extensions.\n"
+"The 'polib' module can be installed with pip.\n"
+msgstr ""
+
+#: ../roundup/scripts/roundup_gettext.py:71
 #, python-format
 msgid "Usage: %(program)s <tracker home>"
 msgstr ""
 
-#: ../roundup/scripts/roundup_gettext.py:51
+#: ../roundup/scripts/roundup_gettext.py:89
 #, python-format
 msgid "No tracker templates found in directory %s"
 msgstr ""
--- a/locale/ru.po	Wed Aug 07 21:43:40 2024 -0400
+++ b/locale/ru.po	Wed Aug 07 21:52:58 2024 -0400
@@ -7,7 +7,7 @@
 msgstr ""
 "Project-Id-Version: Roundup 2.4.0\n"
 "Report-Msgid-Bugs-To: roundup-devel@lists.sourceforge.net\n"
-"POT-Creation-Date: 2024-07-09 15:12-0400\n"
+"POT-Creation-Date: 2024-08-07 21:43-0400\n"
 "PO-Revision-Date: 2013-10-31 12:21+0100\n"
 "Last-Translator: alexander smishlajev <alex@tycobka.lv>\n"
 "Language-Team: Russian\n"
@@ -29,19 +29,19 @@
 msgid "You may not retire the admin or anonymous user"
 msgstr "   admin  anonymous."
 
-#: ../roundup/admin.py:130
+#: ../roundup/admin.py:131
 msgid ""
 "Have 'display designator[,designator*]' show header inside\n"
 "      []'s before items. Includes retired/active status.\n"
 msgstr ""
 
-#: ../roundup/admin.py:134
+#: ../roundup/admin.py:135
 msgid ""
 "Have 'display designator' and 'specification class' show\n"
 "      protected fields: creator, id etc.\n"
 msgstr ""
 
-#: ../roundup/admin.py:138
+#: ../roundup/admin.py:139
 msgid ""
 "Controls history options. It is a bitstring where setting\n"
 "      the bit disables the feature. A value of 0 (default)\n"
@@ -52,50 +52,50 @@
 "      history.\n"
 msgstr ""
 
-#: ../roundup/admin.py:147
+#: ../roundup/admin.py:148
 msgid ""
 "Set the number of lines of history to keep for this session.\n"
 "      -1 is infinite.\n"
 msgstr ""
 
-#: ../roundup/admin.py:151
+#: ../roundup/admin.py:152
 msgid "Set indexer to use when running 'reindex' NYI\n"
 msgstr ""
 
-#: ../roundup/admin.py:154
+#: ../roundup/admin.py:155
 msgid "Force reopening of tracker when running each command.\n"
 msgstr ""
 
-#: ../roundup/admin.py:157
+#: ../roundup/admin.py:158
 msgid ""
 "set the number of rows imported before a database commit is\n"
 "      done. Used only for imports on PostgreSQL.\n"
 msgstr ""
 
-#: ../roundup/admin.py:159
+#: ../roundup/admin.py:160
 msgid "Show retired items in table, list etc. One of 'no', 'only', 'both'\n"
 msgstr ""
 
-#: ../roundup/admin.py:161
-msgid "internal mapping for show_retired.\n"
-msgstr ""
-
 #: ../roundup/admin.py:162
+msgid "internal mapping for show_retired.\n"
+msgstr ""
+
+#: ../roundup/admin.py:163
 msgid "Enable verbose output: tracing, descriptions...\n"
 msgstr ""
 
-#: ../roundup/admin.py:174 ../roundup/admin.py:1179 ../roundup/admin.py:1824
-#: ../roundup/admin.py:1856 ../roundup/admin.py:174:1179 :1824:1856
+#: ../roundup/admin.py:175 ../roundup/admin.py:1188 ../roundup/admin.py:1836
+#: ../roundup/admin.py:1868 ../roundup/admin.py:175:1188 :1836:1868
 #, python-format
 msgid "no such class \"%(classname)s\""
 msgstr " \"%(classname)s\"  "
 
-#: ../roundup/admin.py:187
+#: ../roundup/admin.py:188
 #, python-format
 msgid "argument \"%(arg)s\" not propname=value"
 msgstr " \"%(arg)s\"    ="
 
-#: ../roundup/admin.py:200
+#: ../roundup/admin.py:201
 #, python-format
 msgid ""
 "Problem: %(message)s\n"
@@ -104,7 +104,7 @@
 ": %(message)s\n"
 "\n"
 
-#: ../roundup/admin.py:201
+#: ../roundup/admin.py:202
 #, fuzzy, python-format
 msgid ""
 "%(message)sUsage: roundup-admin [options] [<command> <arguments>]\n"
@@ -156,12 +156,12 @@
 " roundup-admin help <command>             --   \n"
 " roundup-admin help all                   --   \n"
 
-#: ../roundup/admin.py:230
+#: ../roundup/admin.py:231
 #, fuzzy
 msgid "Commands: "
 msgstr ":"
 
-#: ../roundup/admin.py:237
+#: ../roundup/admin.py:238
 msgid ""
 "Commands may be abbreviated as long as the abbreviation\n"
 "matches only one command, e.g. l == li == lis == list."
@@ -175,7 +175,7 @@
 #      .
 #
 #     "  "?
-#: ../roundup/admin.py:266
+#: ../roundup/admin.py:270
 #, fuzzy
 msgid ""
 "\n"
@@ -308,23 +308,23 @@
 "\n"
 "  :\n"
 
-#: ../roundup/admin.py:330
+#: ../roundup/admin.py:334
 #, python-format
 msgid "%s:"
 msgstr ""
 
-#: ../roundup/admin.py:435 ../roundup/admin.py:1384
-#: ../roundup/admin.py:435:1384
+#: ../roundup/admin.py:439 ../roundup/admin.py:1396
+#: ../roundup/admin.py:439:1396
 msgid "Templates:"
 msgstr ":"
 
-#: ../roundup/admin.py:438 ../roundup/admin.py:1394
-#: ../roundup/admin.py:438:1394
+#: ../roundup/admin.py:442 ../roundup/admin.py:1406
+#: ../roundup/admin.py:442:1406
 msgid "Back ends:"
 msgstr ":"
 
 #. noqa: ARG002
-#: ../roundup/admin.py:455
+#: ../roundup/admin.py:459
 msgid ""
 "Usage: commit\n"
 "        Commit changes made to the database during an interactive session.\n"
@@ -348,7 +348,7 @@
 "        ,       .\n"
 "        "
 
-#: ../roundup/admin.py:470
+#: ../roundup/admin.py:474
 msgid ""
 "Usage: create classname property=value ...\n"
 "        Create a new entry of a given class.\n"
@@ -366,46 +366,45 @@
 "           .\n"
 "        "
 
-#: ../roundup/admin.py:478 ../roundup/admin.py:552 ../roundup/admin.py:600
-#: ../roundup/admin.py:723 ../roundup/admin.py:796 ../roundup/admin.py:842
-#: ../roundup/admin.py:893 ../roundup/admin.py:990 ../roundup/admin.py:1206
-#: ../roundup/admin.py:1357 ../roundup/admin.py:1485 ../roundup/admin.py:1571
-#: ../roundup/admin.py:1691 ../roundup/admin.py:1814 ../roundup/admin.py:1846
-#: ../roundup/admin.py:1962 ../roundup/admin.py:2016 ../roundup/admin.py:2064
-#: ../roundup/admin.py:478:552 :1206:1357:1485 :1571:1691 :1814:1846 :1962:2016
-#: :2064 :600:723 :796:842 :893:990
+#: ../roundup/admin.py:482 ../roundup/admin.py:555 ../roundup/admin.py:606
+#: ../roundup/admin.py:733 ../roundup/admin.py:806 ../roundup/admin.py:851
+#: ../roundup/admin.py:902 ../roundup/admin.py:999 ../roundup/admin.py:1216
+#: ../roundup/admin.py:1369 ../roundup/admin.py:1497 ../roundup/admin.py:1580
+#: ../roundup/admin.py:1703 ../roundup/admin.py:1826 ../roundup/admin.py:1858
+#: ../roundup/admin.py:1974 ../roundup/admin.py:2028 ../roundup/admin.py:2076
+#: ../roundup/admin.py:482:555 :1216:1369:1497 :1580:1703 :1826:1858 :1974:2028
+#: :2076 :606:733 :806:851 :902:999
 msgid "Not enough arguments supplied"
 msgstr " "
 
-#: ../roundup/admin.py:498
+#: ../roundup/admin.py:502
 #, python-format
 msgid "%(propname)s (Password): "
 msgstr " %(propname)s (): "
 
-#: ../roundup/admin.py:501
+#: ../roundup/admin.py:505
 #, python-format
 msgid "   %(propname)s (Again): "
 msgstr "%(propname)s ( ): "
 
-#: ../roundup/admin.py:505
+#: ../roundup/admin.py:509
 msgid "Sorry, try again..."
 msgstr "  .    ."
 
-#: ../roundup/admin.py:510
+#: ../roundup/admin.py:514
 #, python-format
 msgid "%(propname)s (%(proptype)s): "
 msgstr ""
 
-#: ../roundup/admin.py:529
+#: ../roundup/admin.py:533
 #, python-format
 msgid "you must provide the \"%(propname)s\" property."
 msgstr " \"%(propname)s\"   ."
 
-#: ../roundup/admin.py:541
+#: ../roundup/admin.py:545
 #, fuzzy
 msgid ""
 "Usage: display designator[,designator]*\n"
-"\n"
 "        Show the property values for the given node(s).\n"
 "\n"
 "        A designator is a classname and a nodeid concatenated,\n"
@@ -422,25 +421,29 @@
 "         .\n"
 "        "
 
-#: ../roundup/admin.py:583
+#: ../roundup/admin.py:586
 #, fuzzy, python-format
 msgid "%(protected)s%(key)s: %(value)s"
 msgstr "%(key)s: %(value)s ( )"
 
 #. grab the directory to export to
-#: ../roundup/admin.py:586
+#: ../roundup/admin.py:589
+#, fuzzy
 msgid ""
 "Usage: export [[-]class[,class]] export_dir\n"
-"        Export the database to colon-separated-value files.\n"
+"        Export the database and file content.\n"
+"\n"
+"        Database content is exported to colon separated files.\n"
 "        To exclude the files (e.g. for the msg or file class),\n"
 "        use the exporttables command.\n"
 "\n"
 "        Optionally limit the export to just the named classes\n"
-"        or exclude the named classes, if the 1st argument starts with '-'.\n"
+"        or exclude the named classes, if the 1st argument\n"
+"        starts with '-'.\n"
 "\n"
 "        This action exports the current data from the database into\n"
 "        colon-separated-value files that are placed in the nominated\n"
-"        destination directory.\n"
+"        export_dir directory.\n"
 "        "
 msgstr ""
 ": export [[-][,]] \n"
@@ -465,19 +468,23 @@
 "        exporttables.\n"
 "        "
 
-#: ../roundup/admin.py:698
+#: ../roundup/admin.py:704
+#, fuzzy
 msgid ""
 "Usage: exporttables [[-]class[,class]] export_dir\n"
-"        Export the database to colon-separated-value files, excluding the\n"
-"        files below $TRACKER_HOME/db/files/ (which can be archived "
-"separately).\n"
+"        Export only the database to files, no file content.\n"
+"\n"
+"        Database content is exported to colon separated files.\n"
+"        The files below $TRACKER_HOME/db/files/ (which can be\n"
+"        archived separately) are not part of the export.\n"
 "        To include the files, use the export command.\n"
 "\n"
 "        Optionally limit the export to just the named classes\n"
-"        or exclude the named classes, if the 1st argument starts with '-'.\n"
+"        or exclude the named classes, if the 1st argument\n"
+"        starts with '-'.\n"
 "\n"
 "        This action exports the current data from the database into\n"
-"        colon-separated-value files that are placed in the nominated\n"
+"        colon-separated-value files that are placed in the export_dir\n"
 "        destination directory.\n"
 "        "
 msgstr ""
@@ -503,7 +510,7 @@
 "        ,   export.\n"
 "        "
 
-#: ../roundup/admin.py:713
+#: ../roundup/admin.py:723
 #, fuzzy
 msgid ""
 "Usage: filter classname propname=value ...\n"
@@ -524,19 +531,19 @@
 "          ,    .\n"
 "        "
 
-#: ../roundup/admin.py:754
+#: ../roundup/admin.py:764
 #, fuzzy, python-format
 msgid "Class %(curclassname)s has no property %(pn)s in %(propname)s."
 msgstr " %(classname)s    \"%(propname)s\""
 
-#: ../roundup/admin.py:781 ../roundup/admin.py:830 ../roundup/admin.py:1505
-#: ../roundup/admin.py:1518 ../roundup/admin.py:2086
-#: ../roundup/admin.py:781:830 :1505:1518:2086
+#: ../roundup/admin.py:791 ../roundup/admin.py:840 ../roundup/admin.py:1517
+#: ../roundup/admin.py:1530 ../roundup/admin.py:2098
+#: ../roundup/admin.py:791:840 :1517:1530:2098
 #, python-format
 msgid "%(classname)s has no property \"%(propname)s\""
 msgstr " %(classname)s    \"%(propname)s\""
 
-#: ../roundup/admin.py:788
+#: ../roundup/admin.py:798
 msgid ""
 "Usage: find classname propname=value ...\n"
 "        Find the nodes of the given class with a given link property value.\n"
@@ -554,12 +561,11 @@
 "          ,    .\n"
 "        "
 
-#: ../roundup/admin.py:837
+#: ../roundup/admin.py:847
 #, fuzzy
 msgid ""
-"Usage: genconfig <filename>\n"
-"        Generate a new tracker config file (ini style) with default\n"
-"        values in <filename>.\n"
+"Usage: genconfig filename\n"
+"        Create a new tracker config file with default values in filename.\n"
 "        "
 msgstr ""
 ": genconfig < >\n"
@@ -567,7 +573,7 @@
 "           .\n"
 "        "
 
-#: ../roundup/admin.py:855
+#: ../roundup/admin.py:864
 #, python-format
 msgid ""
 "Changing option\n"
@@ -575,20 +581,20 @@
 "from old default of %(old_number)s to new default of %(new_number)s."
 msgstr ""
 
-#: ../roundup/admin.py:866
+#: ../roundup/admin.py:875
 #, python-format
 msgid ""
 "Update 'password_pbkdf2_default_rounds' to a number equal to or larger\n"
 "  than %s.\n"
 msgstr ""
 
-#: ../roundup/admin.py:873
+#: ../roundup/admin.py:882
 msgid ""
 "Check the rdbms mysql_* settings. Your charset and collations may need\n"
 "  to be changed. See upgrading instructions.\n"
 msgstr ""
 
-#: ../roundup/admin.py:883
+#: ../roundup/admin.py:892
 #, fuzzy
 msgid ""
 "Usage: get property designator[,designator]*\n"
@@ -609,24 +615,24 @@
 "           .\n"
 "        "
 
-#: ../roundup/admin.py:916
+#: ../roundup/admin.py:925
 #, 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:933 ../roundup/admin.py:1181 ../roundup/admin.py:1858
-#: ../roundup/admin.py:933:1181:1858
+#: ../roundup/admin.py:942 ../roundup/admin.py:1190 ../roundup/admin.py:1842
+#: ../roundup/admin.py:1870 ../roundup/admin.py:942:1190 :1842:1870
 #, python-format
 msgid "no such %(classname)s node \"%(nodeid)s\""
 msgstr "  %(classname)s   \"%(nodeid)s\""
 
-#: ../roundup/admin.py:936
+#: ../roundup/admin.py:945
 #, python-format
 msgid "no such %(classname)s property \"%(propname)s\""
 msgstr "  %(classname)s   \"%(propname)s\""
 
-#: ../roundup/admin.py:941
+#: ../roundup/admin.py:950
 msgid ""
 "Usage: help topic\n"
 "        Give help about topic.\n"
@@ -646,12 +652,12 @@
 "        all       --  \n"
 "        "
 
-#: ../roundup/admin.py:960
+#: ../roundup/admin.py:969
 #, python-format
 msgid "Sorry, no help for \"%(topic)s\""
 msgstr ",  \"%(topic)s\"  ."
 
-#: ../roundup/admin.py:977
+#: ../roundup/admin.py:986
 #, fuzzy
 msgid ""
 "Usage: history designator [skipquiet] [raw]\n"
@@ -675,27 +681,27 @@
 "           .\n"
 "        "
 
-#: ../roundup/admin.py:1002
+#: ../roundup/admin.py:1011
 #, python-format
 msgid "Unexpected argument(s): %s. Expected 'skipquiet' or 'raw'."
 msgstr ""
 
-#: ../roundup/admin.py:1053
+#: ../roundup/admin.py:1062
 #, fuzzy
 msgid "removed"
 msgstr ""
 
-#: ../roundup/admin.py:1055
+#: ../roundup/admin.py:1064
 msgid "added"
 msgstr ""
 
-#: ../roundup/admin.py:1057
+#: ../roundup/admin.py:1066
 #, python-format
 msgid "Unknown history set operation '%s'. Expected +/-."
 msgstr ""
 
 #. .Hint added issue23 to superseder
-#: ../roundup/admin.py:1082
+#: ../roundup/admin.py:1091
 #, fuzzy, python-format
 msgid "added %(class)s%(item_id)s to %(propname)s"
 msgstr "  %(properties)s  %(class)s %(id)s"
@@ -703,34 +709,36 @@
 #. .Hint read as: assignedto was admin(1)
 #. where assignedto is the property
 #. admin is the key name for value 1
-#: ../roundup/admin.py:1103
+#: ../roundup/admin.py:1112
 #, python-format
 msgid "%(prop)s was %(name)s(%(value)s)"
 msgstr ""
 
-#: ../roundup/admin.py:1109 ../roundup/admin.py:1138
-#: ../roundup/admin.py:1109:1138
+#: ../roundup/admin.py:1118 ../roundup/admin.py:1147
+#: ../roundup/admin.py:1118:1147
 #, fuzzy, python-format
 msgid "%(prop)s was %(value)s"
 msgstr "%(key)s: %(value)s ( )"
 
-#: ../roundup/admin.py:1128
+#: ../roundup/admin.py:1137
 #, python-format
 msgid "%(prop)s was [%(value_list)s]"
 msgstr ""
 
 #. .Hint modified nosy: added demo(3)
-#: ../roundup/admin.py:1135
+#: ../roundup/admin.py:1144
 #, python-format
 msgid "modified %(prop)s: %(how)s"
 msgstr ""
 
-#: ../roundup/admin.py:1186
+#: ../roundup/admin.py:1195
+#, fuzzy
 msgid ""
 "Usage: import import_dir\n"
-"        Import a database from the directory containing CSV files,\n"
-"        two per class to import.\n"
-"\n"
+"        Import a database and file contents from the directory.\n"
+"\n"
+"        The directory should have the same format as one containing\n"
+"        the output of export. There are two files imported per class.\n"
 "        The files used in the import are:\n"
 "\n"
 "        <class>.csv\n"
@@ -769,17 +777,18 @@
 "            ).\n"
 "        "
 
-#: ../roundup/admin.py:1276
+#: ../roundup/admin.py:1287
 msgid ""
 "Usage: importtables export_dir\n"
-"\n"
 "        This imports the database tables exported using exporttables.\n"
+"\n"
+"        It does not import the content of files like msgs and files.\n"
 "        "
 msgstr ""
 
 #  password
 #. password
-#: ../roundup/admin.py:1283
+#: ../roundup/admin.py:1295
 msgid ""
 "Usage: initialise [adminpw]\n"
 "        Initialise a new Roundup tracker.\n"
@@ -797,23 +806,23 @@
 "            dbinit.init()\n"
 "        "
 
-#: ../roundup/admin.py:1297
+#: ../roundup/admin.py:1309
 msgid "Admin Password: "
 msgstr " : "
 
-#: ../roundup/admin.py:1298
+#: ../roundup/admin.py:1310
 msgid "       Confirm: "
 msgstr "               : "
 
-#: ../roundup/admin.py:1302
+#: ../roundup/admin.py:1314
 msgid "Instance home does not exist"
 msgstr "    "
 
-#: ../roundup/admin.py:1306
+#: ../roundup/admin.py:1318
 msgid "Instance has not been installed"
 msgstr "  "
 
-#: ../roundup/admin.py:1314
+#: ../roundup/admin.py:1326
 msgid ""
 "WARNING: The database is already initialised!\n"
 "If you re-initialise it, you will lose all the data!\n"
@@ -823,7 +832,7 @@
 "     !\n"
 "  ? Y/N: "
 
-#: ../roundup/admin.py:1334
+#: ../roundup/admin.py:1346
 msgid ""
 "Usage: install [template [backend [key=val[,key=val]]]]\n"
 "        Install a new Roundup tracker.\n"
@@ -875,12 +884,12 @@
 "        . \"help initopts\".\n"
 "        "
 
-#: ../roundup/admin.py:1363
+#: ../roundup/admin.py:1375
 #, python-format
 msgid "Instance home parent directory \"%(parent)s\" does not exist"
 msgstr " \"%(parent)s\"  "
 
-#: ../roundup/admin.py:1372
+#: ../roundup/admin.py:1384
 #, python-format
 msgid ""
 "WARNING: There appears to be a tracker in \"%(tracker_home)s\"!\n"
@@ -891,22 +900,22 @@
 "     !\n"
 "  ? Y/N: "
 
-#: ../roundup/admin.py:1385
+#: ../roundup/admin.py:1397
 #, fuzzy
 msgid "Select template"
 msgstr "  [classic]: "
 
-#: ../roundup/admin.py:1395
+#: ../roundup/admin.py:1407
 #, fuzzy
 msgid "Select backend"
 msgstr "  [anydbm]: "
 
-#: ../roundup/admin.py:1406
+#: ../roundup/admin.py:1418
 #, python-format
 msgid "Error in configuration settings: \"%s\""
 msgstr "   : \"%s\""
 
-#: ../roundup/admin.py:1439
+#: ../roundup/admin.py:1451
 #, python-format
 msgid ""
 "\n"
@@ -919,12 +928,12 @@
 "       :\n"
 "   %(config_file)s"
 
-#: ../roundup/admin.py:1449
+#: ../roundup/admin.py:1461
 msgid " ... at a minimum, you must set following options:"
 msgstr " ...  ,    :"
 
 #    
-#: ../roundup/admin.py:1454
+#: ../roundup/admin.py:1466
 #, python-format
 msgid ""
 "\n"
@@ -951,7 +960,7 @@
 "       \"roundup-admin initialise\".\n"
 "---------------------------------------------------------------------------\n"
 
-#: ../roundup/admin.py:1470
+#: ../roundup/admin.py:1482
 msgid ""
 "Usage: list classname [property]\n"
 "        List the instances of a class.\n"
@@ -980,20 +989,19 @@
 "            .\n"
 "        "
 
-#: ../roundup/admin.py:1483
+#: ../roundup/admin.py:1495
 msgid "Too many arguments supplied"
 msgstr "   "
 
-#: ../roundup/admin.py:1516
+#: ../roundup/admin.py:1528
 #, python-format
 msgid "%(nodeid)4s: %(value)s"
 msgstr ""
 
 #. noqa: ARG002  - args unused
-#: ../roundup/admin.py:1523
+#: ../roundup/admin.py:1535
 msgid ""
 "Usage: migrate\n"
-"\n"
 "        Update a tracker's database to be compatible with the Roundup\n"
 "        codebase.\n"
 "\n"
@@ -1014,22 +1022,21 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1544
+#: ../roundup/admin.py:1555
 #, python-format
 msgid "Tracker updated to schema version %s."
 msgstr ""
 
-#: ../roundup/admin.py:1548
+#: ../roundup/admin.py:1559
 #, python-format
 msgid "No migration action required. At schema version %s."
 msgstr ""
 
-#: ../roundup/admin.py:1553
+#: ../roundup/admin.py:1564
+#, fuzzy
 msgid ""
 "Usage: pack period | date\n"
-"\n"
-"        Remove journal entries older than a period of time specified or\n"
-"        before a certain date.\n"
+"        Remove journal entries older than the date/period.\n"
 "\n"
 "        A period is specified using the suffixes \"y\", \"m\", and \"d\". "
 "The\n"
@@ -1064,15 +1071,16 @@
 "\n"
 "        "
 
-#: ../roundup/admin.py:1581
+#: ../roundup/admin.py:1590
 msgid "Invalid format"
 msgstr " "
 
-#: ../roundup/admin.py:1592
+#: ../roundup/admin.py:1601
 msgid ""
 "Usage: perftest [mode] [arguments]*\n"
-"\n"
-"        Time operations in Roundup. Supported arguments:\n"
+"        Time operations in Roundup.\n"
+"\n"
+"        Supported arguments:\n"
 "\n"
 "            [password] [rounds=<integer>] [scheme=<scheme>]\n"
 "\n"
@@ -1085,28 +1093,30 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1625
+#: ../roundup/admin.py:1635
 msgid "Invalid 'rounds'. Must be larger than 999."
 msgstr ""
 
-#: ../roundup/admin.py:1629
+#: ../roundup/admin.py:1639
 #, python-format
 msgid "Invalid 'rounds'. It must be an integer not: %s"
 msgstr ""
 
-#: ../roundup/admin.py:1656
+#: ../roundup/admin.py:1666
 msgid "scheme does not support rounds."
 msgstr ""
 
-#: ../roundup/admin.py:1659
+#: ../roundup/admin.py:1669
 #, python-format
 msgid "Hash time: %(time)0.9f seconds, scheme: %(scheme)s, rounds: %(rounds)s"
 msgstr ""
 
-#: ../roundup/admin.py:1665
+#: ../roundup/admin.py:1675
 msgid ""
 "Usage: pragma setting=value | 'list'\n"
-"        Set internal admin settings to a value. E.G.\n"
+"        Set internal admin settings to a value.\n"
+"\n"
+"        For example:\n"
 "\n"
 "            pragma verbose=True\n"
 "            pragma verbose=yes\n"
@@ -1130,49 +1140,49 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1698
+#: ../roundup/admin.py:1710
 #, python-format
 msgid "Argument must be setting=value, was given: %s."
 msgstr ""
 
-#: ../roundup/admin.py:1701
+#: ../roundup/admin.py:1713
 msgid "Current settings and values (NYI - not yet implemented):"
 msgstr ""
 
-#: ../roundup/admin.py:1712
+#: ../roundup/admin.py:1724
 msgid ""
 "      Help for this pragma is missing. Please report it to the Roundup "
 "project.\n"
 msgstr ""
 
-#: ../roundup/admin.py:1718
+#: ../roundup/admin.py:1730
 #, fuzzy, python-format
 msgid "Unknown setting %s. Try \"pragma list\"."
 msgstr "  "
 
-#: ../roundup/admin.py:1728
+#: ../roundup/admin.py:1740
 #, python-format
 msgid "Incorrect value for boolean setting %(setting)s: %(value)s."
 msgstr ""
 
-#: ../roundup/admin.py:1735
+#: ../roundup/admin.py:1747
 #, python-format
 msgid "Incorrect value for integer setting %(setting)s: %(value)s."
 msgstr ""
 
-#: ../roundup/admin.py:1742
+#: ../roundup/admin.py:1754
 #, python-format
 msgid ""
 "Incorrect value for setting %(setting)s: %(value)s. Should be no, both, or "
 "only."
 msgstr ""
 
-#: ../roundup/admin.py:1752
+#: ../roundup/admin.py:1764
 #, python-format
 msgid "Internal error: pragma can not handle values of type: %s"
 msgstr ""
 
-#: ../roundup/admin.py:1761
+#: ../roundup/admin.py:1773
 #, fuzzy
 msgid ""
 "Usage: reindex [classname|classname:#-#|designator]*\n"
@@ -1196,17 +1206,17 @@
 "        .      .\n"
 "        "
 
-#: ../roundup/admin.py:1783
+#: ../roundup/admin.py:1795
 #, python-format
 msgid "no such item \"%(designator)s\""
 msgstr " \"%(designator)s\"  "
 
-#: ../roundup/admin.py:1793
+#: ../roundup/admin.py:1805
 #, fuzzy, python-format
 msgid "no such item \"%(class)s%(id)s\""
 msgstr " \"%(designator)s\"  "
 
-#: ../roundup/admin.py:1805
+#: ../roundup/admin.py:1817
 #, fuzzy
 msgid ""
 "Usage: restore designator[,designator]*\n"
@@ -1225,12 +1235,7 @@
 "          .\n"
 "        "
 
-#: ../roundup/admin.py:1830
-#, fuzzy
-msgid "no such %(classname)s node \"%(nodeid)s\""
-msgstr "  %(classname)s   \"%(nodeid)s\""
-
-#: ../roundup/admin.py:1836
+#: ../roundup/admin.py:1848
 #, fuzzy
 msgid ""
 "Usage: retire designator[,designator]*\n"
@@ -1253,7 +1258,7 @@
 "        "
 
 #. noqa: ARG002 - args unused
-#: ../roundup/admin.py:1864
+#: ../roundup/admin.py:1876
 msgid ""
 "Usage: rollback\n"
 "        Undo all changes that are pending commit to the database.\n"
@@ -1274,62 +1279,62 @@
 "            .\n"
 "        "
 
-#: ../roundup/admin.py:1877
+#: ../roundup/admin.py:1889
 msgid ""
 "Usage: security [Role name]\n"
-"\n"
-"             Display the Permissions available to one or all Roles.\n"
-"             Also validates that any properties defined in a\n"
-"             permission are valid.\n"
-"\n"
-"             Run this after changing your permissions to catch\n"
-"             typos.\n"
+"        Display the Permissions available to one or all Roles.\n"
+"\n"
+"        Also validates that any properties defined in a\n"
+"        permission are valid.\n"
+"\n"
+"        Run this after changing your permissions to catch\n"
+"        typos.\n"
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1892
+#: ../roundup/admin.py:1904
 #, fuzzy, python-format
 msgid "No such Role \"%(role)s\"\n"
 msgstr " \"%(role)s\"  "
 
-#: ../roundup/admin.py:1898
+#: ../roundup/admin.py:1910
 #, fuzzy, python-format
 msgid "New Web users get the Roles \"%(role)s\"\n"
 msgstr "  web   \"%(role)s\""
 
-#: ../roundup/admin.py:1901
+#: ../roundup/admin.py:1913
 #, fuzzy, python-format
 msgid "New Web users get the Role \"%(role)s\"\n"
 msgstr "  web   \"%(role)s\""
 
-#: ../roundup/admin.py:1905
+#: ../roundup/admin.py:1917
 #, fuzzy, python-format
 msgid "New Email users get the Roles \"%(role)s\"\n"
 msgstr "  email   \"%(role)s\""
 
-#: ../roundup/admin.py:1907
+#: ../roundup/admin.py:1919
 #, fuzzy, python-format
 msgid "New Email users get the Role \"%(role)s\"\n"
 msgstr "  email   \"%(role)s\""
 
-#: ../roundup/admin.py:1910
+#: ../roundup/admin.py:1922
 #, fuzzy, python-format
 msgid "Role \"%(name)s\":\n"
 msgstr " \"%(name)s\":"
 
-#: ../roundup/admin.py:1916
+#: ../roundup/admin.py:1928
 #, fuzzy
 msgid " %(description)s (%(name)s for \"%(klass)s\""
 msgstr " %(description)s (%(name)s    \"%(klass)s\")"
 
-#: ../roundup/admin.py:1916
+#: ../roundup/admin.py:1928
 #, 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:1929
+#: ../roundup/admin.py:1941
 #, python-format
 msgid ""
 "\n"
@@ -1337,17 +1342,17 @@
 "\n"
 msgstr ""
 
-#: ../roundup/admin.py:1935
+#: ../roundup/admin.py:1947
 #, fuzzy, python-format
 msgid " %(description)s (%(name)s for \"%(klass)s\" only)\n"
 msgstr " %(description)s (%(name)s    \"%(klass)s\")"
 
-#: ../roundup/admin.py:1938
+#: ../roundup/admin.py:1950
 #, fuzzy, python-format
 msgid " %(description)s (%(name)s)\n"
 msgstr " %(description)s (%(name)s    \"%(klass)s\")"
 
-#: ../roundup/admin.py:1942
+#: ../roundup/admin.py:1954
 #, fuzzy
 msgid ""
 "Usage: set items property=value [property=value ...]\n"
@@ -1382,7 +1387,7 @@
 "        .  (, \"1,2,3\".)\n"
 "        "
 
-#: ../roundup/admin.py:2010
+#: ../roundup/admin.py:2022
 msgid ""
 "Usage: specification classname\n"
 "        Show the properties for a classname.\n"
@@ -1396,17 +1401,17 @@
 "            .\n"
 "        "
 
-#: ../roundup/admin.py:2029
+#: ../roundup/admin.py:2041
 #, fuzzy, python-format
 msgid "%(key)s: %(value)s (key property)\n"
 msgstr "%(key)s: %(value)s ( )"
 
-#: ../roundup/admin.py:2032
+#: ../roundup/admin.py:2044
 #, fuzzy, python-format
 msgid "%(key)s: %(value)s\n"
 msgstr "%(key)s: %(value)s ( )"
 
-#: ../roundup/admin.py:2035
+#: ../roundup/admin.py:2047
 msgid ""
 "Usage: table classname [property[,property]*]\n"
 "        List the instances of a class in tabular form.\n"
@@ -1466,17 +1471,17 @@
 "           \"Name\"   .\n"
 "        "
 
-#: ../roundup/admin.py:2081
+#: ../roundup/admin.py:2093
 #, python-format
 msgid "\"%(spec)s\" not name:width"
 msgstr " \"%(spec)s\"     :"
 
-#: ../roundup/admin.py:2103
+#: ../roundup/admin.py:2115
 #, python-format
 msgid "\"%(spec)s\" does not have an integer width: \"%(width)s\""
 msgstr ""
 
-#: ../roundup/admin.py:2139
+#: ../roundup/admin.py:2151
 msgid ""
 "Usage: templates [trace_search]\n"
 "        List templates and their installed directories.\n"
@@ -1486,13 +1491,14 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:2167
+#: ../roundup/admin.py:2179
 #, fuzzy
 msgid ""
 "Usage: updateconfig <filename>\n"
-"        Generate an updated tracker config file (ini style) in\n"
-"        <filename>. Use current settings from existing roundup\n"
-"        tracker in tracker home.\n"
+"        Merge existing tracker config with new settings.\n"
+"\n"
+"        Output the updated config file to <filename>. Use current\n"
+"        settings from existing roundup tracker in tracker home.\n"
 "        "
 msgstr ""
 ": genconfig < >\n"
@@ -1500,35 +1506,35 @@
 "           .\n"
 "        "
 
-#: ../roundup/admin.py:2175 ../roundup/cgi/actions.py:886
+#: ../roundup/admin.py:2188 ../roundup/cgi/actions.py:886
 #: ../roundup/cgi/actions.py:897 ../roundup/cgi/actions.py:1099
 #: ../roundup/cgi/actions.py:1113 ../roundup/cgi/actions.py:886:897 :1099:1113
 #, python-format
 msgid "Error: %s"
 msgstr ": %s"
 
-#: ../roundup/admin.py:2207
+#: ../roundup/admin.py:2220
 #, python-format
 msgid "Unknown command \"%(command)s\" (\"help commands\" for a list)"
 msgstr ""
 " \"%(command)s\" . (\"help commands\"   )"
 
-#: ../roundup/admin.py:2213
+#: ../roundup/admin.py:2226
 #, python-format
 msgid "Multiple commands match \"%(command)s\": %(list)s"
 msgstr "\"%(command)s\"   : %(list)s"
 
-#: ../roundup/admin.py:2228
+#: ../roundup/admin.py:2241
 msgid "Enter tracker home: "
 msgstr "  : "
 
-#: ../roundup/admin.py:2257 ../roundup/admin.py:2261
-#: ../roundup/admin.py:2257:2261
+#: ../roundup/admin.py:2270 ../roundup/admin.py:2274
+#: ../roundup/admin.py:2270:2274
 #, python-format
 msgid "Error: Couldn't open tracker: %(message)s"
 msgstr ":   : %(message)s"
 
-#: ../roundup/admin.py:2309
+#: ../roundup/admin.py:2322
 #, python-format
 msgid ""
 "Roundup %s ready for input.\n"
@@ -1537,15 +1543,15 @@
 "Roundup %s   .\n"
 " \"help\"  ."
 
-#: ../roundup/admin.py:2342
+#: ../roundup/admin.py:2355
 msgid "Note: command history and editing not available"
 msgstr ":     "
 
-#: ../roundup/admin.py:2348
+#: ../roundup/admin.py:2361
 msgid "exit..."
 msgstr "   ..."
 
-#: ../roundup/admin.py:2361
+#: ../roundup/admin.py:2374
 msgid "There are unsaved changes. Commit them (y/N)? "
 msgstr ",   .     (y/N)? "
 
@@ -2082,7 +2088,7 @@
 msgid "<em>undefined</em>"
 msgstr "<em></em>"
 
-#: ../roundup/cgi/client.py:90
+#: ../roundup/cgi/client.py:105
 msgid ""
 "<html><head><title>An error has occurred</title></head>\n"
 "<body><h1>An error has occurred</h1>\n"
@@ -2096,148 +2102,148 @@
 "     .</p>\n"
 "</body></html>"
 
-#: ../roundup/cgi/client.py:702 ../roundup/cgi/client.py:1622
-#: ../roundup/cgi/client.py:702:1622
+#: ../roundup/cgi/client.py:717 ../roundup/cgi/client.py:1635
+#: ../roundup/cgi/client.py:717:1635
 msgid "Required Header Missing"
 msgstr ""
 
-#: ../roundup/cgi/client.py:704
+#: ../roundup/cgi/client.py:719
 #, fuzzy
 msgid "Client is not allowed to use Rest Interface."
 msgstr "     -."
 
-#: ../roundup/cgi/client.py:956
+#: ../roundup/cgi/client.py:971
 msgid "Form Error: "
 msgstr " : "
 
-#: ../roundup/cgi/client.py:1049
+#: ../roundup/cgi/client.py:1064
 #, python-format
 msgid "Unrecognized charset: %r"
 msgstr " %r  "
 
-#: ../roundup/cgi/client.py:1318 ../roundup/cgi/client.py:2281
-#: ../roundup/cgi/client.py:1318:2281
+#: ../roundup/cgi/client.py:1331 ../roundup/cgi/client.py:2294
+#: ../roundup/cgi/client.py:1331:2294
 msgid "broken form: multiple @action values submitted"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1335
+#: ../roundup/cgi/client.py:1348
 msgid "Anonymous users are not allowed to use the web interface"
 msgstr "     -."
 
-#: ../roundup/cgi/client.py:1483
+#: ../roundup/cgi/client.py:1496
 msgid "Referer header not available."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1487
+#: ../roundup/cgi/client.py:1500
 #, python-format
 msgid "csrf key used with wrong method from: %s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1516
+#: ../roundup/cgi/client.py:1529
 #, python-format
 msgid "csrf header %(header)s required but missing for user%(userid)s."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1520
-#, python-format
-msgid "Missing header: %s"
-msgstr ""
-
-#: ../roundup/cgi/client.py:1528
-#, python-format
-msgid "csrf Referer header check failed for user%(userid)s. Value=%(referer)s"
-msgstr ""
-
 #: ../roundup/cgi/client.py:1533
+#, python-format
+msgid "Missing header: %s"
+msgstr ""
+
+#: ../roundup/cgi/client.py:1541
+#, python-format
+msgid "csrf Referer header check failed for user%(userid)s. Value=%(referer)s"
+msgstr ""
+
+#: ../roundup/cgi/client.py:1546
 #, fuzzy, python-format
 msgid "Invalid Referer: %s"
 msgstr "    ."
 
-#: ../roundup/cgi/client.py:1548
+#: ../roundup/cgi/client.py:1561
 #, python-format
 msgid "csrf Origin header check failed for user%(userid)s. Value=%(origin)s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1553
+#: ../roundup/cgi/client.py:1566
 #, fuzzy, python-format
 msgid "Invalid Origin %s"
 msgstr "    ."
 
-#: ../roundup/cgi/client.py:1567
+#: ../roundup/cgi/client.py:1580
 #, python-format
 msgid ""
 "csrf X-FORWARDED-HOST header check failed for user%(userid)s. Value=%(host)s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1573
+#: ../roundup/cgi/client.py:1586
 #, python-format
 msgid "Invalid X-FORWARDED-HOST %s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1592
-#, python-format
-msgid "csrf HOST header check failed for user%(userid)s. Value=%(host)s"
-msgstr ""
-
-#: ../roundup/cgi/client.py:1597
-#, python-format
-msgid "Invalid HOST %s"
-msgstr ""
-
 #: ../roundup/cgi/client.py:1605
+#, python-format
+msgid "csrf HOST header check failed for user%(userid)s. Value=%(host)s"
+msgstr ""
+
+#: ../roundup/cgi/client.py:1610
+#, python-format
+msgid "Invalid HOST %s"
+msgstr ""
+
+#: ../roundup/cgi/client.py:1618
 msgid "Csrf: unable to verify sufficient headers"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1606
-msgid "Unable to verify sufficient headers"
-msgstr ""
-
 #: ../roundup/cgi/client.py:1619
+msgid "Unable to verify sufficient headers"
+msgstr ""
+
+#: ../roundup/cgi/client.py:1632
 #, python-format
 msgid "csrf X-REQUESTED-WITH xmlrpc required header check failed for user%s."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1660
+#: ../roundup/cgi/client.py:1673
 #, python-format
 msgid "Required csrf field missing for user%s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1662 ../roundup/cgi/client.py:1689
-#: ../roundup/cgi/client.py:1706 ../roundup/cgi/client.py:1662:1689:1706
+#: ../roundup/cgi/client.py:1675 ../roundup/cgi/client.py:1702
+#: ../roundup/cgi/client.py:1719 ../roundup/cgi/client.py:1675:1702:1719
 msgid ""
 "We can't validate your session (csrf failure). Re-enter any unsaved data and "
 "try again."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1666
+#: ../roundup/cgi/client.py:1679
 #, python-format
 msgid "csrf field not supplied by user%s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1678
+#: ../roundup/cgi/client.py:1691
 #, 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:1696
+#: ../roundup/cgi/client.py:1709
 #, 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:1888
+#: ../roundup/cgi/client.py:1901
 msgid "You are not allowed to view this file."
 msgstr "       ."
 
-#: ../roundup/cgi/client.py:2159
+#: ../roundup/cgi/client.py:2172
 #, python-format
 msgid "%(starttag)sTime elapsed: %(seconds)fs%(endtag)s\n"
 msgstr "%(starttag)s : %(seconds)fs%(endtag)s\n"
 
-#: ../roundup/cgi/client.py:2163
+#: ../roundup/cgi/client.py:2176
 #, python-format
 msgid ""
 "%(starttag)sCache hits: %(cache_hits)d, misses %(cache_misses)d. Loading "
@@ -2247,7 +2253,7 @@
 "%(cache_misses)d.  : %(get_items)f . : "
 "%(filtering)f .%(endtag)s\n"
 
-#: ../roundup/cgi/client.py:2703
+#: ../roundup/cgi/client.py:2716
 #, python-format
 msgid ""
 "Cache failure: compressed file %(compressed)s is older than its source file "
@@ -2311,118 +2317,118 @@
 msgstr[1] "  %(property)s  %(class)s  "
 msgstr[2] "  %(property)s  %(class)s  "
 
-#: ../roundup/cgi/templating.py:277
+#: ../roundup/cgi/templating.py:278
 #, python-format
 msgid "You are not allowed to %(action)s items of class %(class)s"
 msgstr "    %(action)s   %(class)s"
 
-#: ../roundup/cgi/templating.py:914
+#: ../roundup/cgi/templating.py:916
 msgid "(list)"
 msgstr "()"
 
-#: ../roundup/cgi/templating.py:989
+#: ../roundup/cgi/templating.py:991
 msgid "Submit New Entry"
 msgstr ""
 
 # ../roundup/cgi/templating.py:673 :792 :1166 :1187 :1231 :1253 :1287 :1326
 # :1377 :1394 :1470 :1490 :1503 :1520 :1530 :1580 :1755
-#: ../roundup/cgi/templating.py:1011 ../roundup/cgi/templating.py:1187
-#: ../roundup/cgi/templating.py:1822 ../roundup/cgi/templating.py:1853
-#: ../roundup/cgi/templating.py:1874 ../roundup/cgi/templating.py:1912
-#: ../roundup/cgi/templating.py:1965 ../roundup/cgi/templating.py:1989
-#: ../roundup/cgi/templating.py:1996 ../roundup/cgi/templating.py:2033
-#: ../roundup/cgi/templating.py:2086 ../roundup/cgi/templating.py:2119
-#: ../roundup/cgi/templating.py:2214 ../roundup/cgi/templating.py:2235
-#: ../roundup/cgi/templating.py:2326 ../roundup/cgi/templating.py:2346
-#: ../roundup/cgi/templating.py:2368 ../roundup/cgi/templating.py:2411
-#: ../roundup/cgi/templating.py:2421 ../roundup/cgi/templating.py:2486
-#: ../roundup/cgi/templating.py:2789 ../roundup/cgi/templating.py:1011:1187
-#: :1822:1853 :1874:1912 :1965:1989 :1996:2033 :2086:2119 :2214:2235 :2326:2346
-#: :2368:2411 :2421:2486:2789
+#: ../roundup/cgi/templating.py:1013 ../roundup/cgi/templating.py:1189
+#: ../roundup/cgi/templating.py:1824 ../roundup/cgi/templating.py:1855
+#: ../roundup/cgi/templating.py:1876 ../roundup/cgi/templating.py:1914
+#: ../roundup/cgi/templating.py:1967 ../roundup/cgi/templating.py:1991
+#: ../roundup/cgi/templating.py:1998 ../roundup/cgi/templating.py:2035
+#: ../roundup/cgi/templating.py:2088 ../roundup/cgi/templating.py:2121
+#: ../roundup/cgi/templating.py:2216 ../roundup/cgi/templating.py:2237
+#: ../roundup/cgi/templating.py:2328 ../roundup/cgi/templating.py:2348
+#: ../roundup/cgi/templating.py:2370 ../roundup/cgi/templating.py:2413
+#: ../roundup/cgi/templating.py:2423 ../roundup/cgi/templating.py:2488
+#: ../roundup/cgi/templating.py:2791 ../roundup/cgi/templating.py:1013:1189
+#: :1824:1855 :1876:1914 :1967:1991 :1998:2035 :2088:2121 :2216:2237 :2328:2348
+#: :2370:2413 :2423:2488:2791
 msgid "[hidden]"
 msgstr "[]"
 
-#: ../roundup/cgi/templating.py:1012
+#: ../roundup/cgi/templating.py:1014
 msgid "New node - no history"
 msgstr "  -  "
 
-#: ../roundup/cgi/templating.py:1152
+#: ../roundup/cgi/templating.py:1154
 msgid "Submit Changes"
 msgstr ""
 
-#: ../roundup/cgi/templating.py:1230
+#: ../roundup/cgi/templating.py:1232
 msgid "<em>The indicated property no longer exists</em>"
 msgstr "<em>    .</em>"
 
-#: ../roundup/cgi/templating.py:1266
+#: ../roundup/cgi/templating.py:1268
 #, python-format
 msgid "The linked class %(classname)s no longer exists"
 msgstr "  %(classname)s   "
 
-#: ../roundup/cgi/templating.py:1303 ../roundup/cgi/templating.py:1333
-#: ../roundup/cgi/templating.py:2495 ../roundup/cgi/templating.py:2798
-#: ../roundup/cgi/templating.py:1303:1333 :2495:2798
+#: ../roundup/cgi/templating.py:1305 ../roundup/cgi/templating.py:1335
+#: ../roundup/cgi/templating.py:2497 ../roundup/cgi/templating.py:2800
+#: ../roundup/cgi/templating.py:1305:1335 :2497:2800
 msgid "[label is missing]"
 msgstr ""
 
 # :823
-#: ../roundup/cgi/templating.py:1307 ../roundup/cgi/templating.py:1336
-#: ../roundup/cgi/templating.py:1307:1336
+#: ../roundup/cgi/templating.py:1309 ../roundup/cgi/templating.py:1338
+#: ../roundup/cgi/templating.py:1309:1338
 msgid "<strike>The linked node no longer exists</strike>"
 msgstr "<strike>    </strike>"
 
-#: ../roundup/cgi/templating.py:1398
+#: ../roundup/cgi/templating.py:1400
 #, python-format
 msgid "%s: (no value)"
 msgstr "%s: ( )"
 
-#: ../roundup/cgi/templating.py:1414
+#: ../roundup/cgi/templating.py:1416
 #, fuzzy, python-format
 msgid ""
 "<strong><em>This event %s is not handled by the history display!</em></"
 "strong>"
 msgstr "<strong><em>  !</em></strong>"
 
-#: ../roundup/cgi/templating.py:1427
+#: ../roundup/cgi/templating.py:1429
 msgid "<tr><td colspan=4><strong>Note:</strong></td></tr>"
 msgstr "<tr><td colspan=4><strong>:</strong></td></tr>"
 
-#: ../roundup/cgi/templating.py:1436
+#: ../roundup/cgi/templating.py:1438
 msgid "History"
 msgstr ""
 
-#: ../roundup/cgi/templating.py:1438
+#: ../roundup/cgi/templating.py:1440
 msgid "<th>Date</th>"
 msgstr "<th></th>"
 
-#: ../roundup/cgi/templating.py:1439
+#: ../roundup/cgi/templating.py:1441
 msgid "<th>User</th>"
 msgstr "<th></th>"
 
-#: ../roundup/cgi/templating.py:1440
+#: ../roundup/cgi/templating.py:1442
 msgid "<th>Action</th>"
 msgstr "<th></th>"
 
-#: ../roundup/cgi/templating.py:1441
+#: ../roundup/cgi/templating.py:1443
 msgid "<th>Args</th>"
 msgstr "<th></th>"
 
-#: ../roundup/cgi/templating.py:1492
+#: ../roundup/cgi/templating.py:1494
 #, python-format
 msgid "Copy of %(class)s %(id)s"
 msgstr ": %(class)s %(id)s"
 
-#: ../roundup/cgi/templating.py:2123 ../roundup/cgi/templating.py:2158
-#: ../roundup/cgi/templating.py:1380:2123:2158
+#: ../roundup/cgi/templating.py:2125 ../roundup/cgi/templating.py:2160
+#: ../roundup/cgi/templating.py:1382:2125:2160
 msgid "No"
 msgstr ""
 
-#: ../roundup/cgi/templating.py:2123 ../roundup/cgi/templating.py:2152
-#: ../roundup/cgi/templating.py:1380:2123:2152
+#: ../roundup/cgi/templating.py:2125 ../roundup/cgi/templating.py:2154
+#: ../roundup/cgi/templating.py:1382:2125:2154
 msgid "Yes"
 msgstr ""
 
-#: ../roundup/cgi/templating.py:2284
+#: ../roundup/cgi/templating.py:2286
 msgid ""
 "default value for DateHTMLProperty must be either DateHTMLProperty or string "
 "date representation."
@@ -2430,27 +2436,27 @@
 "    DateHTMLProperty    "
 "DateHTMLProperty    ."
 
-#: ../roundup/cgi/templating.py:2466
+#: ../roundup/cgi/templating.py:2468
 #, python-format
 msgid "Attempt to look up %(attr)s on a missing value"
 msgstr "   \"%(attr)s\"  "
 
-#: ../roundup/cgi/templating.py:2477
+#: ../roundup/cgi/templating.py:2479
 #, fuzzy, python-format
 msgid "Attempt to look up %(item)s on a missing value"
 msgstr "   \"%(attr)s\"  "
 
-#: ../roundup/cgi/templating.py:2582
+#: ../roundup/cgi/templating.py:2584
 #, python-format
 msgid "<option %svalue=\"-1\">- no selection -</option>"
 msgstr "<option %svalue=\"-1\">-   -</option>"
 
-#: ../roundup/cgi/templating.py:3743
+#: ../roundup/cgi/templating.py:3745
 #, python-format
 msgid "Unable to read or expand file '%(name)s' in template '%(template)s'."
 msgstr ""
 
-#: ../roundup/cgi/templating.py:3793
+#: ../roundup/cgi/templating.py:3795
 #, python-format
 msgid ""
 "Found an incorrect token when expandfile applied string subsitution on "
@@ -2997,6 +3003,63 @@
 "     [=,,...;=,"
 ",...]"
 
+#: ../roundup/pygettext.py:401
+#, python-format
+msgid "*** %(file)s:%(lineno)s: Seen unexpected token \"%(token)s\""
+msgstr ""
+
+#: ../roundup/pygettext.py:457
+#, python-format
+msgid "# File: %(filename)s, line: %(lineno)d"
+msgstr ""
+
+#: ../roundup/pygettext.py:464
+#, python-format
+msgid " %(filename)s:%(lineno)d"
+msgstr ""
+
+#: ../roundup/pygettext.py:540
+#, fuzzy, python-format
+msgid "Invalid value for --style: %s"
+msgstr "    ."
+
+#: ../roundup/pygettext.py:548
+#, python-format
+msgid "pygettext.py (xgettext for Python) %s"
+msgstr ""
+
+#: ../roundup/pygettext.py:554
+#, python-format
+msgid "--width argument must be an integer: %s"
+msgstr ""
+
+#: ../roundup/pygettext.py:582
+#, python-format
+msgid "Can't read --exclude-file: %s"
+msgstr ""
+
+#: ../roundup/pygettext.py:601
+msgid "Reading standard input"
+msgstr ""
+
+#: ../roundup/pygettext.py:606
+#, python-format
+msgid "Working on %s"
+msgstr ""
+
+#: ../roundup/pygettext.py:640
+msgid "a unicode string"
+msgstr ""
+
+#: ../roundup/pygettext.py:642
+#, python-format
+msgid "*** Seen unexpected token \"%(token)s\""
+msgstr ""
+
+#: ../roundup/pygettext.py:643
+msgid "morethanonestring"
+msgstr ""
+
 #: ../roundup/rest.py:410
 #, python-format
 msgid "Method %(m)s not allowed. Allowed: %(a)s"
@@ -3026,7 +3089,7 @@
 "%(acceptable_types)s"
 msgstr ""
 
-#: ../roundup/rest.py:2437
+#: ../roundup/rest.py:2441
 #, python-format
 msgid ""
 "Unrecognized api version: %s. See /rest without specifying api version for "
@@ -3133,24 +3196,33 @@
 ":\n"
 "%(new)s"
 
-#: ../roundup/scripts/roundup_demo.py:151
-#, python-format
-msgid "Enter directory path to create demo tracker [%s]: "
-msgstr "      [%s]: "
-
-#: ../roundup/scripts/roundup_demo.py:170
+#: ../roundup/scripts/roundup_demo.py:50
 #, python-format
 msgid ""
 "Enter tracker template to use (one of (%(template_list)s)) "
 "[%(default_template)s]: "
 msgstr ""
 
-#: ../roundup/scripts/roundup_gettext.py:35
+#: ../roundup/scripts/roundup_demo.py:166
+#, python-format
+msgid "Enter directory path to create demo tracker [%s]: "
+msgstr "      [%s]: "
+
+#: ../roundup/scripts/roundup_gettext.py:33
+msgid ""
+"\n"
+"Extracting translatable strings only from html templates.\n"
+"Because the 'polib' module is missing, unable to extract\n"
+"translations from detectors or extensions.\n"
+"The 'polib' module can be installed with pip.\n"
+msgstr ""
+
+#: ../roundup/scripts/roundup_gettext.py:71
 #, python-format
 msgid "Usage: %(program)s <tracker home>"
 msgstr ": %(program)s <  >"
 
-#: ../roundup/scripts/roundup_gettext.py:51
+#: ../roundup/scripts/roundup_gettext.py:89
 #, python-format
 msgid "No tracker templates found in directory %s"
 msgstr "  %s      "
--- a/locale/zh_CN.po	Wed Aug 07 21:43:40 2024 -0400
+++ b/locale/zh_CN.po	Wed Aug 07 21:52:58 2024 -0400
@@ -8,7 +8,7 @@
 msgstr ""
 "Project-Id-Version: Roundup 2.4.0\n"
 "Report-Msgid-Bugs-To: roundup-devel@lists.sourceforge.net\n"
-"POT-Creation-Date: 2024-07-09 15:12-0400\n"
+"POT-Creation-Date: 2024-08-07 21:43-0400\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"
@@ -30,19 +30,19 @@
 msgid "You may not retire the admin or anonymous user"
 msgstr "你不能撤除管理员或匿名用户"
 
-#: ../roundup/admin.py:130
+#: ../roundup/admin.py:131
 msgid ""
 "Have 'display designator[,designator*]' show header inside\n"
 "      []'s before items. Includes retired/active status.\n"
 msgstr ""
 
-#: ../roundup/admin.py:134
+#: ../roundup/admin.py:135
 msgid ""
 "Have 'display designator' and 'specification class' show\n"
 "      protected fields: creator, id etc.\n"
 msgstr ""
 
-#: ../roundup/admin.py:138
+#: ../roundup/admin.py:139
 msgid ""
 "Controls history options. It is a bitstring where setting\n"
 "      the bit disables the feature. A value of 0 (default)\n"
@@ -53,52 +53,52 @@
 "      history.\n"
 msgstr ""
 
-#: ../roundup/admin.py:147
+#: ../roundup/admin.py:148
 msgid ""
 "Set the number of lines of history to keep for this session.\n"
 "      -1 is infinite.\n"
 msgstr ""
 
-#: ../roundup/admin.py:151
+#: ../roundup/admin.py:152
 msgid "Set indexer to use when running 'reindex' NYI\n"
 msgstr ""
 
-#: ../roundup/admin.py:154
+#: ../roundup/admin.py:155
 msgid "Force reopening of tracker when running each command.\n"
 msgstr ""
 
-#: ../roundup/admin.py:157
+#: ../roundup/admin.py:158
 msgid ""
 "set the number of rows imported before a database commit is\n"
 "      done. Used only for imports on PostgreSQL.\n"
 msgstr ""
 
-#: ../roundup/admin.py:159
+#: ../roundup/admin.py:160
 msgid "Show retired items in table, list etc. One of 'no', 'only', 'both'\n"
 msgstr ""
 
-#: ../roundup/admin.py:161
-msgid "internal mapping for show_retired.\n"
-msgstr ""
-
 #: ../roundup/admin.py:162
+msgid "internal mapping for show_retired.\n"
+msgstr ""
+
+#: ../roundup/admin.py:163
 msgid "Enable verbose output: tracing, descriptions...\n"
 msgstr ""
 
 # ../roundup/admin.py:84 :943 :992 :1014
-#: ../roundup/admin.py:174 ../roundup/admin.py:1179 ../roundup/admin.py:1824
-#: ../roundup/admin.py:1856 ../roundup/admin.py:174:1179 :1824:1856
+#: ../roundup/admin.py:175 ../roundup/admin.py:1188 ../roundup/admin.py:1836
+#: ../roundup/admin.py:1868 ../roundup/admin.py:175:1188 :1836:1868
 #, python-format
 msgid "no such class \"%(classname)s\""
 msgstr "无此类别 \"%(classname)s\""
 
 # ../roundup/admin.py:94 :98
-#: ../roundup/admin.py:187
+#: ../roundup/admin.py:188
 #, python-format
 msgid "argument \"%(arg)s\" not propname=value"
 msgstr "参数 \"%(arg)s\" 不是 propname=value 的形式"
 
-#: ../roundup/admin.py:200
+#: ../roundup/admin.py:201
 #, python-format
 msgid ""
 "Problem: %(message)s\n"
@@ -107,7 +107,7 @@
 "问题: %(message)s\n"
 "\n"
 
-#: ../roundup/admin.py:201
+#: ../roundup/admin.py:202
 #, fuzzy, python-format
 msgid ""
 "%(message)sUsage: roundup-admin [options] [<command> <arguments>]\n"
@@ -157,12 +157,12 @@
 " roundup-admin help <command>             -- 命令详解帮助\n"
 " roundup-admin help all                   -- 所有可用的帮助\n"
 
-#: ../roundup/admin.py:230
+#: ../roundup/admin.py:231
 #, fuzzy
 msgid "Commands: "
 msgstr "命令:"
 
-#: ../roundup/admin.py:237
+#: ../roundup/admin.py:238
 msgid ""
 "Commands may be abbreviated as long as the abbreviation\n"
 "matches only one command, e.g. l == li == lis == list."
@@ -170,7 +170,7 @@
 "命令可以被缩写,只要缩写只有一个命令可以匹配上,\n"
 "如:l == li == lis == list."
 
-#: ../roundup/admin.py:266
+#: ../roundup/admin.py:270
 #, fuzzy
 msgid ""
 "\n"
@@ -295,25 +295,25 @@
 "\n"
 "使用帮助:\n"
 
-#: ../roundup/admin.py:330
+#: ../roundup/admin.py:334
 #, python-format
 msgid "%s:"
 msgstr "%s:"
 
 # ../roundup/admin.py:337 :387
-#: ../roundup/admin.py:435 ../roundup/admin.py:1384
-#: ../roundup/admin.py:435:1384
+#: ../roundup/admin.py:439 ../roundup/admin.py:1396
+#: ../roundup/admin.py:439:1396
 msgid "Templates:"
 msgstr "模板:"
 
 # ../roundup/admin.py:340 :398
-#: ../roundup/admin.py:438 ../roundup/admin.py:1394
-#: ../roundup/admin.py:438:1394
+#: ../roundup/admin.py:442 ../roundup/admin.py:1406
+#: ../roundup/admin.py:442:1406
 msgid "Back ends:"
 msgstr "后端:"
 
 #. noqa: ARG002
-#: ../roundup/admin.py:455
+#: ../roundup/admin.py:459
 msgid ""
 "Usage: commit\n"
 "        Commit changes made to the database during an interactive session.\n"
@@ -334,7 +334,7 @@
 "        在命令行中的 One-off 命令如果成功会被自动提交。\n"
 "        "
 
-#: ../roundup/admin.py:470
+#: ../roundup/admin.py:474
 msgid ""
 "Usage: create classname property=value ...\n"
 "        Create a new entry of a given class.\n"
@@ -354,46 +354,45 @@
 
 # ../roundup/admin.py:359 :494 :573 :623 :676 :697 :725 :796 :863 :934 :982
 # :1004 :1031 :1093 :1159
-#: ../roundup/admin.py:478 ../roundup/admin.py:552 ../roundup/admin.py:600
-#: ../roundup/admin.py:723 ../roundup/admin.py:796 ../roundup/admin.py:842
-#: ../roundup/admin.py:893 ../roundup/admin.py:990 ../roundup/admin.py:1206
-#: ../roundup/admin.py:1357 ../roundup/admin.py:1485 ../roundup/admin.py:1571
-#: ../roundup/admin.py:1691 ../roundup/admin.py:1814 ../roundup/admin.py:1846
-#: ../roundup/admin.py:1962 ../roundup/admin.py:2016 ../roundup/admin.py:2064
-#: ../roundup/admin.py:478:552 :1206:1357:1485 :1571:1691 :1814:1846 :1962:2016
-#: :2064 :600:723 :796:842 :893:990
+#: ../roundup/admin.py:482 ../roundup/admin.py:555 ../roundup/admin.py:606
+#: ../roundup/admin.py:733 ../roundup/admin.py:806 ../roundup/admin.py:851
+#: ../roundup/admin.py:902 ../roundup/admin.py:999 ../roundup/admin.py:1216
+#: ../roundup/admin.py:1369 ../roundup/admin.py:1497 ../roundup/admin.py:1580
+#: ../roundup/admin.py:1703 ../roundup/admin.py:1826 ../roundup/admin.py:1858
+#: ../roundup/admin.py:1974 ../roundup/admin.py:2028 ../roundup/admin.py:2076
+#: ../roundup/admin.py:482:555 :1216:1369:1497 :1580:1703 :1826:1858 :1974:2028
+#: :2076 :606:733 :806:851 :902:999
 msgid "Not enough arguments supplied"
 msgstr "未提供足够的参数"
 
-#: ../roundup/admin.py:498
+#: ../roundup/admin.py:502
 #, python-format
 msgid "%(propname)s (Password): "
 msgstr "%(propname)s (密码):"
 
-#: ../roundup/admin.py:501
+#: ../roundup/admin.py:505
 #, python-format
 msgid "   %(propname)s (Again): "
 msgstr "   %(propname)s (再次):"
 
-#: ../roundup/admin.py:505
+#: ../roundup/admin.py:509
 msgid "Sorry, try again..."
 msgstr "抱歉,再试一次..."
 
-#: ../roundup/admin.py:510
+#: ../roundup/admin.py:514
 #, python-format
 msgid "%(propname)s (%(proptype)s): "
 msgstr ""
 
-#: ../roundup/admin.py:529
+#: ../roundup/admin.py:533
 #, python-format
 msgid "you must provide the \"%(propname)s\" property."
 msgstr "你必须提供 \"%(propname)s\" 属性。"
 
-#: ../roundup/admin.py:541
+#: ../roundup/admin.py:545
 #, fuzzy
 msgid ""
 "Usage: display designator[,designator]*\n"
-"\n"
 "        Show the property values for the given node(s).\n"
 "\n"
 "        A designator is a classname and a nodeid concatenated,\n"
@@ -409,25 +408,57 @@
 "        将显示给出结点的属性和相应的值。\n"
 "        "
 
-#: ../roundup/admin.py:583
+#: ../roundup/admin.py:586
 #, fuzzy, python-format
 msgid "%(protected)s%(key)s: %(value)s"
 msgstr "%(key)s: %(value)s"
 
 #. grab the directory to export to
-#: ../roundup/admin.py:586
+#: ../roundup/admin.py:589
 #, fuzzy
 msgid ""
 "Usage: export [[-]class[,class]] export_dir\n"
-"        Export the database to colon-separated-value files.\n"
+"        Export the database and file content.\n"
+"\n"
+"        Database content is exported to colon separated files.\n"
 "        To exclude the files (e.g. for the msg or file class),\n"
 "        use the exporttables command.\n"
 "\n"
 "        Optionally limit the export to just the named classes\n"
-"        or exclude the named classes, if the 1st argument starts with '-'.\n"
+"        or exclude the named classes, if the 1st argument\n"
+"        starts with '-'.\n"
 "\n"
 "        This action exports the current data from the database into\n"
 "        colon-separated-value files that are placed in the nominated\n"
+"        export_dir directory.\n"
+"        "
+msgstr ""
+"用法:export [class[,class]] export_dir\n"
+"        导出数据库为冒号分隔值的文件。\n"
+"\n"
+"        对于导出的可选限制只是类名。\n"
+"\n"
+"        这个动作从数据库中导出当前的数据到以冒号分隔值的文件中去,它们将存\n"
+"        放在指定的目标目录中。\n"
+"        "
+
+#: ../roundup/admin.py:704
+#, fuzzy
+msgid ""
+"Usage: exporttables [[-]class[,class]] export_dir\n"
+"        Export only the database to files, no file content.\n"
+"\n"
+"        Database content is exported to colon separated files.\n"
+"        The files below $TRACKER_HOME/db/files/ (which can be\n"
+"        archived separately) are not part of the export.\n"
+"        To include the files, use the export command.\n"
+"\n"
+"        Optionally limit the export to just the named classes\n"
+"        or exclude the named classes, if the 1st argument\n"
+"        starts with '-'.\n"
+"\n"
+"        This action exports the current data from the database into\n"
+"        colon-separated-value files that are placed in the export_dir\n"
 "        destination directory.\n"
 "        "
 msgstr ""
@@ -440,33 +471,7 @@
 "        放在指定的目标目录中。\n"
 "        "
 
-#: ../roundup/admin.py:698
-#, fuzzy
-msgid ""
-"Usage: exporttables [[-]class[,class]] export_dir\n"
-"        Export the database to colon-separated-value files, excluding the\n"
-"        files below $TRACKER_HOME/db/files/ (which can be archived "
-"separately).\n"
-"        To include the files, use the export command.\n"
-"\n"
-"        Optionally limit the export to just the named classes\n"
-"        or exclude the named classes, if the 1st argument starts with '-'.\n"
-"\n"
-"        This action exports the current data from the database into\n"
-"        colon-separated-value files that are placed in the nominated\n"
-"        destination directory.\n"
-"        "
-msgstr ""
-"用法:export [class[,class]] export_dir\n"
-"        导出数据库为冒号分隔值的文件。\n"
-"\n"
-"        对于导出的可选限制只是类名。\n"
-"\n"
-"        这个动作从数据库中导出当前的数据到以冒号分隔值的文件中去,它们将存\n"
-"        放在指定的目标目录中。\n"
-"        "
-
-#: ../roundup/admin.py:713
+#: ../roundup/admin.py:723
 #, fuzzy
 msgid ""
 "Usage: filter classname propname=value ...\n"
@@ -488,20 +493,20 @@
 "        "
 
 # ../roundup/admin.py:663 :816 :828 :882
-#: ../roundup/admin.py:754
+#: ../roundup/admin.py:764
 #, 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:781 ../roundup/admin.py:830 ../roundup/admin.py:1505
-#: ../roundup/admin.py:1518 ../roundup/admin.py:2086
-#: ../roundup/admin.py:781:830 :1505:1518:2086
+#: ../roundup/admin.py:791 ../roundup/admin.py:840 ../roundup/admin.py:1517
+#: ../roundup/admin.py:1530 ../roundup/admin.py:2098
+#: ../roundup/admin.py:791:840 :1517:1530:2098
 #, python-format
 msgid "%(classname)s has no property \"%(propname)s\""
 msgstr "%(classname)s 没有 \"%(propname)s\" 属性"
 
-#: ../roundup/admin.py:788
+#: ../roundup/admin.py:798
 msgid ""
 "Usage: find classname propname=value ...\n"
 "        Find the nodes of the given class with a given link property value.\n"
@@ -519,15 +524,14 @@
 "        或者是结点的键值。\n"
 "        "
 
-#: ../roundup/admin.py:837
+#: ../roundup/admin.py:847
 msgid ""
-"Usage: genconfig <filename>\n"
-"        Generate a new tracker config file (ini style) with default\n"
-"        values in <filename>.\n"
+"Usage: genconfig filename\n"
+"        Create a new tracker config file with default values in filename.\n"
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:855
+#: ../roundup/admin.py:864
 #, python-format
 msgid ""
 "Changing option\n"
@@ -535,20 +539,20 @@
 "from old default of %(old_number)s to new default of %(new_number)s."
 msgstr ""
 
-#: ../roundup/admin.py:866
+#: ../roundup/admin.py:875
 #, python-format
 msgid ""
 "Update 'password_pbkdf2_default_rounds' to a number equal to or larger\n"
 "  than %s.\n"
 msgstr ""
 
-#: ../roundup/admin.py:873
+#: ../roundup/admin.py:882
 msgid ""
 "Check the rdbms mysql_* settings. Your charset and collations may need\n"
 "  to be changed. See upgrading instructions.\n"
 msgstr ""
 
-#: ../roundup/admin.py:883
+#: ../roundup/admin.py:892
 #, fuzzy
 msgid ""
 "Usage: get property designator[,designator]*\n"
@@ -568,24 +572,24 @@
 "        "
 
 # ../roundup/admin.py:527 :542
-#: ../roundup/admin.py:916
+#: ../roundup/admin.py:925
 #, 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:933 ../roundup/admin.py:1181 ../roundup/admin.py:1858
-#: ../roundup/admin.py:933:1181:1858
+#: ../roundup/admin.py:942 ../roundup/admin.py:1190 ../roundup/admin.py:1842
+#: ../roundup/admin.py:1870 ../roundup/admin.py:942:1190 :1842:1870
 #, python-format
 msgid "no such %(classname)s node \"%(nodeid)s\""
 msgstr "没有这样的 %(classname)s 结点 \"%(nodeid)s\""
 
-#: ../roundup/admin.py:936
+#: ../roundup/admin.py:945
 #, python-format
 msgid "no such %(classname)s property \"%(propname)s\""
 msgstr "没有这样的 %(classname)s 属性 \"%(propname)s\""
 
-#: ../roundup/admin.py:941
+#: ../roundup/admin.py:950
 msgid ""
 "Usage: help topic\n"
 "        Give help about topic.\n"
@@ -605,12 +609,12 @@
 "        all       -- 所有可用的帮助\n"
 "        "
 
-#: ../roundup/admin.py:960
+#: ../roundup/admin.py:969
 #, python-format
 msgid "Sorry, no help for \"%(topic)s\""
 msgstr "抱歉,没有“%(topic)s”的帮助信息"
 
-#: ../roundup/admin.py:977
+#: ../roundup/admin.py:986
 #, fuzzy
 msgid ""
 "Usage: history designator [skipquiet] [raw]\n"
@@ -632,27 +636,27 @@
 "        它的键值可以被重用。\n"
 "        "
 
-#: ../roundup/admin.py:1002
+#: ../roundup/admin.py:1011
 #, python-format
 msgid "Unexpected argument(s): %s. Expected 'skipquiet' or 'raw'."
 msgstr ""
 
-#: ../roundup/admin.py:1053
+#: ../roundup/admin.py:1062
 #, fuzzy
 msgid "removed"
 msgstr "删除"
 
-#: ../roundup/admin.py:1055
+#: ../roundup/admin.py:1064
 msgid "added"
 msgstr ""
 
-#: ../roundup/admin.py:1057
+#: ../roundup/admin.py:1066
 #, python-format
 msgid "Unknown history set operation '%s'. Expected +/-."
 msgstr ""
 
 #. .Hint added issue23 to superseder
-#: ../roundup/admin.py:1082
+#: ../roundup/admin.py:1091
 #, fuzzy, python-format
 msgid "added %(class)s%(item_id)s to %(propname)s"
 msgstr "%(class)s %(id)s %(properties)s 编辑成功"
@@ -660,34 +664,36 @@
 #. .Hint read as: assignedto was admin(1)
 #. where assignedto is the property
 #. admin is the key name for value 1
-#: ../roundup/admin.py:1103
+#: ../roundup/admin.py:1112
 #, python-format
 msgid "%(prop)s was %(name)s(%(value)s)"
 msgstr ""
 
-#: ../roundup/admin.py:1109 ../roundup/admin.py:1138
-#: ../roundup/admin.py:1109:1138
+#: ../roundup/admin.py:1118 ../roundup/admin.py:1147
+#: ../roundup/admin.py:1118:1147
 #, fuzzy, python-format
 msgid "%(prop)s was %(value)s"
 msgstr "%(key)s: %(value)s"
 
-#: ../roundup/admin.py:1128
+#: ../roundup/admin.py:1137
 #, python-format
 msgid "%(prop)s was [%(value_list)s]"
 msgstr ""
 
 #. .Hint modified nosy: added demo(3)
-#: ../roundup/admin.py:1135
+#: ../roundup/admin.py:1144
 #, python-format
 msgid "modified %(prop)s: %(how)s"
 msgstr ""
 
-#: ../roundup/admin.py:1186
+#: ../roundup/admin.py:1195
+#, fuzzy
 msgid ""
 "Usage: import import_dir\n"
-"        Import a database from the directory containing CSV files,\n"
-"        two per class to import.\n"
-"\n"
+"        Import a database and file contents from the directory.\n"
+"\n"
+"        The directory should have the same format as one containing\n"
+"        the output of export. There are two files imported per class.\n"
 "        The files used in the import are:\n"
 "\n"
 "        <class>.csv\n"
@@ -722,16 +728,17 @@
 "        旧数据。)\n"
 "        "
 
-#: ../roundup/admin.py:1276
+#: ../roundup/admin.py:1287
 msgid ""
 "Usage: importtables export_dir\n"
-"\n"
 "        This imports the database tables exported using exporttables.\n"
+"\n"
+"        It does not import the content of files like msgs and files.\n"
 "        "
 msgstr ""
 
 #. password
-#: ../roundup/admin.py:1283
+#: ../roundup/admin.py:1295
 msgid ""
 "Usage: initialise [adminpw]\n"
 "        Initialise a new Roundup tracker.\n"
@@ -749,23 +756,23 @@
 "        执行tracker的初始化函数 dbinit.init()\n"
 "        "
 
-#: ../roundup/admin.py:1297
+#: ../roundup/admin.py:1309
 msgid "Admin Password: "
 msgstr "管理员密码:"
 
-#: ../roundup/admin.py:1298
+#: ../roundup/admin.py:1310
 msgid "       Confirm: "
 msgstr "       确认:"
 
-#: ../roundup/admin.py:1302
+#: ../roundup/admin.py:1314
 msgid "Instance home does not exist"
 msgstr "实例目录不存在"
 
-#: ../roundup/admin.py:1306
+#: ../roundup/admin.py:1318
 msgid "Instance has not been installed"
 msgstr "实例还没有安装"
 
-#: ../roundup/admin.py:1314
+#: ../roundup/admin.py:1326
 msgid ""
 "WARNING: The database is already initialised!\n"
 "If you re-initialise it, you will lose all the data!\n"
@@ -775,7 +782,7 @@
 "如果你重新初始化它,所有的数据将会丢失!\n"
 "删除它吗?Y/N: "
 
-#: ../roundup/admin.py:1334
+#: ../roundup/admin.py:1346
 #, fuzzy
 msgid ""
 "Usage: install [template [backend [key=val[,key=val]]]]\n"
@@ -815,12 +822,12 @@
 "        请查看初始化参数帮助。\n"
 "        "
 
-#: ../roundup/admin.py:1363
+#: ../roundup/admin.py:1375
 #, python-format
 msgid "Instance home parent directory \"%(parent)s\" does not exist"
 msgstr "实例目录的父目录 \"%(parent)s\" 不存在"
 
-#: ../roundup/admin.py:1372
+#: ../roundup/admin.py:1384
 #, python-format
 msgid ""
 "WARNING: There appears to be a tracker in \"%(tracker_home)s\"!\n"
@@ -831,22 +838,22 @@
 "如果你重新安装,所有的数据将会丢失!\n"
 "删除它吗?Y/N: "
 
-#: ../roundup/admin.py:1385
+#: ../roundup/admin.py:1397
 #, fuzzy
 msgid "Select template"
 msgstr "选择模板 [classic]:"
 
-#: ../roundup/admin.py:1395
+#: ../roundup/admin.py:1407
 #, fuzzy
 msgid "Select backend"
 msgstr "选择后端 [anydbm]:"
 
-#: ../roundup/admin.py:1406
+#: ../roundup/admin.py:1418
 #, python-format
 msgid "Error in configuration settings: \"%s\""
 msgstr "配置设定有错: “%s”"
 
-#: ../roundup/admin.py:1439
+#: ../roundup/admin.py:1451
 #, fuzzy, python-format
 msgid ""
 "\n"
@@ -858,11 +865,11 @@
 " 现在你应该修改tracker的配置文件:\n"
 "   %(config_file)s"
 
-#: ../roundup/admin.py:1449
+#: ../roundup/admin.py:1461
 msgid " ... at a minimum, you must set following options:"
 msgstr " ... 至少,你必须设置以下选项:"
 
-#: ../roundup/admin.py:1454
+#: ../roundup/admin.py:1466
 #, fuzzy, python-format
 msgid ""
 "\n"
@@ -886,7 +893,7 @@
 "   %(database_init_file)s\n"
 " ... 查看关于客户化的文档来了解更多的信息。\n"
 
-#: ../roundup/admin.py:1470
+#: ../roundup/admin.py:1482
 msgid ""
 "Usage: list classname [property]\n"
 "        List the instances of a class.\n"
@@ -912,20 +919,19 @@
 "        定了属性,对每个类型实例会打印出这个属性。\n"
 "        "
 
-#: ../roundup/admin.py:1483
+#: ../roundup/admin.py:1495
 msgid "Too many arguments supplied"
 msgstr "提供了太多的参数了"
 
-#: ../roundup/admin.py:1516
+#: ../roundup/admin.py:1528
 #, python-format
 msgid "%(nodeid)4s: %(value)s"
 msgstr "%(nodeid)4s: %(value)s"
 
 #. noqa: ARG002  - args unused
-#: ../roundup/admin.py:1523
+#: ../roundup/admin.py:1535
 msgid ""
 "Usage: migrate\n"
-"\n"
 "        Update a tracker's database to be compatible with the Roundup\n"
 "        codebase.\n"
 "\n"
@@ -946,22 +952,21 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1544
+#: ../roundup/admin.py:1555
 #, python-format
 msgid "Tracker updated to schema version %s."
 msgstr ""
 
-#: ../roundup/admin.py:1548
+#: ../roundup/admin.py:1559
 #, fuzzy, python-format
 msgid "No migration action required. At schema version %s."
 msgstr "不必执行迁移"
 
-#: ../roundup/admin.py:1553
+#: ../roundup/admin.py:1564
+#, fuzzy
 msgid ""
 "Usage: pack period | date\n"
-"\n"
-"        Remove journal entries older than a period of time specified or\n"
-"        before a certain date.\n"
+"        Remove journal entries older than the date/period.\n"
 "\n"
 "        A period is specified using the suffixes \"y\", \"m\", and \"d\". "
 "The\n"
@@ -994,15 +999,16 @@
 "\n"
 "        "
 
-#: ../roundup/admin.py:1581
+#: ../roundup/admin.py:1590
 msgid "Invalid format"
 msgstr "无效的格式"
 
-#: ../roundup/admin.py:1592
+#: ../roundup/admin.py:1601
 msgid ""
 "Usage: perftest [mode] [arguments]*\n"
-"\n"
-"        Time operations in Roundup. Supported arguments:\n"
+"        Time operations in Roundup.\n"
+"\n"
+"        Supported arguments:\n"
 "\n"
 "            [password] [rounds=<integer>] [scheme=<scheme>]\n"
 "\n"
@@ -1015,28 +1021,30 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1625
+#: ../roundup/admin.py:1635
 msgid "Invalid 'rounds'. Must be larger than 999."
 msgstr ""
 
-#: ../roundup/admin.py:1629
+#: ../roundup/admin.py:1639
 #, python-format
 msgid "Invalid 'rounds'. It must be an integer not: %s"
 msgstr ""
 
-#: ../roundup/admin.py:1656
+#: ../roundup/admin.py:1666
 msgid "scheme does not support rounds."
 msgstr ""
 
-#: ../roundup/admin.py:1659
+#: ../roundup/admin.py:1669
 #, python-format
 msgid "Hash time: %(time)0.9f seconds, scheme: %(scheme)s, rounds: %(rounds)s"
 msgstr ""
 
-#: ../roundup/admin.py:1665
+#: ../roundup/admin.py:1675
 msgid ""
 "Usage: pragma setting=value | 'list'\n"
-"        Set internal admin settings to a value. E.G.\n"
+"        Set internal admin settings to a value.\n"
+"\n"
+"        For example:\n"
 "\n"
 "            pragma verbose=True\n"
 "            pragma verbose=yes\n"
@@ -1060,49 +1068,49 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1698
+#: ../roundup/admin.py:1710
 #, python-format
 msgid "Argument must be setting=value, was given: %s."
 msgstr ""
 
-#: ../roundup/admin.py:1701
+#: ../roundup/admin.py:1713
 msgid "Current settings and values (NYI - not yet implemented):"
 msgstr ""
 
-#: ../roundup/admin.py:1712
+#: ../roundup/admin.py:1724
 msgid ""
 "      Help for this pragma is missing. Please report it to the Roundup "
 "project.\n"
 msgstr ""
 
-#: ../roundup/admin.py:1718
+#: ../roundup/admin.py:1730
 #, fuzzy, python-format
 msgid "Unknown setting %s. Try \"pragma list\"."
 msgstr "未知用户名"
 
-#: ../roundup/admin.py:1728
+#: ../roundup/admin.py:1740
 #, python-format
 msgid "Incorrect value for boolean setting %(setting)s: %(value)s."
 msgstr ""
 
-#: ../roundup/admin.py:1735
+#: ../roundup/admin.py:1747
 #, python-format
 msgid "Incorrect value for integer setting %(setting)s: %(value)s."
 msgstr ""
 
-#: ../roundup/admin.py:1742
+#: ../roundup/admin.py:1754
 #, python-format
 msgid ""
 "Incorrect value for setting %(setting)s: %(value)s. Should be no, both, or "
 "only."
 msgstr ""
 
-#: ../roundup/admin.py:1752
+#: ../roundup/admin.py:1764
 #, python-format
 msgid "Internal error: pragma can not handle values of type: %s"
 msgstr ""
 
-#: ../roundup/admin.py:1761
+#: ../roundup/admin.py:1773
 #, fuzzy
 msgid ""
 "Usage: reindex [classname|classname:#-#|designator]*\n"
@@ -1125,17 +1133,17 @@
 "        重新生成 tracker 的搜索索引,它将自动进行。\n"
 "        "
 
-#: ../roundup/admin.py:1783
+#: ../roundup/admin.py:1795
 #, python-format
 msgid "no such item \"%(designator)s\""
 msgstr "没有这样的条目 \"%(designator)s\""
 
-#: ../roundup/admin.py:1793
+#: ../roundup/admin.py:1805
 #, fuzzy, python-format
 msgid "no such item \"%(class)s%(id)s\""
 msgstr "没有这样的条目 \"%(designator)s\""
 
-#: ../roundup/admin.py:1805
+#: ../roundup/admin.py:1817
 #, fuzzy
 msgid ""
 "Usage: restore designator[,designator]*\n"
@@ -1153,13 +1161,7 @@
 "        给定的结点将对用户来说再次生效。\n"
 "        "
 
-# ../roundup/admin.py:550 :945 :994 :1016
-#: ../roundup/admin.py:1830
-#, fuzzy
-msgid "no such %(classname)s node \"%(nodeid)s\""
-msgstr "没有这样的 %(classname)s 结点 \"%(nodeid)s\""
-
-#: ../roundup/admin.py:1836
+#: ../roundup/admin.py:1848
 #, fuzzy
 msgid ""
 "Usage: retire designator[,designator]*\n"
@@ -1180,7 +1182,7 @@
 "        "
 
 #. noqa: ARG002 - args unused
-#: ../roundup/admin.py:1864
+#: ../roundup/admin.py:1876
 msgid ""
 "Usage: rollback\n"
 "        Undo all changes that are pending commit to the database.\n"
@@ -1199,60 +1201,60 @@
 "        产生变化。\n"
 "        "
 
-#: ../roundup/admin.py:1877
+#: ../roundup/admin.py:1889
 msgid ""
 "Usage: security [Role name]\n"
-"\n"
-"             Display the Permissions available to one or all Roles.\n"
-"             Also validates that any properties defined in a\n"
-"             permission are valid.\n"
-"\n"
-"             Run this after changing your permissions to catch\n"
-"             typos.\n"
+"        Display the Permissions available to one or all Roles.\n"
+"\n"
+"        Also validates that any properties defined in a\n"
+"        permission are valid.\n"
+"\n"
+"        Run this after changing your permissions to catch\n"
+"        typos.\n"
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1892
+#: ../roundup/admin.py:1904
 #, fuzzy, python-format
 msgid "No such Role \"%(role)s\"\n"
 msgstr "没有这样的角色 \"%(role)s\""
 
-#: ../roundup/admin.py:1898
+#: ../roundup/admin.py:1910
 #, fuzzy, python-format
 msgid "New Web users get the Roles \"%(role)s\"\n"
 msgstr "新Web用户得到角色 \"%(role)s\""
 
-#: ../roundup/admin.py:1901
+#: ../roundup/admin.py:1913
 #, fuzzy, python-format
 msgid "New Web users get the Role \"%(role)s\"\n"
 msgstr "新Web用户得到角色 \"%(role)s\""
 
-#: ../roundup/admin.py:1905
+#: ../roundup/admin.py:1917
 #, fuzzy, python-format
 msgid "New Email users get the Roles \"%(role)s\"\n"
 msgstr "新邮件用户得到角色 \"%(role)s\""
 
-#: ../roundup/admin.py:1907
+#: ../roundup/admin.py:1919
 #, fuzzy, python-format
 msgid "New Email users get the Role \"%(role)s\"\n"
 msgstr "新邮件用户得到角色 \"%(role)s\""
 
-#: ../roundup/admin.py:1910
+#: ../roundup/admin.py:1922
 #, fuzzy, python-format
 msgid "Role \"%(name)s\":\n"
 msgstr "角色 \"%(name)s\":"
 
-#: ../roundup/admin.py:1916
+#: ../roundup/admin.py:1928
 #, fuzzy
 msgid " %(description)s (%(name)s for \"%(klass)s\""
 msgstr " %(description)s (%(name)s 仅用于 \"%(klass)s\")"
 
-#: ../roundup/admin.py:1916
+#: ../roundup/admin.py:1928
 #, 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:1929
+#: ../roundup/admin.py:1941
 #, python-format
 msgid ""
 "\n"
@@ -1260,17 +1262,17 @@
 "\n"
 msgstr ""
 
-#: ../roundup/admin.py:1935
+#: ../roundup/admin.py:1947
 #, fuzzy, python-format
 msgid " %(description)s (%(name)s for \"%(klass)s\" only)\n"
 msgstr " %(description)s (%(name)s 仅用于 \"%(klass)s\")"
 
-#: ../roundup/admin.py:1938
+#: ../roundup/admin.py:1950
 #, fuzzy, python-format
 msgid " %(description)s (%(name)s)\n"
 msgstr " %(description)s (%(name)s)"
 
-#: ../roundup/admin.py:1942
+#: ../roundup/admin.py:1954
 #, fuzzy
 msgid ""
 "Usage: set items property=value [property=value ...]\n"
@@ -1303,7 +1305,7 @@
 "        你需要为多链接提供用逗号分隔的数字(例如 \"1,2,3\")。\n"
 "        "
 
-#: ../roundup/admin.py:2010
+#: ../roundup/admin.py:2022
 msgid ""
 "Usage: specification classname\n"
 "        Show the properties for a classname.\n"
@@ -1317,17 +1319,17 @@
 "        会列出给定类型的属性。\n"
 "        "
 
-#: ../roundup/admin.py:2029
+#: ../roundup/admin.py:2041
 #, fuzzy, python-format
 msgid "%(key)s: %(value)s (key property)\n"
 msgstr "%(key)s: %(value)s (关键属性)"
 
-#: ../roundup/admin.py:2032
+#: ../roundup/admin.py:2044
 #, fuzzy, python-format
 msgid "%(key)s: %(value)s\n"
 msgstr "%(key)s: %(value)s"
 
-#: ../roundup/admin.py:2035
+#: ../roundup/admin.py:2047
 msgid ""
 "Usage: table classname [property[,property]*]\n"
 "        List the instances of a class in tabular form.\n"
@@ -1385,17 +1387,17 @@
 "        将生成4个字符宽的 \"Name\" 列。\n"
 "        "
 
-#: ../roundup/admin.py:2081
+#: ../roundup/admin.py:2093
 #, python-format
 msgid "\"%(spec)s\" not name:width"
 msgstr "\"%(spec)s\" 不是 名字:宽度"
 
-#: ../roundup/admin.py:2103
+#: ../roundup/admin.py:2115
 #, python-format
 msgid "\"%(spec)s\" does not have an integer width: \"%(width)s\""
 msgstr ""
 
-#: ../roundup/admin.py:2139
+#: ../roundup/admin.py:2151
 msgid ""
 "Usage: templates [trace_search]\n"
 "        List templates and their installed directories.\n"
@@ -1405,44 +1407,45 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:2167
+#: ../roundup/admin.py:2179
 msgid ""
 "Usage: updateconfig <filename>\n"
-"        Generate an updated tracker config file (ini style) in\n"
-"        <filename>. Use current settings from existing roundup\n"
-"        tracker in tracker home.\n"
+"        Merge existing tracker config with new settings.\n"
+"\n"
+"        Output the updated config file to <filename>. Use current\n"
+"        settings from existing roundup tracker in tracker home.\n"
 "        "
 msgstr ""
 
 # ../roundup/cgi/actions.py:549 :559 :730 :749
-#: ../roundup/admin.py:2175 ../roundup/cgi/actions.py:886
+#: ../roundup/admin.py:2188 ../roundup/cgi/actions.py:886
 #: ../roundup/cgi/actions.py:897 ../roundup/cgi/actions.py:1099
 #: ../roundup/cgi/actions.py:1113 ../roundup/cgi/actions.py:886:897 :1099:1113
 #, python-format
 msgid "Error: %s"
 msgstr "错误:%s"
 
-#: ../roundup/admin.py:2207
+#: ../roundup/admin.py:2220
 #, python-format
 msgid "Unknown command \"%(command)s\" (\"help commands\" for a list)"
 msgstr "未知命令 \"%(command)s\" (\"help commands\" 查看命令列表)"
 
-#: ../roundup/admin.py:2213
+#: ../roundup/admin.py:2226
 #, python-format
 msgid "Multiple commands match \"%(command)s\": %(list)s"
 msgstr "多命令匹配 \"%(command)s\": %(list)s"
 
-#: ../roundup/admin.py:2228
+#: ../roundup/admin.py:2241
 msgid "Enter tracker home: "
 msgstr "输入tracker起始目录:"
 
-#: ../roundup/admin.py:2257 ../roundup/admin.py:2261
-#: ../roundup/admin.py:2257:2261
+#: ../roundup/admin.py:2270 ../roundup/admin.py:2274
+#: ../roundup/admin.py:2270:2274
 #, python-format
 msgid "Error: Couldn't open tracker: %(message)s"
 msgstr "错误:不能打开tracker:%(message)s"
 
-#: ../roundup/admin.py:2309
+#: ../roundup/admin.py:2322
 #, python-format
 msgid ""
 "Roundup %s ready for input.\n"
@@ -1451,15 +1454,15 @@
 "Roundup %s 输入就绪。\n"
 "敲入 \"help\" 获得帮助。"
 
-#: ../roundup/admin.py:2342
+#: ../roundup/admin.py:2355
 msgid "Note: command history and editing not available"
 msgstr "注意:命令历史和编辑无效"
 
-#: ../roundup/admin.py:2348
+#: ../roundup/admin.py:2361
 msgid "exit..."
 msgstr "退出..."
 
-#: ../roundup/admin.py:2361
+#: ../roundup/admin.py:2374
 msgid "There are unsaved changes. Commit them (y/N)? "
 msgstr "存在未被保存的改动。提交吗(y/N)?"
 
@@ -1985,7 +1988,7 @@
 msgid "<em>undefined</em>"
 msgstr "<em>未定义</em>"
 
-#: ../roundup/cgi/client.py:90
+#: ../roundup/cgi/client.py:105
 msgid ""
 "<html><head><title>An error has occurred</title></head>\n"
 "<body><h1>An error has occurred</h1>\n"
@@ -1994,155 +1997,155 @@
 "</body></html>"
 msgstr ""
 
-#: ../roundup/cgi/client.py:702 ../roundup/cgi/client.py:1622
-#: ../roundup/cgi/client.py:702:1622
+#: ../roundup/cgi/client.py:717 ../roundup/cgi/client.py:1635
+#: ../roundup/cgi/client.py:717:1635
 msgid "Required Header Missing"
 msgstr ""
 
-#: ../roundup/cgi/client.py:704
+#: ../roundup/cgi/client.py:719
 #, fuzzy
 msgid "Client is not allowed to use Rest Interface."
 msgstr "匿名用户不允许使用 web 界面"
 
-#: ../roundup/cgi/client.py:956
+#: ../roundup/cgi/client.py:971
 msgid "Form Error: "
 msgstr "表格错误:"
 
-#: ../roundup/cgi/client.py:1049
+#: ../roundup/cgi/client.py:1064
 #, python-format
 msgid "Unrecognized charset: %r"
 msgstr "无法识别的字符集:%r"
 
-#: ../roundup/cgi/client.py:1318 ../roundup/cgi/client.py:2281
-#: ../roundup/cgi/client.py:1318:2281
+#: ../roundup/cgi/client.py:1331 ../roundup/cgi/client.py:2294
+#: ../roundup/cgi/client.py:1331:2294
 msgid "broken form: multiple @action values submitted"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1335
+#: ../roundup/cgi/client.py:1348
 msgid "Anonymous users are not allowed to use the web interface"
 msgstr "匿名用户不允许使用 web 界面"
 
-#: ../roundup/cgi/client.py:1483
+#: ../roundup/cgi/client.py:1496
 msgid "Referer header not available."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1487
+#: ../roundup/cgi/client.py:1500
 #, python-format
 msgid "csrf key used with wrong method from: %s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1516
+#: ../roundup/cgi/client.py:1529
 #, python-format
 msgid "csrf header %(header)s required but missing for user%(userid)s."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1520
-#, python-format
-msgid "Missing header: %s"
-msgstr ""
-
-#: ../roundup/cgi/client.py:1528
-#, python-format
-msgid "csrf Referer header check failed for user%(userid)s. Value=%(referer)s"
-msgstr ""
-
 #: ../roundup/cgi/client.py:1533
+#, python-format
+msgid "Missing header: %s"
+msgstr ""
+
+#: ../roundup/cgi/client.py:1541
+#, python-format
+msgid "csrf Referer header check failed for user%(userid)s. Value=%(referer)s"
+msgstr ""
+
+#: ../roundup/cgi/client.py:1546
 #, fuzzy, python-format
 msgid "Invalid Referer: %s"
 msgstr "无效登录"
 
-#: ../roundup/cgi/client.py:1548
+#: ../roundup/cgi/client.py:1561
 #, python-format
 msgid "csrf Origin header check failed for user%(userid)s. Value=%(origin)s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1553
+#: ../roundup/cgi/client.py:1566
 #, fuzzy, python-format
 msgid "Invalid Origin %s"
 msgstr "无效登录"
 
-#: ../roundup/cgi/client.py:1567
+#: ../roundup/cgi/client.py:1580
 #, python-format
 msgid ""
 "csrf X-FORWARDED-HOST header check failed for user%(userid)s. Value=%(host)s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1573
+#: ../roundup/cgi/client.py:1586
 #, python-format
 msgid "Invalid X-FORWARDED-HOST %s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1592
+#: ../roundup/cgi/client.py:1605
 #, python-format
 msgid "csrf HOST header check failed for user%(userid)s. Value=%(host)s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1597
+#: ../roundup/cgi/client.py:1610
 #, fuzzy, python-format
 msgid "Invalid HOST %s"
 msgstr "无效请求"
 
-#: ../roundup/cgi/client.py:1605
+#: ../roundup/cgi/client.py:1618
 msgid "Csrf: unable to verify sufficient headers"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1606
-msgid "Unable to verify sufficient headers"
-msgstr ""
-
 #: ../roundup/cgi/client.py:1619
+msgid "Unable to verify sufficient headers"
+msgstr ""
+
+#: ../roundup/cgi/client.py:1632
 #, python-format
 msgid "csrf X-REQUESTED-WITH xmlrpc required header check failed for user%s."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1660
+#: ../roundup/cgi/client.py:1673
 #, python-format
 msgid "Required csrf field missing for user%s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1662 ../roundup/cgi/client.py:1689
-#: ../roundup/cgi/client.py:1706 ../roundup/cgi/client.py:1662:1689:1706
+#: ../roundup/cgi/client.py:1675 ../roundup/cgi/client.py:1702
+#: ../roundup/cgi/client.py:1719 ../roundup/cgi/client.py:1675:1702:1719
 msgid ""
 "We can't validate your session (csrf failure). Re-enter any unsaved data and "
 "try again."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1666
+#: ../roundup/cgi/client.py:1679
 #, python-format
 msgid "csrf field not supplied by user%s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1678
+#: ../roundup/cgi/client.py:1691
 #, 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:1696
+#: ../roundup/cgi/client.py:1709
 #, 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:1888
+#: ../roundup/cgi/client.py:1901
 msgid "You are not allowed to view this file."
 msgstr "你没有查看此文件的权限"
 
-#: ../roundup/cgi/client.py:2159
+#: ../roundup/cgi/client.py:2172
 #, python-format
 msgid "%(starttag)sTime elapsed: %(seconds)fs%(endtag)s\n"
 msgstr ""
 
-#: ../roundup/cgi/client.py:2163
+#: ../roundup/cgi/client.py:2176
 #, 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:2703
+#: ../roundup/cgi/client.py:2716
 #, python-format
 msgid ""
 "Cache failure: compressed file %(compressed)s is older than its source file "
@@ -2201,142 +2204,142 @@
 msgid_plural "Required %(class)s properties %(property)s not supplied"
 msgstr[0] "要求的 %(class)s 属性 %(property)s 没有被提供"
 
-#: ../roundup/cgi/templating.py:277
+#: ../roundup/cgi/templating.py:278
 #, python-format
 msgid "You are not allowed to %(action)s items of class %(class)s"
 msgstr "你不允许 %(action)s 类 %(class)s 的项目"
 
-#: ../roundup/cgi/templating.py:914
+#: ../roundup/cgi/templating.py:916
 msgid "(list)"
 msgstr "(列表)"
 
-#: ../roundup/cgi/templating.py:989
+#: ../roundup/cgi/templating.py:991
 msgid "Submit New Entry"
 msgstr "提交"
 
-#: ../roundup/cgi/templating.py:1011 ../roundup/cgi/templating.py:1187
-#: ../roundup/cgi/templating.py:1822 ../roundup/cgi/templating.py:1853
-#: ../roundup/cgi/templating.py:1874 ../roundup/cgi/templating.py:1912
-#: ../roundup/cgi/templating.py:1965 ../roundup/cgi/templating.py:1989
-#: ../roundup/cgi/templating.py:1996 ../roundup/cgi/templating.py:2033
-#: ../roundup/cgi/templating.py:2086 ../roundup/cgi/templating.py:2119
-#: ../roundup/cgi/templating.py:2214 ../roundup/cgi/templating.py:2235
-#: ../roundup/cgi/templating.py:2326 ../roundup/cgi/templating.py:2346
-#: ../roundup/cgi/templating.py:2368 ../roundup/cgi/templating.py:2411
-#: ../roundup/cgi/templating.py:2421 ../roundup/cgi/templating.py:2486
-#: ../roundup/cgi/templating.py:2789 ../roundup/cgi/templating.py:1011:1187
-#: :1822:1853 :1874:1912 :1965:1989 :1996:2033 :2086:2119 :2214:2235 :2326:2346
-#: :2368:2411 :2421:2486:2789
+#: ../roundup/cgi/templating.py:1013 ../roundup/cgi/templating.py:1189
+#: ../roundup/cgi/templating.py:1824 ../roundup/cgi/templating.py:1855
+#: ../roundup/cgi/templating.py:1876 ../roundup/cgi/templating.py:1914
+#: ../roundup/cgi/templating.py:1967 ../roundup/cgi/templating.py:1991
+#: ../roundup/cgi/templating.py:1998 ../roundup/cgi/templating.py:2035
+#: ../roundup/cgi/templating.py:2088 ../roundup/cgi/templating.py:2121
+#: ../roundup/cgi/templating.py:2216 ../roundup/cgi/templating.py:2237
+#: ../roundup/cgi/templating.py:2328 ../roundup/cgi/templating.py:2348
+#: ../roundup/cgi/templating.py:2370 ../roundup/cgi/templating.py:2413
+#: ../roundup/cgi/templating.py:2423 ../roundup/cgi/templating.py:2488
+#: ../roundup/cgi/templating.py:2791 ../roundup/cgi/templating.py:1013:1189
+#: :1824:1855 :1876:1914 :1967:1991 :1998:2035 :2088:2121 :2216:2237 :2328:2348
+#: :2370:2413 :2423:2488:2791
 msgid "[hidden]"
 msgstr "[隐藏]"
 
-#: ../roundup/cgi/templating.py:1012
+#: ../roundup/cgi/templating.py:1014
 msgid "New node - no history"
 msgstr "新记录 - 无历史"
 
-#: ../roundup/cgi/templating.py:1152
+#: ../roundup/cgi/templating.py:1154
 msgid "Submit Changes"
 msgstr "提交变动"
 
-#: ../roundup/cgi/templating.py:1230
+#: ../roundup/cgi/templating.py:1232
 msgid "<em>The indicated property no longer exists</em>"
 msgstr "<em>指示的属性不再存在</em>"
 
-#: ../roundup/cgi/templating.py:1266
+#: ../roundup/cgi/templating.py:1268
 #, python-format
 msgid "The linked class %(classname)s no longer exists"
 msgstr "链接的类 %(classname)s 不再存在"
 
-#: ../roundup/cgi/templating.py:1303 ../roundup/cgi/templating.py:1333
-#: ../roundup/cgi/templating.py:2495 ../roundup/cgi/templating.py:2798
-#: ../roundup/cgi/templating.py:1303:1333 :2495:2798
+#: ../roundup/cgi/templating.py:1305 ../roundup/cgi/templating.py:1335
+#: ../roundup/cgi/templating.py:2497 ../roundup/cgi/templating.py:2800
+#: ../roundup/cgi/templating.py:1305:1335 :2497:2800
 msgid "[label is missing]"
 msgstr ""
 
 # ../roundup/cgi/templating.py:872 :893
-#: ../roundup/cgi/templating.py:1307 ../roundup/cgi/templating.py:1336
-#: ../roundup/cgi/templating.py:1307:1336
+#: ../roundup/cgi/templating.py:1309 ../roundup/cgi/templating.py:1338
+#: ../roundup/cgi/templating.py:1309:1338
 msgid "<strike>The linked node no longer exists</strike>"
 msgstr "<strike>链接的结点不再存在</strike>"
 
-#: ../roundup/cgi/templating.py:1398
+#: ../roundup/cgi/templating.py:1400
 #, python-format
 msgid "%s: (no value)"
 msgstr "%s: (无值)"
 
-#: ../roundup/cgi/templating.py:1414
+#: ../roundup/cgi/templating.py:1416
 #, fuzzy, python-format
 msgid ""
 "<strong><em>This event %s is not handled by the history display!</em></"
 "strong>"
 msgstr "<strong><em>这个事件不能被历史显示所处理!</em></strong>"
 
-#: ../roundup/cgi/templating.py:1427
+#: ../roundup/cgi/templating.py:1429
 msgid "<tr><td colspan=4><strong>Note:</strong></td></tr>"
 msgstr "<tr><td colspan=4><strong>注意:</strong></td></tr>"
 
-#: ../roundup/cgi/templating.py:1436
+#: ../roundup/cgi/templating.py:1438
 msgid "History"
 msgstr "历史"
 
-#: ../roundup/cgi/templating.py:1438
+#: ../roundup/cgi/templating.py:1440
 msgid "<th>Date</th>"
 msgstr "<th>日期</th>"
 
-#: ../roundup/cgi/templating.py:1439
+#: ../roundup/cgi/templating.py:1441
 msgid "<th>User</th>"
 msgstr "<th>用户</th>"
 
-#: ../roundup/cgi/templating.py:1440
+#: ../roundup/cgi/templating.py:1442
 msgid "<th>Action</th>"
 msgstr "<th>动作</th>"
 
-#: ../roundup/cgi/templating.py:1441
+#: ../roundup/cgi/templating.py:1443
 msgid "<th>Args</th>"
 msgstr "<th>参数</th>"
 
-#: ../roundup/cgi/templating.py:1492
+#: ../roundup/cgi/templating.py:1494
 #, fuzzy, python-format
 msgid "Copy of %(class)s %(id)s"
 msgstr "%(class)s %(id)s 被创建"
 
-#: ../roundup/cgi/templating.py:2123 ../roundup/cgi/templating.py:2158
-#: ../roundup/cgi/templating.py:1380:2123:2158
+#: ../roundup/cgi/templating.py:2125 ../roundup/cgi/templating.py:2160
+#: ../roundup/cgi/templating.py:1382:2125:2160
 msgid "No"
 msgstr "否"
 
-#: ../roundup/cgi/templating.py:2123 ../roundup/cgi/templating.py:2152
-#: ../roundup/cgi/templating.py:1380:2123:2152
+#: ../roundup/cgi/templating.py:2125 ../roundup/cgi/templating.py:2154
+#: ../roundup/cgi/templating.py:1382:2125:2154
 msgid "Yes"
 msgstr "是"
 
-#: ../roundup/cgi/templating.py:2284
+#: ../roundup/cgi/templating.py:2286
 msgid ""
 "default value for DateHTMLProperty must be either DateHTMLProperty or string "
 "date representation."
 msgstr "DateHTMLProperty 的缺省值或者是 DateHTMLProperty 或字符串的日期表示。"
 
-#: ../roundup/cgi/templating.py:2466
+#: ../roundup/cgi/templating.py:2468
 #, python-format
 msgid "Attempt to look up %(attr)s on a missing value"
 msgstr ""
 
-#: ../roundup/cgi/templating.py:2477
+#: ../roundup/cgi/templating.py:2479
 #, python-format
 msgid "Attempt to look up %(item)s on a missing value"
 msgstr ""
 
-#: ../roundup/cgi/templating.py:2582
+#: ../roundup/cgi/templating.py:2584
 #, python-format
 msgid "<option %svalue=\"-1\">- no selection -</option>"
 msgstr "<option %svalue=\"-1\">- 未选择 -</option>"
 
-#: ../roundup/cgi/templating.py:3743
+#: ../roundup/cgi/templating.py:3745
 #, python-format
 msgid "Unable to read or expand file '%(name)s' in template '%(template)s'."
 msgstr ""
 
-#: ../roundup/cgi/templating.py:3793
+#: ../roundup/cgi/templating.py:3795
 #, python-format
 msgid ""
 "Found an incorrect token when expandfile applied string subsitution on "
@@ -2780,6 +2783,63 @@
 msgid "not of form [arg=value,value,...;arg=value,value,...]"
 msgstr ""
 
+#: ../roundup/pygettext.py:401
+#, python-format
+msgid "*** %(file)s:%(lineno)s: Seen unexpected token \"%(token)s\""
+msgstr ""
+
+#: ../roundup/pygettext.py:457
+#, python-format
+msgid "# File: %(filename)s, line: %(lineno)d"
+msgstr ""
+
+#: ../roundup/pygettext.py:464
+#, python-format
+msgid " %(filename)s:%(lineno)d"
+msgstr ""
+
+#: ../roundup/pygettext.py:540
+#, fuzzy, python-format
+msgid "Invalid value for --style: %s"
+msgstr "无效登录"
+
+#: ../roundup/pygettext.py:548
+#, python-format
+msgid "pygettext.py (xgettext for Python) %s"
+msgstr ""
+
+#: ../roundup/pygettext.py:554
+#, python-format
+msgid "--width argument must be an integer: %s"
+msgstr ""
+
+#: ../roundup/pygettext.py:582
+#, python-format
+msgid "Can't read --exclude-file: %s"
+msgstr ""
+
+#: ../roundup/pygettext.py:601
+msgid "Reading standard input"
+msgstr ""
+
+#: ../roundup/pygettext.py:606
+#, python-format
+msgid "Working on %s"
+msgstr ""
+
+#: ../roundup/pygettext.py:640
+msgid "a unicode string"
+msgstr ""
+
+#: ../roundup/pygettext.py:642
+#, python-format
+msgid "*** Seen unexpected token \"%(token)s\""
+msgstr ""
+
+#: ../roundup/pygettext.py:643
+msgid "morethanonestring"
+msgstr ""
+
 #: ../roundup/rest.py:410
 #, python-format
 msgid "Method %(m)s not allowed. Allowed: %(a)s"
@@ -2809,7 +2869,7 @@
 "%(acceptable_types)s"
 msgstr ""
 
-#: ../roundup/rest.py:2437
+#: ../roundup/rest.py:2441
 #, python-format
 msgid ""
 "Unrecognized api version: %s. See /rest without specifying api version for "
@@ -2910,24 +2970,33 @@
 "%(old)s"
 msgstr ""
 
-#: ../roundup/scripts/roundup_demo.py:151
-#, python-format
-msgid "Enter directory path to create demo tracker [%s]: "
-msgstr "输入目录来创建演示tracker [%s]:"
-
-#: ../roundup/scripts/roundup_demo.py:170
+#: ../roundup/scripts/roundup_demo.py:50
 #, python-format
 msgid ""
 "Enter tracker template to use (one of (%(template_list)s)) "
 "[%(default_template)s]: "
 msgstr ""
 
-#: ../roundup/scripts/roundup_gettext.py:35
+#: ../roundup/scripts/roundup_demo.py:166
+#, python-format
+msgid "Enter directory path to create demo tracker [%s]: "
+msgstr "输入目录来创建演示tracker [%s]:"
+
+#: ../roundup/scripts/roundup_gettext.py:33
+msgid ""
+"\n"
+"Extracting translatable strings only from html templates.\n"
+"Because the 'polib' module is missing, unable to extract\n"
+"translations from detectors or extensions.\n"
+"The 'polib' module can be installed with pip.\n"
+msgstr ""
+
+#: ../roundup/scripts/roundup_gettext.py:71
 #, python-format
 msgid "Usage: %(program)s <tracker home>"
 msgstr ""
 
-#: ../roundup/scripts/roundup_gettext.py:51
+#: ../roundup/scripts/roundup_gettext.py:89
 #, python-format
 msgid "No tracker templates found in directory %s"
 msgstr ""
--- a/locale/zh_TW.po	Wed Aug 07 21:43:40 2024 -0400
+++ b/locale/zh_TW.po	Wed Aug 07 21:52:58 2024 -0400
@@ -7,7 +7,7 @@
 msgstr ""
 "Project-Id-Version: Roundup 2.4.0\n"
 "Report-Msgid-Bugs-To: roundup-devel@lists.sourceforge.net\n"
-"POT-Creation-Date: 2024-07-09 15:12-0400\n"
+"POT-Creation-Date: 2024-08-07 21:43-0400\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"
@@ -29,19 +29,19 @@
 msgid "You may not retire the admin or anonymous user"
 msgstr "你不能刪除管理員或匿名用戶"
 
-#: ../roundup/admin.py:130
+#: ../roundup/admin.py:131
 msgid ""
 "Have 'display designator[,designator*]' show header inside\n"
 "      []'s before items. Includes retired/active status.\n"
 msgstr ""
 
-#: ../roundup/admin.py:134
+#: ../roundup/admin.py:135
 msgid ""
 "Have 'display designator' and 'specification class' show\n"
 "      protected fields: creator, id etc.\n"
 msgstr ""
 
-#: ../roundup/admin.py:138
+#: ../roundup/admin.py:139
 msgid ""
 "Controls history options. It is a bitstring where setting\n"
 "      the bit disables the feature. A value of 0 (default)\n"
@@ -52,52 +52,52 @@
 "      history.\n"
 msgstr ""
 
-#: ../roundup/admin.py:147
+#: ../roundup/admin.py:148
 msgid ""
 "Set the number of lines of history to keep for this session.\n"
 "      -1 is infinite.\n"
 msgstr ""
 
-#: ../roundup/admin.py:151
+#: ../roundup/admin.py:152
 msgid "Set indexer to use when running 'reindex' NYI\n"
 msgstr ""
 
-#: ../roundup/admin.py:154
+#: ../roundup/admin.py:155
 msgid "Force reopening of tracker when running each command.\n"
 msgstr ""
 
-#: ../roundup/admin.py:157
+#: ../roundup/admin.py:158
 msgid ""
 "set the number of rows imported before a database commit is\n"
 "      done. Used only for imports on PostgreSQL.\n"
 msgstr ""
 
-#: ../roundup/admin.py:159
+#: ../roundup/admin.py:160
 msgid "Show retired items in table, list etc. One of 'no', 'only', 'both'\n"
 msgstr ""
 
-#: ../roundup/admin.py:161
-msgid "internal mapping for show_retired.\n"
-msgstr ""
-
 #: ../roundup/admin.py:162
+msgid "internal mapping for show_retired.\n"
+msgstr ""
+
+#: ../roundup/admin.py:163
 msgid "Enable verbose output: tracing, descriptions...\n"
 msgstr ""
 
 # ../roundup/admin.py:84 :943 :992 :1014
-#: ../roundup/admin.py:174 ../roundup/admin.py:1179 ../roundup/admin.py:1824
-#: ../roundup/admin.py:1856 ../roundup/admin.py:174:1179 :1824:1856
+#: ../roundup/admin.py:175 ../roundup/admin.py:1188 ../roundup/admin.py:1836
+#: ../roundup/admin.py:1868 ../roundup/admin.py:175:1188 :1836:1868
 #, python-format
 msgid "no such class \"%(classname)s\""
 msgstr "無此類別 \"%(classname)s\""
 
 # ../roundup/admin.py:94 :98
-#: ../roundup/admin.py:187
+#: ../roundup/admin.py:188
 #, python-format
 msgid "argument \"%(arg)s\" not propname=value"
 msgstr "參數 \"%(arg)s\" 不是 propname=value 的形式"
 
-#: ../roundup/admin.py:200
+#: ../roundup/admin.py:201
 #, python-format
 msgid ""
 "Problem: %(message)s\n"
@@ -106,7 +106,7 @@
 "問題: %(message)s\n"
 "\n"
 
-#: ../roundup/admin.py:201
+#: ../roundup/admin.py:202
 #, fuzzy, python-format
 msgid ""
 "%(message)sUsage: roundup-admin [options] [<command> <arguments>]\n"
@@ -156,12 +156,12 @@
 " roundup-admin help <command>             -- 命令詳解說明\n"
 " roundup-admin help all                   -- 所有可用的說明\n"
 
-#: ../roundup/admin.py:230
+#: ../roundup/admin.py:231
 #, fuzzy
 msgid "Commands: "
 msgstr "命令:"
 
-#: ../roundup/admin.py:237
+#: ../roundup/admin.py:238
 msgid ""
 "Commands may be abbreviated as long as the abbreviation\n"
 "matches only one command, e.g. l == li == lis == list."
@@ -169,7 +169,7 @@
 "命令可以被縮寫,只要縮寫只有一個命令可以匹配上,\n"
 "如:l == li == lis == list."
 
-#: ../roundup/admin.py:266
+#: ../roundup/admin.py:270
 #, fuzzy
 msgid ""
 "\n"
@@ -293,25 +293,25 @@
 "\n"
 "使用說明:\n"
 
-#: ../roundup/admin.py:330
+#: ../roundup/admin.py:334
 #, python-format
 msgid "%s:"
 msgstr ""
 
 # ../roundup/admin.py:337 :387
-#: ../roundup/admin.py:435 ../roundup/admin.py:1384
-#: ../roundup/admin.py:435:1384
+#: ../roundup/admin.py:439 ../roundup/admin.py:1396
+#: ../roundup/admin.py:439:1396
 msgid "Templates:"
 msgstr "模板:"
 
 # ../roundup/admin.py:340 :398
-#: ../roundup/admin.py:438 ../roundup/admin.py:1394
-#: ../roundup/admin.py:438:1394
+#: ../roundup/admin.py:442 ../roundup/admin.py:1406
+#: ../roundup/admin.py:442:1406
 msgid "Back ends:"
 msgstr "後端:"
 
 #. noqa: ARG002
-#: ../roundup/admin.py:455
+#: ../roundup/admin.py:459
 msgid ""
 "Usage: commit\n"
 "        Commit changes made to the database during an interactive session.\n"
@@ -332,7 +332,7 @@
 "        在命令行中的 One-off 命令如果成功會被自動提交。\n"
 "        "
 
-#: ../roundup/admin.py:470
+#: ../roundup/admin.py:474
 msgid ""
 "Usage: create classname property=value ...\n"
 "        Create a new entry of a given class.\n"
@@ -352,46 +352,45 @@
 
 # ../roundup/admin.py:359 :494 :573 :623 :676 :697 :725 :796 :863 :934 :982
 # :1004 :1031 :1093 :1159
-#: ../roundup/admin.py:478 ../roundup/admin.py:552 ../roundup/admin.py:600
-#: ../roundup/admin.py:723 ../roundup/admin.py:796 ../roundup/admin.py:842
-#: ../roundup/admin.py:893 ../roundup/admin.py:990 ../roundup/admin.py:1206
-#: ../roundup/admin.py:1357 ../roundup/admin.py:1485 ../roundup/admin.py:1571
-#: ../roundup/admin.py:1691 ../roundup/admin.py:1814 ../roundup/admin.py:1846
-#: ../roundup/admin.py:1962 ../roundup/admin.py:2016 ../roundup/admin.py:2064
-#: ../roundup/admin.py:478:552 :1206:1357:1485 :1571:1691 :1814:1846 :1962:2016
-#: :2064 :600:723 :796:842 :893:990
+#: ../roundup/admin.py:482 ../roundup/admin.py:555 ../roundup/admin.py:606
+#: ../roundup/admin.py:733 ../roundup/admin.py:806 ../roundup/admin.py:851
+#: ../roundup/admin.py:902 ../roundup/admin.py:999 ../roundup/admin.py:1216
+#: ../roundup/admin.py:1369 ../roundup/admin.py:1497 ../roundup/admin.py:1580
+#: ../roundup/admin.py:1703 ../roundup/admin.py:1826 ../roundup/admin.py:1858
+#: ../roundup/admin.py:1974 ../roundup/admin.py:2028 ../roundup/admin.py:2076
+#: ../roundup/admin.py:482:555 :1216:1369:1497 :1580:1703 :1826:1858 :1974:2028
+#: :2076 :606:733 :806:851 :902:999
 msgid "Not enough arguments supplied"
 msgstr "未提供足夠的參數"
 
-#: ../roundup/admin.py:498
+#: ../roundup/admin.py:502
 #, python-format
 msgid "%(propname)s (Password): "
 msgstr "%(propname)s (口令):"
 
-#: ../roundup/admin.py:501
+#: ../roundup/admin.py:505
 #, python-format
 msgid "   %(propname)s (Again): "
 msgstr "   %(propname)s (再次):"
 
-#: ../roundup/admin.py:505
+#: ../roundup/admin.py:509
 msgid "Sorry, try again..."
 msgstr "抱歉,再試一次..."
 
-#: ../roundup/admin.py:510
+#: ../roundup/admin.py:514
 #, python-format
 msgid "%(propname)s (%(proptype)s): "
 msgstr ""
 
-#: ../roundup/admin.py:529
+#: ../roundup/admin.py:533
 #, python-format
 msgid "you must provide the \"%(propname)s\" property."
 msgstr "你必須提供 \"%(propname)s\" 屬性。"
 
-#: ../roundup/admin.py:541
+#: ../roundup/admin.py:545
 #, fuzzy
 msgid ""
 "Usage: display designator[,designator]*\n"
-"\n"
 "        Show the property values for the given node(s).\n"
 "\n"
 "        A designator is a classname and a nodeid concatenated,\n"
@@ -407,25 +406,57 @@
 "        將顯示給出結點的屬性和相應的值。\n"
 "        "
 
-#: ../roundup/admin.py:583
+#: ../roundup/admin.py:586
 #, fuzzy, python-format
 msgid "%(protected)s%(key)s: %(value)s"
 msgstr "%(key)s: %(value)s (關鍵屬性)"
 
 #. grab the directory to export to
-#: ../roundup/admin.py:586
+#: ../roundup/admin.py:589
 #, fuzzy
 msgid ""
 "Usage: export [[-]class[,class]] export_dir\n"
-"        Export the database to colon-separated-value files.\n"
+"        Export the database and file content.\n"
+"\n"
+"        Database content is exported to colon separated files.\n"
 "        To exclude the files (e.g. for the msg or file class),\n"
 "        use the exporttables command.\n"
 "\n"
 "        Optionally limit the export to just the named classes\n"
-"        or exclude the named classes, if the 1st argument starts with '-'.\n"
+"        or exclude the named classes, if the 1st argument\n"
+"        starts with '-'.\n"
 "\n"
 "        This action exports the current data from the database into\n"
 "        colon-separated-value files that are placed in the nominated\n"
+"        export_dir directory.\n"
+"        "
+msgstr ""
+"用法:export [class[,class]] export_dir\n"
+"        導出數據庫為冒號分隔值的文件。\n"
+"\n"
+"        對於導出的可選限制只是類名。\n"
+"\n"
+"        這個動作從數據庫中導出當前的數據到以冒號分隔值的文件中去,它們將存\n"
+"        放在指定的目標目錄中。\n"
+"        "
+
+#: ../roundup/admin.py:704
+#, fuzzy
+msgid ""
+"Usage: exporttables [[-]class[,class]] export_dir\n"
+"        Export only the database to files, no file content.\n"
+"\n"
+"        Database content is exported to colon separated files.\n"
+"        The files below $TRACKER_HOME/db/files/ (which can be\n"
+"        archived separately) are not part of the export.\n"
+"        To include the files, use the export command.\n"
+"\n"
+"        Optionally limit the export to just the named classes\n"
+"        or exclude the named classes, if the 1st argument\n"
+"        starts with '-'.\n"
+"\n"
+"        This action exports the current data from the database into\n"
+"        colon-separated-value files that are placed in the export_dir\n"
 "        destination directory.\n"
 "        "
 msgstr ""
@@ -438,33 +469,7 @@
 "        放在指定的目標目錄中。\n"
 "        "
 
-#: ../roundup/admin.py:698
-#, fuzzy
-msgid ""
-"Usage: exporttables [[-]class[,class]] export_dir\n"
-"        Export the database to colon-separated-value files, excluding the\n"
-"        files below $TRACKER_HOME/db/files/ (which can be archived "
-"separately).\n"
-"        To include the files, use the export command.\n"
-"\n"
-"        Optionally limit the export to just the named classes\n"
-"        or exclude the named classes, if the 1st argument starts with '-'.\n"
-"\n"
-"        This action exports the current data from the database into\n"
-"        colon-separated-value files that are placed in the nominated\n"
-"        destination directory.\n"
-"        "
-msgstr ""
-"用法:export [class[,class]] export_dir\n"
-"        導出數據庫為冒號分隔值的文件。\n"
-"\n"
-"        對於導出的可選限制只是類名。\n"
-"\n"
-"        這個動作從數據庫中導出當前的數據到以冒號分隔值的文件中去,它們將存\n"
-"        放在指定的目標目錄中。\n"
-"        "
-
-#: ../roundup/admin.py:713
+#: ../roundup/admin.py:723
 #, fuzzy
 msgid ""
 "Usage: filter classname propname=value ...\n"
@@ -486,20 +491,20 @@
 "        "
 
 # ../roundup/admin.py:663 :816 :828 :882
-#: ../roundup/admin.py:754
+#: ../roundup/admin.py:764
 #, 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:781 ../roundup/admin.py:830 ../roundup/admin.py:1505
-#: ../roundup/admin.py:1518 ../roundup/admin.py:2086
-#: ../roundup/admin.py:781:830 :1505:1518:2086
+#: ../roundup/admin.py:791 ../roundup/admin.py:840 ../roundup/admin.py:1517
+#: ../roundup/admin.py:1530 ../roundup/admin.py:2098
+#: ../roundup/admin.py:791:840 :1517:1530:2098
 #, python-format
 msgid "%(classname)s has no property \"%(propname)s\""
 msgstr "%(classname)s 沒有 \"%(propname)s\" 屬性"
 
-#: ../roundup/admin.py:788
+#: ../roundup/admin.py:798
 msgid ""
 "Usage: find classname propname=value ...\n"
 "        Find the nodes of the given class with a given link property value.\n"
@@ -517,15 +522,14 @@
 "        或者是結點的鍵值。\n"
 "        "
 
-#: ../roundup/admin.py:837
+#: ../roundup/admin.py:847
 msgid ""
-"Usage: genconfig <filename>\n"
-"        Generate a new tracker config file (ini style) with default\n"
-"        values in <filename>.\n"
+"Usage: genconfig filename\n"
+"        Create a new tracker config file with default values in filename.\n"
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:855
+#: ../roundup/admin.py:864
 #, python-format
 msgid ""
 "Changing option\n"
@@ -533,20 +537,20 @@
 "from old default of %(old_number)s to new default of %(new_number)s."
 msgstr ""
 
-#: ../roundup/admin.py:866
+#: ../roundup/admin.py:875
 #, python-format
 msgid ""
 "Update 'password_pbkdf2_default_rounds' to a number equal to or larger\n"
 "  than %s.\n"
 msgstr ""
 
-#: ../roundup/admin.py:873
+#: ../roundup/admin.py:882
 msgid ""
 "Check the rdbms mysql_* settings. Your charset and collations may need\n"
 "  to be changed. See upgrading instructions.\n"
 msgstr ""
 
-#: ../roundup/admin.py:883
+#: ../roundup/admin.py:892
 #, fuzzy
 msgid ""
 "Usage: get property designator[,designator]*\n"
@@ -566,24 +570,24 @@
 "        "
 
 # ../roundup/admin.py:527 :542
-#: ../roundup/admin.py:916
+#: ../roundup/admin.py:925
 #, 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:933 ../roundup/admin.py:1181 ../roundup/admin.py:1858
-#: ../roundup/admin.py:933:1181:1858
+#: ../roundup/admin.py:942 ../roundup/admin.py:1190 ../roundup/admin.py:1842
+#: ../roundup/admin.py:1870 ../roundup/admin.py:942:1190 :1842:1870
 #, python-format
 msgid "no such %(classname)s node \"%(nodeid)s\""
 msgstr "沒有這樣的 %(classname)s 結點 \"%(nodeid)s\""
 
-#: ../roundup/admin.py:936
+#: ../roundup/admin.py:945
 #, python-format
 msgid "no such %(classname)s property \"%(propname)s\""
 msgstr "沒有這樣的 %(classname)s 屬性 \"%(propname)s\""
 
-#: ../roundup/admin.py:941
+#: ../roundup/admin.py:950
 msgid ""
 "Usage: help topic\n"
 "        Give help about topic.\n"
@@ -603,12 +607,12 @@
 "        all       -- 所有可用的說明\n"
 "        "
 
-#: ../roundup/admin.py:960
+#: ../roundup/admin.py:969
 #, python-format
 msgid "Sorry, no help for \"%(topic)s\""
 msgstr "抱歉,沒有對 \"%(topic)s\" 的說明信息"
 
-#: ../roundup/admin.py:977
+#: ../roundup/admin.py:986
 #, fuzzy
 msgid ""
 "Usage: history designator [skipquiet] [raw]\n"
@@ -630,27 +634,27 @@
 "        它的鍵值可以被重用。\n"
 "        "
 
-#: ../roundup/admin.py:1002
+#: ../roundup/admin.py:1011
 #, python-format
 msgid "Unexpected argument(s): %s. Expected 'skipquiet' or 'raw'."
 msgstr ""
 
-#: ../roundup/admin.py:1053
+#: ../roundup/admin.py:1062
 #, fuzzy
 msgid "removed"
 msgstr "刪除"
 
-#: ../roundup/admin.py:1055
+#: ../roundup/admin.py:1064
 msgid "added"
 msgstr ""
 
-#: ../roundup/admin.py:1057
+#: ../roundup/admin.py:1066
 #, python-format
 msgid "Unknown history set operation '%s'. Expected +/-."
 msgstr ""
 
 #. .Hint added issue23 to superseder
-#: ../roundup/admin.py:1082
+#: ../roundup/admin.py:1091
 #, fuzzy, python-format
 msgid "added %(class)s%(item_id)s to %(propname)s"
 msgstr "%(class)s %(id)s %(properties)s 編輯成功"
@@ -658,34 +662,36 @@
 #. .Hint read as: assignedto was admin(1)
 #. where assignedto is the property
 #. admin is the key name for value 1
-#: ../roundup/admin.py:1103
+#: ../roundup/admin.py:1112
 #, python-format
 msgid "%(prop)s was %(name)s(%(value)s)"
 msgstr ""
 
-#: ../roundup/admin.py:1109 ../roundup/admin.py:1138
-#: ../roundup/admin.py:1109:1138
+#: ../roundup/admin.py:1118 ../roundup/admin.py:1147
+#: ../roundup/admin.py:1118:1147
 #, fuzzy, python-format
 msgid "%(prop)s was %(value)s"
 msgstr "%(key)s: %(value)s (關鍵屬性)"
 
-#: ../roundup/admin.py:1128
+#: ../roundup/admin.py:1137
 #, python-format
 msgid "%(prop)s was [%(value_list)s]"
 msgstr ""
 
 #. .Hint modified nosy: added demo(3)
-#: ../roundup/admin.py:1135
+#: ../roundup/admin.py:1144
 #, python-format
 msgid "modified %(prop)s: %(how)s"
 msgstr ""
 
-#: ../roundup/admin.py:1186
+#: ../roundup/admin.py:1195
+#, fuzzy
 msgid ""
 "Usage: import import_dir\n"
-"        Import a database from the directory containing CSV files,\n"
-"        two per class to import.\n"
-"\n"
+"        Import a database and file contents from the directory.\n"
+"\n"
+"        The directory should have the same format as one containing\n"
+"        the output of export. There are two files imported per class.\n"
 "        The files used in the import are:\n"
 "\n"
 "        <class>.csv\n"
@@ -720,16 +726,17 @@
 "        舊數據。)\n"
 "        "
 
-#: ../roundup/admin.py:1276
+#: ../roundup/admin.py:1287
 msgid ""
 "Usage: importtables export_dir\n"
-"\n"
 "        This imports the database tables exported using exporttables.\n"
+"\n"
+"        It does not import the content of files like msgs and files.\n"
 "        "
 msgstr ""
 
 #. password
-#: ../roundup/admin.py:1283
+#: ../roundup/admin.py:1295
 msgid ""
 "Usage: initialise [adminpw]\n"
 "        Initialise a new Roundup tracker.\n"
@@ -747,23 +754,23 @@
 "        執行tracker的初始化函數 dbinit.init()\n"
 "        "
 
-#: ../roundup/admin.py:1297
+#: ../roundup/admin.py:1309
 msgid "Admin Password: "
 msgstr "管理員口令:"
 
-#: ../roundup/admin.py:1298
+#: ../roundup/admin.py:1310
 msgid "       Confirm: "
 msgstr "       確認:"
 
-#: ../roundup/admin.py:1302
+#: ../roundup/admin.py:1314
 msgid "Instance home does not exist"
 msgstr "實例目錄不存在"
 
-#: ../roundup/admin.py:1306
+#: ../roundup/admin.py:1318
 msgid "Instance has not been installed"
 msgstr "實例還沒有安裝"
 
-#: ../roundup/admin.py:1314
+#: ../roundup/admin.py:1326
 msgid ""
 "WARNING: The database is already initialised!\n"
 "If you re-initialise it, you will lose all the data!\n"
@@ -773,7 +780,7 @@
 "如果你重新初始化它,所有的數據將會丟失!\n"
 "刪除它嗎?Y/N: "
 
-#: ../roundup/admin.py:1334
+#: ../roundup/admin.py:1346
 #, fuzzy
 msgid ""
 "Usage: install [template [backend [key=val[,key=val]]]]\n"
@@ -813,12 +820,12 @@
 "        請查看初始化參數說明。\n"
 "        "
 
-#: ../roundup/admin.py:1363
+#: ../roundup/admin.py:1375
 #, python-format
 msgid "Instance home parent directory \"%(parent)s\" does not exist"
 msgstr "實例目錄的父目錄 \"%(parent)s\" 不存在"
 
-#: ../roundup/admin.py:1372
+#: ../roundup/admin.py:1384
 #, python-format
 msgid ""
 "WARNING: There appears to be a tracker in \"%(tracker_home)s\"!\n"
@@ -829,22 +836,22 @@
 "如果你打算重新安裝它,所有的數據將會丟失!\n"
 "刪除它嗎?Y/N: "
 
-#: ../roundup/admin.py:1385
+#: ../roundup/admin.py:1397
 #, fuzzy
 msgid "Select template"
 msgstr "選擇模板 [classic]:"
 
-#: ../roundup/admin.py:1395
+#: ../roundup/admin.py:1407
 #, fuzzy
 msgid "Select backend"
 msgstr "選擇後端 [anydbm]:"
 
-#: ../roundup/admin.py:1406
+#: ../roundup/admin.py:1418
 #, fuzzy, python-format
 msgid "Error in configuration settings: \"%s\""
 msgstr "配置保存到 %s"
 
-#: ../roundup/admin.py:1439
+#: ../roundup/admin.py:1451
 #, fuzzy, python-format
 msgid ""
 "\n"
@@ -856,11 +863,11 @@
 " 現在你應該修改tracker的配置文件:\n"
 "   %(config_file)s"
 
-#: ../roundup/admin.py:1449
+#: ../roundup/admin.py:1461
 msgid " ... at a minimum, you must set following options:"
 msgstr " ... 至少,你必須設置以下選項:"
 
-#: ../roundup/admin.py:1454
+#: ../roundup/admin.py:1466
 #, fuzzy, python-format
 msgid ""
 "\n"
@@ -884,7 +891,7 @@
 "   %(database_init_file)s\n"
 " ... 查看關於客戶化的文檔來瞭解更多的信息。\n"
 
-#: ../roundup/admin.py:1470
+#: ../roundup/admin.py:1482
 msgid ""
 "Usage: list classname [property]\n"
 "        List the instances of a class.\n"
@@ -910,20 +917,19 @@
 "        定了屬性,對每個類型實例會列印出這個屬性。\n"
 "        "
 
-#: ../roundup/admin.py:1483
+#: ../roundup/admin.py:1495
 msgid "Too many arguments supplied"
 msgstr "提供了太多的參數了"
 
-#: ../roundup/admin.py:1516
+#: ../roundup/admin.py:1528
 #, python-format
 msgid "%(nodeid)4s: %(value)s"
 msgstr ""
 
 #. noqa: ARG002  - args unused
-#: ../roundup/admin.py:1523
+#: ../roundup/admin.py:1535
 msgid ""
 "Usage: migrate\n"
-"\n"
 "        Update a tracker's database to be compatible with the Roundup\n"
 "        codebase.\n"
 "\n"
@@ -944,22 +950,21 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1544
+#: ../roundup/admin.py:1555
 #, python-format
 msgid "Tracker updated to schema version %s."
 msgstr ""
 
-#: ../roundup/admin.py:1548
+#: ../roundup/admin.py:1559
 #, python-format
 msgid "No migration action required. At schema version %s."
 msgstr ""
 
-#: ../roundup/admin.py:1553
+#: ../roundup/admin.py:1564
+#, fuzzy
 msgid ""
 "Usage: pack period | date\n"
-"\n"
-"        Remove journal entries older than a period of time specified or\n"
-"        before a certain date.\n"
+"        Remove journal entries older than the date/period.\n"
 "\n"
 "        A period is specified using the suffixes \"y\", \"m\", and \"d\". "
 "The\n"
@@ -992,15 +997,16 @@
 "\n"
 "        "
 
-#: ../roundup/admin.py:1581
+#: ../roundup/admin.py:1590
 msgid "Invalid format"
 msgstr "無效的格式"
 
-#: ../roundup/admin.py:1592
+#: ../roundup/admin.py:1601
 msgid ""
 "Usage: perftest [mode] [arguments]*\n"
-"\n"
-"        Time operations in Roundup. Supported arguments:\n"
+"        Time operations in Roundup.\n"
+"\n"
+"        Supported arguments:\n"
 "\n"
 "            [password] [rounds=<integer>] [scheme=<scheme>]\n"
 "\n"
@@ -1013,28 +1019,30 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1625
+#: ../roundup/admin.py:1635
 msgid "Invalid 'rounds'. Must be larger than 999."
 msgstr ""
 
-#: ../roundup/admin.py:1629
+#: ../roundup/admin.py:1639
 #, python-format
 msgid "Invalid 'rounds'. It must be an integer not: %s"
 msgstr ""
 
-#: ../roundup/admin.py:1656
+#: ../roundup/admin.py:1666
 msgid "scheme does not support rounds."
 msgstr ""
 
-#: ../roundup/admin.py:1659
+#: ../roundup/admin.py:1669
 #, python-format
 msgid "Hash time: %(time)0.9f seconds, scheme: %(scheme)s, rounds: %(rounds)s"
 msgstr ""
 
-#: ../roundup/admin.py:1665
+#: ../roundup/admin.py:1675
 msgid ""
 "Usage: pragma setting=value | 'list'\n"
-"        Set internal admin settings to a value. E.G.\n"
+"        Set internal admin settings to a value.\n"
+"\n"
+"        For example:\n"
 "\n"
 "            pragma verbose=True\n"
 "            pragma verbose=yes\n"
@@ -1058,49 +1066,49 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1698
+#: ../roundup/admin.py:1710
 #, python-format
 msgid "Argument must be setting=value, was given: %s."
 msgstr ""
 
-#: ../roundup/admin.py:1701
+#: ../roundup/admin.py:1713
 msgid "Current settings and values (NYI - not yet implemented):"
 msgstr ""
 
-#: ../roundup/admin.py:1712
+#: ../roundup/admin.py:1724
 msgid ""
 "      Help for this pragma is missing. Please report it to the Roundup "
 "project.\n"
 msgstr ""
 
-#: ../roundup/admin.py:1718
+#: ../roundup/admin.py:1730
 #, fuzzy, python-format
 msgid "Unknown setting %s. Try \"pragma list\"."
 msgstr "未知用戶名"
 
-#: ../roundup/admin.py:1728
+#: ../roundup/admin.py:1740
 #, python-format
 msgid "Incorrect value for boolean setting %(setting)s: %(value)s."
 msgstr ""
 
-#: ../roundup/admin.py:1735
+#: ../roundup/admin.py:1747
 #, python-format
 msgid "Incorrect value for integer setting %(setting)s: %(value)s."
 msgstr ""
 
-#: ../roundup/admin.py:1742
+#: ../roundup/admin.py:1754
 #, python-format
 msgid ""
 "Incorrect value for setting %(setting)s: %(value)s. Should be no, both, or "
 "only."
 msgstr ""
 
-#: ../roundup/admin.py:1752
+#: ../roundup/admin.py:1764
 #, python-format
 msgid "Internal error: pragma can not handle values of type: %s"
 msgstr ""
 
-#: ../roundup/admin.py:1761
+#: ../roundup/admin.py:1773
 #, fuzzy
 msgid ""
 "Usage: reindex [classname|classname:#-#|designator]*\n"
@@ -1123,17 +1131,17 @@
 "        重新生成 tracker 的搜索索引,它將自動進行。\n"
 "        "
 
-#: ../roundup/admin.py:1783
+#: ../roundup/admin.py:1795
 #, python-format
 msgid "no such item \"%(designator)s\""
 msgstr "沒有這樣的條目 \"%(designator)s\""
 
-#: ../roundup/admin.py:1793
+#: ../roundup/admin.py:1805
 #, fuzzy, python-format
 msgid "no such item \"%(class)s%(id)s\""
 msgstr "沒有這樣的條目 \"%(designator)s\""
 
-#: ../roundup/admin.py:1805
+#: ../roundup/admin.py:1817
 #, fuzzy
 msgid ""
 "Usage: restore designator[,designator]*\n"
@@ -1151,13 +1159,7 @@
 "        給定的結點將對用戶來說再次生效。\n"
 "        "
 
-# ../roundup/admin.py:550 :945 :994 :1016
-#: ../roundup/admin.py:1830
-#, fuzzy
-msgid "no such %(classname)s node \"%(nodeid)s\""
-msgstr "沒有這樣的 %(classname)s 結點 \"%(nodeid)s\""
-
-#: ../roundup/admin.py:1836
+#: ../roundup/admin.py:1848
 #, fuzzy
 msgid ""
 "Usage: retire designator[,designator]*\n"
@@ -1178,7 +1180,7 @@
 "        "
 
 #. noqa: ARG002 - args unused
-#: ../roundup/admin.py:1864
+#: ../roundup/admin.py:1876
 msgid ""
 "Usage: rollback\n"
 "        Undo all changes that are pending commit to the database.\n"
@@ -1197,60 +1199,60 @@
 "        產生變化。\n"
 "        "
 
-#: ../roundup/admin.py:1877
+#: ../roundup/admin.py:1889
 msgid ""
 "Usage: security [Role name]\n"
-"\n"
-"             Display the Permissions available to one or all Roles.\n"
-"             Also validates that any properties defined in a\n"
-"             permission are valid.\n"
-"\n"
-"             Run this after changing your permissions to catch\n"
-"             typos.\n"
+"        Display the Permissions available to one or all Roles.\n"
+"\n"
+"        Also validates that any properties defined in a\n"
+"        permission are valid.\n"
+"\n"
+"        Run this after changing your permissions to catch\n"
+"        typos.\n"
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:1892
+#: ../roundup/admin.py:1904
 #, fuzzy, python-format
 msgid "No such Role \"%(role)s\"\n"
 msgstr "沒有這樣的角色 \"%(role)s\""
 
-#: ../roundup/admin.py:1898
+#: ../roundup/admin.py:1910
 #, fuzzy, python-format
 msgid "New Web users get the Roles \"%(role)s\"\n"
 msgstr "新Web用戶得到角色 \"%(role)s\""
 
-#: ../roundup/admin.py:1901
+#: ../roundup/admin.py:1913
 #, fuzzy, python-format
 msgid "New Web users get the Role \"%(role)s\"\n"
 msgstr "新Web用戶得到角色 \"%(role)s\""
 
-#: ../roundup/admin.py:1905
+#: ../roundup/admin.py:1917
 #, fuzzy, python-format
 msgid "New Email users get the Roles \"%(role)s\"\n"
 msgstr "新郵件用戶得到角色 \"%(role)s\""
 
-#: ../roundup/admin.py:1907
+#: ../roundup/admin.py:1919
 #, fuzzy, python-format
 msgid "New Email users get the Role \"%(role)s\"\n"
 msgstr "新郵件用戶得到角色 \"%(role)s\""
 
-#: ../roundup/admin.py:1910
+#: ../roundup/admin.py:1922
 #, fuzzy, python-format
 msgid "Role \"%(name)s\":\n"
 msgstr "角色 \"%(name)s\":"
 
-#: ../roundup/admin.py:1916
+#: ../roundup/admin.py:1928
 #, fuzzy
 msgid " %(description)s (%(name)s for \"%(klass)s\""
 msgstr " %(description)s (%(name)s 僅用於 \"%(klass)s\")"
 
-#: ../roundup/admin.py:1916
+#: ../roundup/admin.py:1928
 #, 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:1929
+#: ../roundup/admin.py:1941
 #, python-format
 msgid ""
 "\n"
@@ -1258,17 +1260,17 @@
 "\n"
 msgstr ""
 
-#: ../roundup/admin.py:1935
+#: ../roundup/admin.py:1947
 #, fuzzy, python-format
 msgid " %(description)s (%(name)s for \"%(klass)s\" only)\n"
 msgstr " %(description)s (%(name)s 僅用於 \"%(klass)s\")"
 
-#: ../roundup/admin.py:1938
+#: ../roundup/admin.py:1950
 #, fuzzy, python-format
 msgid " %(description)s (%(name)s)\n"
 msgstr " %(description)s (%(name)s 僅用於 \"%(klass)s\")"
 
-#: ../roundup/admin.py:1942
+#: ../roundup/admin.py:1954
 #, fuzzy
 msgid ""
 "Usage: set items property=value [property=value ...]\n"
@@ -1301,7 +1303,7 @@
 "        你需要為多鏈接提供用逗號分隔的數字(例如 \"1,2,3\")。\n"
 "        "
 
-#: ../roundup/admin.py:2010
+#: ../roundup/admin.py:2022
 msgid ""
 "Usage: specification classname\n"
 "        Show the properties for a classname.\n"
@@ -1315,17 +1317,17 @@
 "        會列出給定類型的屬性。\n"
 "        "
 
-#: ../roundup/admin.py:2029
+#: ../roundup/admin.py:2041
 #, fuzzy, python-format
 msgid "%(key)s: %(value)s (key property)\n"
 msgstr "%(key)s: %(value)s (關鍵屬性)"
 
-#: ../roundup/admin.py:2032
+#: ../roundup/admin.py:2044
 #, fuzzy, python-format
 msgid "%(key)s: %(value)s\n"
 msgstr "%(key)s: %(value)s (關鍵屬性)"
 
-#: ../roundup/admin.py:2035
+#: ../roundup/admin.py:2047
 msgid ""
 "Usage: table classname [property[,property]*]\n"
 "        List the instances of a class in tabular form.\n"
@@ -1383,17 +1385,17 @@
 "        將生成4個字符寬的 \"Name\" 列。\n"
 "        "
 
-#: ../roundup/admin.py:2081
+#: ../roundup/admin.py:2093
 #, python-format
 msgid "\"%(spec)s\" not name:width"
 msgstr "\"%(spec)s\" 不是 名字:寬度"
 
-#: ../roundup/admin.py:2103
+#: ../roundup/admin.py:2115
 #, python-format
 msgid "\"%(spec)s\" does not have an integer width: \"%(width)s\""
 msgstr ""
 
-#: ../roundup/admin.py:2139
+#: ../roundup/admin.py:2151
 msgid ""
 "Usage: templates [trace_search]\n"
 "        List templates and their installed directories.\n"
@@ -1403,44 +1405,45 @@
 "        "
 msgstr ""
 
-#: ../roundup/admin.py:2167
+#: ../roundup/admin.py:2179
 msgid ""
 "Usage: updateconfig <filename>\n"
-"        Generate an updated tracker config file (ini style) in\n"
-"        <filename>. Use current settings from existing roundup\n"
-"        tracker in tracker home.\n"
+"        Merge existing tracker config with new settings.\n"
+"\n"
+"        Output the updated config file to <filename>. Use current\n"
+"        settings from existing roundup tracker in tracker home.\n"
 "        "
 msgstr ""
 
 # ../roundup/cgi/actions.py:549 :559 :730 :749
-#: ../roundup/admin.py:2175 ../roundup/cgi/actions.py:886
+#: ../roundup/admin.py:2188 ../roundup/cgi/actions.py:886
 #: ../roundup/cgi/actions.py:897 ../roundup/cgi/actions.py:1099
 #: ../roundup/cgi/actions.py:1113 ../roundup/cgi/actions.py:886:897 :1099:1113
 #, python-format
 msgid "Error: %s"
 msgstr "錯誤:%s"
 
-#: ../roundup/admin.py:2207
+#: ../roundup/admin.py:2220
 #, python-format
 msgid "Unknown command \"%(command)s\" (\"help commands\" for a list)"
 msgstr "未知命令 \"%(command)s\" (\"help commands\" 查看命令列表)"
 
-#: ../roundup/admin.py:2213
+#: ../roundup/admin.py:2226
 #, python-format
 msgid "Multiple commands match \"%(command)s\": %(list)s"
 msgstr "多命令匹配 \"%(command)s\": %(list)s"
 
-#: ../roundup/admin.py:2228
+#: ../roundup/admin.py:2241
 msgid "Enter tracker home: "
 msgstr "輸入tracker起始目錄:"
 
-#: ../roundup/admin.py:2257 ../roundup/admin.py:2261
-#: ../roundup/admin.py:2257:2261
+#: ../roundup/admin.py:2270 ../roundup/admin.py:2274
+#: ../roundup/admin.py:2270:2274
 #, python-format
 msgid "Error: Couldn't open tracker: %(message)s"
 msgstr "錯誤:不能打開tracker:%(message)s"
 
-#: ../roundup/admin.py:2309
+#: ../roundup/admin.py:2322
 #, python-format
 msgid ""
 "Roundup %s ready for input.\n"
@@ -1449,15 +1452,15 @@
 "Roundup %s 輸入就緒。\n"
 "敲入 \"help\" 獲得說明。"
 
-#: ../roundup/admin.py:2342
+#: ../roundup/admin.py:2355
 msgid "Note: command history and editing not available"
 msgstr "注意:命令歷史和編輯無效"
 
-#: ../roundup/admin.py:2348
+#: ../roundup/admin.py:2361
 msgid "exit..."
 msgstr "退出..."
 
-#: ../roundup/admin.py:2361
+#: ../roundup/admin.py:2374
 msgid "There are unsaved changes. Commit them (y/N)? "
 msgstr "存在未被保存的改動。提交嗎(y/N)?"
 
@@ -1986,7 +1989,7 @@
 msgid "<em>undefined</em>"
 msgstr "<em>未定義</em>"
 
-#: ../roundup/cgi/client.py:90
+#: ../roundup/cgi/client.py:105
 msgid ""
 "<html><head><title>An error has occurred</title></head>\n"
 "<body><h1>An error has occurred</h1>\n"
@@ -1995,156 +1998,156 @@
 "</body></html>"
 msgstr ""
 
-#: ../roundup/cgi/client.py:702 ../roundup/cgi/client.py:1622
-#: ../roundup/cgi/client.py:702:1622
+#: ../roundup/cgi/client.py:717 ../roundup/cgi/client.py:1635
+#: ../roundup/cgi/client.py:717:1635
 msgid "Required Header Missing"
 msgstr ""
 
-#: ../roundup/cgi/client.py:704
+#: ../roundup/cgi/client.py:719
 #, fuzzy
 msgid "Client is not allowed to use Rest Interface."
 msgstr "匿名用戶不允許使用web界面"
 
-#: ../roundup/cgi/client.py:956
+#: ../roundup/cgi/client.py:971
 msgid "Form Error: "
 msgstr "表格錯誤:"
 
-#: ../roundup/cgi/client.py:1049
+#: ../roundup/cgi/client.py:1064
 #, python-format
 msgid "Unrecognized charset: %r"
 msgstr "無法識別的字符集:%r"
 
-#: ../roundup/cgi/client.py:1318 ../roundup/cgi/client.py:2281
-#: ../roundup/cgi/client.py:1318:2281
+#: ../roundup/cgi/client.py:1331 ../roundup/cgi/client.py:2294
+#: ../roundup/cgi/client.py:1331:2294
 msgid "broken form: multiple @action values submitted"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1335
+#: ../roundup/cgi/client.py:1348
 msgid "Anonymous users are not allowed to use the web interface"
 msgstr "匿名用戶不允許使用web界面"
 
-#: ../roundup/cgi/client.py:1483
+#: ../roundup/cgi/client.py:1496
 msgid "Referer header not available."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1487
+#: ../roundup/cgi/client.py:1500
 #, python-format
 msgid "csrf key used with wrong method from: %s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1516
+#: ../roundup/cgi/client.py:1529
 #, python-format
 msgid "csrf header %(header)s required but missing for user%(userid)s."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1520
-#, python-format
-msgid "Missing header: %s"
-msgstr ""
-
-#: ../roundup/cgi/client.py:1528
-#, python-format
-msgid "csrf Referer header check failed for user%(userid)s. Value=%(referer)s"
-msgstr ""
-
 #: ../roundup/cgi/client.py:1533
+#, python-format
+msgid "Missing header: %s"
+msgstr ""
+
+#: ../roundup/cgi/client.py:1541
+#, python-format
+msgid "csrf Referer header check failed for user%(userid)s. Value=%(referer)s"
+msgstr ""
+
+#: ../roundup/cgi/client.py:1546
 #, fuzzy, python-format
 msgid "Invalid Referer: %s"
 msgstr "無效登錄"
 
-#: ../roundup/cgi/client.py:1548
+#: ../roundup/cgi/client.py:1561
 #, python-format
 msgid "csrf Origin header check failed for user%(userid)s. Value=%(origin)s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1553
+#: ../roundup/cgi/client.py:1566
 #, fuzzy, python-format
 msgid "Invalid Origin %s"
 msgstr "無效登錄"
 
-#: ../roundup/cgi/client.py:1567
+#: ../roundup/cgi/client.py:1580
 #, python-format
 msgid ""
 "csrf X-FORWARDED-HOST header check failed for user%(userid)s. Value=%(host)s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1573
+#: ../roundup/cgi/client.py:1586
 #, python-format
 msgid "Invalid X-FORWARDED-HOST %s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1592
-#, python-format
-msgid "csrf HOST header check failed for user%(userid)s. Value=%(host)s"
-msgstr ""
-
-#: ../roundup/cgi/client.py:1597
-#, python-format
-msgid "Invalid HOST %s"
-msgstr ""
-
 #: ../roundup/cgi/client.py:1605
+#, python-format
+msgid "csrf HOST header check failed for user%(userid)s. Value=%(host)s"
+msgstr ""
+
+#: ../roundup/cgi/client.py:1610
+#, python-format
+msgid "Invalid HOST %s"
+msgstr ""
+
+#: ../roundup/cgi/client.py:1618
 msgid "Csrf: unable to verify sufficient headers"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1606
-msgid "Unable to verify sufficient headers"
-msgstr ""
-
 #: ../roundup/cgi/client.py:1619
+msgid "Unable to verify sufficient headers"
+msgstr ""
+
+#: ../roundup/cgi/client.py:1632
 #, python-format
 msgid "csrf X-REQUESTED-WITH xmlrpc required header check failed for user%s."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1660
+#: ../roundup/cgi/client.py:1673
 #, python-format
 msgid "Required csrf field missing for user%s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1662 ../roundup/cgi/client.py:1689
-#: ../roundup/cgi/client.py:1706 ../roundup/cgi/client.py:1662:1689:1706
+#: ../roundup/cgi/client.py:1675 ../roundup/cgi/client.py:1702
+#: ../roundup/cgi/client.py:1719 ../roundup/cgi/client.py:1675:1702:1719
 msgid ""
 "We can't validate your session (csrf failure). Re-enter any unsaved data and "
 "try again."
 msgstr ""
 
-#: ../roundup/cgi/client.py:1666
+#: ../roundup/cgi/client.py:1679
 #, python-format
 msgid "csrf field not supplied by user%s"
 msgstr ""
 
-#: ../roundup/cgi/client.py:1678
+#: ../roundup/cgi/client.py:1691
 #, 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:1696
+#: ../roundup/cgi/client.py:1709
 #, 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:1888
+#: ../roundup/cgi/client.py:1901
 #, fuzzy
 msgid "You are not allowed to view this file."
 msgstr "你不允許查看此頁"
 
-#: ../roundup/cgi/client.py:2159
+#: ../roundup/cgi/client.py:2172
 #, python-format
 msgid "%(starttag)sTime elapsed: %(seconds)fs%(endtag)s\n"
 msgstr ""
 
-#: ../roundup/cgi/client.py:2163
+#: ../roundup/cgi/client.py:2176
 #, 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:2703
+#: ../roundup/cgi/client.py:2716
 #, python-format
 msgid ""
 "Cache failure: compressed file %(compressed)s is older than its source file "
@@ -2203,142 +2206,142 @@
 msgid_plural "Required %(class)s properties %(property)s not supplied"
 msgstr[0] "要求的 %(class)s 屬性 %(property)s 沒有被提供"
 
-#: ../roundup/cgi/templating.py:277
+#: ../roundup/cgi/templating.py:278
 #, python-format
 msgid "You are not allowed to %(action)s items of class %(class)s"
 msgstr "你不允許 %(action)s 類別 %(class)s 的項目"
 
-#: ../roundup/cgi/templating.py:914
+#: ../roundup/cgi/templating.py:916
 msgid "(list)"
 msgstr "(列表)"
 
-#: ../roundup/cgi/templating.py:989
+#: ../roundup/cgi/templating.py:991
 msgid "Submit New Entry"
 msgstr "提交新的項"
 
-#: ../roundup/cgi/templating.py:1011 ../roundup/cgi/templating.py:1187
-#: ../roundup/cgi/templating.py:1822 ../roundup/cgi/templating.py:1853
-#: ../roundup/cgi/templating.py:1874 ../roundup/cgi/templating.py:1912
-#: ../roundup/cgi/templating.py:1965 ../roundup/cgi/templating.py:1989
-#: ../roundup/cgi/templating.py:1996 ../roundup/cgi/templating.py:2033
-#: ../roundup/cgi/templating.py:2086 ../roundup/cgi/templating.py:2119
-#: ../roundup/cgi/templating.py:2214 ../roundup/cgi/templating.py:2235
-#: ../roundup/cgi/templating.py:2326 ../roundup/cgi/templating.py:2346
-#: ../roundup/cgi/templating.py:2368 ../roundup/cgi/templating.py:2411
-#: ../roundup/cgi/templating.py:2421 ../roundup/cgi/templating.py:2486
-#: ../roundup/cgi/templating.py:2789 ../roundup/cgi/templating.py:1011:1187
-#: :1822:1853 :1874:1912 :1965:1989 :1996:2033 :2086:2119 :2214:2235 :2326:2346
-#: :2368:2411 :2421:2486:2789
+#: ../roundup/cgi/templating.py:1013 ../roundup/cgi/templating.py:1189
+#: ../roundup/cgi/templating.py:1824 ../roundup/cgi/templating.py:1855
+#: ../roundup/cgi/templating.py:1876 ../roundup/cgi/templating.py:1914
+#: ../roundup/cgi/templating.py:1967 ../roundup/cgi/templating.py:1991
+#: ../roundup/cgi/templating.py:1998 ../roundup/cgi/templating.py:2035
+#: ../roundup/cgi/templating.py:2088 ../roundup/cgi/templating.py:2121
+#: ../roundup/cgi/templating.py:2216 ../roundup/cgi/templating.py:2237
+#: ../roundup/cgi/templating.py:2328 ../roundup/cgi/templating.py:2348
+#: ../roundup/cgi/templating.py:2370 ../roundup/cgi/templating.py:2413
+#: ../roundup/cgi/templating.py:2423 ../roundup/cgi/templating.py:2488
+#: ../roundup/cgi/templating.py:2791 ../roundup/cgi/templating.py:1013:1189
+#: :1824:1855 :1876:1914 :1967:1991 :1998:2035 :2088:2121 :2216:2237 :2328:2348
+#: :2370:2413 :2423:2488:2791
 msgid "[hidden]"
 msgstr ""
 
-#: ../roundup/cgi/templating.py:1012
+#: ../roundup/cgi/templating.py:1014
 msgid "New node - no history"
 msgstr "新記錄 - 無歷史"
 
-#: ../roundup/cgi/templating.py:1152
+#: ../roundup/cgi/templating.py:1154
 msgid "Submit Changes"
 msgstr "提交變動"
 
-#: ../roundup/cgi/templating.py:1230
+#: ../roundup/cgi/templating.py:1232
 msgid "<em>The indicated property no longer exists</em>"
 msgstr "<em>指示的屬性不再存在</em>"
 
-#: ../roundup/cgi/templating.py:1266
+#: ../roundup/cgi/templating.py:1268
 #, python-format
 msgid "The linked class %(classname)s no longer exists"
 msgstr "鏈接的類別 %(classname)s 不再存在"
 
-#: ../roundup/cgi/templating.py:1303 ../roundup/cgi/templating.py:1333
-#: ../roundup/cgi/templating.py:2495 ../roundup/cgi/templating.py:2798
-#: ../roundup/cgi/templating.py:1303:1333 :2495:2798
+#: ../roundup/cgi/templating.py:1305 ../roundup/cgi/templating.py:1335
+#: ../roundup/cgi/templating.py:2497 ../roundup/cgi/templating.py:2800
+#: ../roundup/cgi/templating.py:1305:1335 :2497:2800
 msgid "[label is missing]"
 msgstr ""
 
 # ../roundup/cgi/templating.py:872 :893
-#: ../roundup/cgi/templating.py:1307 ../roundup/cgi/templating.py:1336
-#: ../roundup/cgi/templating.py:1307:1336
+#: ../roundup/cgi/templating.py:1309 ../roundup/cgi/templating.py:1338
+#: ../roundup/cgi/templating.py:1309:1338
 msgid "<strike>The linked node no longer exists</strike>"
 msgstr "<strike>鏈接的結點不再存在</strike>"
 
-#: ../roundup/cgi/templating.py:1398
+#: ../roundup/cgi/templating.py:1400
 #, python-format
 msgid "%s: (no value)"
 msgstr "%s: (無值)"
 
-#: ../roundup/cgi/templating.py:1414
+#: ../roundup/cgi/templating.py:1416
 #, fuzzy, python-format
 msgid ""
 "<strong><em>This event %s is not handled by the history display!</em></"
 "strong>"
 msgstr "<strong><em>這個事件不能被歷史顯示所處理!</em></strong>"
 
-#: ../roundup/cgi/templating.py:1427
+#: ../roundup/cgi/templating.py:1429
 msgid "<tr><td colspan=4><strong>Note:</strong></td></tr>"
 msgstr "<tr><td colspan=4><strong>注意:</strong></td></tr>"
 
-#: ../roundup/cgi/templating.py:1436
+#: ../roundup/cgi/templating.py:1438
 msgid "History"
 msgstr "歷史"
 
-#: ../roundup/cgi/templating.py:1438
+#: ../roundup/cgi/templating.py:1440
 msgid "<th>Date</th>"
 msgstr "<th>日期</th>"
 
-#: ../roundup/cgi/templating.py:1439
+#: ../roundup/cgi/templating.py:1441
 msgid "<th>User</th>"
 msgstr "<th>用戶</th>"
 
-#: ../roundup/cgi/templating.py:1440
+#: ../roundup/cgi/templating.py:1442
 msgid "<th>Action</th>"
 msgstr "<th>動作</th>"
 
-#: ../roundup/cgi/templating.py:1441
+#: ../roundup/cgi/templating.py:1443
 msgid "<th>Args</th>"
 msgstr "<th>參數</th>"
 
-#: ../roundup/cgi/templating.py:1492
+#: ../roundup/cgi/templating.py:1494
 #, fuzzy, python-format
 msgid "Copy of %(class)s %(id)s"
 msgstr "%(class)s %(id)s 被建立"
 
-#: ../roundup/cgi/templating.py:2123 ../roundup/cgi/templating.py:2158
-#: ../roundup/cgi/templating.py:1380:2123:2158
+#: ../roundup/cgi/templating.py:2125 ../roundup/cgi/templating.py:2160
+#: ../roundup/cgi/templating.py:1382:2125:2160
 msgid "No"
 msgstr "否"
 
-#: ../roundup/cgi/templating.py:2123 ../roundup/cgi/templating.py:2152
-#: ../roundup/cgi/templating.py:1380:2123:2152
+#: ../roundup/cgi/templating.py:2125 ../roundup/cgi/templating.py:2154
+#: ../roundup/cgi/templating.py:1382:2125:2154
 msgid "Yes"
 msgstr "是"
 
-#: ../roundup/cgi/templating.py:2284
+#: ../roundup/cgi/templating.py:2286
 msgid ""
 "default value for DateHTMLProperty must be either DateHTMLProperty or string "
 "date representation."
 msgstr "DateHTMLProperty 的預設值或者是 DateHTMLProperty 或字符串的日期表示。"
 
-#: ../roundup/cgi/templating.py:2466
+#: ../roundup/cgi/templating.py:2468
 #, python-format
 msgid "Attempt to look up %(attr)s on a missing value"
 msgstr ""
 
-#: ../roundup/cgi/templating.py:2477
+#: ../roundup/cgi/templating.py:2479
 #, python-format
 msgid "Attempt to look up %(item)s on a missing value"
 msgstr ""
 
-#: ../roundup/cgi/templating.py:2582
+#: ../roundup/cgi/templating.py:2584
 #, python-format
 msgid "<option %svalue=\"-1\">- no selection -</option>"
 msgstr "<option %svalue=\"-1\">- 未選擇 -</option>"
 
-#: ../roundup/cgi/templating.py:3743
+#: ../roundup/cgi/templating.py:3745
 #, python-format
 msgid "Unable to read or expand file '%(name)s' in template '%(template)s'."
 msgstr ""
 
-#: ../roundup/cgi/templating.py:3793
+#: ../roundup/cgi/templating.py:3795
 #, python-format
 msgid ""
 "Found an incorrect token when expandfile applied string subsitution on "
@@ -2785,6 +2788,63 @@
 msgid "not of form [arg=value,value,...;arg=value,value,...]"
 msgstr ""
 
+#: ../roundup/pygettext.py:401
+#, python-format
+msgid "*** %(file)s:%(lineno)s: Seen unexpected token \"%(token)s\""
+msgstr ""
+
+#: ../roundup/pygettext.py:457
+#, python-format
+msgid "# File: %(filename)s, line: %(lineno)d"
+msgstr ""
+
+#: ../roundup/pygettext.py:464
+#, python-format
+msgid " %(filename)s:%(lineno)d"
+msgstr ""
+
+#: ../roundup/pygettext.py:540
+#, fuzzy, python-format
+msgid "Invalid value for --style: %s"
+msgstr "無效登錄"
+
+#: ../roundup/pygettext.py:548
+#, python-format
+msgid "pygettext.py (xgettext for Python) %s"
+msgstr ""
+
+#: ../roundup/pygettext.py:554
+#, python-format
+msgid "--width argument must be an integer: %s"
+msgstr ""
+
+#: ../roundup/pygettext.py:582
+#, python-format
+msgid "Can't read --exclude-file: %s"
+msgstr ""
+
+#: ../roundup/pygettext.py:601
+msgid "Reading standard input"
+msgstr ""
+
+#: ../roundup/pygettext.py:606
+#, python-format
+msgid "Working on %s"
+msgstr ""
+
+#: ../roundup/pygettext.py:640
+msgid "a unicode string"
+msgstr ""
+
+#: ../roundup/pygettext.py:642
+#, python-format
+msgid "*** Seen unexpected token \"%(token)s\""
+msgstr ""
+
+#: ../roundup/pygettext.py:643
+msgid "morethanonestring"
+msgstr ""
+
 #: ../roundup/rest.py:410
 #, python-format
 msgid "Method %(m)s not allowed. Allowed: %(a)s"
@@ -2814,7 +2874,7 @@
 "%(acceptable_types)s"
 msgstr ""
 
-#: ../roundup/rest.py:2437
+#: ../roundup/rest.py:2441
 #, python-format
 msgid ""
 "Unrecognized api version: %s. See /rest without specifying api version for "
@@ -2916,24 +2976,33 @@
 "%(old)s"
 msgstr ""
 
-#: ../roundup/scripts/roundup_demo.py:151
-#, python-format
-msgid "Enter directory path to create demo tracker [%s]: "
-msgstr "輸入目錄來建立演示tracker [%s]:"
-
-#: ../roundup/scripts/roundup_demo.py:170
+#: ../roundup/scripts/roundup_demo.py:50
 #, python-format
 msgid ""
 "Enter tracker template to use (one of (%(template_list)s)) "
 "[%(default_template)s]: "
 msgstr ""
 
-#: ../roundup/scripts/roundup_gettext.py:35
+#: ../roundup/scripts/roundup_demo.py:166
+#, python-format
+msgid "Enter directory path to create demo tracker [%s]: "
+msgstr "輸入目錄來建立演示tracker [%s]:"
+
+#: ../roundup/scripts/roundup_gettext.py:33
+msgid ""
+"\n"
+"Extracting translatable strings only from html templates.\n"
+"Because the 'polib' module is missing, unable to extract\n"
+"translations from detectors or extensions.\n"
+"The 'polib' module can be installed with pip.\n"
+msgstr ""
+
+#: ../roundup/scripts/roundup_gettext.py:71
 #, python-format
 msgid "Usage: %(program)s <tracker home>"
 msgstr ""
 
-#: ../roundup/scripts/roundup_gettext.py:51
+#: ../roundup/scripts/roundup_gettext.py:89
 #, python-format
 msgid "No tracker templates found in directory %s"
 msgstr ""

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